Skip to content

Commit e6b5c3d

Browse files
committed
c
1 parent e447c4e commit e6b5c3d

2 files changed

Lines changed: 11 additions & 9 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ All contracts are deployed deterministically with the following addresses.
1313
| Keystore | `0x69C9F626b5Bd934C0F9806346682eD407FB978d3` |
1414
| KeystoreAccountFactory | `0x625cF8EDec3f68d48D3aA385F356524B04760BE8` |
1515
| UserOpECDSAVerifier | `0x52949503fF5c34caEa4FC98F0723ebD0c300f232` |
16-
| UserOpMultiSigVerifier | `0x0ad936Ee17E2d1c5038A038151Da7c5F963384b8` |
16+
| UserOpMultiSigVerifier | `0xE0d2C6d58d1A4703C703ced10FD2bA682f1006f0` |
1717
| UserOpWebAuthnVerifier | `0xE19620169A26aEbC4Fe229A073639da6b009bF1a` |
1818
| UserOpWebAuthnCosignVerifier | `0x939C10DCdA11A73eCCc563340aBE3d257859dC6d` |
1919

src/verifier/UserOpMultiSigVerifier.sol

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ contract UserOpMultiSigVerifier is IVerifier, OnlyKeystore {
2121
bytes signature;
2222
}
2323

24+
struct SignatureCheck {
25+
uint8 valid;
26+
uint8 invalid;
27+
bytes32 message;
28+
}
29+
2430
constructor(address aKeystore) OnlyKeystore(aKeystore) {}
2531

2632
/**
@@ -65,18 +71,18 @@ contract UserOpMultiSigVerifier is IVerifier, OnlyKeystore {
6571
uint256 length = signatures.length;
6672
require(length <= type(uint8).max, MaxSignaturesExceeded());
6773

68-
uint8 valid = 0;
69-
uint8 invalid = 0;
74+
SignatureCheck memory sc;
75+
sc.message = ECDSA.toEthSignedMessageHash(message);
7076
bool[] memory seen = new bool[](owners.length);
7177
for (uint256 i = 0; i < length; i++) {
7278
SignerData memory sd = signatures[i];
7379

7480
// Note: we need to ensure gas usage is consistent during simulation with dummy signers.
75-
!seen[sd.index] && owners[sd.index] == _ecdsaRecover(message, sd.signature) ? valid++ : invalid++;
81+
!seen[sd.index] && owners[sd.index] == ECDSA.recover(sc.message, sd.signature) ? sc.valid++ : sc.invalid++;
7682
seen[sd.index] = true;
7783
}
7884

79-
return valid >= threshold ? SIG_VALIDATION_SUCCESS : SIG_VALIDATION_FAILED;
85+
return sc.valid >= threshold ? SIG_VALIDATION_SUCCESS : SIG_VALIDATION_FAILED;
8086
}
8187

8288
// ================================================================
@@ -94,8 +100,4 @@ contract UserOpMultiSigVerifier is IVerifier, OnlyKeystore {
94100
require(owners[i] > owners[i - 1], OwnersUnsortedOrHasDuplicates());
95101
}
96102
}
97-
98-
function _ecdsaRecover(bytes32 message, bytes memory signature) internal view returns (address) {
99-
return ECDSA.recover(ECDSA.toEthSignedMessageHash(message), signature);
100-
}
101103
}

0 commit comments

Comments
 (0)