From a1929ea70bd7aac6c9dfaf1e3db15f3db631f389 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Tue, 8 Oct 2024 15:53:43 -0400 Subject: [PATCH 1/6] switch minsigners to f in RMNRemote --- contracts/src/v0.8/ccip/rmn/RMNRemote.sol | 17 ++++--- .../src/v0.8/ccip/test/rmn/RMNRemote.t.sol | 51 +++++++------------ 2 files changed, 27 insertions(+), 41 deletions(-) diff --git a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol index 0d38da22b3..df05e8bdd0 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol @@ -27,7 +27,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { error DuplicateOnchainPublicKey(); error InvalidSignature(); error InvalidSignerOrder(); - error MinSignersTooHigh(); + error NotEnoughSigners(); error NotCursed(bytes16 subject); error OutOfOrderSignatures(); error ThresholdNotMet(); @@ -45,11 +45,11 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { } /// @dev the contract config - /// @dev note: minSigners can be set to 0 to disable verification for chains without RMN support struct Config { bytes32 rmnHomeContractConfigDigest; // Digest of the RMNHome contract config Signer[] signers; // List of signers - uint64 minSigners; // Threshold for the number of signers required to verify a report + bool enabled; // Whether the RMNRemote verification is enabled or not + uint64 f; // Max number of faulty RMN nodes; 2f+1 signers are required } /// @dev part of the payload that RMN nodes sign: keccak256(abi.encode(RMN_V1_6_ANY2EVM_REPORT, report)) @@ -92,10 +92,13 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { Signature[] calldata signatures, uint256 rawVs ) external view { + (bool enabled, uint64 f) = (s_config.enabled, s_config.f); + if (s_configCount == 0) { revert ConfigNotSet(); } - if (signatures.length < s_config.minSigners) revert ThresholdNotMet(); + if (!enabled) return; // RMNRemote verification is disabled + if (signatures.length < (2 * f) + 1) revert ThresholdNotMet(); bytes32 digest = keccak256( abi.encode( @@ -138,9 +141,9 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { } } - // minSigners is tenable - if (!(newConfig.minSigners <= newConfig.signers.length)) { - revert MinSignersTooHigh(); + // min signers requirement is tenable + if (newConfig.enabled && newConfig.signers.length < 2 * newConfig.f + 1) { + revert NotEnoughSigners(); } // clear the old signers diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol index 5f46f85669..3f0c8db95b 100644 --- a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol +++ b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol @@ -18,33 +18,11 @@ contract RMNRemote_constructor is RMNRemoteSetup { } contract RMNRemote_setConfig is RMNRemoteSetup { - function test_setConfig_minSignersIs0_success() public { - // Initially there is no config, the version is 0 - uint32 currentConfigVersion = 0; - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); - - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - - (uint32 version, RMNRemote.Config memory gotConfig) = s_rmnRemote.getVersionedConfig(); - assertEq(gotConfig.minSigners, 0); - assertEq(version, currentConfigVersion); - - // A new config should increment the version - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - } - function test_setConfig_addSigner_removeSigner_success() public { uint32 currentConfigVersion = 0; uint256 numSigners = s_signers.length; RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 0}); vm.expectEmit(); emit RMNRemote.ConfigSet(++currentConfigVersion, config); @@ -54,7 +32,7 @@ contract RMNRemote_setConfig is RMNRemoteSetup { // add a signer address newSigner = makeAddr("new signer"); s_signers.push(RMNRemote.Signer({onchainPublicKey: newSigner, nodeIndex: uint64(numSigners)})); - config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 0}); vm.expectEmit(); emit RMNRemote.ConfigSet(++currentConfigVersion, config); @@ -70,7 +48,7 @@ contract RMNRemote_setConfig is RMNRemoteSetup { // remove two signers s_signers.pop(); s_signers.pop(); - config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 0}); vm.expectEmit(); emit RMNRemote.ConfigSet(++currentConfigVersion, config); @@ -85,27 +63,28 @@ contract RMNRemote_setConfig is RMNRemoteSetup { function test_setConfig_invalidSignerOrder_reverts() public { s_signers.push(RMNRemote.Signer({onchainPublicKey: address(4), nodeIndex: 0})); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 0}); vm.expectRevert(RMNRemote.InvalidSignerOrder.selector); s_rmnRemote.setConfig(config); } - function test_setConfig_minSignersTooHigh_reverts() public { + function test_setConfig_notEnoughSigners_reverts() public { RMNRemote.Config memory config = RMNRemote.Config({ rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, - minSigners: uint64(s_signers.length + 1) + enabled: true, + f: uint64(s_signers.length / 2) // at least 2f+1 is required }); - vm.expectRevert(RMNRemote.MinSignersTooHigh.selector); + vm.expectRevert(RMNRemote.NotEnoughSigners.selector); s_rmnRemote.setConfig(config); } function test_setConfig_duplicateOnChainPublicKey_reverts() public { s_signers.push(RMNRemote.Signer({onchainPublicKey: s_signerWallets[0].addr, nodeIndex: uint64(s_signers.length)})); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 0}); vm.expectRevert(RMNRemote.DuplicateOnchainPublicKey.selector); s_rmnRemote.setConfig(config); @@ -126,7 +105,7 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { function setUp() public override { super.setUp(); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 2}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 0}); s_rmnRemote.setConfig(config); _generatePayloadAndSigs(2, 2); } @@ -135,11 +114,11 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); } - function test_verify_minSignersIsZero_success() public { + function test_verify_disabled_success() public { vm.stopPrank(); vm.prank(OWNER); s_rmnRemote.setConfig( - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}) + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: false, f: 100000}) // f shouldn't matter here ); vm.stopPrank(); @@ -187,7 +166,11 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { } function test_verify_ThresholdNotMet_reverts() public { - _generatePayloadAndSigs(2, 1); // 1 sig requested, but 2 required + RMNRemote.Config memory config = + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, enabled: true, f: 1}); // 3 = 2f+1 sigs required + s_rmnRemote.setConfig(config); + + _generatePayloadAndSigs(2, 2); // 2 sigs generated, but 3 required vm.expectRevert(RMNRemote.ThresholdNotMet.selector); s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); From 9213c52bd9d23b4f02b1b0dc73740c729824bd23 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Wed, 9 Oct 2024 17:01:00 -0400 Subject: [PATCH 2/6] switch minsigners to f in RMNHome --- contracts/src/v0.8/ccip/rmn/RMNHome.sol | 10 ++++---- .../src/v0.8/ccip/test/rmn/RMNHome.t.sol | 25 ++++++++----------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/contracts/src/v0.8/ccip/rmn/RMNHome.sol b/contracts/src/v0.8/ccip/rmn/RMNHome.sol index d13385aed8..8649292c04 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNHome.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNHome.sol @@ -68,7 +68,7 @@ contract RMNHome is OwnerIsCreator, ITypeAndVersion { error DuplicateOffchainPublicKey(); error DuplicateSourceChain(); error OutOfBoundsObserverNodeIndex(); - error MinObserversTooHigh(); + error NotEnoughObservers(); error ConfigDigestMismatch(bytes32 expectedConfigDigest, bytes32 gotConfigDigest); error DigestNotFound(bytes32 configDigest); error RevokingZeroDigestNotAllowed(); @@ -81,7 +81,7 @@ contract RMNHome is OwnerIsCreator, ITypeAndVersion { struct SourceChain { uint64 chainSelector; // ─────╮ The Source chain selector. - uint64 minObservers; // ──────╯ Required number of observers to agree on an observation for this source chain. + uint64 f; // ─────────────────╯ Maximum number of faulty observers; 2f+1 observers required to agree on an observation for this source chain. // ObserverNodesBitmap & (1< observersCount) { - revert MinObserversTooHigh(); + // min observers are tenable + if (observersCount < 2 * currentSourceChain.f + 1) { + revert NotEnoughObservers(); } } } diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol index c5226d3206..8dbeee6bc4 100644 --- a/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol +++ b/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol @@ -23,9 +23,9 @@ contract RMNHomeTest is Test { RMNHome.SourceChain[] memory sourceChains = new RMNHome.SourceChain[](2); // Observer 0 for source chain 9000 - sourceChains[0] = RMNHome.SourceChain({chainSelector: 9000, minObservers: 1, observerNodesBitmap: 1 << 0}); - // Observers 1 and 2 for source chain 9001 - sourceChains[1] = RMNHome.SourceChain({chainSelector: 9001, minObservers: 2, observerNodesBitmap: 1 << 1 | 1 << 2}); + sourceChains[0] = RMNHome.SourceChain({chainSelector: 9000, f: 0, observerNodesBitmap: 1 << 0}); + // Observers 0, 1 and 2 for source chain 9001 + sourceChains[1] = RMNHome.SourceChain({chainSelector: 9001, f: 0, observerNodesBitmap: 1 << 0 | 1 << 1 | 1 << 2}); return Config({ staticConfig: RMNHome.StaticConfig({nodes: nodes, offchainConfig: abi.encode("static_config")}), @@ -114,7 +114,7 @@ contract RMNHome_setCandidate is RMNHomeTest { for (uint256 i = 0; i < storedDynamicConfig.sourceChains.length; i++) { RMNHome.SourceChain memory storedSourceChain = storedDynamicConfig.sourceChains[i]; assertEq(storedSourceChain.chainSelector, versionedConfig.dynamicConfig.sourceChains[i].chainSelector); - assertEq(storedSourceChain.minObservers, versionedConfig.dynamicConfig.sourceChains[i].minObservers); + assertEq(storedSourceChain.f, versionedConfig.dynamicConfig.sourceChains[i].f); assertEq(storedSourceChain.observerNodesBitmap, versionedConfig.dynamicConfig.sourceChains[i].observerNodesBitmap); } assertEq(storedDynamicConfig.offchainConfig, versionedConfig.dynamicConfig.offchainConfig); @@ -152,7 +152,7 @@ contract RMNHome_revokeCandidate is RMNHomeTest { bytes32 digest = s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); s_rmnHome.promoteCandidateAndRevokeActive(digest, ZERO_DIGEST); - config.dynamicConfig.sourceChains[0].minObservers--; + config.dynamicConfig.sourceChains[1].f++; s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); } @@ -305,11 +305,11 @@ contract RMNHome__validateStaticAndDynamicConfig is RMNHomeTest { s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); } - function test_validateStaticAndDynamicConfig_MinObserversTooHigh_reverts() public { + function test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() public { Config memory config = _getBaseConfig(); - config.dynamicConfig.sourceChains[0].minObservers++; + config.dynamicConfig.sourceChains[0].f++; - vm.expectRevert(RMNHome.MinObserversTooHigh.selector); + vm.expectRevert(RMNHome.NotEnoughObservers.selector); s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); } } @@ -324,7 +324,7 @@ contract RMNHome_setDynamicConfig is RMNHomeTest { (bytes32 priorActiveDigest,) = s_rmnHome.getConfigDigests(); Config memory config = _getBaseConfig(); - config.dynamicConfig.sourceChains[0].minObservers--; + config.dynamicConfig.sourceChains[1].f++; (, bytes32 candidateConfigDigest) = s_rmnHome.getConfigDigests(); @@ -335,10 +335,7 @@ contract RMNHome_setDynamicConfig is RMNHomeTest { (RMNHome.VersionedConfig memory storedVersionedConfig, bool ok) = s_rmnHome.getConfig(candidateConfigDigest); assertTrue(ok); - assertEq( - storedVersionedConfig.dynamicConfig.sourceChains[0].minObservers, - config.dynamicConfig.sourceChains[0].minObservers - ); + assertEq(storedVersionedConfig.dynamicConfig.sourceChains[0].f, config.dynamicConfig.sourceChains[0].f); // Asser the digests don't change when updating the dynamic config (bytes32 activeDigest, bytes32 candidateDigest) = s_rmnHome.getConfigDigests(); @@ -349,7 +346,7 @@ contract RMNHome_setDynamicConfig is RMNHomeTest { // Asserts the validation function is being called function test_setDynamicConfig_MinObserversTooHigh_reverts() public { Config memory config = _getBaseConfig(); - config.dynamicConfig.sourceChains[0].minObservers++; + config.dynamicConfig.sourceChains[0].f++; vm.expectRevert(abi.encodeWithSelector(RMNHome.DigestNotFound.selector, ZERO_DIGEST)); s_rmnHome.setDynamicConfig(config.dynamicConfig, ZERO_DIGEST); From 1966ef9f556d00158598e1d53a3c8d91939c434b Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Wed, 9 Oct 2024 17:04:58 -0400 Subject: [PATCH 3/6] update wrappers and snapshot --- contracts/gas-snapshots/ccip.gas-snapshot | 53 +++++++++---------- .../ccip/generated/rmn_remote/rmn_remote.go | 9 ++-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 1d3bb7b294..36132c4458 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -804,49 +804,48 @@ PingPong_plumbing:test_Pausing_Success() (gas: 17810) PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 167051) PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 186469) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18822) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18682) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20371) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_MinObserversTooHigh_reverts() (gas: 20810) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 137268) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 20472) -RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1077745) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18704) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20359) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() (gas: 21025) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 137290) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 20494) +RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1078931) RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23857) RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 10575) RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_OnlyOwner_reverts() (gas: 10936) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1083071) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1084257) RMNHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19063) RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 10963) RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 10606) RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 28147) -RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 594679) +RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 596458) RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 15177) -RMNHome_setCandidate:test_setCandidate_success() (gas: 588379) +RMNHome_setCandidate:test_setCandidate_success() (gas: 588972) RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 30159) RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 18848) RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 14115) -RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 103911) +RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 104512) RMNRemote_constructor:test_constructor_success() (gas: 8334) -RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59165) +RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59248) RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154457) RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18780) -RMNRemote_curse:test_curse_success() (gas: 149365) -RMNRemote_global_and_legacy_curses:test_global_and_legacy_curses_success() (gas: 133464) -RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 976479) -RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 323272) -RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 80138) -RMNRemote_setConfig:test_setConfig_minSignersIs0_success() (gas: 700548) -RMNRemote_setConfig:test_setConfig_minSignersTooHigh_reverts() (gas: 54024) +RMNRemote_curse:test_curse_success() (gas: 149299) +RMNRemote_global_and_legacy_curses:test_global_and_legacy_curses_success() (gas: 133573) +RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 996367) +RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 323727) +RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 80215) +RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 54472) RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51912) RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18748) -RMNRemote_uncurse:test_uncurse_success() (gas: 40151) -RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13650) -RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 78519) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 76336) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 83399) -RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 153002) -RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 387667) -RMNRemote_verify_withConfigSet:test_verify_minSignersIsZero_success() (gas: 184524) -RMNRemote_verify_withConfigSet:test_verify_success() (gas: 68207) +RMNRemote_uncurse:test_uncurse_success() (gas: 40116) +RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 15763) +RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 78749) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 76566) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 83629) +RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 323003) +RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 388140) +RMNRemote_verify_withConfigSet:test_verify_disabled_success() (gas: 185739) +RMNRemote_verify_withConfigSet:test_verify_success() (gas: 68442) RMN_constructor:test_Constructor_Success() (gas: 48994) RMN_getRecordedCurseRelatedOps:test_OpsPostDeployment() (gas: 19732) RMN_lazyVoteToCurseUpdate_Benchmark:test_VoteToCurseLazilyRetain3VotersUponConfigChange_gas() (gas: 152296) diff --git a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go index da84ba9c8c..644453521d 100644 --- a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go +++ b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go @@ -46,7 +46,8 @@ type InternalMerkleRoot struct { type RMNRemoteConfig struct { RmnHomeContractConfigDigest [32]byte Signers []RMNRemoteSigner - MinSigners uint64 + Enabled bool + F uint64 } type RMNRemoteSigner struct { @@ -55,8 +56,8 @@ type RMNRemoteSigner struct { } var RMNRemoteMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinSignersTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"minSigners\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"minSigners\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"minSigners\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200216a3803806200216a8339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051611f6c620001fe6000396000818161027a0152610acb0152611f6c6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806379ba509711610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b806379ba5097146102015780638d8741cb146102095780638da5cb5b1461021c5780639a19b3291461024457600080fd5b8063397796f7116100d3578063397796f7146101a557806362eed415146101ad5780636509a954146101c05780636d2d3993146101ee57600080fd5b8063181f5a7714610105578063198f0f77146101575780631add205f1461016c5780632cbc26bb14610182575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e91906113b9565b60405180910390f35b61016a6101653660046113cc565b6102ca565b005b610174610676565b60405161014e929190611407565b6101956101903660046114e5565b61076e565b604051901515815260200161014e565b6101956107cb565b61016a6101bb3660046114e5565b610845565b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b61016a6101fc3660046114e5565b6108b9565b61016a610929565b61016a61021736600461156e565b610a2b565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b61016a6102523660046116f5565b610d7f565b61025f610e7c565b60405161014e9190611792565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b61016a6102b23660046117f8565b610e88565b61016a6102c53660046116f5565b610e9c565b6102d2610f8e565b60015b6102e26020830183611815565b90508110156103b2576102f86020830183611815565b828181106103085761030861187d565b905060400201602001602081019061032091906118cd565b67ffffffffffffffff166103376020840184611815565b610342600185611919565b8181106103515761035161187d565b905060400201602001602081019061036991906118cd565b67ffffffffffffffff16106103aa576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016102d5565b506103c06020820182611815565b90506103d260608301604084016118cd565b67ffffffffffffffff161115610414576040517ffba0d9e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b80156104a65760086000600361042f600185611919565b8154811061043f5761043f61187d565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561049f8161192c565b9050610418565b5060005b6104b76020830183611815565b90508110156105ec57600860006104d16020850185611815565b848181106104e1576104e161187d565b6104f792602060409092020190810191506117f8565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff1615610558576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016008600061056b6020860186611815565b8581811061057b5761057b61187d565b61059192602060409092020190810191506117f8565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016104aa565b508060026105fa8282611a1a565b5050600580546000919082906106159063ffffffff16611b55565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c8360405161066a9190611b78565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b82821015610745576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16818301528252600190920191016106d7565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b600061077a6006611011565b60000361078957506000919050565b61079460068361101b565b806107c557506107c560067f010000000000000000000000000000010000000000000000000000000000000061101b565b92915050565b60006107d76006611011565b6000036107e45750600090565b61080f60067f010000000000000000000000000000000000000000000000000000000000000061101b565b80610840575061084060067f010000000000000000000000000000010000000000000000000000000000000061101b565b905090565b60408051600180825281830190925260009160208083019080368337019050509050818160008151811061087b5761087b61187d565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108b581610e9c565b5050565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106108ef576108ef61187d565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108b581610d7f565b60015473ffffffffffffffffffffffffffffffffffffffff1633146109af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60055463ffffffff16600003610a6d576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045467ffffffffffffffff16821015610ab3576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8716606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610b4f888a611c82565b9052604051610b62929190602001611de2565b60405160208183030381529060405280519060200120905060008060005b85811015610d7357600184610b9a82841b8816601b611f17565b898985818110610bac57610bac61187d565b905060400201600001358a8a86818110610bc857610bc861187d565b9050604002016020013560405160008152602001604052604051610c08949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610c2a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610ca2576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610d07576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610d66576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610b80565b50505050505050505050565b610d87610f8e565b60005b8151811015610e4157610dc0828281518110610da857610da861187d565b6020026020010151600661105990919063ffffffff16565b610e3957818181518110610dd657610dd661187d565b60200260200101516040517f73281fa10000000000000000000000000000000000000000000000000000000081526004016109a691907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610d8a565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e719190611792565b60405180910390a150565b60606108406006611087565b610e90610f8e565b610e9981611094565b50565b610ea4610f8e565b60005b8151811015610f5e57610edd828281518110610ec557610ec561187d565b6020026020010151600661118990919063ffffffff16565b610f5657818181518110610ef357610ef361187d565b60200260200101516040517f19d5c79b0000000000000000000000000000000000000000000000000000000081526004016109a691907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610ea7565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e719190611792565b60005473ffffffffffffffffffffffffffffffffffffffff16331461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016109a6565b565b60006107c5825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b6000611052837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166111b7565b60606000611052836112aa565b3373ffffffffffffffffffffffffffffffffffffffff821603611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016109a6565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611052837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611306565b600081815260018301602052604081205480156112a05760006111db600183611919565b85549091506000906111ef90600190611919565b905080821461125457600086600001828154811061120f5761120f61187d565b90600052602060002001549050808760000184815481106112325761123261187d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061126557611265611f30565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107c5565b60009150506107c5565b6060816000018054806020026020016040519081016040528092919081815260200182805480156112fa57602002820191906000526020600020905b8154815260200190600101908083116112e6575b50505050509050919050565b600081815260018301602052604081205461134d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107c5565b5060006107c5565b6000815180845260005b8181101561137b5760208185018101518683018201520161135f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006110526020830184611355565b6000602082840312156113de57600080fd5b813567ffffffffffffffff8111156113f557600080fd5b82016060818503121561105257600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b8083101561148c578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff1685830152928401926001929092019190850190611443565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146114e057600080fd5b919050565b6000602082840312156114f757600080fd5b611052826114b0565b73ffffffffffffffffffffffffffffffffffffffff81168114610e9957600080fd5b60008083601f84011261153457600080fd5b50813567ffffffffffffffff81111561154c57600080fd5b6020830191508360208260061b850101111561156757600080fd5b9250929050565b6000806000806000806080878903121561158757600080fd5b863561159281611500565b9550602087013567ffffffffffffffff808211156115af57600080fd5b818901915089601f8301126115c357600080fd5b8135818111156115d257600080fd5b8a60208260051b85010111156115e757600080fd5b60208301975080965050604089013591508082111561160557600080fd5b5061161289828a01611522565b979a9699509497949695606090950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561167c5761167c61162a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116c9576116c961162a565b604052919050565b600067ffffffffffffffff8211156116eb576116eb61162a565b5060051b60200190565b6000602080838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803561174361173e826116d1565b611682565b81815260059190911b8201830190838101908783111561176257600080fd5b928401925b8284101561178757611778846114b0565b82529284019290840190611767565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156117ec5783517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016835292840192918401916001016117ae565b50909695505050505050565b60006020828403121561180a57600080fd5b813561105281611500565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261184a57600080fd5b83018035915067ffffffffffffffff82111561186557600080fd5b6020019150600681901b360382131561156757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610e9957600080fd5b80356114e0816118ac565b6000602082840312156118df57600080fd5b8135611052816118ac565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156107c5576107c56118ea565b60008161193b5761193b6118ea565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600081356107c5816118ac565b813561197981611500565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff0000000000000000000000000000000000000000821617835560208401356119c9816118ac565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611a5857600080fd5b8401803567ffffffffffffffff811115611a7157600080fd5b6020820191508060061b3603821315611a8957600080fd5b68010000000000000000811115611aa257611aa261162a565b825481845580821015611ad7576000848152602081208381019083015b80821015611ad35782825590870190611abf565b5050505b50600092835260208320925b81811015611b0757611af5838561196e565b92840192604092909201918401611ae3565b50505050506108b5611b1b60408401611961565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611b6e57611b6e6118ea565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611bbd57600080fd5b8501828101903567ffffffffffffffff80821115611bda57600080fd5b8160061b3603831315611bec57600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611c57578535611c1a81611500565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611c3f816118ac565b83168188015294810194600194909401938101611c07565b611c6360408b016118c2565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611c9061173e846116d1565b80848252602080830192508560051b850136811115611cae57600080fd5b855b81811015611dd657803567ffffffffffffffff80821115611cd15760008081fd5b818901915060a08236031215611ce75760008081fd5b611cef611659565b8235611cfa816118ac565b81528286013582811115611d0e5760008081fd5b8301601f3681830112611d215760008081fd5b813584811115611d3357611d3361162a565b611d62897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601611682565b94508085523689828501011115611d7b57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611da28284016118c2565b8282015260609150611db58284016118c2565b91810191909152608091820135918101919091528552938201938201611cb0565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611f04577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611ed3858c0182611355565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611e87565b50969d9c50505050505050505050505050565b60ff81811683821601908111156107c5576107c56118ea565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002303380380620023038339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051612105620001fe6000396000818161027a015261076c01526121056000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638d8741cb11610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b80638d8741cb146101f65780638da5cb5b1461020957806395cebfe1146102315780639a19b3291461024457600080fd5b806362eed415116100d357806362eed415146101985780636509a954146101ad5780636d2d3993146101db57806379ba5097146101ee57600080fd5b8063181f5a77146101055780631add205f146101575780632cbc26bb1461016d578063397796f714610190575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e919061143e565b60405180910390f35b61015f6102ca565b60405161014e929190611451565b61018061017b36600461153d565b6103d8565b604051901515815260200161014e565b610180610435565b6101ab6101a636600461153d565b6104af565b005b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b6101ab6101e936600461153d565b610523565b6101ab610593565b6101ab6102043660046115c6565b610695565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b6101ab61023f366004611682565b610a23565b6101ab610252366004611788565b610dfd565b61025f610efa565b60405161014e9190611825565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b6101ab6102b236600461188b565b610f06565b6101ab6102c5366004611788565b610f1a565b6040805160808101825260008082526060602083018190529282018190529181018290526005546040805160808101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561039f576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff1681830152825260019092019101610331565b505050908252506002919091015460ff811615156020830152610100900467ffffffffffffffff16604090910152919491935090915050565b60006103e4600661100c565b6000036103f357506000919050565b6103fe600683611016565b8061042f575061042f60067f0100000000000000000000000000000100000000000000000000000000000000611016565b92915050565b6000610441600661100c565b60000361044e5750600090565b61047960067f0100000000000000000000000000000000000000000000000000000000000000611016565b806104aa57506104aa60067f0100000000000000000000000000000100000000000000000000000000000000611016565b905090565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106104e5576104e56118a8565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261051f81610f1a565b5050565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610559576105596118a8565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261051f81610dfd565b60015473ffffffffffffffffffffffffffffffffffffffff163314610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60045460055460ff821691610100900467ffffffffffffffff169063ffffffff166000036106ef576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816106fb575050610a1b565b610706816002611906565b610711906001611932565b67ffffffffffffffff16841015610754576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8916606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a081016107f08a8c611974565b9052604051610803929190602001611ad4565b60405160208183030381529060405280519060200120905060008060005b87811015610a145760018461083b82841b8a16601b611c09565b8b8b8581811061084d5761084d6118a8565b905060400201600001358c8c86818110610869576108696118a8565b90506040020160200135604051600081526020016040526040516108a9949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156108cb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610943576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16106109a8576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610a07576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610821565b5050505050505b505050505050565b610a2b611054565b60015b610a3b6020830183611c22565b9050811015610b0b57610a516020830183611c22565b82818110610a6157610a616118a8565b9050604002016020016020810190610a799190611c8a565b67ffffffffffffffff16610a906020840184611c22565b610a9b600185611ca7565b818110610aaa57610aaa6118a8565b9050604002016020016020810190610ac29190611c8a565b67ffffffffffffffff1610610b03576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101610a2e565b50610b1c6060820160408301611cd3565b8015610b645750610b336080820160608301611c8a565b610b3e906002611906565b610b49906001611932565b67ffffffffffffffff16610b606020830183611c22565b9050105b15610b9b576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b8015610c2d57600860006003610bb6600185611ca7565b81548110610bc657610bc66118a8565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c2681611cf0565b9050610b9f565b5060005b610c3e6020830183611c22565b9050811015610d735760086000610c586020850185611c22565b84818110610c6857610c686118a8565b610c7e926020604090920201908101915061188b565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff1615610cdf576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160086000610cf26020860186611c22565b85818110610d0257610d026118a8565b610d18926020604090920201908101915061188b565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610c31565b50806002610d818282611deb565b505060058054600091908290610d9c9063ffffffff16611f70565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167fd5a8259b72828bbcc0796a9f092a82281932c884c08f43ed39f6e78d7a57c2dd83604051610df19190612007565b60405180910390a25050565b610e05611054565b60005b8151811015610ebf57610e3e828281518110610e2657610e266118a8565b602002602001015160066110d790919063ffffffff16565b610eb757818181518110610e5457610e546118a8565b60200260200101516040517f73281fa100000000000000000000000000000000000000000000000000000000815260040161061091907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610e08565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610eef9190611825565b60405180910390a150565b60606104aa6006611105565b610f0e611054565b610f1781611112565b50565b610f22611054565b60005b8151811015610fdc57610f5b828281518110610f4357610f436118a8565b6020026020010151600661120790919063ffffffff16565b610fd457818181518110610f7157610f716118a8565b60200260200101516040517f19d5c79b00000000000000000000000000000000000000000000000000000000815260040161061091907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610f25565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610eef9190611825565b600061042f825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610610565b565b600061104d837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611235565b6060600061104d8361132f565b3373ffffffffffffffffffffffffffffffffffffffff821603611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610610565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061104d837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841661138b565b6000818152600183016020526040812054801561131e576000611259600183611ca7565b855490915060009061126d90600190611ca7565b90508082146112d257600086600001828154811061128d5761128d6118a8565b90600052602060002001549050808760000184815481106112b0576112b06118a8565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806112e3576112e36120c9565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061042f565b600091505061042f565b5092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561137f57602002820191906000526020600020905b81548152602001906001019080831161136b575b50505050509050919050565b60008181526001830160205260408120546113d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561042f565b50600061042f565b6000815180845260005b81811015611400576020818501810151868301820152016113e4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061104d60208301846113da565b63ffffffff83168152604060208083018290528351838301528381015160806060850152805160c085018190526000939291820190849060e08701905b808310156114d7578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff168583015292840192600192909201919085019061148e565b5060408801511515608088015260609097015167ffffffffffffffff1660a090960195909552509395945050505050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116811461153857600080fd5b919050565b60006020828403121561154f57600080fd5b61104d82611508565b73ffffffffffffffffffffffffffffffffffffffff81168114610f1757600080fd5b60008083601f84011261158c57600080fd5b50813567ffffffffffffffff8111156115a457600080fd5b6020830191508360208260061b85010111156115bf57600080fd5b9250929050565b600080600080600080608087890312156115df57600080fd5b86356115ea81611558565b9550602087013567ffffffffffffffff8082111561160757600080fd5b818901915089601f83011261161b57600080fd5b81358181111561162a57600080fd5b8a60208260051b850101111561163f57600080fd5b60208301975080965050604089013591508082111561165d57600080fd5b5061166a89828a0161157a565b979a9699509497949695606090950135949350505050565b60006020828403121561169457600080fd5b813567ffffffffffffffff8111156116ab57600080fd5b82016080818503121561104d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561170f5761170f6116bd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561175c5761175c6116bd565b604052919050565b600067ffffffffffffffff82111561177e5761177e6116bd565b5060051b60200190565b6000602080838503121561179b57600080fd5b823567ffffffffffffffff8111156117b257600080fd5b8301601f810185136117c357600080fd5b80356117d66117d182611764565b611715565b81815260059190911b820183019083810190878311156117f557600080fd5b928401925b8284101561181a5761180b84611508565b825292840192908401906117fa565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561187f5783517fffffffffffffffffffffffffffffffff000000000000000000000000000000001683529284019291840191600101611841565b50909695505050505050565b60006020828403121561189d57600080fd5b813561104d81611558565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81811683821602808216919082811461192a5761192a6118d7565b505092915050565b67ffffffffffffffff818116838216019080821115611328576113286118d7565b67ffffffffffffffff81168114610f1757600080fd5b803561153881611953565b60006119826117d184611764565b80848252602080830192508560051b8501368111156119a057600080fd5b855b81811015611ac857803567ffffffffffffffff808211156119c35760008081fd5b818901915060a082360312156119d95760008081fd5b6119e16116ec565b82356119ec81611953565b81528286013582811115611a005760008081fd5b8301601f3681830112611a135760008081fd5b813584811115611a2557611a256116bd565b611a54897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601611715565b94508085523689828501011115611a6d57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611a94828401611969565b8282015260609150611aa7828401611969565b918101919091526080918201359181019190915285529382019382016119a2565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611bf6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611bc5858c01826113da565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611b79565b50969d9c50505050505050505050505050565b60ff818116838216019081111561042f5761042f6118d7565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611c5757600080fd5b83018035915067ffffffffffffffff821115611c7257600080fd5b6020019150600681901b36038213156115bf57600080fd5b600060208284031215611c9c57600080fd5b813561104d81611953565b8181038181111561042f5761042f6118d7565b8015158114610f1757600080fd5b803561153881611cba565b600060208284031215611ce557600080fd5b813561104d81611cba565b600081611cff57611cff6118d7565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000813561042f81611953565b8135611d3d81611558565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff000000000000000000000000000000000000000082161783556020840135611d8d81611953565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b6000813561042f81611cba565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611e2957600080fd5b8401803567ffffffffffffffff811115611e4257600080fd5b6020820191508060061b3603821315611e5a57600080fd5b68010000000000000000811115611e7357611e736116bd565b825481845580821015611ea8576000848152602081208381019083015b80821015611ea45782825590870190611e90565b5050505b50600092835260208320925b81811015611ed857611ec68385611d32565b92840192604092909201918401611eb4565b505050505060028101611f22611ef060408501611dde565b825490151560ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091909116178255565b611f6b611f3160608501611d25565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b505050565b600063ffffffff808316818103611f8957611f896118d7565b6001019392505050565b8183526000602080850194508260005b85811015611ffc578135611fb681611558565b73ffffffffffffffffffffffffffffffffffffffff16875281830135611fdb81611953565b67ffffffffffffffff16878401526040968701969190910190600101611fa3565b509495945050505050565b6020815281356020820152600060208301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261204957600080fd5b830160208101903567ffffffffffffffff81111561206657600080fd5b8060061b360382131561207857600080fd5b6080604085015261208d60a085018284611f93565b91505061209c60408501611cc8565b8015156060850152506120b160608501611969565b67ffffffffffffffff81166080850152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var RMNRemoteABI = RMNRemoteMetaData.ABI @@ -1141,7 +1142,7 @@ func (_RMNRemote *RMNRemote) ParseLog(log types.Log) (generated.AbigenLog, error } func (RMNRemoteConfigSet) Topic() common.Hash { - return common.HexToHash("0x7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c") + return common.HexToHash("0xd5a8259b72828bbcc0796a9f092a82281932c884c08f43ed39f6e78d7a57c2dd") } func (RMNRemoteCursed) Topic() common.Hash { diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index ed9f855b6f..69783e20d8 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -32,7 +32,7 @@ registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwne report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 738616a62c24ad4c5b851d174f40a06b51ccbc0bbfc65f04ff9d1c865f0be5bc rmn_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin 8b45b0fb08631c6b582fd3c0b4052a79cc2b4e091e6286af1ab131bef63661f9 rmn_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 -rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin 8d7f0e4581acac5c6b42c7cca1c06e699fdcf9dbca782dde153b7d190cdbe9bc +rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin b86b11f2a45926d102a4f7c5f9e204a1e8f171b15d1e119a21ff16eecf33b2fa router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 2e4f0a7826c8abb49d882bb49fc5ff20a186dbd3137624b9097ffed903ae4888 self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 8ea5d75dbc3f8afd90d22c4a665a94e02892259cd16520c1c6b4cf0dc80c9148 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin 942be7d1681ac102e0615bee13f76838ebb0b261697cf1270d2bf82c12e57aeb From 28d868e27c488487043c7fc768d20862105f2c33 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Wed, 9 Oct 2024 17:14:24 -0400 Subject: [PATCH 4/6] update struck packing comments --- contracts/src/v0.8/ccip/rmn/RMNRemote.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol index df05e8bdd0..c549fe1290 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol @@ -46,10 +46,10 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { /// @dev the contract config struct Config { - bytes32 rmnHomeContractConfigDigest; // Digest of the RMNHome contract config - Signer[] signers; // List of signers - bool enabled; // Whether the RMNRemote verification is enabled or not - uint64 f; // Max number of faulty RMN nodes; 2f+1 signers are required + bytes32 rmnHomeContractConfigDigest; // Digest of the RMNHome contract config + Signer[] signers; // List of signers + bool enabled; // ──────────────────────╮ Whether the RMNRemote verification is enabled or not + uint64 f; // ──────────────────────────╯ Max number of faulty RMN nodes; 2f+1 signers are required } /// @dev part of the payload that RMN nodes sign: keccak256(abi.encode(RMN_V1_6_ANY2EVM_REPORT, report)) @@ -60,7 +60,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { address rmnRemoteContractAddress; // ─────╯ The address of this contract address offrampAddress; // The address of the offramp on the same chain as this contract bytes32 rmnHomeContractConfigDigest; // The digest of the RMNHome contract config - Internal.MerkleRoot[] merkleRoots; // The dest lane updates + Internal.MerkleRoot[] merkleRoots; // The dest lane updates } /// @dev this is included in the preimage of the digest that RMN nodes sign From 946886833d5827956aca83099537a1b4090c8c32 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Thu, 10 Oct 2024 09:03:09 -0400 Subject: [PATCH 5/6] change && to nested if --- contracts/src/v0.8/ccip/rmn/RMNRemote.sol | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol index c549fe1290..03b622c5f3 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol @@ -142,8 +142,10 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { } // min signers requirement is tenable - if (newConfig.enabled && newConfig.signers.length < 2 * newConfig.f + 1) { - revert NotEnoughSigners(); + if (newConfig.enabled) { + if (newConfig.signers.length < 2 * newConfig.f + 1) { + revert NotEnoughSigners(); + } } // clear the old signers From 26b2eb297f5f9fae8aa3c0a2efb014e63b851ff6 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 19:06:20 +0000 Subject: [PATCH 6/6] Update gethwrappers --- core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go index 644453521d..32a943fc8b 100644 --- a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go +++ b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go @@ -57,7 +57,7 @@ type RMNRemoteSigner struct { var RMNRemoteMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162002303380380620023038339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051612105620001fe6000396000818161027a015261076c01526121056000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638d8741cb11610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b80638d8741cb146101f65780638da5cb5b1461020957806395cebfe1146102315780639a19b3291461024457600080fd5b806362eed415116100d357806362eed415146101985780636509a954146101ad5780636d2d3993146101db57806379ba5097146101ee57600080fd5b8063181f5a77146101055780631add205f146101575780632cbc26bb1461016d578063397796f714610190575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e919061143e565b60405180910390f35b61015f6102ca565b60405161014e929190611451565b61018061017b36600461153d565b6103d8565b604051901515815260200161014e565b610180610435565b6101ab6101a636600461153d565b6104af565b005b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b6101ab6101e936600461153d565b610523565b6101ab610593565b6101ab6102043660046115c6565b610695565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b6101ab61023f366004611682565b610a23565b6101ab610252366004611788565b610dfd565b61025f610efa565b60405161014e9190611825565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b6101ab6102b236600461188b565b610f06565b6101ab6102c5366004611788565b610f1a565b6040805160808101825260008082526060602083018190529282018190529181018290526005546040805160808101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561039f576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff1681830152825260019092019101610331565b505050908252506002919091015460ff811615156020830152610100900467ffffffffffffffff16604090910152919491935090915050565b60006103e4600661100c565b6000036103f357506000919050565b6103fe600683611016565b8061042f575061042f60067f0100000000000000000000000000000100000000000000000000000000000000611016565b92915050565b6000610441600661100c565b60000361044e5750600090565b61047960067f0100000000000000000000000000000000000000000000000000000000000000611016565b806104aa57506104aa60067f0100000000000000000000000000000100000000000000000000000000000000611016565b905090565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106104e5576104e56118a8565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261051f81610f1a565b5050565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610559576105596118a8565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261051f81610dfd565b60015473ffffffffffffffffffffffffffffffffffffffff163314610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60045460055460ff821691610100900467ffffffffffffffff169063ffffffff166000036106ef576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816106fb575050610a1b565b610706816002611906565b610711906001611932565b67ffffffffffffffff16841015610754576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8916606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a081016107f08a8c611974565b9052604051610803929190602001611ad4565b60405160208183030381529060405280519060200120905060008060005b87811015610a145760018461083b82841b8a16601b611c09565b8b8b8581811061084d5761084d6118a8565b905060400201600001358c8c86818110610869576108696118a8565b90506040020160200135604051600081526020016040526040516108a9949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156108cb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610943576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16106109a8576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610a07576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610821565b5050505050505b505050505050565b610a2b611054565b60015b610a3b6020830183611c22565b9050811015610b0b57610a516020830183611c22565b82818110610a6157610a616118a8565b9050604002016020016020810190610a799190611c8a565b67ffffffffffffffff16610a906020840184611c22565b610a9b600185611ca7565b818110610aaa57610aaa6118a8565b9050604002016020016020810190610ac29190611c8a565b67ffffffffffffffff1610610b03576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101610a2e565b50610b1c6060820160408301611cd3565b8015610b645750610b336080820160608301611c8a565b610b3e906002611906565b610b49906001611932565b67ffffffffffffffff16610b606020830183611c22565b9050105b15610b9b576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b8015610c2d57600860006003610bb6600185611ca7565b81548110610bc657610bc66118a8565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c2681611cf0565b9050610b9f565b5060005b610c3e6020830183611c22565b9050811015610d735760086000610c586020850185611c22565b84818110610c6857610c686118a8565b610c7e926020604090920201908101915061188b565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff1615610cdf576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160086000610cf26020860186611c22565b85818110610d0257610d026118a8565b610d18926020604090920201908101915061188b565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610c31565b50806002610d818282611deb565b505060058054600091908290610d9c9063ffffffff16611f70565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167fd5a8259b72828bbcc0796a9f092a82281932c884c08f43ed39f6e78d7a57c2dd83604051610df19190612007565b60405180910390a25050565b610e05611054565b60005b8151811015610ebf57610e3e828281518110610e2657610e266118a8565b602002602001015160066110d790919063ffffffff16565b610eb757818181518110610e5457610e546118a8565b60200260200101516040517f73281fa100000000000000000000000000000000000000000000000000000000815260040161061091907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610e08565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610eef9190611825565b60405180910390a150565b60606104aa6006611105565b610f0e611054565b610f1781611112565b50565b610f22611054565b60005b8151811015610fdc57610f5b828281518110610f4357610f436118a8565b6020026020010151600661120790919063ffffffff16565b610fd457818181518110610f7157610f716118a8565b60200260200101516040517f19d5c79b00000000000000000000000000000000000000000000000000000000815260040161061091907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610f25565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610eef9190611825565b600061042f825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610610565b565b600061104d837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611235565b6060600061104d8361132f565b3373ffffffffffffffffffffffffffffffffffffffff821603611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610610565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061104d837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841661138b565b6000818152600183016020526040812054801561131e576000611259600183611ca7565b855490915060009061126d90600190611ca7565b90508082146112d257600086600001828154811061128d5761128d6118a8565b90600052602060002001549050808760000184815481106112b0576112b06118a8565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806112e3576112e36120c9565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061042f565b600091505061042f565b5092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561137f57602002820191906000526020600020905b81548152602001906001019080831161136b575b50505050509050919050565b60008181526001830160205260408120546113d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561042f565b50600061042f565b6000815180845260005b81811015611400576020818501810151868301820152016113e4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061104d60208301846113da565b63ffffffff83168152604060208083018290528351838301528381015160806060850152805160c085018190526000939291820190849060e08701905b808310156114d7578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff168583015292840192600192909201919085019061148e565b5060408801511515608088015260609097015167ffffffffffffffff1660a090960195909552509395945050505050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116811461153857600080fd5b919050565b60006020828403121561154f57600080fd5b61104d82611508565b73ffffffffffffffffffffffffffffffffffffffff81168114610f1757600080fd5b60008083601f84011261158c57600080fd5b50813567ffffffffffffffff8111156115a457600080fd5b6020830191508360208260061b85010111156115bf57600080fd5b9250929050565b600080600080600080608087890312156115df57600080fd5b86356115ea81611558565b9550602087013567ffffffffffffffff8082111561160757600080fd5b818901915089601f83011261161b57600080fd5b81358181111561162a57600080fd5b8a60208260051b850101111561163f57600080fd5b60208301975080965050604089013591508082111561165d57600080fd5b5061166a89828a0161157a565b979a9699509497949695606090950135949350505050565b60006020828403121561169457600080fd5b813567ffffffffffffffff8111156116ab57600080fd5b82016080818503121561104d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561170f5761170f6116bd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561175c5761175c6116bd565b604052919050565b600067ffffffffffffffff82111561177e5761177e6116bd565b5060051b60200190565b6000602080838503121561179b57600080fd5b823567ffffffffffffffff8111156117b257600080fd5b8301601f810185136117c357600080fd5b80356117d66117d182611764565b611715565b81815260059190911b820183019083810190878311156117f557600080fd5b928401925b8284101561181a5761180b84611508565b825292840192908401906117fa565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561187f5783517fffffffffffffffffffffffffffffffff000000000000000000000000000000001683529284019291840191600101611841565b50909695505050505050565b60006020828403121561189d57600080fd5b813561104d81611558565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81811683821602808216919082811461192a5761192a6118d7565b505092915050565b67ffffffffffffffff818116838216019080821115611328576113286118d7565b67ffffffffffffffff81168114610f1757600080fd5b803561153881611953565b60006119826117d184611764565b80848252602080830192508560051b8501368111156119a057600080fd5b855b81811015611ac857803567ffffffffffffffff808211156119c35760008081fd5b818901915060a082360312156119d95760008081fd5b6119e16116ec565b82356119ec81611953565b81528286013582811115611a005760008081fd5b8301601f3681830112611a135760008081fd5b813584811115611a2557611a256116bd565b611a54897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601611715565b94508085523689828501011115611a6d57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611a94828401611969565b8282015260609150611aa7828401611969565b918101919091526080918201359181019190915285529382019382016119a2565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611bf6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611bc5858c01826113da565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611b79565b50969d9c50505050505050505050505050565b60ff818116838216019081111561042f5761042f6118d7565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611c5757600080fd5b83018035915067ffffffffffffffff821115611c7257600080fd5b6020019150600681901b36038213156115bf57600080fd5b600060208284031215611c9c57600080fd5b813561104d81611953565b8181038181111561042f5761042f6118d7565b8015158114610f1757600080fd5b803561153881611cba565b600060208284031215611ce557600080fd5b813561104d81611cba565b600081611cff57611cff6118d7565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000813561042f81611953565b8135611d3d81611558565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff000000000000000000000000000000000000000082161783556020840135611d8d81611953565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b6000813561042f81611cba565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611e2957600080fd5b8401803567ffffffffffffffff811115611e4257600080fd5b6020820191508060061b3603821315611e5a57600080fd5b68010000000000000000811115611e7357611e736116bd565b825481845580821015611ea8576000848152602081208381019083015b80821015611ea45782825590870190611e90565b5050505b50600092835260208320925b81811015611ed857611ec68385611d32565b92840192604092909201918401611eb4565b505050505060028101611f22611ef060408501611dde565b825490151560ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091909116178255565b611f6b611f3160608501611d25565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b505050565b600063ffffffff808316818103611f8957611f896118d7565b6001019392505050565b8183526000602080850194508260005b85811015611ffc578135611fb681611558565b73ffffffffffffffffffffffffffffffffffffffff16875281830135611fdb81611953565b67ffffffffffffffff16878401526040968701969190910190600101611fa3565b509495945050505050565b6020815281356020820152600060208301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261204957600080fd5b830160208101903567ffffffffffffffff81111561206657600080fd5b8060061b360382131561207857600080fd5b6080604085015261208d60a085018284611f93565b91505061209c60408501611cc8565b8015156060850152506120b160608501611969565b67ffffffffffffffff81166080850152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002300380380620023008339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051612102620001fe6000396000818161027a015261076c01526121026000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638d8741cb11610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b80638d8741cb146101f65780638da5cb5b1461020957806395cebfe1146102315780639a19b3291461024457600080fd5b806362eed415116100d357806362eed415146101985780636509a954146101ad5780636d2d3993146101db57806379ba5097146101ee57600080fd5b8063181f5a77146101055780631add205f146101575780632cbc26bb1461016d578063397796f714610190575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e919061143b565b60405180910390f35b61015f6102ca565b60405161014e92919061144e565b61018061017b36600461153a565b6103d8565b604051901515815260200161014e565b610180610435565b6101ab6101a636600461153a565b6104af565b005b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b6101ab6101e936600461153a565b610523565b6101ab610593565b6101ab6102043660046115c3565b610695565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b6101ab61023f36600461167f565b610a23565b6101ab610252366004611785565b610dfa565b61025f610ef7565b60405161014e9190611822565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b6101ab6102b2366004611888565b610f03565b6101ab6102c5366004611785565b610f17565b6040805160808101825260008082526060602083018190529282018190529181018290526005546040805160808101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561039f576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff1681830152825260019092019101610331565b505050908252506002919091015460ff811615156020830152610100900467ffffffffffffffff16604090910152919491935090915050565b60006103e46006611009565b6000036103f357506000919050565b6103fe600683611013565b8061042f575061042f60067f0100000000000000000000000000000100000000000000000000000000000000611013565b92915050565b60006104416006611009565b60000361044e5750600090565b61047960067f0100000000000000000000000000000000000000000000000000000000000000611013565b806104aa57506104aa60067f0100000000000000000000000000000100000000000000000000000000000000611013565b905090565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106104e5576104e56118a5565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261051f81610f17565b5050565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610559576105596118a5565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261051f81610dfa565b60015473ffffffffffffffffffffffffffffffffffffffff163314610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60045460055460ff821691610100900467ffffffffffffffff169063ffffffff166000036106ef576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816106fb575050610a1b565b610706816002611903565b61071190600161192f565b67ffffffffffffffff16841015610754576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8916606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a081016107f08a8c611971565b9052604051610803929190602001611ad1565b60405160208183030381529060405280519060200120905060008060005b87811015610a145760018461083b82841b8a16601b611c06565b8b8b8581811061084d5761084d6118a5565b905060400201600001358c8c86818110610869576108696118a5565b90506040020160200135604051600081526020016040526040516108a9949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156108cb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610943576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16106109a8576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610a07576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610821565b5050505050505b505050505050565b610a2b611051565b60015b610a3b6020830183611c1f565b9050811015610b0b57610a516020830183611c1f565b82818110610a6157610a616118a5565b9050604002016020016020810190610a799190611c87565b67ffffffffffffffff16610a906020840184611c1f565b610a9b600185611ca4565b818110610aaa57610aaa6118a5565b9050604002016020016020810190610ac29190611c87565b67ffffffffffffffff1610610b03576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101610a2e565b50610b1c6060820160408301611cd0565b15610b9857610b316080820160608301611c87565b610b3c906002611903565b610b4790600161192f565b67ffffffffffffffff16610b5e6020830183611c1f565b90501015610b98576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b8015610c2a57600860006003610bb3600185611ca4565b81548110610bc357610bc36118a5565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c2381611ced565b9050610b9c565b5060005b610c3b6020830183611c1f565b9050811015610d705760086000610c556020850185611c1f565b84818110610c6557610c656118a5565b610c7b9260206040909202019081019150611888565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff1615610cdc576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160086000610cef6020860186611c1f565b85818110610cff57610cff6118a5565b610d159260206040909202019081019150611888565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610c2e565b50806002610d7e8282611de8565b505060058054600091908290610d999063ffffffff16611f6d565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167fd5a8259b72828bbcc0796a9f092a82281932c884c08f43ed39f6e78d7a57c2dd83604051610dee9190612004565b60405180910390a25050565b610e02611051565b60005b8151811015610ebc57610e3b828281518110610e2357610e236118a5565b602002602001015160066110d490919063ffffffff16565b610eb457818181518110610e5157610e516118a5565b60200260200101516040517f73281fa100000000000000000000000000000000000000000000000000000000815260040161061091907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610e05565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610eec9190611822565b60405180910390a150565b60606104aa6006611102565b610f0b611051565b610f148161110f565b50565b610f1f611051565b60005b8151811015610fd957610f58828281518110610f4057610f406118a5565b6020026020010151600661120490919063ffffffff16565b610fd157818181518110610f6e57610f6e6118a5565b60200260200101516040517f19d5c79b00000000000000000000000000000000000000000000000000000000815260040161061091907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610f22565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610eec9190611822565b600061042f825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610610565b565b600061104a837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611232565b6060600061104a8361132c565b3373ffffffffffffffffffffffffffffffffffffffff82160361118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610610565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061104a837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611388565b6000818152600183016020526040812054801561131b576000611256600183611ca4565b855490915060009061126a90600190611ca4565b90508082146112cf57600086600001828154811061128a5761128a6118a5565b90600052602060002001549050808760000184815481106112ad576112ad6118a5565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806112e0576112e06120c6565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061042f565b600091505061042f565b5092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561137c57602002820191906000526020600020905b815481526020019060010190808311611368575b50505050509050919050565b60008181526001830160205260408120546113cf5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561042f565b50600061042f565b6000815180845260005b818110156113fd576020818501810151868301820152016113e1565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061104a60208301846113d7565b63ffffffff83168152604060208083018290528351838301528381015160806060850152805160c085018190526000939291820190849060e08701905b808310156114d4578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff168583015292840192600192909201919085019061148b565b5060408801511515608088015260609097015167ffffffffffffffff1660a090960195909552509395945050505050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116811461153557600080fd5b919050565b60006020828403121561154c57600080fd5b61104a82611505565b73ffffffffffffffffffffffffffffffffffffffff81168114610f1457600080fd5b60008083601f84011261158957600080fd5b50813567ffffffffffffffff8111156115a157600080fd5b6020830191508360208260061b85010111156115bc57600080fd5b9250929050565b600080600080600080608087890312156115dc57600080fd5b86356115e781611555565b9550602087013567ffffffffffffffff8082111561160457600080fd5b818901915089601f83011261161857600080fd5b81358181111561162757600080fd5b8a60208260051b850101111561163c57600080fd5b60208301975080965050604089013591508082111561165a57600080fd5b5061166789828a01611577565b979a9699509497949695606090950135949350505050565b60006020828403121561169157600080fd5b813567ffffffffffffffff8111156116a857600080fd5b82016080818503121561104a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561170c5761170c6116ba565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611759576117596116ba565b604052919050565b600067ffffffffffffffff82111561177b5761177b6116ba565b5060051b60200190565b6000602080838503121561179857600080fd5b823567ffffffffffffffff8111156117af57600080fd5b8301601f810185136117c057600080fd5b80356117d36117ce82611761565b611712565b81815260059190911b820183019083810190878311156117f257600080fd5b928401925b828410156118175761180884611505565b825292840192908401906117f7565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561187c5783517fffffffffffffffffffffffffffffffff00000000000000000000000000000000168352928401929184019160010161183e565b50909695505050505050565b60006020828403121561189a57600080fd5b813561104a81611555565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216028082169190828114611927576119276118d4565b505092915050565b67ffffffffffffffff818116838216019080821115611325576113256118d4565b67ffffffffffffffff81168114610f1457600080fd5b803561153581611950565b600061197f6117ce84611761565b80848252602080830192508560051b85013681111561199d57600080fd5b855b81811015611ac557803567ffffffffffffffff808211156119c05760008081fd5b818901915060a082360312156119d65760008081fd5b6119de6116e9565b82356119e981611950565b815282860135828111156119fd5760008081fd5b8301601f3681830112611a105760008081fd5b813584811115611a2257611a226116ba565b611a51897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601611712565b94508085523689828501011115611a6a57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611a91828401611966565b8282015260609150611aa4828401611966565b9181019190915260809182013591810191909152855293820193820161199f565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611bf3577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611bc2858c01826113d7565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611b76565b50969d9c50505050505050505050505050565b60ff818116838216019081111561042f5761042f6118d4565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611c5457600080fd5b83018035915067ffffffffffffffff821115611c6f57600080fd5b6020019150600681901b36038213156115bc57600080fd5b600060208284031215611c9957600080fd5b813561104a81611950565b8181038181111561042f5761042f6118d4565b8015158114610f1457600080fd5b803561153581611cb7565b600060208284031215611ce257600080fd5b813561104a81611cb7565b600081611cfc57611cfc6118d4565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000813561042f81611950565b8135611d3a81611555565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff000000000000000000000000000000000000000082161783556020840135611d8a81611950565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b6000813561042f81611cb7565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611e2657600080fd5b8401803567ffffffffffffffff811115611e3f57600080fd5b6020820191508060061b3603821315611e5757600080fd5b68010000000000000000811115611e7057611e706116ba565b825481845580821015611ea5576000848152602081208381019083015b80821015611ea15782825590870190611e8d565b5050505b50600092835260208320925b81811015611ed557611ec38385611d2f565b92840192604092909201918401611eb1565b505050505060028101611f1f611eed60408501611ddb565b825490151560ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091909116178255565b611f68611f2e60608501611d22565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b505050565b600063ffffffff808316818103611f8657611f866118d4565b6001019392505050565b8183526000602080850194508260005b85811015611ff9578135611fb381611555565b73ffffffffffffffffffffffffffffffffffffffff16875281830135611fd881611950565b67ffffffffffffffff16878401526040968701969190910190600101611fa0565b509495945050505050565b6020815281356020820152600060208301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261204657600080fd5b830160208101903567ffffffffffffffff81111561206357600080fd5b8060061b360382131561207557600080fd5b6080604085015261208a60a085018284611f90565b91505061209960408501611cc5565b8015156060850152506120ae60608501611966565b67ffffffffffffffff81166080850152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var RMNRemoteABI = RMNRemoteMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 69783e20d8..1c9cf6880c 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -32,7 +32,7 @@ registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwne report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 738616a62c24ad4c5b851d174f40a06b51ccbc0bbfc65f04ff9d1c865f0be5bc rmn_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin 8b45b0fb08631c6b582fd3c0b4052a79cc2b4e091e6286af1ab131bef63661f9 rmn_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 -rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin b86b11f2a45926d102a4f7c5f9e204a1e8f171b15d1e119a21ff16eecf33b2fa +rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin 569ab6db0316527629ae255249745d8c75ae96413556ee21dd23b0ed271f0b9d router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 2e4f0a7826c8abb49d882bb49fc5ff20a186dbd3137624b9097ffed903ae4888 self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 8ea5d75dbc3f8afd90d22c4a665a94e02892259cd16520c1c6b4cf0dc80c9148 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin 942be7d1681ac102e0615bee13f76838ebb0b261697cf1270d2bf82c12e57aeb