Skip to content

Commit c44ef6d

Browse files
committed
improve error handling for invalid operator signature in updateOperators
Signed-off-by: Jun Kimura <jun.kimura@datachain.jp>
1 parent b2a487d commit c44ef6d

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

contracts/ILCPClientErrors.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ interface ILCPClientErrors {
5252

5353
error LCPClientInvalidSignaturesLength();
5454

55-
error LCPClientAVRUnexpectedOperator(address gotOperator, address actualOperator);
55+
error LCPClientAVRUnexpectedOperator(address actual, address expected);
5656

5757
error LCPClientUpdateOperatorsPermissionless();
58+
error LCPClientUpdateOperatorsSignatureUnexpectedOperator(address actual, address expected);
5859
}

contracts/LCPClientBase.sol

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -564,10 +564,13 @@ abstract contract LCPClientBase is ILightClient, ILCPClientErrors {
564564
);
565565
uint256 success = 0;
566566
for (uint256 i = 0; i < sigNum; i++) {
567-
if (
568-
message.signatures[i].length > 0
569-
&& verifyECDSASignature(commitment, message.signatures[i], address(bytes20(clientState.operators[i])))
570-
) {
567+
if (message.signatures[i].length > 0) {
568+
address operator = verifyECDSASignature(commitment, message.signatures[i]);
569+
if (operator != address(bytes20(clientState.operators[i]))) {
570+
revert LCPClientUpdateOperatorsSignatureUnexpectedOperator(
571+
operator, address(bytes20(clientState.operators[i]))
572+
);
573+
}
571574
unchecked {
572575
success++;
573576
}

test/LCPClientOperator.t.sol

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,11 @@ contract LCPClientOperatorTest is BasicTest {
249249
(signatures[1], signatures[2], signatures[3]) = (signatures[0], signatures[0], signatures[0]);
250250
UpdateOperatorsMessage.Data memory message = createUpdateOperators(nextNonce, operators, signatures, 2, 3);
251251
vm.expectRevert(
252-
abi.encodeWithSelector(ILCPClientErrors.LCPClientOperatorSignaturesInsufficient.selector, 1)
252+
abi.encodeWithSelector(
253+
ILCPClientErrors.LCPClientUpdateOperatorsSignatureUnexpectedOperator.selector,
254+
wallets[0].addr,
255+
wallets[1].addr
256+
)
253257
);
254258
lc.updateOperators(clientId, message);
255259
}

0 commit comments

Comments
 (0)