diff --git a/contracts/.solhintignore b/contracts/.solhintignore index 5ae38e28d9..82f217fa2a 100644 --- a/contracts/.solhintignore +++ b/contracts/.solhintignore @@ -42,5 +42,8 @@ ./src/v0.8/vendor ./node_modules/ -# Ignore RMN contracts temporarily -./src/v0.8/ccip/rmn \ No newline at end of file +# Ignore RMNHome contract temporarily +./src/v0.8/ccip/rmn/RMNHome.sol + +# Ignore tweaked vendored contracts +./src/v0.8/shared/enumerable/EnumerableSetWithBytes16.sol \ No newline at end of file diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index c3f52691d9..7562ea5cb3 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -34,7 +34,7 @@ BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28842) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55271) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244050) BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24170) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2052437) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2052431) CCIPConfigSetup:test_getCapabilityConfiguration_Success() (gas: 9508) CCIPConfig_ConfigStateMachine:test__computeConfigDigest_Success() (gas: 83274) CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_InitToRunning_Success() (gas: 354656) @@ -123,73 +123,73 @@ CommitStore_verify:test_TooManyLeaves_Revert() (gas: 36848) DefensiveExampleTest:test_HappyPath_Success() (gas: 200200) DefensiveExampleTest:test_Recovery() (gas: 424479) E2E:test_E2E_3MessagesSuccess_gas() (gas: 1106985) -EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_NotACompatiblePool_Revert() (gas: 38313) -EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_Success() (gas: 104441) -EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_TokenHandlingError_transfer_Revert() (gas: 86029) -EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 37362) -EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 95010) -EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 40338) +EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_NotACompatiblePool_Revert() (gas: 38322) +EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_Success() (gas: 104438) +EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_TokenHandlingError_transfer_Revert() (gas: 86026) +EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 37365) +EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 95013) +EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 40341) EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 87189) EVM2EVMOffRamp__releaseOrMintTokens:test_OverValueWithARLOff_Success() (gas: 381594) EVM2EVMOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 140568) EVM2EVMOffRamp__releaseOrMintTokens:test_RateLimitErrors_Reverts() (gas: 798833) EVM2EVMOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 178400) -EVM2EVMOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_NotACompatiblePool_Reverts() (gas: 29684) +EVM2EVMOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_NotACompatiblePool_Reverts() (gas: 29681) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 67146) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() (gas: 43605) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 208068) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 219365) -EVM2EVMOffRamp__report:test_Report_Success() (gas: 127777) -EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 237403) -EVM2EVMOffRamp__trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 246036) +EVM2EVMOffRamp__report:test_Report_Success() (gas: 127774) +EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 237406) +EVM2EVMOffRamp__trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 246039) EVM2EVMOffRamp__trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 329283) EVM2EVMOffRamp__trialExecute:test_trialExecute_Success() (gas: 310166) -EVM2EVMOffRamp_ccipReceive:test_Reverts() (gas: 17051) +EVM2EVMOffRamp_ccipReceive:test_Reverts() (gas: 17048) EVM2EVMOffRamp_constructor:test_CommitStoreAlreadyInUse_Revert() (gas: 153120) -EVM2EVMOffRamp_constructor:test_Constructor_Success() (gas: 5212744) +EVM2EVMOffRamp_constructor:test_Constructor_Success() (gas: 5212732) EVM2EVMOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 143845) -EVM2EVMOffRamp_execute:test_EmptyReport_Revert() (gas: 21504) -EVM2EVMOffRamp_execute:test_InvalidMessageId_Revert() (gas: 36933) +EVM2EVMOffRamp_execute:test_EmptyReport_Revert() (gas: 21507) +EVM2EVMOffRamp_execute:test_InvalidMessageId_Revert() (gas: 36936) EVM2EVMOffRamp_execute:test_InvalidSourceChain_Revert() (gas: 52324) EVM2EVMOffRamp_execute:test_InvalidSourcePoolAddress_Success() (gas: 473387) EVM2EVMOffRamp_execute:test_ManualExecutionNotYetEnabled_Revert() (gas: 48346) -EVM2EVMOffRamp_execute:test_MessageTooLarge_Revert() (gas: 153016) +EVM2EVMOffRamp_execute:test_MessageTooLarge_Revert() (gas: 153019) EVM2EVMOffRamp_execute:test_Paused_Revert() (gas: 103946) -EVM2EVMOffRamp_execute:test_ReceiverError_Success() (gas: 165364) +EVM2EVMOffRamp_execute:test_ReceiverError_Success() (gas: 165358) EVM2EVMOffRamp_execute:test_RetryFailedMessageWithoutManualExecution_Success() (gas: 180107) EVM2EVMOffRamp_execute:test_RootNotCommitted_Revert() (gas: 43157) EVM2EVMOffRamp_execute:test_SingleMessageNoTokensUnordered_Success() (gas: 160119) EVM2EVMOffRamp_execute:test_SingleMessageNoTokens_Success() (gas: 175497) EVM2EVMOffRamp_execute:test_SingleMessageToNonCCIPReceiver_Success() (gas: 237901) -EVM2EVMOffRamp_execute:test_SingleMessagesNoTokensSuccess_gas() (gas: 115045) +EVM2EVMOffRamp_execute:test_SingleMessagesNoTokensSuccess_gas() (gas: 115048) EVM2EVMOffRamp_execute:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 406606) EVM2EVMOffRamp_execute:test_SkippedIncorrectNonce_Success() (gas: 54774) -EVM2EVMOffRamp_execute:test_StrictUntouchedToSuccess_Success() (gas: 132562) -EVM2EVMOffRamp_execute:test_TokenDataMismatch_Revert() (gas: 52783) -EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensAndGE_Success() (gas: 564477) -EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensSuccess_gas() (gas: 494716) -EVM2EVMOffRamp_execute:test_UnexpectedTokenData_Revert() (gas: 35884) +EVM2EVMOffRamp_execute:test_StrictUntouchedToSuccess_Success() (gas: 132556) +EVM2EVMOffRamp_execute:test_TokenDataMismatch_Revert() (gas: 52786) +EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensAndGE_Success() (gas: 564471) +EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensSuccess_gas() (gas: 494719) +EVM2EVMOffRamp_execute:test_UnexpectedTokenData_Revert() (gas: 35887) EVM2EVMOffRamp_execute:test_Unhealthy_Revert() (gas: 546333) -EVM2EVMOffRamp_execute:test_UnsupportedNumberOfTokens_Revert() (gas: 65295) +EVM2EVMOffRamp_execute:test_UnsupportedNumberOfTokens_Revert() (gas: 65298) EVM2EVMOffRamp_execute:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 124107) EVM2EVMOffRamp_execute:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 144365) EVM2EVMOffRamp_execute:test_execute_RouterYULCall_Success() (gas: 394187) EVM2EVMOffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18685) -EVM2EVMOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 275266) -EVM2EVMOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 18824) -EVM2EVMOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 223179) +EVM2EVMOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 275257) +EVM2EVMOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 18815) +EVM2EVMOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 223182) EVM2EVMOffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48391) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 47823) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 311554) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_ZeroGasZeroData_Success() (gas: 70839) -EVM2EVMOffRamp_execute_upgrade:test_V2NonceNewSenderStartsAtZero_Success() (gas: 232142) +EVM2EVMOffRamp_execute_upgrade:test_V2NonceNewSenderStartsAtZero_Success() (gas: 232136) EVM2EVMOffRamp_execute_upgrade:test_V2NonceStartsAtV1Nonce_Success() (gas: 281170) EVM2EVMOffRamp_execute_upgrade:test_V2OffRampNonceSkipsIfMsgInFlight_Success() (gas: 262488) EVM2EVMOffRamp_execute_upgrade:test_V2SenderNoncesReadsPreviousRamp_Success() (gas: 230645) EVM2EVMOffRamp_execute_upgrade:test_V2_Success() (gas: 132092) EVM2EVMOffRamp_getAllRateLimitTokens:test_GetAllRateLimitTokens_Success() (gas: 38626) -EVM2EVMOffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3402112) -EVM2EVMOffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 84887) +EVM2EVMOffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3397486) +EVM2EVMOffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 84833) EVM2EVMOffRamp_manuallyExecute:test_ManualExecFailedTx_Revert() (gas: 188280) EVM2EVMOffRamp_manuallyExecute:test_ManualExecForkedChain_Revert() (gas: 27574) EVM2EVMOffRamp_manuallyExecute:test_ManualExecGasLimitMismatch_Revert() (gas: 46457) @@ -197,7 +197,7 @@ EVM2EVMOffRamp_manuallyExecute:test_ManualExecInvalidGasLimit_Revert() (gas: 279 EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithMultipleMessagesAndSourceTokens_Success() (gas: 531330) EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithSourceTokens_Success() (gas: 344463) EVM2EVMOffRamp_manuallyExecute:test_ManualExec_Success() (gas: 189760) -EVM2EVMOffRamp_manuallyExecute:test_ReentrancyManualExecuteFails_Success() (gas: 2195134) +EVM2EVMOffRamp_manuallyExecute:test_ReentrancyManualExecuteFails_Success() (gas: 2195128) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 362054) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 145457) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 365283) @@ -205,21 +205,21 @@ EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_LowGasLimitManualExec_Succes EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 192223) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_WithInvalidReceiverExecutionGasOverride_Revert() (gas: 155387) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_WithInvalidSourceTokenDataCount_Revert() (gas: 60494) -EVM2EVMOffRamp_metadataHash:test_MetadataHash_Success() (gas: 8916) -EVM2EVMOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 40360) -EVM2EVMOffRamp_setDynamicConfig:test_RouterZeroAddress_Revert() (gas: 38422) -EVM2EVMOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 142430) -EVM2EVMOffRamp_updateRateLimitTokens:test_updateRateLimitTokens_AddsAndRemoves_Success() (gas: 162820) -EVM2EVMOffRamp_updateRateLimitTokens:test_updateRateLimitTokens_NonOwner_Revert() (gas: 16939) -EVM2EVMOffRamp_updateRateLimitTokens:test_updateRateLimitTokens_Success() (gas: 197992) -EVM2EVMOnRamp_constructor:test_Constructor_Success() (gas: 5056686) +EVM2EVMOffRamp_metadataHash:test_MetadataHash_Success() (gas: 8895) +EVM2EVMOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 40357) +EVM2EVMOffRamp_setDynamicConfig:test_RouterZeroAddress_Revert() (gas: 38419) +EVM2EVMOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 142469) +EVM2EVMOffRamp_updateRateLimitTokens:test_updateRateLimitTokens_AddsAndRemoves_Success() (gas: 162818) +EVM2EVMOffRamp_updateRateLimitTokens:test_updateRateLimitTokens_NonOwner_Revert() (gas: 16936) +EVM2EVMOffRamp_updateRateLimitTokens:test_updateRateLimitTokens_Success() (gas: 197985) +EVM2EVMOnRamp_constructor:test_Constructor_Success() (gas: 5056698) EVM2EVMOnRamp_forwardFromRouter:test_CannotSendZeroTokens_Revert() (gas: 36063) -EVM2EVMOnRamp_forwardFromRouter:test_EnforceOutOfOrder_Revert() (gas: 99028) -EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 114931) -EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 114973) -EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 130997) -EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 139437) -EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 130616) +EVM2EVMOnRamp_forwardFromRouter:test_EnforceOutOfOrder_Revert() (gas: 99010) +EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 114925) +EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 114967) +EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 130991) +EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 139431) +EVM2EVMOnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 130607) EVM2EVMOnRamp_forwardFromRouter:test_InvalidAddressEncodePacked_Revert() (gas: 38647) EVM2EVMOnRamp_forwardFromRouter:test_InvalidAddress_Revert() (gas: 38830) EVM2EVMOnRamp_forwardFromRouter:test_InvalidChainSelector_Revert() (gas: 25726) @@ -241,7 +241,7 @@ EVM2EVMOnRamp_forwardFromRouter:test_TooManyTokens_Revert() (gas: 30472) EVM2EVMOnRamp_forwardFromRouter:test_Unhealthy_Revert() (gas: 43480) EVM2EVMOnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 110111) EVM2EVMOnRamp_forwardFromRouter:test_ZeroAddressReceiver_Revert() (gas: 316020) -EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_ShouldStoreLinkFees_Success() (gas: 113042) +EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_ShouldStoreLinkFees_Success() (gas: 113033) EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 72824) EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_correctSourceTokenData_Success() (gas: 714726) EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2NonceNewSenderStartsAtZero_Success() (gas: 148808) @@ -250,14 +250,14 @@ EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2SenderNoncesReadsPreviousRamp_Suc EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2_Success() (gas: 96028) EVM2EVMOnRamp_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 20598) EVM2EVMOnRamp_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20966) -EVM2EVMOnRamp_getFee:test_EmptyMessage_Success() (gas: 74897) +EVM2EVMOnRamp_getFee:test_EmptyMessage_Success() (gas: 74894) EVM2EVMOnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 80393) -EVM2EVMOnRamp_getFee:test_HighGasMessage_Success() (gas: 230745) +EVM2EVMOnRamp_getFee:test_HighGasMessage_Success() (gas: 230742) EVM2EVMOnRamp_getFee:test_MessageGasLimitTooHigh_Revert() (gas: 16943) EVM2EVMOnRamp_getFee:test_MessageTooLarge_Revert() (gas: 95505) -EVM2EVMOnRamp_getFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 154013) +EVM2EVMOnRamp_getFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 154010) EVM2EVMOnRamp_getFee:test_NotAFeeToken_Revert() (gas: 24323) -EVM2EVMOnRamp_getFee:test_SingleTokenMessage_Success() (gas: 114743) +EVM2EVMOnRamp_getFee:test_SingleTokenMessage_Success() (gas: 114740) EVM2EVMOnRamp_getFee:test_TooManyTokens_Revert() (gas: 20142) EVM2EVMOnRamp_getFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63070) EVM2EVMOnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10532) @@ -280,7 +280,7 @@ EVM2EVMOnRamp_payNops:test_NoFeesToPay_Revert() (gas: 127718) EVM2EVMOnRamp_payNops:test_NoNopsToPay_Revert() (gas: 133580) EVM2EVMOnRamp_payNops:test_NopPayNops_Success() (gas: 146947) EVM2EVMOnRamp_payNops:test_OwnerPayNops_Success() (gas: 141522) -EVM2EVMOnRamp_payNops:test_PayNopsSuccessAfterSetNops() (gas: 298728) +EVM2EVMOnRamp_payNops:test_PayNopsSuccessAfterSetNops() (gas: 298719) EVM2EVMOnRamp_payNops:test_WrongPermissions_Revert() (gas: 15378) EVM2EVMOnRamp_setDynamicConfig:test_SetConfigInvalidConfig_Revert() (gas: 42524) EVM2EVMOnRamp_setDynamicConfig:test_SetConfigOnlyOwner_Revert() (gas: 21426) @@ -352,10 +352,10 @@ FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29076) FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 94781) FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14670) FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20550) -FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 68313) +FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 68298) FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 16892) FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16188) -FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 43682) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 43667) FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 66273) FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78322) FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 39244) @@ -368,15 +368,15 @@ FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_S FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40376) FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29503) FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18315) -FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 82347) +FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 82344) FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 52638) -FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 238765) +FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 238762) FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22555) FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29847) FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100292) -FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 141895) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 141892) FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21172) -FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 113312) +FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 113309) FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 22691) FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 62714) FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1973907) @@ -431,56 +431,56 @@ FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() ( FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10839) FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6731) FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6511) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209257) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135884) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 107099) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 144595) -HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 214814) -HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 423659) -HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 268944) -HybridUSDCTokenPoolMigrationTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 111487) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209248) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135879) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 107090) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 144586) +HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 214817) +HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 423641) +HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 268928) +HybridUSDCTokenPoolMigrationTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 111484) HybridUSDCTokenPoolMigrationTests:test_burnLockedUSDC_invalidPermissions_Revert() (gas: 39362) HybridUSDCTokenPoolMigrationTests:test_cancelExistingCCTPMigrationProposal() (gas: 33189) HybridUSDCTokenPoolMigrationTests:test_cannotCancelANonExistentMigrationProposal() (gas: 12669) HybridUSDCTokenPoolMigrationTests:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 13329) HybridUSDCTokenPoolMigrationTests:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 160900) -HybridUSDCTokenPoolMigrationTests:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 255996) +HybridUSDCTokenPoolMigrationTests:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 255982) HybridUSDCTokenPoolMigrationTests:test_transferLiquidity_Success() (gas: 165921) HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_destChain_Success() (gas: 154242) -HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 463757) -HybridUSDCTokenPoolTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209240) -HybridUSDCTokenPoolTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135884) -HybridUSDCTokenPoolTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 107144) -HybridUSDCTokenPoolTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 144616) -HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 214792) -HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 423637) -HybridUSDCTokenPoolTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 268927) -HybridUSDCTokenPoolTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 111531) +HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 463740) +HybridUSDCTokenPoolTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209230) +HybridUSDCTokenPoolTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135880) +HybridUSDCTokenPoolTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 107135) +HybridUSDCTokenPoolTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 144607) +HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 214795) +HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 423619) +HybridUSDCTokenPoolTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 268910) +HybridUSDCTokenPoolTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 111528) HybridUSDCTokenPoolTests:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 160845) HybridUSDCTokenPoolTests:test_transferLiquidity_Success() (gas: 165904) LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Revert() (gas: 10989) LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Success() (gas: 18028) -LockReleaseTokenPoolPoolAndProxy_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3051555) -LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3047994) +LockReleaseTokenPoolPoolAndProxy_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3051552) +LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3047988) LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_Unauthorized_Revert() (gas: 11489) -LockReleaseTokenPoolPoolAndProxy_supportsInterface:test_SupportsInterface_Success() (gas: 10184) -LockReleaseTokenPoolPoolAndProxy_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60189) +LockReleaseTokenPoolPoolAndProxy_supportsInterface:test_SupportsInterface_Success() (gas: 10196) +LockReleaseTokenPoolPoolAndProxy_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60187) LockReleaseTokenPoolPoolAndProxy_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 11464) -LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 2836141) +LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 2836138) LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30062) LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 79943) LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59620) -LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 2832624) +LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 2832618) LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 11489) LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 72743) LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56352) LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 225548) LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11011) LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 18094) -LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10184) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 83234) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 55947) -LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60189) +LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10196) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 83231) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 55953) +LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60187) LockReleaseTokenPool_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 11464) LockRelease_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11054) LockRelease_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 35060) @@ -491,7 +491,7 @@ MerkleMultiProofTest:test_MerkleRootSingleLeaf_Success() (gas: 3661) MerkleMultiProofTest:test_SpecSync_gas() (gas: 34129) MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 34037) MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 60842) -MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126588) +MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126576) MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 63455) MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 44012) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 133528) @@ -539,7 +539,7 @@ MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsA MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 28826) MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 18324) MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 18253) -MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59294) +MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59397) MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 44190) MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 104822) MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 18886) @@ -550,7 +550,7 @@ MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Su MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 828900) MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 457292) MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 12481) -MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2141622) +MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2141722) MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141835) MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807623) MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 158867) @@ -572,12 +572,12 @@ MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 24234) MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61275) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39933) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33049) -MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 233781) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1504341) +MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 233778) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1504663) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37934) -NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23721) -NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38805) -NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71934) +NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23706) +NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38778) +NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71901) NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 262159) NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 265836) NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 329824) @@ -585,16 +585,16 @@ NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success( NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 249120) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 237027) NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153748) -NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 168962) -NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 221139) -NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 126858) +NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 168959) +NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 221148) +NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 126861) NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 107723) -NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123201) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43073) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64402) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRamp_Revert() (gas: 42937) -NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66690) -NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12067) +NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123207) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43079) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64408) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRamp_Revert() (gas: 42943) +NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66696) +NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12070) NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705) OCR2BaseNoChecks_setOCR2Config:test_FMustBePositive_Revert() (gas: 12210) OCR2BaseNoChecks_setOCR2Config:test_RepeatAddress_Revert() (gas: 42431) @@ -621,11 +621,11 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51689) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23511) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39707) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20584) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5647759) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5656596) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 469391) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99637) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12591) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 205004) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 205322) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 101437) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 111307) OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13441) @@ -640,62 +640,62 @@ OffRamp_batchExecute:test_SingleReport_Success() (gas: 157132) OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554208) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) OffRamp_ccipReceive:test_Reverts() (gas: 15385) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92593) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63787) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67826) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 63993) -OffRamp_commit:test_InvalidRootRevert() (gas: 63066) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6251632) -OffRamp_commit:test_NoConfig_Revert() (gas: 5835304) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112835) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121022) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112856) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 354804) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164033) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139074) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 145995) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59555) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 231514) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125104) -OffRamp_commit:test_Unhealthy_Revert() (gas: 58334) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206251) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51522) -OffRamp_constructor:test_Constructor_Success() (gas: 5836579) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135495) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 102930) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 100824) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161021) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 100744) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 100782) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92905) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 64099) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68124) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) +OffRamp_commit:test_InvalidRootRevert() (gas: 63356) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6260756) +OffRamp_commit:test_NoConfig_Revert() (gas: 5844428) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113042) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121403) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113063) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355198) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164351) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139364) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146555) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59858) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232074) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125409) +OffRamp_commit:test_Unhealthy_Revert() (gas: 58633) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206729) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) +OffRamp_constructor:test_Constructor_Success() (gas: 5845416) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135514) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 102949) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 100843) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161040) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 100763) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 100801) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3426635) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 373122) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 373095) OffRamp_execute:test_MultipleReports_Success() (gas: 301009) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6660824) -OffRamp_execute:test_NoConfig_Revert() (gas: 5885299) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6669661) +OffRamp_execute:test_NoConfig_Revert() (gas: 5894136) OffRamp_execute:test_NonArray_Revert() (gas: 27562) OffRamp_execute:test_SingleReport_Success() (gas: 176364) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148382) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6663573) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6672410) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244057) OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20759) -OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205097) +OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205094) OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 49316) OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48760) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 218108) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85376) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 218081) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85349) OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 274194) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91836) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91809) OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28260) OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22062) OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481748) OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48372) OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33959) OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28436) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 188081) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198515) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 188084) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198518) OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40741) OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 413233) OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249776) @@ -719,8 +719,8 @@ OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 1 OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89178) OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81284) OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74161) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173241) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214186) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 173244) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 214189) OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27152) OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165098) OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27689) @@ -729,10 +729,10 @@ OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 498614) OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 316158) OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2245360) OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165602) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227231) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227771) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781507) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347428) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 227234) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227774) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 781510) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 347431) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37634) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104404) OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 85342) @@ -747,53 +747,53 @@ OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reve OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 174512) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 176424) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 187723) -OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11296) -OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13911) -OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46448) -OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24490) -OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219358) -OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227980) +OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11269) +OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13884) +OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46421) +OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24463) +OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) +OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295350) OffRamp_trialExecute:test_trialExecute_Success() (gas: 277894) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390842) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 18030) -OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 67429) -OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Success() (gas: 325126) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 65230) +OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 67426) +OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Success() (gas: 325124) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 65227) OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 13446) OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95048) OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 92990) OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98023) OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93046) OnRamp_constructor:test_Constructor_Success() (gas: 2750875) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115152) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 145975) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145551) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143790) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145769) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145148) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 145980) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115146) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 145969) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145545) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143772) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145763) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145139) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 145974) OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38593) -OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143071) +OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143056) OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36706) OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36509) OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18291) OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38454) OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23663) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186184) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212569) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 125136) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186202) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212587) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 125127) OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 141767) OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3618195) OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24010) OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75826) OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38559) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280065) -OnRamp_getFee:test_EmptyMessage_Success() (gas: 98760) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280050) +OnRamp_getFee:test_EmptyMessage_Success() (gas: 98757) OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 64779) OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 86359) OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35185) -OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113919) +OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113916) OnRamp_getFee:test_Unhealthy_Revert() (gas: 17171) OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10510) OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35372) @@ -803,13 +803,34 @@ OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert( OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 16850) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13265) OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56460) -OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97290) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97302) PingPong_ccipReceive:test_CcipReceive_Success() (gas: 151349) PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20310) PingPong_plumbing:test_Pausing_Success() (gas: 17810) PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 162091) PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 181509) -RMNHome:test() (gas: 186) +RMNRemote_constructor:test_constructor_success() (gas: 8334) +RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59151) +RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154457) +RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18780) +RMNRemote_curse:test_curse_success() (gas: 149164) +RMNRemote_global_and_legacy_curses:test_global_and_legacy_curses_success() (gas: 133319) +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_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51912) +RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18748) +RMNRemote_uncurse:test_uncurse_success() (gas: 40044) +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: 152265) +RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 386487) +RMNRemote_verify_withConfigSet:test_verify_minSignersIsZero_success() (gas: 184524) +RMNRemote_verify_withConfigSet:test_verify_success() (gas: 68207) RMN_constructor:test_Constructor_Success() (gas: 48994) RMN_getRecordedCurseRelatedOps:test_OpsPostDeployment() (gas: 19732) RMN_lazyVoteToCurseUpdate_Benchmark:test_VoteToCurseLazilyRetain3VotersUponConfigChange_gas() (gas: 152296) @@ -887,24 +908,24 @@ RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Rever RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Success() (gas: 129905) Router_applyRampUpdates:test_OffRampMismatch_Revert() (gas: 89366) Router_applyRampUpdates:test_OffRampUpdatesWithRouting() (gas: 10662612) -Router_applyRampUpdates:test_OnRampDisable() (gas: 56028) +Router_applyRampUpdates:test_OnRampDisable() (gas: 56007) Router_applyRampUpdates:test_OnlyOwner_Revert() (gas: 12356) Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 114599) Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 202430) Router_ccipSend:test_CCIPSendNativeFeeNoTokenSuccess_gas() (gas: 126968) Router_ccipSend:test_CCIPSendNativeFeeOneTokenSuccess_gas() (gas: 214801) -Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 64532) +Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 64520) Router_ccipSend:test_InvalidMsgValue() (gas: 32155) -Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 67174) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 67177) Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 170385) Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 54279) Router_ccipSend:test_NativeFeeToken_Success() (gas: 168901) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 239230) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 239227) Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 24854) Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 44811) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 171159) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 171189) Router_ccipSend:test_ZeroFeeAndGasPrice_Success() (gas: 241701) -Router_constructor:test_Constructor_Success() (gas: 13124) +Router_constructor:test_Constructor_Success() (gas: 13128) Router_getArmProxy:test_getArmProxy() (gas: 10573) Router_getFee:test_GetFeeSupportedChain_Success() (gas: 44673) Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17192) @@ -915,7 +936,7 @@ Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 11171) Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 358049) Router_recoverTokens:test_RecoverTokens_Success() (gas: 52480) Router_routeMessage:test_AutoExec_Success() (gas: 42816) -Router_routeMessage:test_ExecutionEvent_Success() (gas: 158529) +Router_routeMessage:test_ExecutionEvent_Success() (gas: 158520) Router_routeMessage:test_ManualExec_Success() (gas: 35546) Router_routeMessage:test_OnlyOffRamp_Revert() (gas: 25224) Router_routeMessage:test_WhenNotHealthy_Revert() (gas: 44799) @@ -945,19 +966,19 @@ TokenAdminRegistry_setPool:test_setPool_Success() (gas: 36135) TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30842) TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18103) TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49438) -TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 5586496) -TokenPoolAndProxy:test_lockOrBurn_burnWithFromMint_Success() (gas: 5617966) -TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 5793243) +TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 5586499) +TokenPoolAndProxy:test_lockOrBurn_burnWithFromMint_Success() (gas: 5617969) +TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 5793246) TokenPoolAndProxy:test_setPreviousPool_Success() (gas: 3070731) -TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6434780) -TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 6634919) -TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 1979949) -TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12107) +TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6434801) +TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 6634934) +TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 1979943) +TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12113) TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23476) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 177845) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 177848) TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 23764) TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8375) -TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 24879) +TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 24867) TokenPool_applyChainUpdates:test_applyChainUpdates_DisabledNonZeroRateLimit_Revert() (gas: 271569) TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 542359) TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 18449) @@ -966,13 +987,13 @@ TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 479160) TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 157422) TokenPool_constructor:test_ZeroAddressNotAllowed_Revert() (gas: 70484) TokenPool_constructor:test_immutableFields_Success() (gas: 20586) -TokenPool_getRemotePool:test_getRemotePool_Success() (gas: 274175) +TokenPool_getRemotePool:test_getRemotePool_Success() (gas: 274181) TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 277296) -TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 290035) -TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 350059) +TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 290028) +TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 350050) TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 277036) -TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 254072) -TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 305115) +TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 254065) +TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 305106) TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 17187) TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 15227) TokenPool_setRemotePool:test_setRemotePool_NonExistentChain_Reverts() (gas: 15671) @@ -987,16 +1008,16 @@ TokenProxy_ccipSend:test_CcipSend_Success() (gas: 262651) TokenProxy_constructor:test_Constructor() (gas: 13836) TokenProxy_getFee:test_GetFeeGasShouldBeZero_Revert() (gas: 16899) TokenProxy_getFee:test_GetFeeInvalidToken_Revert() (gas: 12706) -TokenProxy_getFee:test_GetFeeNoDataAllowed_Revert() (gas: 15888) +TokenProxy_getFee:test_GetFeeNoDataAllowed_Revert() (gas: 15885) TokenProxy_getFee:test_GetFee_Success() (gas: 85240) USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 25704) -USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35499) -USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30244) -USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 133512) -USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 478191) -USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 268689) -USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 50964) -USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 99005) +USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35481) +USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30235) +USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 133508) +USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 478182) +USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 268672) +USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 50952) +USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 98987) USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 66393) USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11363) USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10041) \ No newline at end of file diff --git a/contracts/src/v0.8/ccip/interfaces/IRMNV2.sol b/contracts/src/v0.8/ccip/interfaces/IRMNV2.sol index 9af3de6cab..ba6f652e36 100644 --- a/contracts/src/v0.8/ccip/interfaces/IRMNV2.sol +++ b/contracts/src/v0.8/ccip/interfaces/IRMNV2.sol @@ -11,12 +11,29 @@ interface IRMNV2 { bytes32 s; } - function verify(Internal.MerkleRoot[] memory merkleRoots, Signature[] memory signatures) external view; + /// @notice Verifies signatures of RMN nodes, on dest lane updates as provided in the CommitReport + /// @param offRampAddress is not inferred by msg.sender, in case the call is made through ARMProxy + /// @param merkleRoots must be well formed, and is a representation of the CommitReport received from the oracles + /// @param signatures rmnNodes ECDSA sigs, only r & s, must be sorted in ascending order by signer address + /// @param rawVs rmnNodes ECDSA sigs, part v bitmap + /// @dev Will revert if verification fails + function verify( + address offRampAddress, + Internal.MerkleRoot[] memory merkleRoots, + Signature[] memory signatures, + uint256 rawVs + ) external view; + + /// @notice gets the current set of cursed subjects + /// @return subjects the list of cursed subjects + function getCursedSubjects() external view returns (bytes16[] memory subjects); /// @notice If there is an active global or legacy curse, this function returns true. + /// @return bool true if there is an active global curse function isCursed() external view returns (bool); /// @notice If there is an active global curse, or an active curse for `subject`, this function returns true. /// @param subject To check whether a particular chain is cursed, set to bytes16(uint128(chainSelector)). + /// @return bool true if the provided subject is cured *or* if there is an active global curse function isCursed(bytes16 subject) external view returns (bool); } diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 99872451b8..5fcddb486e 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -131,6 +131,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { Internal.PriceUpdates priceUpdates; // Collection of gas and price updates to commit Internal.MerkleRoot[] merkleRoots; // Collection of merkle roots per source chain to commit IRMNV2.Signature[] rmnSignatures; // RMN signatures on the merkle roots + uint256 rmnRawVs; // Raw v values of the RMN signatures } struct GasLimitOverride { @@ -778,13 +779,13 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { bytes calldata report, bytes32[] calldata rs, bytes32[] calldata ss, - bytes32 rawVs // signatures + bytes32 rawVs ) external { CommitReport memory commitReport = abi.decode(report, (CommitReport)); // Verify RMN signatures if (commitReport.merkleRoots.length > 0) { - i_rmn.verify(commitReport.merkleRoots, commitReport.rmnSignatures); + i_rmn.verify(address(this), commitReport.merkleRoots, commitReport.rmnSignatures, commitReport.rmnRawVs); } // Check if the report contains price updates diff --git a/contracts/src/v0.8/ccip/rmn/RMNHome.sol b/contracts/src/v0.8/ccip/rmn/RMNHome.sol index 0d3d7d9803..ec479bf663 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNHome.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNHome.sol @@ -1,18 +1,22 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/access/Ownable2Step.sol"; +pragma solidity 0.8.24; import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol"; +import {OwnerIsCreator} from "../../shared/access/OwnerIsCreator.sol"; + /// @notice Stores the home configuration for RMN, that is referenced by CCIP oracles, RMN nodes, and the RMNRemote /// contracts. -contract RMNHome is Ownable2Step, ITypeAndVersion { - /// @dev temp placeholder to exclude this contract from coverage - function test() public {} +contract RMNHome is OwnerIsCreator, ITypeAndVersion { + error DuplicatePeerId(); + error DuplicateOffchainPublicKey(); + error OutOfOrderSourceChains(); + error OutOfOrderObserverNodeIndices(); + error OutOfBoundsObserverNodeIndex(); + error MinObserversTooHigh(); - string public constant override typeAndVersion = "RMNHome 1.6.0-dev"; - uint256 public constant CONFIG_RING_BUFFER_SIZE = 2; + event ConfigSet(bytes32 configDigest, VersionedConfig versionedConfig); + event ConfigRevoked(bytes32 configDigest); struct Node { string peerId; // used for p2p communication, base58 encoded @@ -38,6 +42,9 @@ contract RMNHome is Ownable2Step, ITypeAndVersion { Config config; } + string public constant override typeAndVersion = "RMNHome 1.6.0-dev"; + uint256 public constant CONFIG_RING_BUFFER_SIZE = 2; + function _configDigest(VersionedConfig memory versionedConfig) internal pure returns (bytes32) { uint256 h = uint256(keccak256(abi.encode(versionedConfig))); uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00 @@ -143,22 +150,4 @@ contract RMNHome is Ownable2Step, ITypeAndVersion { } } } - - /// - /// Events - /// - - event ConfigSet(bytes32 configDigest, VersionedConfig versionedConfig); - event ConfigRevoked(bytes32 configDigest); - - /// - /// Errors - /// - - error DuplicatePeerId(); - error DuplicateOffchainPublicKey(); - error OutOfOrderSourceChains(); - error OutOfOrderObserverNodeIndices(); - error OutOfBoundsObserverNodeIndex(); - error MinObserversTooHigh(); } diff --git a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol index 3ebbf4af80..1a7270d846 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol @@ -1,168 +1,241 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; +pragma solidity 0.8.24; -import {OwnerIsCreator} from "../../shared/access/OwnerIsCreator.sol"; import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol"; import {IRMNV2} from "../interfaces/IRMNV2.sol"; + +import {OwnerIsCreator} from "../../shared/access/OwnerIsCreator.sol"; +import {EnumerableSet} from "../../shared/enumerable/EnumerableSetWithBytes16.sol"; import {Internal} from "../libraries/Internal.sol"; +/// @dev this is included in the preimage of the digest that RMN nodes sign bytes32 constant RMN_V1_6_ANY2EVM_REPORT = keccak256("RMN_V1_6_ANY2EVM_REPORT"); -/// @dev XXX DO NOT USE THIS CONTRACT, NOT PRODUCTION READY XXX +/// @dev An active curse on this subject will cause isCursed() to return true. Use this subject if there is an issue with a +/// remote chain, for which there exists a legacy lane contract deployed on the same chain as this RMN contract is +/// deployed, relying on isCursed(). +bytes16 constant LEGACY_CURSE_SUBJECT = 0x01000000000000000000000000000000; + +/// @dev An active curse on this subject will cause isCursed() and isCursed(bytes16) to return true. Use this subject for +/// issues affecting all of CCIP chains, or pertaining to the chain that this contract is deployed on, instead of using +/// the local chain selector as a subject. +bytes16 constant GLOBAL_CURSE_SUBJECT = 0x01000000000000000000000000000001; + /// @notice This contract supports verification of RMN reports for any Any2EVM OffRamp. contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNV2 { - /// @dev temp placeholder to exclude this contract from coverage - function test() public {} + using EnumerableSet for EnumerableSet.Bytes16Set; - string public constant override typeAndVersion = "RMNRemote 1.6.0-dev"; - - uint64 internal immutable i_chainSelector; + error AlreadyCursed(bytes16 subject); + error ConfigNotSet(); + error DuplicateOnchainPublicKey(); + error InvalidSignature(); + error InvalidSignerOrder(); + error MinSignersTooHigh(); + error NotCursed(bytes16 subject); + error OutOfOrderSignatures(); + error ThresholdNotMet(); + error UnexpectedSigner(); + error ZeroValueNotAllowed(); - constructor(uint64 chainSelector) { - i_chainSelector = chainSelector; - } + event ConfigSet(uint32 indexed version, Config config); + event Cursed(bytes16[] subjects); + event Uncursed(bytes16[] subjects); + /// @dev the configuration of an RMN signer struct Signer { - address onchainPublicKey; // for signing reports - uint64 nodeIndex; // maps to nodes in home chain config, should be strictly increasing + address onchainPublicKey; // ────╮ For signing reports + uint64 nodeIndex; // ────────────╯ Maps to nodes in home chain config, should be strictly increasing } + /// @dev the contract config + /// @dev note: minSigners can be set to 0 to disable verification for chains without RMN support struct Config { - bytes32 rmnHomeContractConfigDigest; - Signer[] signers; - uint64 minSigners; + 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 } - struct VersionedConfig { - uint32 version; - Config config; + /// @dev part of the payload that RMN nodes sign: keccak256(abi.encode(RMN_V1_6_ANY2EVM_REPORT, report)) + /// @dev this struct is only ever abi-encoded and hashed; it is never stored + struct Report { + uint256 destChainId; // To guard against chain selector misconfiguration + uint64 destChainSelector; // ────────────╮ The chain selector of the destination chain + 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 + } + + string public constant override typeAndVersion = "RMNRemote 1.6.0-dev"; + uint64 internal immutable i_localChainSelector; + + Config private s_config; + uint32 private s_configCount; + + EnumerableSet.Bytes16Set private s_cursedSubjects; + mapping(address signer => bool exists) private s_signers; // for more gas efficient verify + + /// @param localChainSelector the chain selector of the chain this contract is deployed to + constructor(uint64 localChainSelector) { + if (localChainSelector == 0) revert ZeroValueNotAllowed(); + i_localChainSelector = localChainSelector; } - Config s_config; - uint32 s_configCount; + // ================================================================ + // │ Verification │ + // ================================================================ + + /// @inheritdoc IRMNV2 + function verify( + address offrampAddress, + Internal.MerkleRoot[] calldata merkleRoots, + Signature[] calldata signatures, + uint256 rawVs + ) external view { + if (s_configCount == 0) { + revert ConfigNotSet(); + } + if (signatures.length < s_config.minSigners) revert ThresholdNotMet(); + + bytes32 digest = keccak256( + abi.encode( + RMN_V1_6_ANY2EVM_REPORT, + Report({ + destChainId: block.chainid, + destChainSelector: i_localChainSelector, + rmnRemoteContractAddress: address(this), + offrampAddress: offrampAddress, + rmnHomeContractConfigDigest: s_config.rmnHomeContractConfigDigest, + merkleRoots: merkleRoots + }) + ) + ); + + address prevAddress; + address signerAddress; + for (uint256 i = 0; i < signatures.length; ++i) { + // The v value is bit-encoded into rawVs + signerAddress = ecrecover(digest, 27 + uint8(rawVs & 0x01 << i), signatures[i].r, signatures[i].s); + if (signerAddress == address(0)) revert InvalidSignature(); + if (prevAddress >= signerAddress) revert OutOfOrderSignatures(); + if (!s_signers[signerAddress]) revert UnexpectedSigner(); + prevAddress = signerAddress; + } + } - mapping(address signer => bool exists) s_signers; // for more gas efficient verify + // ================================================================ + // │ Config │ + // ================================================================ + /// @notice Sets the configuration of the contract + /// @param newConfig the new configuration + /// @dev setting config is atomic; we delete all pre-existing config and set everything from scratch function setConfig(Config calldata newConfig) external onlyOwner { - // sanity checks - { - // signers are in ascending order of nodeIndex - for (uint256 i = 1; i < newConfig.signers.length; ++i) { - if (!(newConfig.signers[i - 1].nodeIndex < newConfig.signers[i].nodeIndex)) { - revert InvalidSignerOrder(); - } + // signers are in ascending order of nodeIndex + for (uint256 i = 1; i < newConfig.signers.length; ++i) { + if (!(newConfig.signers[i - 1].nodeIndex < newConfig.signers[i].nodeIndex)) { + revert InvalidSignerOrder(); } + } - // minSigners is tenable - if (!(newConfig.minSigners <= newConfig.signers.length)) { - revert MinSignersTooHigh(); - } + // minSigners is tenable + if (!(newConfig.minSigners <= newConfig.signers.length)) { + revert MinSignersTooHigh(); } // clear the old signers - { - Config storage oldConfig = s_config; - while (oldConfig.signers.length > 0) { - delete s_signers[oldConfig.signers[oldConfig.signers.length - 1].onchainPublicKey]; - oldConfig.signers.pop(); - } + for (uint256 i = s_config.signers.length; i > 0; --i) { + delete s_signers[s_config.signers[i - 1].onchainPublicKey]; } // set the new signers - { - for (uint256 i = 0; i < newConfig.signers.length; ++i) { - if (s_signers[newConfig.signers[i].onchainPublicKey]) { - revert DuplicateOnchainPublicKey(); - } - s_signers[newConfig.signers[i].onchainPublicKey] = true; + for (uint256 i = 0; i < newConfig.signers.length; ++i) { + if (s_signers[newConfig.signers[i].onchainPublicKey]) { + revert DuplicateOnchainPublicKey(); } + s_signers[newConfig.signers[i].onchainPublicKey] = true; } s_config = newConfig; uint32 newConfigCount = ++s_configCount; - emit ConfigSet(VersionedConfig({version: newConfigCount, config: newConfig})); + emit ConfigSet(newConfigCount, newConfig); } - function getVersionedConfig() external view returns (VersionedConfig memory) { - return VersionedConfig({version: s_configCount, config: s_config}); + /// @notice Returns the current configuration of the contract and a version number + /// @return version the current configs version + /// @return config the current config + function getVersionedConfig() external view returns (uint32 version, Config memory config) { + return (s_configCount, s_config); } - struct Report { - uint256 destChainId; // to guard against chain selector misconfiguration - uint64 destChainSelector; - address rmnRemoteContractAddress; - address offrampAddress; - bytes32 rmnHomeContractConfigDigest; - Internal.MerkleRoot[] destLaneUpdates; + /// @notice Returns the chain selector configured at deployment time + /// @return localChainSelector the chain selector (not the chain ID) + function getLocalChainSelector() external view returns (uint64 localChainSelector) { + return i_localChainSelector; } - /// @notice Verifies signatures of RMN nodes, on dest lane updates as provided in the CommitReport - /// @param destLaneUpdates must be well formed, and is a representation of the CommitReport received from the oracles - /// @param signatures must be sorted in ascending order by signer address - /// @dev Will revert if verification fails. Needs to be called by the OffRamp for which the signatures are produced, - /// otherwise verification will fail. - function verify(Internal.MerkleRoot[] memory destLaneUpdates, Signature[] memory signatures) external view { - return; // XXX temporary workaround to fix integration tests while we wait to productionize this contract + // ================================================================ + // │ Cursing │ + // ================================================================ - if (s_configCount == 0) { - revert ConfigNotSet(); + /// @notice Curse a single subject + /// @param subject the subject to curse + function curse(bytes16 subject) external { + bytes16[] memory subjects = new bytes16[](1); + subjects[0] = subject; + curse(subjects); + } + + /// @notice Curse an array of subjects + /// @param subjects the subjects to curse + /// @dev reverts if any of the subjects are already cursed or if there is a duplicate + function curse(bytes16[] memory subjects) public onlyOwner { + for (uint256 i = 0; i < subjects.length; ++i) { + if (!s_cursedSubjects.add(subjects[i])) { + revert AlreadyCursed(subjects[i]); + } } + emit Cursed(subjects); + } - bytes32 signedHash = keccak256( - abi.encode( - RMN_V1_6_ANY2EVM_REPORT, - Report({ - destChainId: block.chainid, - destChainSelector: i_chainSelector, - rmnRemoteContractAddress: address(this), - offrampAddress: msg.sender, - rmnHomeContractConfigDigest: s_config.rmnHomeContractConfigDigest, - destLaneUpdates: destLaneUpdates - }) - ) - ); + /// @notice Uncurse a single subject + /// @param subject the subject to uncurse + function uncurse(bytes16 subject) external { + bytes16[] memory subjects = new bytes16[](1); + subjects[0] = subject; + uncurse(subjects); + } - uint256 numSigners = 0; - address prevAddress = address(0); - for (uint256 i = 0; i < signatures.length; ++i) { - Signature memory sig = signatures[i]; - address signerAddress = ecrecover(signedHash, 27, sig.r, sig.s); - if (signerAddress == address(0)) revert InvalidSignature(); - if (!(prevAddress < signerAddress)) revert OutOfOrderSignatures(); - if (!s_signers[signerAddress]) revert UnexpectedSigner(); - prevAddress = signerAddress; - ++numSigners; + /// @notice Uncurse an array of subjects + /// @param subjects the subjects to uncurse + /// @dev reverts if any of the subjects are not cursed or if there is a duplicate + function uncurse(bytes16[] memory subjects) public onlyOwner { + for (uint256 i = 0; i < subjects.length; ++i) { + if (!s_cursedSubjects.remove(subjects[i])) { + revert NotCursed(subjects[i]); + } } - if (numSigners < s_config.minSigners) revert ThresholdNotMet(); + emit Uncursed(subjects); } - /// @notice If there is an active global or legacy curse, this function returns true. + /// @inheritdoc IRMNV2 + function getCursedSubjects() external view returns (bytes16[] memory subjects) { + return s_cursedSubjects.values(); + } + + /// @inheritdoc IRMNV2 function isCursed() external view returns (bool) { - return false; // XXX temporary workaround + if (s_cursedSubjects.length() == 0) { + return false; + } + return s_cursedSubjects.contains(LEGACY_CURSE_SUBJECT) || s_cursedSubjects.contains(GLOBAL_CURSE_SUBJECT); } - /// @notice If there is an active global curse, or an active curse for `subject`, this function returns true. - /// @param subject To check whether a particular chain is cursed, set to bytes16(uint128(chainSelector)). + /// @inheritdoc IRMNV2 function isCursed(bytes16 subject) external view returns (bool) { - return false; // XXX temporary workaround + if (s_cursedSubjects.length() == 0) { + return false; + } + return s_cursedSubjects.contains(subject) || s_cursedSubjects.contains(GLOBAL_CURSE_SUBJECT); } - - /// - /// Events - /// - - event ConfigSet(VersionedConfig versionedConfig); - - /// - /// Errors - /// - - error InvalidSignature(); - error OutOfOrderSignatures(); - error UnexpectedSigner(); - error ThresholdNotMet(); - error ConfigNotSet(); - error InvalidSignerOrder(); - error MinSignersTooHigh(); - error DuplicateOnchainPublicKey(); } diff --git a/contracts/src/v0.8/ccip/test/BaseTest.t.sol b/contracts/src/v0.8/ccip/test/BaseTest.t.sol index e8003cab15..f6cd83672e 100644 --- a/contracts/src/v0.8/ccip/test/BaseTest.t.sol +++ b/contracts/src/v0.8/ccip/test/BaseTest.t.sol @@ -73,6 +73,9 @@ contract BaseTest is Test { MockRMN internal s_mockRMN; IRMNV2 internal s_mockRMNRemote; + // nonce for pseudo-random number generation, not to be exposed to test suites + uint256 private randNonce; + function setUp() public virtual { // BaseTest.setUp is often called multiple times from tests' setUp due to inheritance. if (s_baseTestInitialized) return; @@ -128,4 +131,19 @@ contract BaseTest is Test { return priceUpdates; } + + /// @dev returns a pseudo-random bytes32 + function _randomBytes32() internal returns (bytes32) { + return keccak256(abi.encodePacked(++randNonce)); + } + + /// @dev returns a pseudo-random number + function _randomNum() internal returns (uint256) { + return uint256(_randomBytes32()); + } + + /// @dev returns a pseudo-random address + function _randomAddress() internal returns (address) { + return address(uint160(_randomNum())); + } } diff --git a/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.t.sol b/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.t.sol index 12967558ce..5f06a37e13 100644 --- a/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.t.sol +++ b/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.t.sol @@ -168,8 +168,12 @@ contract MultiRampsE2E is OnRampSetup, OffRampSetup { merkleRoot: merkleRoots[1] }); - OffRamp.CommitReport memory report = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: rmnSignatures}); + OffRamp.CommitReport memory report = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: rmnSignatures, + rmnRawVs: 0 + }); vm.resumeGasMetering(); _commit(report, ++s_latestSequenceNumber); @@ -269,6 +273,7 @@ contract MultiRampsE2E is OnRampSetup, OffRampSetup { Internal.Any2EVMTokenTransfer[] memory any2EVMTokenTransfer = new Internal.Any2EVMTokenTransfer[](message.tokenAmounts.length); + for (uint256 i = 0; i < msgEvent.tokenAmounts.length; ++i) { any2EVMTokenTransfer[i] = Internal.Any2EVMTokenTransfer({ sourcePoolAddress: abi.encode(msgEvent.tokenAmounts[i].sourcePoolAddress), diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol index 1a31691c22..73adbb12c0 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -995,7 +995,8 @@ contract OffRamp_executeSingleReport is OffRampSetup { return OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); } } @@ -3243,7 +3244,8 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }), s_latestSequenceNumber ); @@ -3296,8 +3298,12 @@ contract OffRamp_commit is OffRampSetup { merkleRoot: root }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectEmit(); emit OffRamp.CommitReportAccepted(commitReport.merkleRoots, commitReport.priceUpdates); @@ -3324,8 +3330,12 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: maxSeq, merkleRoot: "stale report 1" }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectEmit(); emit OffRamp.CommitReportAccepted(commitReport.merkleRoots, commitReport.priceUpdates); @@ -3363,7 +3373,8 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); vm.expectEmit(); @@ -3385,7 +3396,8 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); vm.expectEmit(); @@ -3403,7 +3415,8 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); vm.expectEmit(); @@ -3455,7 +3468,8 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice1), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); vm.expectEmit(); @@ -3565,8 +3579,12 @@ contract OffRamp_commit is OffRampSetup { onRampAddress: abi.encode(ON_RAMP_ADDRESS_1) }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, roots[0].sourceChainSelector)); _commit(commitReport, s_latestSequenceNumber); @@ -3581,8 +3599,12 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 4, merkleRoot: bytes32(0) }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectRevert(OffRamp.InvalidRoot.selector); _commit(commitReport, s_latestSequenceNumber); @@ -3597,8 +3619,12 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 2, merkleRoot: bytes32(0) }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectRevert( abi.encodeWithSelector( @@ -3618,8 +3644,12 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 0, merkleRoot: bytes32(0) }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectRevert( abi.encodeWithSelector( @@ -3634,7 +3664,8 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); vm.expectRevert(OffRamp.StaleCommitReport.selector); @@ -3646,7 +3677,8 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); vm.expectEmit(); @@ -3667,8 +3699,12 @@ contract OffRamp_commit is OffRampSetup { merkleRoot: "Only a single root" }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); vm.expectRevert(abi.encodeWithSelector(OffRamp.SourceChainNotEnabled.selector, 0)); _commit(commitReport, s_latestSequenceNumber); @@ -3683,8 +3719,12 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 2, merkleRoot: "Only a single root" }); - OffRamp.CommitReport memory commitReport = - OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); _commit(commitReport, s_latestSequenceNumber); commitReport.merkleRoots[0].minSeqNr = 3; @@ -3718,7 +3758,8 @@ contract OffRamp_commit is OffRampSetup { return OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 }); } } diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol new file mode 100644 index 0000000000..40cb1e4a07 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {Internal} from "../../libraries/Internal.sol"; +import {RMNHome} from "../../rmn/RMNHome.sol"; +import {BaseTest} from "../BaseTest.t.sol"; + +contract RMNHomeTest is BaseTest { + RMNHome public s_rmnHome; + + function setUp() public virtual override { + super.setUp(); + s_rmnHome = new RMNHome(); + } +} diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol new file mode 100644 index 0000000000..f24b3ac9c9 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol @@ -0,0 +1,280 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {IRMNV2} from "../../interfaces/IRMNV2.sol"; +import {Internal} from "../../libraries/Internal.sol"; +import {GLOBAL_CURSE_SUBJECT, LEGACY_CURSE_SUBJECT, RMNRemote} from "../../rmn/RMNRemote.sol"; +import {RMNRemoteSetup} from "./RMNRemoteSetup.t.sol"; + +contract RMNRemote_constructor is RMNRemoteSetup { + function test_constructor_success() public view { + assertEq(s_rmnRemote.getLocalChainSelector(), 1); + } + + function test_constructor_zeroChainSelector_reverts() public { + vm.expectRevert(RMNRemote.ZeroValueNotAllowed.selector); + new RMNRemote(0); + } +} + +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}); + + vm.expectEmit(); + emit RMNRemote.ConfigSet(++currentConfigVersion, config); + + s_rmnRemote.setConfig(config); + + // 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}); + + vm.expectEmit(); + emit RMNRemote.ConfigSet(++currentConfigVersion, config); + + s_rmnRemote.setConfig(config); + + (uint32 version, RMNRemote.Config memory gotConfig) = s_rmnRemote.getVersionedConfig(); + assertEq(gotConfig.signers.length, s_signers.length); + assertEq(gotConfig.signers[numSigners].onchainPublicKey, newSigner); + assertEq(gotConfig.signers[numSigners].nodeIndex, uint64(numSigners)); + assertEq(version, currentConfigVersion); + + // remove two signers + s_signers.pop(); + s_signers.pop(); + config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + + vm.expectEmit(); + emit RMNRemote.ConfigSet(++currentConfigVersion, config); + + s_rmnRemote.setConfig(config); + + (version, gotConfig) = s_rmnRemote.getVersionedConfig(); + assertEq(gotConfig.signers.length, s_signers.length); + assertEq(version, currentConfigVersion); + } + + 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}); + + vm.expectRevert(RMNRemote.InvalidSignerOrder.selector); + s_rmnRemote.setConfig(config); + } + + function test_setConfig_minSignersTooHigh_reverts() public { + RMNRemote.Config memory config = RMNRemote.Config({ + rmnHomeContractConfigDigest: _randomBytes32(), + signers: s_signers, + minSigners: uint64(s_signers.length + 1) + }); + + vm.expectRevert(RMNRemote.MinSignersTooHigh.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}); + + vm.expectRevert(RMNRemote.DuplicateOnchainPublicKey.selector); + s_rmnRemote.setConfig(config); + } +} + +contract RMNRemote_verify_withConfigNotSet is RMNRemoteSetup { + function test_verify_reverts() public { + Internal.MerkleRoot[] memory merkleRoots = new Internal.MerkleRoot[](0); + IRMNV2.Signature[] memory signatures = new IRMNV2.Signature[](0); + + vm.expectRevert(RMNRemote.ConfigNotSet.selector); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, merkleRoots, signatures, 0); + } +} + +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}); + s_rmnRemote.setConfig(config); + _generatePayloadAndSigs(2, 2); + } + + function test_verify_success() public view { + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + } + + function test_verify_minSignersIsZero_success() public { + vm.stopPrank(); + vm.prank(OWNER); + s_rmnRemote.setConfig( + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}) + ); + + vm.stopPrank(); + vm.prank(OFF_RAMP_ADDRESS); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, new IRMNV2.Signature[](0), s_v); + } + + function test_verify_InvalidSignature_reverts() public { + IRMNV2.Signature memory sig = s_signatures[s_signatures.length - 1]; + sig.r = _randomBytes32(); + s_signatures.pop(); + s_signatures.push(sig); + + vm.expectRevert(RMNRemote.InvalidSignature.selector); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + } + + function test_verify_OutOfOrderSignatures_not_sorted_reverts() public { + IRMNV2.Signature memory sig1 = s_signatures[s_signatures.length - 1]; + s_signatures.pop(); + IRMNV2.Signature memory sig2 = s_signatures[s_signatures.length - 1]; + s_signatures.pop(); + s_signatures.push(sig1); + s_signatures.push(sig2); + + vm.expectRevert(RMNRemote.OutOfOrderSignatures.selector); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + } + + function test_verify_OutOfOrderSignatures_duplicateSignature_reverts() public { + IRMNV2.Signature memory sig = s_signatures[s_signatures.length - 2]; + s_signatures.pop(); + s_signatures.push(sig); + + vm.expectRevert(RMNRemote.OutOfOrderSignatures.selector); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + } + + function test_verify_UnexpectedSigner_reverts() public { + _setupSigners(2); // create 2 new signers that aren't configured on RMNRemote + _generatePayloadAndSigs(2, 2); + + vm.expectRevert(RMNRemote.UnexpectedSigner.selector); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + } + + function test_verify_ThresholdNotMet_reverts() public { + _generatePayloadAndSigs(2, 1); // 1 sig requested, but 2 required + + vm.expectRevert(RMNRemote.ThresholdNotMet.selector); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + } +} + +contract RMNRemote_curse is RMNRemoteSetup { + function test_curse_success() public { + vm.expectEmit(); + emit RMNRemote.Cursed(s_curseSubjects); + + s_rmnRemote.curse(s_curseSubjects); + + assertEq(abi.encode(s_rmnRemote.getCursedSubjects()), abi.encode(s_curseSubjects)); + assertTrue(s_rmnRemote.isCursed(curseSubj1)); + assertTrue(s_rmnRemote.isCursed(curseSubj2)); + // Should not have cursed a random subject + assertFalse(s_rmnRemote.isCursed(bytes16(keccak256("subject 3")))); + } + + function test_curse_AlreadyCursed_duplicateSubject_reverts() public { + s_curseSubjects.push(curseSubj1); + + vm.expectRevert(abi.encodeWithSelector(RMNRemote.AlreadyCursed.selector, curseSubj1)); + s_rmnRemote.curse(s_curseSubjects); + } + + function test_curse_calledByNonOwner_reverts() public { + vm.expectRevert("Only callable by owner"); + vm.stopPrank(); + vm.prank(STRANGER); + s_rmnRemote.curse(s_curseSubjects); + } +} + +contract RMNRemote_uncurse is RMNRemoteSetup { + function setUp() public override { + super.setUp(); + s_rmnRemote.curse(s_curseSubjects); + } + + function test_uncurse_success() public { + vm.expectEmit(); + emit RMNRemote.Uncursed(s_curseSubjects); + + s_rmnRemote.uncurse(s_curseSubjects); + + assertEq(s_rmnRemote.getCursedSubjects().length, 0); + assertFalse(s_rmnRemote.isCursed(curseSubj1)); + assertFalse(s_rmnRemote.isCursed(curseSubj2)); + } + + function test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() public { + s_curseSubjects.push(curseSubj1); + + vm.expectRevert(abi.encodeWithSelector(RMNRemote.NotCursed.selector, curseSubj1)); + s_rmnRemote.uncurse(s_curseSubjects); + } + + function test_uncurse_calledByNonOwner_reverts() public { + vm.expectRevert("Only callable by owner"); + vm.stopPrank(); + vm.prank(STRANGER); + s_rmnRemote.uncurse(s_curseSubjects); + } +} + +contract RMNRemote_global_and_legacy_curses is RMNRemoteSetup { + function test_global_and_legacy_curses_success() public { + bytes16 randSubject = bytes16(keccak256("random subject")); + assertFalse(s_rmnRemote.isCursed()); + assertFalse(s_rmnRemote.isCursed(randSubject)); + + s_rmnRemote.curse(GLOBAL_CURSE_SUBJECT); + assertTrue(s_rmnRemote.isCursed()); + assertTrue(s_rmnRemote.isCursed(randSubject)); + + s_rmnRemote.uncurse(GLOBAL_CURSE_SUBJECT); + assertFalse(s_rmnRemote.isCursed()); + assertFalse(s_rmnRemote.isCursed(randSubject)); + + s_rmnRemote.curse(LEGACY_CURSE_SUBJECT); + assertTrue(s_rmnRemote.isCursed()); + assertFalse(s_rmnRemote.isCursed(randSubject)); // legacy curse doesn't affect specific subjects + + s_rmnRemote.uncurse(LEGACY_CURSE_SUBJECT); + assertFalse(s_rmnRemote.isCursed()); + assertFalse(s_rmnRemote.isCursed(randSubject)); + } +} diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol new file mode 100644 index 0000000000..01bd5bd1b6 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {IRMNV2} from "../../interfaces/IRMNV2.sol"; +import {Internal} from "../../libraries/Internal.sol"; +import {RMNRemote, RMN_V1_6_ANY2EVM_REPORT} from "../../rmn/RMNRemote.sol"; +import {BaseTest} from "../BaseTest.t.sol"; +import {Vm} from "forge-std/Vm.sol"; + +import "forge-std/console.sol"; + +contract RMNRemoteSetup is BaseTest { + RMNRemote public s_rmnRemote; + address public OFF_RAMP_ADDRESS; + + RMNRemote.Signer[] public s_signers; + Vm.Wallet[] public s_signerWallets; + + Internal.MerkleRoot[] s_merkleRoots; + IRMNV2.Signature[] s_signatures; + uint256 internal s_v; + + bytes16 internal constant curseSubj1 = bytes16(keccak256("subject 1")); + bytes16 internal constant curseSubj2 = bytes16(keccak256("subject 2")); + bytes16[] internal s_curseSubjects; + + function setUp() public virtual override { + super.setUp(); + s_rmnRemote = new RMNRemote(1); + OFF_RAMP_ADDRESS = makeAddr("OFF RAMP"); + s_curseSubjects = [curseSubj1, curseSubj2]; + + _setupSigners(10); + } + + /// @notice sets up a list of signers with strictly increasing onchain public keys + /// @dev signers do not have to be in order when configured, but they do when generating signatures + /// rather than sort signers every time, we do it once here and store the sorted list + function _setupSigners(uint256 numSigners) internal { + // remove any existing config + while (s_signerWallets.length > 0) { + s_signerWallets.pop(); + } + while (s_signers.length > 0) { + s_signers.pop(); + } + + for (uint256 i = 0; i < numSigners; i++) { + s_signerWallets.push(vm.createWallet(_randomNum())); + } + + _sort(s_signerWallets); + + for (uint256 i = 0; i < numSigners; i++) { + s_signers.push(RMNRemote.Signer({onchainPublicKey: s_signerWallets[i].addr, nodeIndex: uint64(i)})); + } + } + + /// @notice generates n merkleRoots and matching valid signatures and populates them into + /// the shared storage vars + function _generatePayloadAndSigs(uint256 numUpdates, uint256 numSigs) internal { + require(numUpdates > 0, "need at least 1 dest lane update"); + require(numSigs <= s_signerWallets.length, "cannot generate more sigs than signers"); + + // remove any existing merkleRoots and sigs + while (s_merkleRoots.length > 0) { + s_merkleRoots.pop(); + } + while (s_signatures.length > 0) { + s_signatures.pop(); + } + s_v = 0; + + for (uint256 i = 0; i < numUpdates; i++) { + s_merkleRoots.push(_generateRandomDestLaneUpdate()); + } + + for (uint256 i = 0; i < numSigs; i++) { + (uint8 v, IRMNV2.Signature memory sig) = _signDestLaneUpdate(s_merkleRoots, s_signerWallets[i]); + s_signatures.push(sig); + if (v == 28) { + s_v += 1 << i; + } + } + } + + /// @notice generates a random dest lane update + function _generateRandomDestLaneUpdate() private returns (Internal.MerkleRoot memory) { + uint64 minSeqNum = uint32(_randomNum()); + uint64 maxSeqNum = minSeqNum + 100; + return Internal.MerkleRoot({ + sourceChainSelector: uint64(_randomNum()), + onRampAddress: abi.encode(_randomAddress()), + minSeqNr: minSeqNum, + maxSeqNr: maxSeqNum, + merkleRoot: _randomBytes32() + }); + } + + /// @notice signs the provided payload with the provided wallet + /// @return sigV v, either 27 of 28 + /// @return sig the signature + function _signDestLaneUpdate( + Internal.MerkleRoot[] memory merkleRoots, + Vm.Wallet memory wallet + ) private returns (uint8 sigV, IRMNV2.Signature memory) { + (, RMNRemote.Config memory config) = s_rmnRemote.getVersionedConfig(); + bytes32 digest = keccak256( + abi.encode( + RMN_V1_6_ANY2EVM_REPORT, + RMNRemote.Report({ + destChainId: block.chainid, + destChainSelector: s_rmnRemote.getLocalChainSelector(), + rmnRemoteContractAddress: address(s_rmnRemote), + offrampAddress: OFF_RAMP_ADDRESS, + rmnHomeContractConfigDigest: config.rmnHomeContractConfigDigest, + merkleRoots: merkleRoots + }) + ) + ); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(wallet, digest); + return (v, IRMNV2.Signature({r: r, s: s})); + } + + /// @notice bubble sort on a storage array of wallets + function _sort(Vm.Wallet[] storage wallets) private { + bool swapped; + for (uint256 i = 1; i < wallets.length; i++) { + swapped = false; + for (uint256 j = 0; j < wallets.length - i; j++) { + Vm.Wallet memory next = wallets[j + 1]; + Vm.Wallet memory actual = wallets[j]; + if (next.addr < actual.addr) { + wallets[j] = next; + wallets[j + 1] = actual; + swapped = true; + } + } + if (!swapped) { + return; + } + } + } +} diff --git a/contracts/src/v0.8/shared/enumerable/EnumerableSetWithBytes16.sol b/contracts/src/v0.8/shared/enumerable/EnumerableSetWithBytes16.sol new file mode 100644 index 0000000000..b78096773a --- /dev/null +++ b/contracts/src/v0.8/shared/enumerable/EnumerableSetWithBytes16.sol @@ -0,0 +1,454 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol) +// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. + +/// @dev this is a fully copy of OZ's EnumerableSet library with the addition of a Bytes16Set + +pragma solidity ^0.8.0; + +/** + * @dev Library for managing + * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive + * types. + * + * Sets have the following properties: + * + * - Elements are added, removed, and checked for existence in constant time + * (O(1)). + * - Elements are enumerated in O(n). No guarantees are made on the ordering. + * + * ```solidity + * contract Example { + * // Add the library methods + * using EnumerableSet for EnumerableSet.AddressSet; + * + * // Declare a set state variable + * EnumerableSet.AddressSet private mySet; + * } + * ``` + * + * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) + * and `uint256` (`UintSet`) are supported. + * + * [WARNING] + * ==== + * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure + * unusable. + * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. + * + * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an + * array of EnumerableSet. + * ==== + */ +library EnumerableSet { + // To implement this library for multiple types with as little code + // repetition as possible, we write it in terms of a generic Set type with + // bytes32 values. + // The Set implementation uses private functions, and user-facing + // implementations (such as AddressSet) are just wrappers around the + // underlying Set. + // This means that we can only create new EnumerableSets for types that fit + // in bytes32. + + struct Set { + // Storage of set values + bytes32[] _values; + // Position is the index of the value in the `values` array plus 1. + // Position 0 is used to mean a value is not in the set. + mapping(bytes32 value => uint256) _positions; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function _add(Set storage set, bytes32 value) private returns (bool) { + if (!_contains(set, value)) { + set._values.push(value); + // The value is stored at length-1, but we add 1 to all indexes + // and use 0 as a sentinel value + set._positions[value] = set._values.length; + return true; + } else { + return false; + } + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function _remove(Set storage set, bytes32 value) private returns (bool) { + // We cache the value's position to prevent multiple reads from the same storage slot + uint256 position = set._positions[value]; + + if (position != 0) { + // Equivalent to contains(set, value) + // To delete an element from the _values array in O(1), we swap the element to delete with the last one in + // the array, and then remove the last element (sometimes called as 'swap and pop'). + // This modifies the order of the array, as noted in {at}. + + uint256 valueIndex = position - 1; + uint256 lastIndex = set._values.length - 1; + + if (valueIndex != lastIndex) { + bytes32 lastValue = set._values[lastIndex]; + + // Move the lastValue to the index where the value to delete is + set._values[valueIndex] = lastValue; + // Update the tracked position of the lastValue (that was just moved) + set._positions[lastValue] = position; + } + + // Delete the slot where the moved value was stored + set._values.pop(); + + // Delete the tracked position for the deleted slot + delete set._positions[value]; + + return true; + } else { + return false; + } + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function _contains(Set storage set, bytes32 value) private view returns (bool) { + return set._positions[value] != 0; + } + + /** + * @dev Returns the number of values on the set. O(1). + */ + function _length(Set storage set) private view returns (uint256) { + return set._values.length; + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function _at(Set storage set, uint256 index) private view returns (bytes32) { + return set._values[index]; + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function _values(Set storage set) private view returns (bytes32[] memory) { + return set._values; + } + + // Bytes32Set + + struct Bytes32Set { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { + return _add(set._inner, value); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { + return _remove(set._inner, value); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { + return _contains(set._inner, value); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(Bytes32Set storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { + return _at(set._inner, index); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { + bytes32[] memory store = _values(set._inner); + bytes32[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // AddressSet + + struct AddressSet { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(AddressSet storage set, address value) internal returns (bool) { + return _add(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(AddressSet storage set, address value) internal returns (bool) { + return _remove(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(AddressSet storage set, address value) internal view returns (bool) { + return _contains(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(AddressSet storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(AddressSet storage set, uint256 index) internal view returns (address) { + return address(uint160(uint256(_at(set._inner, index)))); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(AddressSet storage set) internal view returns (address[] memory) { + bytes32[] memory store = _values(set._inner); + address[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // UintSet + + struct UintSet { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(UintSet storage set, uint256 value) internal returns (bool) { + return _add(set._inner, bytes32(value)); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(UintSet storage set, uint256 value) internal returns (bool) { + return _remove(set._inner, bytes32(value)); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(UintSet storage set, uint256 value) internal view returns (bool) { + return _contains(set._inner, bytes32(value)); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(UintSet storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(UintSet storage set, uint256 index) internal view returns (uint256) { + return uint256(_at(set._inner, index)); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(UintSet storage set) internal view returns (uint256[] memory) { + bytes32[] memory store = _values(set._inner); + uint256[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // Bytes16Set + + struct Bytes16Set { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(Bytes16Set storage set, bytes16 value) internal returns (bool) { + return _add(set._inner, bytes32(value)); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(Bytes16Set storage set, bytes16 value) internal returns (bool) { + return _remove(set._inner, bytes32(value)); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(Bytes16Set storage set, bytes16 value) internal view returns (bool) { + return _contains(set._inner, bytes32(value)); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(Bytes16Set storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(Bytes16Set storage set, uint256 index) internal view returns (bytes16) { + return bytes16(_at(set._inner, index)); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(Bytes16Set storage set) internal view returns (bytes16[] memory) { + bytes32[] memory store = _values(set._inner); + bytes16[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } +} diff --git a/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go b/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go index 60daca1c57..6331211b4b 100644 --- a/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go +++ b/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go @@ -42,11 +42,11 @@ type RMNRemoteReport struct { RmnRemoteContractAddress common.Address OfframpAddress common.Address RmnHomeContractConfigDigest [32]byte - DestLaneUpdates []InternalMerkleRoot + MerkleRoots []InternalMerkleRoot } var EncodingUtilsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DoNotDeploy\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rmnReportVersion\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnRemoteContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"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\":\"destLaneUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structRMNRemote.Report\",\"name\":\"rmnReport\",\"type\":\"tuple\"}],\"name\":\"_rmnReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DoNotDeploy\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rmnReportVersion\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnRemoteContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"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[]\"}],\"internalType\":\"structRMNRemote.Report\",\"name\":\"rmnReport\",\"type\":\"tuple\"}],\"name\":\"_rmnReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", Bin: "0x608060405234801561001057600080fd5b50604051636f1e4f5f60e01b815260040160405180910390fdfe", } diff --git a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go index 127de4a3c8..efdc46ebf2 100644 --- a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go +++ b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go @@ -89,6 +89,7 @@ type OffRampCommitReport struct { PriceUpdates InternalPriceUpdates MerkleRoots []InternalMerkleRoot RmnSignatures []IRMNV2Signature + RmnRawVs *big.Int } type OffRampSourceChainConfig struct { @@ -99,8 +100,8 @@ type OffRampSourceChainConfig struct { } var CCIPReaderTesterMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPSendRequested\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"setDestChainSeqNr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506113d9806100206000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c80634cf66e36146100725780639041be3d14610087578063bfc9b789146100b7578063c1a5a355146100ca578063e4d0223414610106578063e83eabba14610119578063e9d68a8e1461012c575b600080fd5b610085610080366004610571565b61014c565b005b61009a6100953660046105ef565b6101a1565b6040516001600160401b0390911681526020015b60405180910390f35b6100856100c536600461087f565b6101d0565b6100856100d8366004610a09565b6001600160401b03918216600090815260016020526040902080546001600160401b03191691909216179055565b610085610114366004610bca565b61020a565b610085610127366004610cf8565b61024f565b61013f61013a3660046105ef565b6102db565b6040516100ae9190610df9565b82846001600160401b0316866001600160401b03167f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df28585604051610192929190610e51565b60405180910390a45050505050565b6001600160401b03808216600090815260016020819052604082205491926101ca921690610e88565b92915050565b7f23bc80217a08968cec0790cd045b396fa7eea0a21af469e603329940b883d86d816040516101ff9190611001565b60405180910390a150565b816001600160401b03167fe07a589f12eccf1bc0f7421666687a6986a0c8dbbdc877d1af562a97ba60ecfd826040516102439190611180565b60405180910390a25050565b6001600160401b0380831660009081526020818152604091829020845181549286015193860151909416600160a81b02600160a81b600160e81b0319931515600160a01b026001600160a81b03199093166001600160a01b03909516949094179190911791909116919091178155606082015182919060018201906102d4908261130d565b5050505050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b038781168452838352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161036690611282565b80601f016020809104026020016040519081016040528092919081815260200182805461039290611282565b80156103df5780601f106103b4576101008083540402835291602001916103df565b820191906000526020600020905b8154815290600101906020018083116103c257829003601f168201915b5050505050815250509050919050565b80356001600160401b038116811461040657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104435761044361040b565b60405290565b60405160a081016001600160401b03811182821017156104435761044361040b565b604051606081016001600160401b03811182821017156104435761044361040b565b60405161010081016001600160401b03811182821017156104435761044361040b565b604051608081016001600160401b03811182821017156104435761044361040b565b604051601f8201601f191681016001600160401b03811182821017156104fa576104fa61040b565b604052919050565b600082601f83011261051357600080fd5b81356001600160401b0381111561052c5761052c61040b565b61053f601f8201601f19166020016104d2565b81815284602083860101111561055457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561058957600080fd5b610592866103ef565b94506105a0602087016103ef565b9350604086013592506060860135600481106105bb57600080fd5b915060808601356001600160401b038111156105d657600080fd5b6105e288828901610502565b9150509295509295909350565b60006020828403121561060157600080fd5b61060a826103ef565b9392505050565b60006001600160401b0382111561062a5761062a61040b565b5060051b60200190565b6001600160a01b038116811461064957600080fd5b50565b803561040681610634565b80356001600160e01b038116811461040657600080fd5b600082601f83011261067f57600080fd5b8135602061069461068f83610611565b6104d2565b82815260069290921b840181019181810190868411156106b357600080fd5b8286015b8481101561070057604081890312156106d05760008081fd5b6106d8610421565b6106e1826103ef565b81526106ee858301610657565b818601528352918301916040016106b7565b509695505050505050565b600082601f83011261071c57600080fd5b8135602061072c61068f83610611565b82815260059290921b8401810191818101908684111561074b57600080fd5b8286015b848110156107005780356001600160401b038082111561076f5760008081fd5b9088019060a0828b03601f19018113156107895760008081fd5b610791610449565b61079c8885016103ef565b8152604080850135848111156107b25760008081fd5b6107c08e8b83890101610502565b8a84015250606093506107d48486016103ef565b9082015260806107e58582016103ef565b9382019390935292013590820152835291830191830161074f565b600082601f83011261081157600080fd5b8135602061082161068f83610611565b82815260069290921b8401810191818101908684111561084057600080fd5b8286015b84811015610700576040818903121561085d5760008081fd5b610865610421565b813581528482013585820152835291830191604001610844565b6000602080838503121561089257600080fd5b82356001600160401b03808211156108a957600080fd5b90840190606082870312156108bd57600080fd5b6108c561046b565b8235828111156108d457600080fd5b830160408189038113156108e757600080fd5b6108ef610421565b8235858111156108fe57600080fd5b8301601f81018b1361090f57600080fd5b803561091d61068f82610611565b81815260069190911b8201890190898101908d83111561093c57600080fd5b928a01925b8284101561098c5785848f0312156109595760008081fd5b610961610421565b843561096c81610634565b8152610979858d01610657565b818d0152825292850192908a0190610941565b8452505050828701359150848211156109a457600080fd5b6109b08a83850161066e565b818801528352505082840135828111156109c957600080fd5b6109d58882860161070b565b858301525060408301359350818411156109ee57600080fd5b6109fa87858501610800565b60408201529695505050505050565b60008060408385031215610a1c57600080fd5b610a25836103ef565b9150610a33602084016103ef565b90509250929050565b600060a08284031215610a4e57600080fd5b610a56610449565b905081358152610a68602083016103ef565b6020820152610a79604083016103ef565b6040820152610a8a606083016103ef565b6060820152610a9b608083016103ef565b608082015292915050565b600082601f830112610ab757600080fd5b81356020610ac761068f83610611565b82815260059290921b84018101918181019086841115610ae657600080fd5b8286015b848110156107005780356001600160401b0380821115610b0a5760008081fd5b9088019060a0828b03601f1901811315610b245760008081fd5b610b2c610449565b610b3788850161064c565b815260408085013584811115610b4d5760008081fd5b610b5b8e8b83890101610502565b8a8401525060608086013585811115610b745760008081fd5b610b828f8c838a0101610502565b83850152506080915081860135818401525082850135925083831115610ba85760008081fd5b610bb68d8a85880101610502565b908201528652505050918301918301610aea565b60008060408385031215610bdd57600080fd5b610be6836103ef565b915060208301356001600160401b0380821115610c0257600080fd5b908401906101808287031215610c1757600080fd5b610c1f61048d565b610c298784610a3c565b8152610c3760a0840161064c565b602082015260c083013582811115610c4e57600080fd5b610c5a88828601610502565b60408301525060e083013582811115610c7257600080fd5b610c7e88828601610502565b60608301525061010083013582811115610c9757600080fd5b610ca388828601610502565b608083015250610cb6610120840161064c565b60a082015261014083013560c082015261016083013582811115610cd957600080fd5b610ce588828601610aa6565b60e0830152508093505050509250929050565b60008060408385031215610d0b57600080fd5b610d14836103ef565b915060208301356001600160401b0380821115610d3057600080fd5b9084019060808287031215610d4457600080fd5b610d4c6104b0565b8235610d5781610634565b815260208301358015158114610d6c57600080fd5b6020820152610d7d604084016103ef565b6040820152606083013582811115610d9457600080fd5b610da088828601610502565b6060830152508093505050509250929050565b6000815180845260005b81811015610dd957602081850181015186830182015201610dbd565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282516001600160a01b03168282015282015115156040808301919091528201516001600160401b0316606080830191909152820151608080830152600090610e4960a0840182610db3565b949350505050565b600060048410610e7157634e487b7160e01b600052602160045260246000fd5b83825260406020830152610e496040830184610db3565b6001600160401b03818116838216019080821115610eb657634e487b7160e01b600052601160045260246000fd5b5092915050565b6001600160a01b03169052565b60008151808452602080850194506020840160005b83811015610f1857815180516001600160401b031688528301516001600160e01b03168388015260409096019590820190600101610edf565b509495945050505050565b600082825180855260208086019550808260051b84010181860160005b84811015610fb857858303601f19018952815180516001600160401b0390811685528582015160a08787018190529190610f7c83880182610db3565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101610f40565b5090979650505050505050565b60008151808452602080850194506020840160005b83811015610f18578151805188528301518388015260409096019590820190600101610fda565b602080825282516060838301528051604060808501819052815160c086018190526000949392840191859160e08801905b8084101561106d57845180516001600160a01b031683528701516001600160e01b031687830152938601936001939093019290820190611032565b5093850151878503607f190160a0890152936110898186610eca565b945050505050818501519150601f19808583030160408601526110ac8284610f23565b92506040860151915080858403016060860152506110ca8282610fc5565b95945050505050565b600082825180855260208086019550808260051b84010181860160005b84811015610fb857858303601f19018952815180516001600160a01b031684528481015160a08686018190529061112982870182610db3565b915050604080830151868303828801526111438382610db3565b9250505060608083015181870152506080808301519250858203818701525061116c8183610db3565b9a86019a94505050908301906001016110f0565b602081526111cd602082018351805182526020808201516001600160401b039081169184019190915260408083015182169084015260608083015182169084015260809182015116910152565b600060208301516111e160c0840182610ebd565b5060408301516101808060e08501526111fe6101a0850183610db3565b91506060850151601f19808685030161010087015261121d8483610db3565b935060808701519150808685030161012087015261123b8483610db3565b935060a08701519150611252610140870183610ebd565b60c087015161016087015260e087015191508086850301838701525061127883826110d3565b9695505050505050565b600181811c9082168061129657607f821691505b6020821081036112b657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611308576000816000526020600020601f850160051c810160208610156112e55750805b601f850160051c820191505b81811015611304578281556001016112f1565b5050505b505050565b81516001600160401b038111156113265761132661040b565b61133a816113348454611282565b846112bc565b602080601f83116001811461136f57600084156113575750858301515b600019600386901b1c1916600185901b178555611304565b600085815260208120601f198616915b8281101561139e5788860151825594840194600190910190840161137f565b50858210156113bc5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPSendRequested\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"setDestChainSeqNr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506113d3806100206000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063198b821c146100725780634cf66e36146100875780639041be3d1461009a578063c1a5a355146100ca578063e4d0223414610106578063e83eabba14610119578063e9d68a8e1461012c575b600080fd5b6100856100803660046107bd565b61014c565b005b610085610095366004610954565b610186565b6100ad6100a83660046109d2565b6101db565b6040516001600160401b0390911681526020015b60405180910390f35b6100856100d83660046109f4565b6001600160401b03918216600090815260016020526040902080546001600160401b03191691909216179055565b610085610114366004610bb5565b61020a565b610085610127366004610ce3565b61024f565b61013f61013a3660046109d2565b6102db565b6040516100c19190610de4565b7f062172a2ae1a84d7c8d18965d6267b71d579aeca033bbd2e0548947798c3d4628160405161017b9190610f80565b60405180910390a150565b82846001600160401b0316866001600160401b03167f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df285856040516101cc929190611061565b60405180910390a45050505050565b6001600160401b0380821660009081526001602081905260408220549192610204921690611098565b92915050565b816001600160401b03167fe07a589f12eccf1bc0f7421666687a6986a0c8dbbdc877d1af562a97ba60ecfd82604051610243919061117a565b60405180910390a25050565b6001600160401b0380831660009081526020818152604091829020845181549286015193860151909416600160a81b02600160a81b600160e81b0319931515600160a01b026001600160a81b03199093166001600160a01b03909516949094179190911791909116919091178155606082015182919060018201906102d49082611307565b5050505050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b038781168452838352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916103669061127c565b80601f01602080910402602001604051908101604052809291908181526020018280546103929061127c565b80156103df5780601f106103b4576101008083540402835291602001916103df565b820191906000526020600020905b8154815290600101906020018083116103c257829003601f168201915b5050505050815250509050919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610427576104276103ef565b60405290565b60405160a081016001600160401b0381118282101715610427576104276103ef565b604051608081016001600160401b0381118282101715610427576104276103ef565b60405161010081016001600160401b0381118282101715610427576104276103ef565b604051601f8201601f191681016001600160401b03811182821017156104bc576104bc6103ef565b604052919050565b60006001600160401b038211156104dd576104dd6103ef565b5060051b60200190565b6001600160a01b03811681146104fc57600080fd5b50565b803561050a816104e7565b919050565b80356001600160e01b038116811461050a57600080fd5b80356001600160401b038116811461050a57600080fd5b600082601f83011261054e57600080fd5b8135602061056361055e836104c4565b610494565b82815260069290921b8401810191818101908684111561058257600080fd5b8286015b848110156105cf576040818903121561059f5760008081fd5b6105a7610405565b6105b082610526565b81526105bd85830161050f565b81860152835291830191604001610586565b509695505050505050565b600082601f8301126105eb57600080fd5b81356001600160401b03811115610604576106046103ef565b610617601f8201601f1916602001610494565b81815284602083860101111561062c57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261065a57600080fd5b8135602061066a61055e836104c4565b82815260059290921b8401810191818101908684111561068957600080fd5b8286015b848110156105cf5780356001600160401b03808211156106ad5760008081fd5b9088019060a0828b03601f19018113156106c75760008081fd5b6106cf61042d565b6106da888501610526565b8152604080850135848111156106f05760008081fd5b6106fe8e8b838901016105da565b8a8401525060609350610712848601610526565b908201526080610723858201610526565b9382019390935292013590820152835291830191830161068d565b600082601f83011261074f57600080fd5b8135602061075f61055e836104c4565b82815260069290921b8401810191818101908684111561077e57600080fd5b8286015b848110156105cf576040818903121561079b5760008081fd5b6107a3610405565b813581528482013585820152835291830191604001610782565b600060208083850312156107d057600080fd5b82356001600160401b03808211156107e757600080fd5b90840190608082870312156107fb57600080fd5b61080361044f565b82358281111561081257600080fd5b8301604081890381131561082557600080fd5b61082d610405565b82358581111561083c57600080fd5b8301601f81018b1361084d57600080fd5b803561085b61055e826104c4565b81815260069190911b8201890190898101908d83111561087a57600080fd5b928a01925b828410156108ca5785848f0312156108975760008081fd5b61089f610405565b84356108aa816104e7565b81526108b7858d0161050f565b818d0152825292850192908a019061087f565b8452505050828701359150848211156108e257600080fd5b6108ee8a83850161053d565b8188015283525050828401358281111561090757600080fd5b61091388828601610649565b8583015250604083013593508184111561092c57600080fd5b6109388785850161073e565b6040820152606083013560608201528094505050505092915050565b600080600080600060a0868803121561096c57600080fd5b61097586610526565b945061098360208701610526565b93506040860135925060608601356004811061099e57600080fd5b915060808601356001600160401b038111156109b957600080fd5b6109c5888289016105da565b9150509295509295909350565b6000602082840312156109e457600080fd5b6109ed82610526565b9392505050565b60008060408385031215610a0757600080fd5b610a1083610526565b9150610a1e60208401610526565b90509250929050565b600060a08284031215610a3957600080fd5b610a4161042d565b905081358152610a5360208301610526565b6020820152610a6460408301610526565b6040820152610a7560608301610526565b6060820152610a8660808301610526565b608082015292915050565b600082601f830112610aa257600080fd5b81356020610ab261055e836104c4565b82815260059290921b84018101918181019086841115610ad157600080fd5b8286015b848110156105cf5780356001600160401b0380821115610af55760008081fd5b9088019060a0828b03601f1901811315610b0f5760008081fd5b610b1761042d565b610b228885016104ff565b815260408085013584811115610b385760008081fd5b610b468e8b838901016105da565b8a8401525060608086013585811115610b5f5760008081fd5b610b6d8f8c838a01016105da565b83850152506080915081860135818401525082850135925083831115610b935760008081fd5b610ba18d8a858801016105da565b908201528652505050918301918301610ad5565b60008060408385031215610bc857600080fd5b610bd183610526565b915060208301356001600160401b0380821115610bed57600080fd5b908401906101808287031215610c0257600080fd5b610c0a610471565b610c148784610a27565b8152610c2260a084016104ff565b602082015260c083013582811115610c3957600080fd5b610c45888286016105da565b60408301525060e083013582811115610c5d57600080fd5b610c69888286016105da565b60608301525061010083013582811115610c8257600080fd5b610c8e888286016105da565b608083015250610ca161012084016104ff565b60a082015261014083013560c082015261016083013582811115610cc457600080fd5b610cd088828601610a91565b60e0830152508093505050509250929050565b60008060408385031215610cf657600080fd5b610cff83610526565b915060208301356001600160401b0380821115610d1b57600080fd5b9084019060808287031215610d2f57600080fd5b610d3761044f565b8235610d42816104e7565b815260208301358015158114610d5757600080fd5b6020820152610d6860408401610526565b6040820152606083013582811115610d7f57600080fd5b610d8b888286016105da565b6060830152508093505050509250929050565b6000815180845260005b81811015610dc457602081850181015186830182015201610da8565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282516001600160a01b03168282015282015115156040808301919091528201516001600160401b0316606080830191909152820151608080830152600090610e3460a0840182610d9e565b949350505050565b6001600160a01b03169052565b60008151808452602080850194506020840160005b83811015610e9757815180516001600160401b031688528301516001600160e01b03168388015260409096019590820190600101610e5e565b509495945050505050565b600082825180855260208086019550808260051b84010181860160005b84811015610f3757858303601f19018952815180516001600160401b0390811685528582015160a08787018190529190610efb83880182610d9e565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101610ebf565b5090979650505050505050565b60008151808452602080850194506020840160005b83811015610e97578151805188528301518388015260409096019590820190600101610f59565b602080825282516080838301528051604060a08501819052815160e08601819052600094939284019185916101008801905b80841015610fed57845180516001600160a01b031683528701516001600160e01b031687830152938601936001939093019290820190610fb2565b5093850151878503609f190160c0890152936110098186610e49565b945050505050818501519150601f198085830301604086015261102c8284610ea2565b925060408601519150808584030160608601525061104a8282610f44565b915050606084015160808401528091505092915050565b60006004841061108157634e487b7160e01b600052602160045260246000fd5b83825260406020830152610e346040830184610d9e565b6001600160401b038181168382160190808211156110c657634e487b7160e01b600052601160045260246000fd5b5092915050565b600082825180855260208086019550808260051b84010181860160005b84811015610f3757858303601f19018952815180516001600160a01b031684528481015160a08686018190529061112382870182610d9e565b9150506040808301518683038288015261113d8382610d9e565b925050506060808301518187015250608080830151925085820381870152506111668183610d9e565b9a86019a94505050908301906001016110ea565b602081526111c7602082018351805182526020808201516001600160401b039081169184019190915260408083015182169084015260608083015182169084015260809182015116910152565b600060208301516111db60c0840182610e3c565b5060408301516101808060e08501526111f86101a0850183610d9e565b91506060850151601f1980868503016101008701526112178483610d9e565b93506080870151915080868503016101208701526112358483610d9e565b935060a0870151915061124c610140870183610e3c565b60c087015161016087015260e087015191508086850301838701525061127283826110cd565b9695505050505050565b600181811c9082168061129057607f821691505b6020821081036112b057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611302576000816000526020600020601f850160051c810160208610156112df5750805b601f850160051c820191505b818110156112fe578281556001016112eb565b5050505b505050565b81516001600160401b03811115611320576113206103ef565b6113348161132e845461127c565b846112b6565b602080601f83116001811461136957600084156113515750858301515b600019600386901b1c1916600185901b1785556112fe565b600085815260208120601f198616915b8281101561139857888601518255948401946001909101908401611379565b50858210156113b65787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", } var CCIPReaderTesterABI = CCIPReaderTesterMetaData.ABI @@ -754,7 +755,7 @@ func (CCIPReaderTesterCCIPSendRequested) Topic() common.Hash { } func (CCIPReaderTesterCommitReportAccepted) Topic() common.Hash { - return common.HexToHash("0x23bc80217a08968cec0790cd045b396fa7eea0a21af469e603329940b883d86d") + return common.HexToHash("0x062172a2ae1a84d7c8d18965d6267b71d579aeca033bbd2e0548947798c3d462") } func (CCIPReaderTesterExecutionStateChanged) Topic() common.Hash { diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 5b063866b4..9ef94b601b 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -155,7 +155,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"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\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"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\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"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\"}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620067b2380380620067b2833981016040819052620000359162000806565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000b8d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005ba57600082828151811062000391576200039162000943565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526006602052604090206060830151600182018054620004269062000959565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d8282620009ea565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005a290859062000ab6565b60405180910390a25050505080600101905062000370565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620005f957620005f9620005be565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200062a576200062a620005be565b604052919050565b80516001600160401b03811681146200064a57600080fd5b919050565b6001600160a01b03811681146200066557600080fd5b50565b6000601f83601f8401126200067c57600080fd5b825160206001600160401b03808311156200069b576200069b620005be565b8260051b620006ac838201620005ff565b9384528681018301938381019089861115620006c757600080fd5b84890192505b85831015620007f957825184811115620006e75760008081fd5b89016080601f19828d038101821315620007015760008081fd5b6200070b620005d4565b888401516200071a816200064f565b815260406200072b85820162000632565b8a8301526060808601518015158114620007455760008081fd5b838301529385015193898511156200075d5760008081fd5b84860195508f603f8701126200077557600094508485fd5b8a8601519450898511156200078e576200078e620005be565b6200079f8b858f88011601620005ff565b93508484528f82868801011115620007b75760008081fd5b60005b85811015620007d7578681018301518582018d01528b01620007ba565b5060009484018b019490945250918201528352509184019190840190620006cd565b9998505050505050505050565b60008060008385036101008112156200081e57600080fd5b60808112156200082d57600080fd5b62000837620005d4565b620008428662000632565b8152602086015162000854816200064f565b6020820152604086015162000869816200064f565b604082015260608601516200087e816200064f565b606082810191909152909450607f19820112156200089b57600080fd5b50604051606081016001600160401b038082118383101715620008c257620008c2620005be565b8160405260808701519150620008d8826200064f565b90825260a08601519063ffffffff82168214620008f457600080fd5b81602084015260c087015191506200090c826200064f565b6040830182905260e0870151929450808311156200092957600080fd5b5050620009398682870162000668565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806200096e57607f821691505b6020821081036200098f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009e5576000816000526020600020601f850160051c81016020861015620009c05750805b601f850160051c820191505b81811015620009e157828155600101620009cc565b5050505b505050565b81516001600160401b0381111562000a065762000a06620005be565b62000a1e8162000a17845462000959565b8462000995565b602080601f83116001811462000a56576000841562000a3d5750858301515b600019600386901b1c1916600185901b178555620009e1565b600085815260208120601f198616915b8281101562000a875788860151825594840194600190910190840162000a66565b508582101562000aa65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b0b8162000959565b8060a089015260c0600183166000811462000b2f576001811462000b4c5762000b7e565b60ff19841660c08b015260c083151560051b8b0101945062000b7e565b85600052602060002060005b8481101562000b755781548c820185015290880190890162000b58565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615baf62000c036000396000818161022c01526129ca0152600081816101fd0152612c8f0152600081816101ce01528181610552015281816106ff015261238b01526000818161019f01526125ca015260008181611abc0152611aef0152615baf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104bc578063f2fde38b146104dc578063f716f99f146104ef57600080fd5b8063c673e58414610458578063ccd37ba31461047857600080fd5b806379ba5097116100b257806379ba50971461042757806385572ffb1461042f5780638da5cb5b1461043d57600080fd5b80636f9e320f146103825780637437ff9f1461039557600080fd5b8063311cd513116101245780635e36480c116101095780635e36480c1461033c5780635e7bb0081461035c57806360987c201461036f57600080fd5b8063311cd5131461030e5780633f4b04aa1461032157600080fd5b806304666f9c1461015657806306285c691461016b578063181f5a77146102b25780632d04ab76146102fb575b600080fd5b610169610164366004613bb7565b610502565b005b61025c60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102a9919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102ee6040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102a99190613d25565b610169610309366004613dd5565b610516565b61016961031c366004613e87565b610a12565b6009546040516001600160401b0390911681526020016102a9565b61034f61034a366004613eda565b610a7b565b6040516102a99190613f37565b61016961036a3660046144a0565b610ad0565b61016961037d3660046146e4565b610d5f565b610169610390366004614778565b61103f565b6103f1604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102a9565b610169611050565b6101696101513660046147ca565b6000546040516001600160a01b0390911681526020016102a9565b61046b610466366004614815565b611101565b6040516102a99190614875565b6104ae6104863660046148ea565b6001600160401b03919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102a9565b6104cf6104ca366004614914565b61125f565b6040516102a9919061492f565b6101696104ea36600461497c565b61136b565b6101696104fd366004614a01565b61137c565b61050a6113be565b6105138161141a565b50565b600061052487890189614d56565b602081015151909150156105b6576020810151604080830151905162ccd5af60e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263ccd5af009261058592600401614f7e565b60006040518083038186803b15801561059d57600080fd5b505afa1580156105b1573d6000803e3d6000fd5b505050505b805151511515806105cc57508051602001515115155b156106985760095460208a0135906001600160401b0380831691161015610670576009805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106399291016150b2565b600060405180830381600087803b15801561065357600080fd5b505af1158015610667573d6000803e3d6000fd5b50505050610696565b81602001515160000361069657604051632261116760e01b815260040160405180910390fd5b505b60005b816020015151811015610953576000826020015182815181106106c0576106c0614fe0565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a91906150c5565b1561079857604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107a38261166d565b9050806001016040516107b6919061511c565b6040518091039020836020015180519060200120146107f35782602001518160010160405163b80d8fa960e01b815260040161078f92919061520f565b60408301518154600160a81b90046001600160401b039081169116141580610834575082606001516001600160401b031683604001516001600160401b0316115b1561087957825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161078f565b60808301518061089c5760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600860209081526040808320848452909152902054156108f45783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161078f565b606084015161090490600161524a565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600860209081526040808320948352939052919091204290555060010161069b565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e49261098b929091615271565b60405180910390a1610a0760008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506116b9915050565b505050505050505050565b610a52610a2182840184615296565b6040805160008082526020820190925290610a4c565b6060815260200190600190039081610a375790505b506119b2565b604080516000808252602082019092529050610a756001858585858660006116b9565b50505050565b6000610a89600160046152ca565b6002610a966080856152f3565b6001600160401b0316610aa99190615319565b610ab38585611a74565b901c166003811115610ac757610ac7613f0d565b90505b92915050565b610ad8611ab9565b815181518114610afb576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d4f576000848281518110610b1a57610b1a614fe0565b60200260200101519050600081602001515190506000858481518110610b4257610b42614fe0565b6020026020010151905080518214610b6d576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d40576000828281518110610b8c57610b8c614fe0565b6020026020010151600001519050600085602001518381518110610bb257610bb2614fe0565b6020026020010151905081600014610c06578060800151821015610c06578551815151604051633a98d46360e11b81526001600160401b03909216600483015260248201526044810183905260640161078f565b838381518110610c1857610c18614fe0565b602002602001015160200151518160a001515114610c6557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161078f565b60005b8160a0015151811015610d32576000858581518110610c8957610c89614fe0565b6020026020010151602001518281518110610ca657610ca6614fe0565b602002602001015163ffffffff16905080600014610d295760008360a001518381518110610cd657610cd6614fe0565b60200260200101516040015163ffffffff16905080821015610d27578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161078f565b505b50600101610c68565b505050806001019050610b70565b50505050806001019050610afe565b50610d5a83836119b2565b505050565b333014610d7f576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610dbc565b6040805180820190915260008082526020820152815260200190600190039081610d955790505b5060a08701515190915015610df257610def8660a001518760200151886060015189600001516020015189898989611b21565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e2d929101613d25565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f08576040516308d450a160e01b81526001600160a01b038216906308d450a190610e8e9085906004016153d1565b600060405180830381600087803b158015610ea857600080fd5b505af1925050508015610eb9575060015b610f08573d808015610ee7576040519150601f19603f3d011682016040523d82523d6000602084013e610eec565b606091505b50806040516309c2532560e01b815260040161078f9190613d25565b604088015151158015610f1d57506080880151155b80610f34575060608801516001600160a01b03163b155b80610f5b57506060880151610f59906001600160a01b03166385572ffb60e01b611cd2565b155b15610f6857505050611038565b87516020908101516001600160401b03166000908152600690915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610fc692899261138892916004016153e4565b6000604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261100d9190810190615420565b50915091508161103257806040516302a35ba360e21b815260040161078f9190613d25565b50505050505b5050505050565b6110476113be565b61051381611cee565b6001546001600160a01b031633146110aa5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161078f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6111446040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156111ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111cf575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561124f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611231575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916112eb906150e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611317906150e2565b801561124f5780601f106113395761010080835404028352916020019161124f565b820191906000526020600020905b81548152906001019060200180831161134757505050919092525091949350505050565b6113736113be565b61051381611dcd565b6113846113be565b60005b81518110156113ba576113b28282815181106113a5576113a5614fe0565b6020026020010151611e76565b600101611387565b5050565b6000546001600160a01b031633146114185760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161078f565b565b60005b81518110156113ba57600082828151811061143a5761143a614fe0565b60200260200101519050600081602001519050806001600160401b03166000036114775760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b031661149f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260066020526040902060608301516001820180546114cb906150e2565b905060000361152d57815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161156a565b8154600160a81b90046001600160401b031660011461156a57604051632105803760e11b81526001600160401b038416600482015260240161078f565b8051158061159f5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156115bd576040516342bcdf7f60e11b815260040160405180910390fd5b600182016115cb8282615505565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906116569085906155c4565b60405180910390a25050505080600101905061141d565b6001600160401b03811660009081526006602052604081208054600160a01b900460ff16610aca5760405163ed053c5960e01b81526001600160401b038416600482015260240161078f565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906117188760a4615612565b9050826060015115611760578451611731906020615319565b865161173e906020615319565b6117499060a0615612565b6117539190615612565b61175d9082615612565b90505b36811461178957604051638e1192e160e01b81526004810182905236602482015260440161078f565b50815181146117b85781516040516324f7d61360e21b815260048101919091526024810182905260440161078f565b6117c0611ab9565b60ff808a166000908152600360209081526040808320338452825280832081518083019092528054808616835293949193909284019161010090910416600281111561180e5761180e613f0d565b600281111561181f5761181f613f0d565b905250905060028160200151600281111561183c5761183c613f0d565b1480156118905750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff168154811061187857611878614fe0565b6000918252602090912001546001600160a01b031633145b6118ad57604051631b41e11d60e31b815260040160405180910390fd5b5081606001511561195d5760208201516118c8906001615625565b60ff168551146118eb576040516371253a2560e01b815260040160405180910390fd5b835185511461190d5760405163a75d88af60e01b815260040160405180910390fd5b6000878760405161191f92919061563e565b604051908190038120611936918b9060200161564e565b60405160208183030381529060405280519060200120905061195b8a828888886121a0565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b81516000036119d35760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a16565b6040805180820190915260008152606060208201528152602001906001900390816119ee5790505b50905060005b845181101561103857611a6c858281518110611a3a57611a3a614fe0565b602002602001015184611a6657858381518110611a5957611a59614fe0565b602002602001015161235d565b8361235d565b600101611a1c565b6001600160401b038216600090815260076020526040812081611a98608085615662565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461141857604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161078f565b606088516001600160401b03811115611b3c57611b3c6139d7565b604051908082528060200260200182016040528015611b8157816020015b6040805180820190915260008082526020820152815260200190600190039081611b5a5790505b509050811560005b8a51811015611cc45781611c2157848482818110611ba957611ba9614fe0565b9050602002016020810190611bbe9190615688565b63ffffffff1615611c2157848482818110611bdb57611bdb614fe0565b9050602002016020810190611bf09190615688565b8b8281518110611c0257611c02614fe0565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c9f8b8281518110611c3657611c36614fe0565b60200260200101518b8b8b8b8b87818110611c5357611c53614fe0565b9050602002810190611c6591906156a3565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612c5492505050565b838281518110611cb157611cb1614fe0565b6020908102919091010152600101611b89565b505098975050505050505050565b6000611cdd83612f34565b8015610ac75750610ac78383612f7f565b80516001600160a01b0316611d16576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b03821603611e255760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161078f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003611ea1576000604051631b3fab5160e11b815260040161078f91906156e9565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003611ef2576060840151600182018054911515620100000262ff000019909216919091179055611f2e565b6060840151600182015460ff6201000090910416151590151514611f2e576040516321fd80df60e21b815260ff8416600482015260240161078f565b60a084015180516101001015611f5a576001604051631b3fab5160e11b815260040161078f91906156e9565b8051600003611f7f576005604051631b3fab5160e11b815260040161078f91906156e9565b611fe58484600301805480602002602001604051908101604052809291908181526020018280548015611fdb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fbd575b5050505050613021565b846060015115612115576120538484600201805480602002602001604051908101604052809291908181526020018280548015611fdb576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611fbd575050505050613021565b60808501518051610100101561207f576002604051631b3fab5160e11b815260040161078f91906156e9565b604086015161208f906003615703565b60ff168151116120b5576003604051631b3fab5160e11b815260040161078f91906156e9565b8151815110156120db576001604051631b3fab5160e11b815260040161078f91906156e9565b805160018401805461ff00191661010060ff841602179055612106906002860190602084019061395d565b506121138582600161308a565b505b6121218482600261308a565b8051612136906003850190602084019061395d565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361218f9389939260028a0192919061571f565b60405180910390a1611038846131e5565b8251600090815b818110156123535760006001888684602081106121c6576121c6614fe0565b6121d391901a601b615625565b8985815181106121e5576121e5614fe0565b60200260200101518986815181106121ff576121ff614fe0565b60200260200101516040516000815260200160405260405161223d949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561225f573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156122c0576122c0613f0d565b60028111156122d1576122d1613f0d565b90525090506001816020015160028111156122ee576122ee613f0d565b1461230c57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561233657604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506121a7565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe91906150c5565b1561246f57801561242d57604051637edeb53960e11b81526001600160401b038316600482015260240161078f565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061247a8361166d565b6001018054612488906150e2565b80601f01602080910402602001604051908101604052809291908181526020018280546124b4906150e2565b80156125015780601f106124d657610100808354040283529160200191612501565b820191906000526020600020905b8154815290600101906020018083116124e457829003601f168201915b505050602088015151929350505060008190036125305760405162bf199760e01b815260040160405180910390fd5b8560400151518114612555576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561256f5761256f6139d7565b604051908082528060200260200182016040528015612598578160200160208202803683370190505b50905060005b8281101561273c576000886020015182815181106125be576125be614fe0565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146126355780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161078f565b866001600160401b03168160000151602001516001600160401b03161461268957805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161078f565b612716817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016126fb94939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061323c565b83838151811061272857612728614fe0565b60209081029190910101525060010161259e565b50600061275386838a606001518b60800151613344565b90508060000361278157604051633ee8bd3f60e11b81526001600160401b038716600482015260240161078f565b60005b83811015610a075760005a905060008a6020015183815181106127a9576127a9614fe0565b6020026020010151905060006127c78a836000015160600151610a7b565b905060008160038111156127dd576127dd613f0d565b14806127fa575060038160038111156127f8576127f8613f0d565b145b61285057815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612c4c565b6060891561292f578b858151811061286a5761286a614fe0565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661289888426152ca565b11905080806128b8575060038360038111156128b6576128b6613f0d565b145b6128e0576040516354e7e43160e11b81526001600160401b038d16600482015260240161078f565b8c86815181106128f2576128f2614fe0565b602002602001015160000151600014612929578c868151811061291757612917614fe0565b60209081029190910101515160808501525b5061299b565b600082600381111561294357612943613f0d565b1461299b57825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612c4c565b8251608001516001600160401b031615612a745760008260038111156129c3576129c3613f0d565b03612a74577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612a24939291906157d1565b6020604051808303816000875af1158015612a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6791906150c5565b612a745750505050612c4c565b60008d604001518681518110612a8c57612a8c614fe0565b6020026020010151905080518460a001515114612ad657835160600151604051631cfe6d8b60e01b81526001600160401b03808f166004830152909116602482015260440161078f565b612aea8c8560000151606001516001613381565b600080612af8868486613426565b91509150612b0f8e87600001516060015184613381565b8c15612b66576003826003811115612b2957612b29613f0d565b03612b66576000856003811115612b4257612b42613f0d565b14612b6657855151604051632b11b8d960e01b815261078f919083906004016157fd565b6002826003811115612b7a57612b7a613f0d565b14612bbf576003826003811115612b9357612b93613f0d565b14612bbf578d866000015160600151836040516349362d1f60e11b815260040161078f93929190615816565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612c1757612c17614fe0565b602002602001015186865a612c2c908f6152ca565b604051612c3c949392919061583b565b60405180910390a4505050505050505b600101612784565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfc9190615872565b90506001600160a01b0381161580612d2b5750612d296001600160a01b03821663aff2afbf60e01b611cd2565b155b15612d545760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161078f565b600080612d6c88858c6040015163ffffffff166134da565b915091506000806000612e1f6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612de9919061588f565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b179052878661138860846135bd565b92509250925082612e45578160405163e1cd550960e01b815260040161078f9190613d25565b8151602014612e74578151604051631e3be00960e21b815260206004820152602481019190915260440161078f565b600082806020019051810190612e8a919061595b565b9050866001600160a01b03168c6001600160a01b031614612f06576000612ebb8d8a612eb6868a6152ca565b6134da565b50905086811080612ed5575081612ed288836152ca565b14155b15612f045760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161078f565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000612f47826301ffc9a760e01b612f7f565b8015610aca5750612f78827fffffffff00000000000000000000000000000000000000000000000000000000612f7f565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d9150600051905082801561300a575060208210155b80156130165750600081115b979650505050505050565b60005b8151811015610d5a5760ff83166000908152600360205260408120835190919084908490811061305657613056614fe0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613024565b60005b8251811015610a755760008382815181106130aa576130aa614fe0565b60200260200101519050600060028111156130c7576130c7613f0d565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561310657613106613f0d565b14613127576004604051631b3fab5160e11b815260040161078f91906156e9565b6001600160a01b03811661314e5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561317457613174613f0d565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156131d1576131d1613f0d565b02179055509050505080600101905061308d565b60ff81166105135760ff8082166000908152600260205260409020600101546201000090041661322857604051631e8ed32560e21b815260040160405180910390fd5b6009805467ffffffffffffffff1916905550565b8151805160608085015190830151608080870151940151604051600095869588956132a095919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016132e39190615a15565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b600080613352858585613697565b6001600160401b038716600090815260086020908152604080832093835292905220549150505b949350505050565b600060026133906080856152f3565b6001600160401b03166133a39190615319565b905060006133b18585611a74565b9050816133c0600160046152ca565b901b1916818360038111156133d7576133d7613f0d565b6001600160401b03871660009081526007602052604081209190921b92909217918291613405608088615662565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061345390889088908890600401615aac565b600060405180830381600087803b15801561346d57600080fd5b505af192505050801561347e575060015b6134bd573d8080156134ac576040519150601f19603f3d011682016040523d82523d6000602084013e6134b1565b606091505b506003925090506134d2565b50506040805160208101909152600081526002905b935093915050565b600080600080600061353b8860405160240161350591906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052888861138860846135bd565b92509250925082613561578160405163e1cd550960e01b815260040161078f9190613d25565b6020825114613590578151604051631e3be00960e21b815260206004820152602481019190915260440161078f565b818060200190518101906135a4919061595b565b6135ae82886152ca565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156135df576135df6139d7565b6040519080825280601f01601f191660200182016040528015613609576020820181803683370190505b509150863b6136235763030ed58f60e21b60005260046000fd5b5a8581101561363d57632be8ca8b60e21b60005260046000fd5b859003604081048103871061365d576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156136805750835b808352806000602085013e50955095509592505050565b82518251600091908183036136bf57604051630469ac9960e21b815260040160405180910390fd5b61010182118015906136d357506101018111155b6136f0576040516309bde33960e01b815260040160405180910390fd5b6000198282010161010081111561371a576040516309bde33960e01b815260040160405180910390fd5b80600003613747578660008151811061373557613735614fe0565b60200260200101519350505050613915565b6000816001600160401b03811115613761576137616139d7565b60405190808252806020026020018201604052801561378a578160200160208202803683370190505b50905060008080805b858110156138b45760006001821b8b8116036137ee57888510156137d7578c5160018601958e9181106137c8576137c8614fe0565b60200260200101519050613810565b85516001850194879181106137c8576137c8614fe0565b8b5160018401938d91811061380557613805614fe0565b602002602001015190505b600089861015613840578d5160018701968f91811061383157613831614fe0565b60200260200101519050613862565b865160018601958891811061385757613857614fe0565b602002602001015190505b82851115613883576040516309bde33960e01b815260040160405180910390fd5b61388d828261391c565b87848151811061389f5761389f614fe0565b60209081029190910101525050600101613793565b5060018503821480156138c657508683145b80156138d157508581145b6138ee576040516309bde33960e01b815260040160405180910390fd5b83600186038151811061390357613903614fe0565b60200260200101519750505050505050505b9392505050565b60008183106139345761392f828461393a565b610ac7565b610ac783835b604080516001602082015290810183905260608101829052600090608001613326565b8280548282559060005260206000209081019282156139b2579160200282015b828111156139b257825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061397d565b506139be9291506139c2565b5090565b5b808211156139be57600081556001016139c3565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613a0f57613a0f6139d7565b60405290565b60405160a081016001600160401b0381118282101715613a0f57613a0f6139d7565b60405160c081016001600160401b0381118282101715613a0f57613a0f6139d7565b604080519081016001600160401b0381118282101715613a0f57613a0f6139d7565b604051606081016001600160401b0381118282101715613a0f57613a0f6139d7565b604051601f8201601f191681016001600160401b0381118282101715613ac557613ac56139d7565b604052919050565b60006001600160401b03821115613ae657613ae66139d7565b5060051b60200190565b6001600160a01b038116811461051357600080fd5b80356001600160401b0381168114613b1c57600080fd5b919050565b801515811461051357600080fd5b8035613b1c81613b21565b60006001600160401b03821115613b5357613b536139d7565b50601f01601f191660200190565b600082601f830112613b7257600080fd5b8135613b85613b8082613b3a565b613a9d565b818152846020838601011115613b9a57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613bca57600080fd5b82356001600160401b0380821115613be157600080fd5b818501915085601f830112613bf557600080fd5b8135613c03613b8082613acd565b81815260059190911b83018401908481019088831115613c2257600080fd5b8585015b83811015613cc857803585811115613c3e5760008081fd5b86016080818c03601f1901811315613c565760008081fd5b613c5e6139ed565b89830135613c6b81613af0565b81526040613c7a848201613b05565b8b830152606080850135613c8d81613b21565b83830152928401359289841115613ca657600091508182fd5b613cb48f8d86880101613b61565b908301525085525050918601918601613c26565b5098975050505050505050565b60005b83811015613cf0578181015183820152602001613cd8565b50506000910152565b60008151808452613d11816020860160208601613cd5565b601f01601f19169290920160200192915050565b602081526000610ac76020830184613cf9565b8060608101831015610aca57600080fd5b60008083601f840112613d5b57600080fd5b5081356001600160401b03811115613d7257600080fd5b602083019150836020828501011115613d8a57600080fd5b9250929050565b60008083601f840112613da357600080fd5b5081356001600160401b03811115613dba57600080fd5b6020830191508360208260051b8501011115613d8a57600080fd5b60008060008060008060008060e0898b031215613df157600080fd5b613dfb8a8a613d38565b975060608901356001600160401b0380821115613e1757600080fd5b613e238c838d01613d49565b909950975060808b0135915080821115613e3c57600080fd5b613e488c838d01613d91565b909750955060a08b0135915080821115613e6157600080fd5b50613e6e8b828c01613d91565b999c989b50969995989497949560c00135949350505050565b600080600060808486031215613e9c57600080fd5b613ea68585613d38565b925060608401356001600160401b03811115613ec157600080fd5b613ecd86828701613d49565b9497909650939450505050565b60008060408385031215613eed57600080fd5b613ef683613b05565b9150613f0460208401613b05565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110613f3357613f33613f0d565b9052565b60208101610aca8284613f23565b600060a08284031215613f5757600080fd5b613f5f613a15565b905081358152613f7160208301613b05565b6020820152613f8260408301613b05565b6040820152613f9360608301613b05565b6060820152613fa460808301613b05565b608082015292915050565b8035613b1c81613af0565b803563ffffffff81168114613b1c57600080fd5b600082601f830112613fdf57600080fd5b81356020613fef613b8083613acd565b82815260059290921b8401810191818101908684111561400e57600080fd5b8286015b848110156140de5780356001600160401b03808211156140325760008081fd5b9088019060a0828b03601f190181131561404c5760008081fd5b614054613a15565b87840135838111156140665760008081fd5b6140748d8a83880101613b61565b82525060408085013561408681613af0565b828a01526060614097868201613fba565b828401526080915081860135858111156140b15760008081fd5b6140bf8f8c838a0101613b61565b9184019190915250919093013590830152508352918301918301614012565b509695505050505050565b600061014082840312156140fc57600080fd5b614104613a37565b90506141108383613f45565b815260a08201356001600160401b038082111561412c57600080fd5b61413885838601613b61565b602084015260c084013591508082111561415157600080fd5b61415d85838601613b61565b604084015261416e60e08501613faf565b6060840152610100840135608084015261012084013591508082111561419357600080fd5b506141a084828501613fce565b60a08301525092915050565b600082601f8301126141bd57600080fd5b813560206141cd613b8083613acd565b82815260059290921b840181019181810190868411156141ec57600080fd5b8286015b848110156140de5780356001600160401b0381111561420f5760008081fd5b61421d8986838b01016140e9565b8452509183019183016141f0565b600082601f83011261423c57600080fd5b8135602061424c613b8083613acd565b82815260059290921b8401810191818101908684111561426b57600080fd5b8286015b848110156140de5780356001600160401b038082111561428e57600080fd5b818901915089603f8301126142a257600080fd5b858201356142b2613b8082613acd565b81815260059190911b830160400190878101908c8311156142d257600080fd5b604085015b8381101561430b578035858111156142ee57600080fd5b6142fd8f6040838a0101613b61565b8452509189019189016142d7565b5087525050509284019250830161426f565b600082601f83011261432e57600080fd5b8135602061433e613b8083613acd565b8083825260208201915060208460051b87010193508684111561436057600080fd5b602086015b848110156140de5780358352918301918301614365565b600082601f83011261438d57600080fd5b8135602061439d613b8083613acd565b82815260059290921b840181019181810190868411156143bc57600080fd5b8286015b848110156140de5780356001600160401b03808211156143e05760008081fd5b9088019060a0828b03601f19018113156143fa5760008081fd5b614402613a15565b61440d888501613b05565b8152604080850135848111156144235760008081fd5b6144318e8b838901016141ac565b8a840152506060808601358581111561444a5760008081fd5b6144588f8c838a010161422b565b83850152506080915081860135858111156144735760008081fd5b6144818f8c838a010161431d565b91840191909152509190930135908301525083529183019183016143c0565b600080604083850312156144b357600080fd5b6001600160401b03833511156144c857600080fd5b6144d5848435850161437c565b91506001600160401b03602084013511156144ef57600080fd5b6020830135830184601f82011261450557600080fd5b614512613b808235613acd565b81358082526020808301929160051b84010187101561453057600080fd5b602083015b6020843560051b8501018110156146d6576001600160401b038135111561455b57600080fd5b87603f82358601011261456d57600080fd5b614580613b806020833587010135613acd565b81358501602081810135808452908301929160059190911b016040018a10156145a857600080fd5b604083358701015b83358701602081013560051b016040018110156146c6576001600160401b03813511156145dc57600080fd5b833587018135016040818d03603f190112156145f757600080fd5b6145ff613a59565b604082013581526001600160401b036060830135111561461e57600080fd5b8c605f60608401358401011261463357600080fd5b604060608301358301013561464a613b8082613acd565b808282526020820191508f60608460051b606088013588010101111561466f57600080fd5b6060808601358601015b60608460051b6060880135880101018110156146a65761469881613fba565b835260209283019201614679565b5080602085015250505080855250506020830192506020810190506145b0565b5084525060209283019201614535565b508093505050509250929050565b6000806000806000606086880312156146fc57600080fd5b85356001600160401b038082111561471357600080fd5b61471f89838a016140e9565b9650602088013591508082111561473557600080fd5b61474189838a01613d91565b9096509450604088013591508082111561475a57600080fd5b5061476788828901613d91565b969995985093965092949392505050565b60006060828403121561478a57600080fd5b614792613a7b565b823561479d81613af0565b81526147ab60208401613fba565b602082015260408301356147be81613af0565b60408201529392505050565b6000602082840312156147dc57600080fd5b81356001600160401b038111156147f257600080fd5b820160a0818503121561391557600080fd5b803560ff81168114613b1c57600080fd5b60006020828403121561482757600080fd5b610ac782614804565b60008151808452602080850194506020840160005b8381101561486a5781516001600160a01b031687529582019590820190600101614845565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a08401526148c460e0840182614830565b90506040840151601f198483030160c08501526148e18282614830565b95945050505050565b600080604083850312156148fd57600080fd5b61490683613b05565b946020939093013593505050565b60006020828403121561492657600080fd5b610ac782613b05565b602081526001600160a01b0382511660208201526020820151151560408201526001600160401b0360408301511660608201526000606083015160808084015261337960a0840182613cf9565b60006020828403121561498e57600080fd5b813561391581613af0565b600082601f8301126149aa57600080fd5b813560206149ba613b8083613acd565b8083825260208201915060208460051b8701019350868411156149dc57600080fd5b602086015b848110156140de5780356149f481613af0565b83529183019183016149e1565b60006020808385031215614a1457600080fd5b82356001600160401b0380821115614a2b57600080fd5b818501915085601f830112614a3f57600080fd5b8135614a4d613b8082613acd565b81815260059190911b83018401908481019088831115614a6c57600080fd5b8585015b83811015613cc857803585811115614a8757600080fd5b860160c0818c03601f19011215614a9e5760008081fd5b614aa6613a37565b8882013581526040614ab9818401614804565b8a8301526060614aca818501614804565b8284015260809150614add828501613b2f565b9083015260a08381013589811115614af55760008081fd5b614b038f8d83880101614999565b838501525060c0840135915088821115614b1d5760008081fd5b614b2b8e8c84870101614999565b9083015250845250918601918601614a70565b80356001600160e01b0381168114613b1c57600080fd5b600082601f830112614b6657600080fd5b81356020614b76613b8083613acd565b82815260069290921b84018101918181019086841115614b9557600080fd5b8286015b848110156140de5760408189031215614bb25760008081fd5b614bba613a59565b614bc382613b05565b8152614bd0858301614b3e565b81860152835291830191604001614b99565b600082601f830112614bf357600080fd5b81356020614c03613b8083613acd565b82815260059290921b84018101918181019086841115614c2257600080fd5b8286015b848110156140de5780356001600160401b0380821115614c465760008081fd5b9088019060a0828b03601f1901811315614c605760008081fd5b614c68613a15565b614c73888501613b05565b815260408085013584811115614c895760008081fd5b614c978e8b83890101613b61565b8a8401525060609350614cab848601613b05565b908201526080614cbc858201613b05565b93820193909352920135908201528352918301918301614c26565b600082601f830112614ce857600080fd5b81356020614cf8613b8083613acd565b82815260069290921b84018101918181019086841115614d1757600080fd5b8286015b848110156140de5760408189031215614d345760008081fd5b614d3c613a59565b813581528482013585820152835291830191604001614d1b565b60006020808385031215614d6957600080fd5b82356001600160401b0380821115614d8057600080fd5b9084019060608287031215614d9457600080fd5b614d9c613a7b565b823582811115614dab57600080fd5b83016040818903811315614dbe57600080fd5b614dc6613a59565b823585811115614dd557600080fd5b8301601f81018b13614de657600080fd5b8035614df4613b8082613acd565b81815260069190911b8201890190898101908d831115614e1357600080fd5b928a01925b82841015614e635785848f031215614e305760008081fd5b614e38613a59565b8435614e4381613af0565b8152614e50858d01614b3e565b818d0152825292850192908a0190614e18565b845250505082870135915084821115614e7b57600080fd5b614e878a838501614b55565b81880152835250508284013582811115614ea057600080fd5b614eac88828601614be2565b85830152506040830135935081841115614ec557600080fd5b614ed187858501614cd7565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b84811015614f7157601f19868403018952815160a06001600160401b03808351168652868301518288880152614f3583880182613cf9565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101614efd565b5090979650505050505050565b60006040808352614f926040840186614ee0565b83810360208581019190915285518083528682019282019060005b81811015614fd257845180518452840151848401529383019391850191600101614fad565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561504d57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615016565b50508583015187820388850152805180835290840192506000918401905b808310156150a657835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061506b565b50979650505050505050565b602081526000610ac76020830184614ff6565b6000602082840312156150d757600080fd5b815161391581613b21565b600181811c908216806150f657607f821691505b60208210810361511657634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461512a816150e2565b60018281168015615142576001811461515757615186565b60ff1984168752821515830287019450615186565b8760005260208060002060005b8581101561517d5781548a820152908401908201615164565b50505082870194505b50929695505050505050565b6000815461519f816150e2565b8085526020600183811680156151bc57600181146151d657615204565b60ff1985168884015283151560051b880183019550615204565b866000528260002060005b858110156151fc5781548a82018601529083019084016151e1565b890184019650505b505050505092915050565b6040815260006152226040830185613cf9565b82810360208401526148e18185615192565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561526a5761526a615234565b5092915050565b6040815260006152846040830185614ee0565b82810360208401526148e18185614ff6565b6000602082840312156152a857600080fd5b81356001600160401b038111156152be57600080fd5b6133798482850161437c565b81810381811115610aca57610aca615234565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061530d5761530d6152dd565b92169190910692915050565b8082028115828204841417610aca57610aca615234565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261536360a0870182613cf9565b90506060850151868203606088015261537c8282613cf9565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156150a657835180516001600160a01b031683528601518683015292850192600192909201919084019061539f565b602081526000610ac76020830184615330565b6080815260006153f76080830187615330565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561543557600080fd5b835161544081613b21565b60208501519093506001600160401b0381111561545c57600080fd5b8401601f8101861361546d57600080fd5b805161547b613b8082613b3a565b81815287602083850101111561549057600080fd5b6154a1826020830160208601613cd5565b809450505050604084015190509250925092565b601f821115610d5a576000816000526020600020601f850160051c810160208610156154de5750805b601f850160051c820191505b818110156154fd578281556001016154ea565b505050505050565b81516001600160401b0381111561551e5761551e6139d7565b6155328161552c84546150e2565b846154b5565b602080601f831160018114615567576000841561554f5750858301515b600019600386901b1c1916600185901b1785556154fd565b600085815260208120601f198616915b8281101561559657888601518255948401946001909101908401615577565b50858210156155b45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610ac760a0830160018501615192565b80820180821115610aca57610aca615234565b60ff8181168382160190811115610aca57610aca615234565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b038084168061567c5761567c6152dd565b92169190910492915050565b60006020828403121561569a57600080fd5b610ac782613fba565b6000808335601e198436030181126156ba57600080fd5b8301803591506001600160401b038211156156d457600080fd5b602001915036819003821315613d8a57600080fd5b60208101600683106156fd576156fd613f0d565b91905290565b60ff818116838216029081169081811461526a5761526a615234565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156157775784546001600160a01b031683526001948501949284019201615752565b50508481036060860152865180825290820192508187019060005b818110156157b75782516001600160a01b031685529383019391830191600101615792565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b038086168352808516602084015250606060408301526148e16060830184613cf9565b8281526040602082015260006133796040830184613cf9565b6001600160401b03848116825283166020820152606081016133796040830184613f23565b84815261584b6020820185613f23565b6080604082015260006158616080830185613cf9565b905082606083015295945050505050565b60006020828403121561588457600080fd5b815161391581613af0565b60208152600082516101008060208501526158ae610120850183613cf9565b915060208501516158ca60408601826001600160401b03169052565b5060408501516001600160a01b03811660608601525060608501516080850152608085015161590460a08601826001600160a01b03169052565b5060a0850151601f19808685030160c08701526159218483613cf9565b935060c08701519150808685030160e087015261593e8483613cf9565b935060e08701519150808685030183870152506157c78382613cf9565b60006020828403121561596d57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b84811015614f7157601f19868403018952815160a081518186526159b782870182613cf9565b9150506001600160a01b03868301511686860152604063ffffffff81840151168187015250606080830151868303828801526159f38382613cf9565b6080948501519790940196909652505098840198925090830190600101615991565b602081526000610ac76020830184615974565b60008282518085526020808601955060208260051b8401016020860160005b84811015614f7157601f19868403018952615a63838351613cf9565b98840198925090830190600101615a47565b60008151808452602080850194506020840160005b8381101561486a57815163ffffffff1687529582019590820190600101615a8a565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615b146101a0850183613cf9565b91506040870151605f198086850301610120870152615b338483613cf9565b935060608901519150615b50838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615b798282615974565b9150508281036020840152615b8e8186615a28565b905082810360408401526157c78185615a7556fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b50604051620067de380380620067de833981016040819052620000359162000806565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000b8d565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005ba57600082828151811062000391576200039162000943565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526006602052604090206060830151600182018054620004269062000959565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d8282620009ea565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90620005a290859062000ab6565b60405180910390a25050505080600101905062000370565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620005f957620005f9620005be565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200062a576200062a620005be565b604052919050565b80516001600160401b03811681146200064a57600080fd5b919050565b6001600160a01b03811681146200066557600080fd5b50565b6000601f83601f8401126200067c57600080fd5b825160206001600160401b03808311156200069b576200069b620005be565b8260051b620006ac838201620005ff565b9384528681018301938381019089861115620006c757600080fd5b84890192505b85831015620007f957825184811115620006e75760008081fd5b89016080601f19828d038101821315620007015760008081fd5b6200070b620005d4565b888401516200071a816200064f565b815260406200072b85820162000632565b8a8301526060808601518015158114620007455760008081fd5b838301529385015193898511156200075d5760008081fd5b84860195508f603f8701126200077557600094508485fd5b8a8601519450898511156200078e576200078e620005be565b6200079f8b858f88011601620005ff565b93508484528f82868801011115620007b75760008081fd5b60005b85811015620007d7578681018301518582018d01528b01620007ba565b5060009484018b019490945250918201528352509184019190840190620006cd565b9998505050505050505050565b60008060008385036101008112156200081e57600080fd5b60808112156200082d57600080fd5b62000837620005d4565b620008428662000632565b8152602086015162000854816200064f565b6020820152604086015162000869816200064f565b604082015260608601516200087e816200064f565b606082810191909152909450607f19820112156200089b57600080fd5b50604051606081016001600160401b038082118383101715620008c257620008c2620005be565b8160405260808701519150620008d8826200064f565b90825260a08601519063ffffffff82168214620008f457600080fd5b81602084015260c087015191506200090c826200064f565b6040830182905260e0870151929450808311156200092957600080fd5b5050620009398682870162000668565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806200096e57607f821691505b6020821081036200098f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009e5576000816000526020600020601f850160051c81016020861015620009c05750805b601f850160051c820191505b81811015620009e157828155600101620009cc565b5050505b505050565b81516001600160401b0381111562000a065762000a06620005be565b62000a1e8162000a17845462000959565b8462000995565b602080601f83116001811462000a56576000841562000a3d5750858301515b600019600386901b1c1916600185901b178555620009e1565b600085815260208120601f198616915b8281101562000a875788860151825594840194600190910190840162000a66565b508582101562000aa65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b0b8162000959565b8060a089015260c0600183166000811462000b2f576001811462000b4c5762000b7e565b60ff19841660c08b015260c083151560051b8b0101945062000b7e565b85600052602060002060005b8481101562000b755781548c820185015290880190890162000b58565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615bdb62000c036000396000818161022c01526129d50152600081816101fd0152612c9a0152600081816101ce015281816105580152818161070a015261239601526000818161019f01526125d5015260008181611ac70152611afa0152615bdb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104bc578063f2fde38b146104dc578063f716f99f146104ef57600080fd5b8063c673e58414610458578063ccd37ba31461047857600080fd5b806379ba5097116100b257806379ba50971461042757806385572ffb1461042f5780638da5cb5b1461043d57600080fd5b80636f9e320f146103825780637437ff9f1461039557600080fd5b8063311cd513116101245780635e36480c116101095780635e36480c1461033c5780635e7bb0081461035c57806360987c201461036f57600080fd5b8063311cd5131461030e5780633f4b04aa1461032157600080fd5b806304666f9c1461015657806306285c691461016b578063181f5a77146102b25780632d04ab76146102fb575b600080fd5b610169610164366004613ba0565b610502565b005b61025c60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102a9919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102ee6040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102a99190613d0e565b610169610309366004613dbe565b610516565b61016961031c366004613e70565b610a1d565b6009546040516001600160401b0390911681526020016102a9565b61034f61034a366004613ec3565b610a86565b6040516102a99190613f20565b61016961036a366004614489565b610adb565b61016961037d3660046146cd565b610d6a565b610169610390366004614761565b61104a565b6103f1604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102a9565b61016961105b565b6101696101513660046147d0565b6000546040516001600160a01b0390911681526020016102a9565b61046b61046636600461481b565b61110c565b6040516102a9919061487b565b6104ae6104863660046148f0565b6001600160401b03919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102a9565b6104cf6104ca36600461491a565b61126a565b6040516102a99190614935565b6101696104ea366004614982565b611376565b6101696104fd366004614a07565b611387565b61050a6113c9565b61051381611425565b50565b600061052487890189614d5c565b602081015151909150156105c157602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb93610590933093909190600401614f91565b60006040518083038186803b1580156105a857600080fd5b505afa1580156105bc573d6000803e3d6000fd5b505050505b805151511515806105d757508051602001515115155b156106a35760095460208a0135906001600160401b038083169116101561067b576009805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106449291016150de565b600060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050506106a1565b8160200151516000036106a157604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561095e576000826020015182815181106106cb576106cb61500c565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906150f1565b156107a357604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107ae82611678565b9050806001016040516107c19190615148565b6040518091039020836020015180519060200120146107fe5782602001518160010160405163b80d8fa960e01b815260040161079a92919061523b565b60408301518154600160a81b90046001600160401b03908116911614158061083f575082606001516001600160401b031683604001516001600160401b0316115b1561088457825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161079a565b6080830151806108a75760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600860209081526040808320848452909152902054156108ff5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161079a565b606084015161090f906001615276565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b039283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016106a6565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e49261099692909161529d565b60405180910390a1610a1260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506116c4915050565b505050505050505050565b610a5d610a2c828401846152c2565b6040805160008082526020820190925290610a57565b6060815260200190600190039081610a425790505b506119bd565b604080516000808252602082019092529050610a806001858585858660006116c4565b50505050565b6000610a94600160046152f6565b6002610aa160808561531f565b6001600160401b0316610ab49190615345565b610abe8585611a7f565b901c166003811115610ad257610ad2613ef6565b90505b92915050565b610ae3611ac4565b815181518114610b06576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610d5a576000848281518110610b2557610b2561500c565b60200260200101519050600081602001515190506000858481518110610b4d57610b4d61500c565b6020026020010151905080518214610b78576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610d4b576000828281518110610b9757610b9761500c565b6020026020010151600001519050600085602001518381518110610bbd57610bbd61500c565b6020026020010151905081600014610c11578060800151821015610c11578551815151604051633a98d46360e11b81526001600160401b03909216600483015260248201526044810183905260640161079a565b838381518110610c2357610c2361500c565b602002602001015160200151518160a001515114610c7057805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161079a565b60005b8160a0015151811015610d3d576000858581518110610c9457610c9461500c565b6020026020010151602001518281518110610cb157610cb161500c565b602002602001015163ffffffff16905080600014610d345760008360a001518381518110610ce157610ce161500c565b60200260200101516040015163ffffffff16905080821015610d32578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161079a565b505b50600101610c73565b505050806001019050610b7b565b50505050806001019050610b09565b50610d6583836119bd565b505050565b333014610d8a576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610dc7565b6040805180820190915260008082526020820152815260200190600190039081610da05790505b5060a08701515190915015610dfd57610dfa8660a001518760200151886060015189600001516020015189898989611b2c565b90505b6040805160a081018252875151815287516020908101516001600160401b031681830152808901518351600094840192610e38929101613d0e565b60408051601f19818403018152918152908252898101516020830152018390526005549091506001600160a01b03168015610f13576040516308d450a160e01b81526001600160a01b038216906308d450a190610e999085906004016153fd565b600060405180830381600087803b158015610eb357600080fd5b505af1925050508015610ec4575060015b610f13573d808015610ef2576040519150601f19603f3d011682016040523d82523d6000602084013e610ef7565b606091505b50806040516309c2532560e01b815260040161079a9190613d0e565b604088015151158015610f2857506080880151155b80610f3f575060608801516001600160a01b03163b155b80610f6657506060880151610f64906001600160a01b03166385572ffb60e01b611cdd565b155b15610f7357505050611043565b87516020908101516001600160401b03166000908152600690915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610fd19289926113889291600401615410565b6000604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611018919081019061544c565b50915091508161103d57806040516302a35ba360e21b815260040161079a9190613d0e565b50505050505b5050505050565b6110526113c9565b61051381611cf9565b6001546001600160a01b031633146110b55760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161079a565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61114f6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156111f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111da575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561125a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161123c575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916112f69061510e565b80601f01602080910402602001604051908101604052809291908181526020018280546113229061510e565b801561125a5780601f106113445761010080835404028352916020019161125a565b820191906000526020600020905b81548152906001019060200180831161135257505050919092525091949350505050565b61137e6113c9565b61051381611dd8565b61138f6113c9565b60005b81518110156113c5576113bd8282815181106113b0576113b061500c565b6020026020010151611e81565b600101611392565b5050565b6000546001600160a01b031633146114235760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161079a565b565b60005b81518110156113c55760008282815181106114455761144561500c565b60200260200101519050600081602001519050806001600160401b03166000036114825760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166114aa576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260066020526040902060608301516001820180546114d69061510e565b905060000361153857815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611575565b8154600160a81b90046001600160401b031660011461157557604051632105803760e11b81526001600160401b038416600482015260240161079a565b805115806115aa5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156115c8576040516342bcdf7f60e11b815260040160405180910390fd5b600182016115d68282615531565b50604080850151835486516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617178355516001600160401b038416907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906116619085906155f0565b60405180910390a250505050806001019050611428565b6001600160401b03811660009081526006602052604081208054600160a01b900460ff16610ad55760405163ed053c5960e01b81526001600160401b038416600482015260240161079a565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906117238760a461563e565b905082606001511561176b57845161173c906020615345565b8651611749906020615345565b6117549060a061563e565b61175e919061563e565b611768908261563e565b90505b36811461179457604051638e1192e160e01b81526004810182905236602482015260440161079a565b50815181146117c35781516040516324f7d61360e21b815260048101919091526024810182905260440161079a565b6117cb611ac4565b60ff808a166000908152600360209081526040808320338452825280832081518083019092528054808616835293949193909284019161010090910416600281111561181957611819613ef6565b600281111561182a5761182a613ef6565b905250905060028160200151600281111561184757611847613ef6565b14801561189b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff16815481106118835761188361500c565b6000918252602090912001546001600160a01b031633145b6118b857604051631b41e11d60e31b815260040160405180910390fd5b508160600151156119685760208201516118d3906001615651565b60ff168551146118f6576040516371253a2560e01b815260040160405180910390fd5b83518551146119185760405163a75d88af60e01b815260040160405180910390fd5b6000878760405161192a92919061566a565b604051908190038120611941918b9060200161567a565b6040516020818303038152906040528051906020012090506119668a828888886121ab565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b81516000036119de5760405162bf199760e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a21565b6040805180820190915260008152606060208201528152602001906001900390816119f95790505b50905060005b845181101561104357611a77858281518110611a4557611a4561500c565b602002602001015184611a7157858381518110611a6457611a6461500c565b6020026020010151612368565b83612368565b600101611a27565b6001600160401b038216600090815260076020526040812081611aa360808561568e565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461142357604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161079a565b606088516001600160401b03811115611b4757611b476139e2565b604051908082528060200260200182016040528015611b8c57816020015b6040805180820190915260008082526020820152815260200190600190039081611b655790505b509050811560005b8a51811015611ccf5781611c2c57848482818110611bb457611bb461500c565b9050602002016020810190611bc991906156b4565b63ffffffff1615611c2c57848482818110611be657611be661500c565b9050602002016020810190611bfb91906156b4565b8b8281518110611c0d57611c0d61500c565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611caa8b8281518110611c4157611c4161500c565b60200260200101518b8b8b8b8b87818110611c5e57611c5e61500c565b9050602002810190611c7091906156cf565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612c5f92505050565b838281518110611cbc57611cbc61500c565b6020908102919091010152600101611b94565b505098975050505050505050565b6000611ce883612f3f565b8015610ad25750610ad28383612f8a565b80516001600160a01b0316611d21576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b03821603611e305760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161079a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003611eac576000604051631b3fab5160e11b815260040161079a9190615715565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003611efd576060840151600182018054911515620100000262ff000019909216919091179055611f39565b6060840151600182015460ff6201000090910416151590151514611f39576040516321fd80df60e21b815260ff8416600482015260240161079a565b60a084015180516101001015611f65576001604051631b3fab5160e11b815260040161079a9190615715565b8051600003611f8a576005604051631b3fab5160e11b815260040161079a9190615715565b611ff08484600301805480602002602001604051908101604052809291908181526020018280548015611fe657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fc8575b505050505061302c565b8460600151156121205761205e8484600201805480602002602001604051908101604052809291908181526020018280548015611fe6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611fc857505050505061302c565b60808501518051610100101561208a576002604051631b3fab5160e11b815260040161079a9190615715565b604086015161209a90600361572f565b60ff168151116120c0576003604051631b3fab5160e11b815260040161079a9190615715565b8151815110156120e6576001604051631b3fab5160e11b815260040161079a9190615715565b805160018401805461ff00191661010060ff8416021790556121119060028601906020840190613968565b5061211e85826001613095565b505b61212c84826002613095565b80516121419060038501906020840190613968565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361219a9389939260028a0192919061574b565b60405180910390a1611043846131f0565b8251600090815b8181101561235e5760006001888684602081106121d1576121d161500c565b6121de91901a601b615651565b8985815181106121f0576121f061500c565b602002602001015189868151811061220a5761220a61500c565b602002602001015160405160008152602001604052604051612248949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561226a573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156122cb576122cb613ef6565b60028111156122dc576122dc613ef6565b90525090506001816020015160028111156122f9576122f9613ef6565b1461231757604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561234157604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506121b2565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240991906150f1565b1561247a57801561243857604051637edeb53960e11b81526001600160401b038316600482015260240161079a565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061248583611678565b60010180546124939061510e565b80601f01602080910402602001604051908101604052809291908181526020018280546124bf9061510e565b801561250c5780601f106124e15761010080835404028352916020019161250c565b820191906000526020600020905b8154815290600101906020018083116124ef57829003601f168201915b5050506020880151519293505050600081900361253b5760405162bf199760e01b815260040160405180910390fd5b8560400151518114612560576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561257a5761257a6139e2565b6040519080825280602002602001820160405280156125a3578160200160208202803683370190505b50905060005b82811015612747576000886020015182815181106125c9576125c961500c565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146126405780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161079a565b866001600160401b03168160000151602001516001600160401b03161461269457805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161079a565b612721817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f836000015160200151846000015160400151898051906020012060405160200161270694939291909384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120613247565b8383815181106127335761273361500c565b6020908102919091010152506001016125a9565b50600061275e86838a606001518b6080015161334f565b90508060000361278c57604051633ee8bd3f60e11b81526001600160401b038716600482015260240161079a565b60005b83811015610a125760005a905060008a6020015183815181106127b4576127b461500c565b6020026020010151905060006127d28a836000015160600151610a86565b905060008160038111156127e8576127e8613ef6565b14806128055750600381600381111561280357612803613ef6565b145b61285b57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612c57565b6060891561293a578b85815181106128755761287561500c565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff166128a388426152f6565b11905080806128c3575060038360038111156128c1576128c1613ef6565b145b6128eb576040516354e7e43160e11b81526001600160401b038d16600482015260240161079a565b8c86815181106128fd576128fd61500c565b602002602001015160000151600014612934578c86815181106129225761292261500c565b60209081029190910101515160808501525b506129a6565b600082600381111561294e5761294e613ef6565b146129a657825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612c57565b8251608001516001600160401b031615612a7f5760008260038111156129ce576129ce613ef6565b03612a7f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612a2f939291906157fd565b6020604051808303816000875af1158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7291906150f1565b612a7f5750505050612c57565b60008d604001518681518110612a9757612a9761500c565b6020026020010151905080518460a001515114612ae157835160600151604051631cfe6d8b60e01b81526001600160401b03808f166004830152909116602482015260440161079a565b612af58c856000015160600151600161338c565b600080612b03868486613431565b91509150612b1a8e8760000151606001518461338c565b8c15612b71576003826003811115612b3457612b34613ef6565b03612b71576000856003811115612b4d57612b4d613ef6565b14612b7157855151604051632b11b8d960e01b815261079a91908390600401615829565b6002826003811115612b8557612b85613ef6565b14612bca576003826003811115612b9e57612b9e613ef6565b14612bca578d866000015160600151836040516349362d1f60e11b815260040161079a93929190615842565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612c2257612c2261500c565b602002602001015186865a612c37908f6152f6565b604051612c479493929190615867565b60405180910390a4505050505050505b60010161278f565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d07919061589e565b90506001600160a01b0381161580612d365750612d346001600160a01b03821663aff2afbf60e01b611cdd565b155b15612d5f5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161079a565b600080612d7788858c6040015163ffffffff166134e5565b915091506000806000612e2a6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612df491906158bb565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b179052878661138860846135c8565b92509250925082612e50578160405163e1cd550960e01b815260040161079a9190613d0e565b8151602014612e7f578151604051631e3be00960e21b815260206004820152602481019190915260440161079a565b600082806020019051810190612e959190615987565b9050866001600160a01b03168c6001600160a01b031614612f11576000612ec68d8a612ec1868a6152f6565b6134e5565b50905086811080612ee0575081612edd88836152f6565b14155b15612f0f5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161079a565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000612f52826301ffc9a760e01b612f8a565b8015610ad55750612f83827fffffffff00000000000000000000000000000000000000000000000000000000612f8a565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613015575060208210155b80156130215750600081115b979650505050505050565b60005b8151811015610d655760ff8316600090815260036020526040812083519091908490849081106130615761306161500c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161302f565b60005b8251811015610a805760008382815181106130b5576130b561500c565b60200260200101519050600060028111156130d2576130d2613ef6565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561311157613111613ef6565b14613132576004604051631b3fab5160e11b815260040161079a9190615715565b6001600160a01b0381166131595760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561317f5761317f613ef6565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156131dc576131dc613ef6565b021790555090505050806001019050613098565b60ff81166105135760ff8082166000908152600260205260409020600101546201000090041661323357604051631e8ed32560e21b815260040160405180910390fd5b6009805467ffffffffffffffff1916905550565b8151805160608085015190830151608080870151940151604051600095869588956132ab95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016132ee9190615a41565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061335d8585856136a2565b6001600160401b038716600090815260086020908152604080832093835292905220549150505b949350505050565b6000600261339b60808561531f565b6001600160401b03166133ae9190615345565b905060006133bc8585611a7f565b9050816133cb600160046152f6565b901b1916818360038111156133e2576133e2613ef6565b6001600160401b03871660009081526007602052604081209190921b9290921791829161341060808861568e565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061345e90889088908890600401615ad8565b600060405180830381600087803b15801561347857600080fd5b505af1925050508015613489575060015b6134c8573d8080156134b7576040519150601f19603f3d011682016040523d82523d6000602084013e6134bc565b606091505b506003925090506134dd565b50506040805160208101909152600081526002905b935093915050565b60008060008060006135468860405160240161351091906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052888861138860846135c8565b9250925092508261356c578160405163e1cd550960e01b815260040161079a9190613d0e565b602082511461359b578151604051631e3be00960e21b815260206004820152602481019190915260440161079a565b818060200190518101906135af9190615987565b6135b982886152f6565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156135ea576135ea6139e2565b6040519080825280601f01601f191660200182016040528015613614576020820181803683370190505b509150863b61362e5763030ed58f60e21b60005260046000fd5b5a8581101561364857632be8ca8b60e21b60005260046000fd5b8590036040810481038710613668576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d8481111561368b5750835b808352806000602085013e50955095509592505050565b82518251600091908183036136ca57604051630469ac9960e21b815260040160405180910390fd5b61010182118015906136de57506101018111155b6136fb576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613725576040516309bde33960e01b815260040160405180910390fd5b8060000361375257866000815181106137405761374061500c565b60200260200101519350505050613920565b6000816001600160401b0381111561376c5761376c6139e2565b604051908082528060200260200182016040528015613795578160200160208202803683370190505b50905060008080805b858110156138bf5760006001821b8b8116036137f957888510156137e2578c5160018601958e9181106137d3576137d361500c565b6020026020010151905061381b565b85516001850194879181106137d3576137d361500c565b8b5160018401938d9181106138105761381061500c565b602002602001015190505b60008986101561384b578d5160018701968f91811061383c5761383c61500c565b6020026020010151905061386d565b86516001860195889181106138625761386261500c565b602002602001015190505b8285111561388e576040516309bde33960e01b815260040160405180910390fd5b6138988282613927565b8784815181106138aa576138aa61500c565b6020908102919091010152505060010161379e565b5060018503821480156138d157508683145b80156138dc57508581145b6138f9576040516309bde33960e01b815260040160405180910390fd5b83600186038151811061390e5761390e61500c565b60200260200101519750505050505050505b9392505050565b600081831061393f5761393a8284613945565b610ad2565b610ad283835b604080516001602082015290810183905260608101829052600090608001613331565b8280548282559060005260206000209081019282156139bd579160200282015b828111156139bd57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613988565b506139c99291506139cd565b5090565b5b808211156139c957600081556001016139ce565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613a1a57613a1a6139e2565b60405290565b60405160a081016001600160401b0381118282101715613a1a57613a1a6139e2565b60405160c081016001600160401b0381118282101715613a1a57613a1a6139e2565b604080519081016001600160401b0381118282101715613a1a57613a1a6139e2565b604051601f8201601f191681016001600160401b0381118282101715613aae57613aae6139e2565b604052919050565b60006001600160401b03821115613acf57613acf6139e2565b5060051b60200190565b6001600160a01b038116811461051357600080fd5b80356001600160401b0381168114613b0557600080fd5b919050565b801515811461051357600080fd5b8035613b0581613b0a565b60006001600160401b03821115613b3c57613b3c6139e2565b50601f01601f191660200190565b600082601f830112613b5b57600080fd5b8135613b6e613b6982613b23565b613a86565b818152846020838601011115613b8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613bb357600080fd5b82356001600160401b0380821115613bca57600080fd5b818501915085601f830112613bde57600080fd5b8135613bec613b6982613ab6565b81815260059190911b83018401908481019088831115613c0b57600080fd5b8585015b83811015613cb157803585811115613c275760008081fd5b86016080818c03601f1901811315613c3f5760008081fd5b613c476139f8565b89830135613c5481613ad9565b81526040613c63848201613aee565b8b830152606080850135613c7681613b0a565b83830152928401359289841115613c8f57600091508182fd5b613c9d8f8d86880101613b4a565b908301525085525050918601918601613c0f565b5098975050505050505050565b60005b83811015613cd9578181015183820152602001613cc1565b50506000910152565b60008151808452613cfa816020860160208601613cbe565b601f01601f19169290920160200192915050565b602081526000610ad26020830184613ce2565b8060608101831015610ad557600080fd5b60008083601f840112613d4457600080fd5b5081356001600160401b03811115613d5b57600080fd5b602083019150836020828501011115613d7357600080fd5b9250929050565b60008083601f840112613d8c57600080fd5b5081356001600160401b03811115613da357600080fd5b6020830191508360208260051b8501011115613d7357600080fd5b60008060008060008060008060e0898b031215613dda57600080fd5b613de48a8a613d21565b975060608901356001600160401b0380821115613e0057600080fd5b613e0c8c838d01613d32565b909950975060808b0135915080821115613e2557600080fd5b613e318c838d01613d7a565b909750955060a08b0135915080821115613e4a57600080fd5b50613e578b828c01613d7a565b999c989b50969995989497949560c00135949350505050565b600080600060808486031215613e8557600080fd5b613e8f8585613d21565b925060608401356001600160401b03811115613eaa57600080fd5b613eb686828701613d32565b9497909650939450505050565b60008060408385031215613ed657600080fd5b613edf83613aee565b9150613eed60208401613aee565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110613f1c57613f1c613ef6565b9052565b60208101610ad58284613f0c565b600060a08284031215613f4057600080fd5b613f48613a20565b905081358152613f5a60208301613aee565b6020820152613f6b60408301613aee565b6040820152613f7c60608301613aee565b6060820152613f8d60808301613aee565b608082015292915050565b8035613b0581613ad9565b803563ffffffff81168114613b0557600080fd5b600082601f830112613fc857600080fd5b81356020613fd8613b6983613ab6565b82815260059290921b84018101918181019086841115613ff757600080fd5b8286015b848110156140c75780356001600160401b038082111561401b5760008081fd5b9088019060a0828b03601f19018113156140355760008081fd5b61403d613a20565b878401358381111561404f5760008081fd5b61405d8d8a83880101613b4a565b82525060408085013561406f81613ad9565b828a01526060614080868201613fa3565b8284015260809150818601358581111561409a5760008081fd5b6140a88f8c838a0101613b4a565b9184019190915250919093013590830152508352918301918301613ffb565b509695505050505050565b600061014082840312156140e557600080fd5b6140ed613a42565b90506140f98383613f2e565b815260a08201356001600160401b038082111561411557600080fd5b61412185838601613b4a565b602084015260c084013591508082111561413a57600080fd5b61414685838601613b4a565b604084015261415760e08501613f98565b6060840152610100840135608084015261012084013591508082111561417c57600080fd5b5061418984828501613fb7565b60a08301525092915050565b600082601f8301126141a657600080fd5b813560206141b6613b6983613ab6565b82815260059290921b840181019181810190868411156141d557600080fd5b8286015b848110156140c75780356001600160401b038111156141f85760008081fd5b6142068986838b01016140d2565b8452509183019183016141d9565b600082601f83011261422557600080fd5b81356020614235613b6983613ab6565b82815260059290921b8401810191818101908684111561425457600080fd5b8286015b848110156140c75780356001600160401b038082111561427757600080fd5b818901915089603f83011261428b57600080fd5b8582013561429b613b6982613ab6565b81815260059190911b830160400190878101908c8311156142bb57600080fd5b604085015b838110156142f4578035858111156142d757600080fd5b6142e68f6040838a0101613b4a565b8452509189019189016142c0565b50875250505092840192508301614258565b600082601f83011261431757600080fd5b81356020614327613b6983613ab6565b8083825260208201915060208460051b87010193508684111561434957600080fd5b602086015b848110156140c7578035835291830191830161434e565b600082601f83011261437657600080fd5b81356020614386613b6983613ab6565b82815260059290921b840181019181810190868411156143a557600080fd5b8286015b848110156140c75780356001600160401b03808211156143c95760008081fd5b9088019060a0828b03601f19018113156143e35760008081fd5b6143eb613a20565b6143f6888501613aee565b81526040808501358481111561440c5760008081fd5b61441a8e8b83890101614195565b8a84015250606080860135858111156144335760008081fd5b6144418f8c838a0101614214565b838501525060809150818601358581111561445c5760008081fd5b61446a8f8c838a0101614306565b91840191909152509190930135908301525083529183019183016143a9565b6000806040838503121561449c57600080fd5b6001600160401b03833511156144b157600080fd5b6144be8484358501614365565b91506001600160401b03602084013511156144d857600080fd5b6020830135830184601f8201126144ee57600080fd5b6144fb613b698235613ab6565b81358082526020808301929160051b84010187101561451957600080fd5b602083015b6020843560051b8501018110156146bf576001600160401b038135111561454457600080fd5b87603f82358601011261455657600080fd5b614569613b696020833587010135613ab6565b81358501602081810135808452908301929160059190911b016040018a101561459157600080fd5b604083358701015b83358701602081013560051b016040018110156146af576001600160401b03813511156145c557600080fd5b833587018135016040818d03603f190112156145e057600080fd5b6145e8613a64565b604082013581526001600160401b036060830135111561460757600080fd5b8c605f60608401358401011261461c57600080fd5b6040606083013583010135614633613b6982613ab6565b808282526020820191508f60608460051b606088013588010101111561465857600080fd5b6060808601358601015b60608460051b60608801358801010181101561468f5761468181613fa3565b835260209283019201614662565b508060208501525050508085525050602083019250602081019050614599565b508452506020928301920161451e565b508093505050509250929050565b6000806000806000606086880312156146e557600080fd5b85356001600160401b03808211156146fc57600080fd5b61470889838a016140d2565b9650602088013591508082111561471e57600080fd5b61472a89838a01613d7a565b9096509450604088013591508082111561474357600080fd5b5061475088828901613d7a565b969995985093965092949392505050565b60006060828403121561477357600080fd5b604051606081018181106001600160401b0382111715614795576147956139e2565b60405282356147a381613ad9565b81526147b160208401613fa3565b602082015260408301356147c481613ad9565b60408201529392505050565b6000602082840312156147e257600080fd5b81356001600160401b038111156147f857600080fd5b820160a0818503121561392057600080fd5b803560ff81168114613b0557600080fd5b60006020828403121561482d57600080fd5b610ad28261480a565b60008151808452602080850194506020840160005b838110156148705781516001600160a01b03168752958201959082019060010161484b565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a08401526148ca60e0840182614836565b90506040840151601f198483030160c08501526148e78282614836565b95945050505050565b6000806040838503121561490357600080fd5b61490c83613aee565b946020939093013593505050565b60006020828403121561492c57600080fd5b610ad282613aee565b602081526001600160a01b0382511660208201526020820151151560408201526001600160401b0360408301511660608201526000606083015160808084015261338460a0840182613ce2565b60006020828403121561499457600080fd5b813561392081613ad9565b600082601f8301126149b057600080fd5b813560206149c0613b6983613ab6565b8083825260208201915060208460051b8701019350868411156149e257600080fd5b602086015b848110156140c75780356149fa81613ad9565b83529183019183016149e7565b60006020808385031215614a1a57600080fd5b82356001600160401b0380821115614a3157600080fd5b818501915085601f830112614a4557600080fd5b8135614a53613b6982613ab6565b81815260059190911b83018401908481019088831115614a7257600080fd5b8585015b83811015613cb157803585811115614a8d57600080fd5b860160c0818c03601f19011215614aa45760008081fd5b614aac613a42565b8882013581526040614abf81840161480a565b8a8301526060614ad081850161480a565b8284015260809150614ae3828501613b18565b9083015260a08381013589811115614afb5760008081fd5b614b098f8d8388010161499f565b838501525060c0840135915088821115614b235760008081fd5b614b318e8c8487010161499f565b9083015250845250918601918601614a76565b80356001600160e01b0381168114613b0557600080fd5b600082601f830112614b6c57600080fd5b81356020614b7c613b6983613ab6565b82815260069290921b84018101918181019086841115614b9b57600080fd5b8286015b848110156140c75760408189031215614bb85760008081fd5b614bc0613a64565b614bc982613aee565b8152614bd6858301614b44565b81860152835291830191604001614b9f565b600082601f830112614bf957600080fd5b81356020614c09613b6983613ab6565b82815260059290921b84018101918181019086841115614c2857600080fd5b8286015b848110156140c75780356001600160401b0380821115614c4c5760008081fd5b9088019060a0828b03601f1901811315614c665760008081fd5b614c6e613a20565b614c79888501613aee565b815260408085013584811115614c8f5760008081fd5b614c9d8e8b83890101613b4a565b8a8401525060609350614cb1848601613aee565b908201526080614cc2858201613aee565b93820193909352920135908201528352918301918301614c2c565b600082601f830112614cee57600080fd5b81356020614cfe613b6983613ab6565b82815260069290921b84018101918181019086841115614d1d57600080fd5b8286015b848110156140c75760408189031215614d3a5760008081fd5b614d42613a64565b813581528482013585820152835291830191604001614d21565b60006020808385031215614d6f57600080fd5b82356001600160401b0380821115614d8657600080fd5b9084019060808287031215614d9a57600080fd5b614da26139f8565b823582811115614db157600080fd5b83016040818903811315614dc457600080fd5b614dcc613a64565b823585811115614ddb57600080fd5b8301601f81018b13614dec57600080fd5b8035614dfa613b6982613ab6565b81815260069190911b8201890190898101908d831115614e1957600080fd5b928a01925b82841015614e695785848f031215614e365760008081fd5b614e3e613a64565b8435614e4981613ad9565b8152614e56858d01614b44565b818d0152825292850192908a0190614e1e565b845250505082870135915084821115614e8157600080fd5b614e8d8a838501614b5b565b81880152835250508284013582811115614ea657600080fd5b614eb288828601614be8565b85830152506040830135935081841115614ecb57600080fd5b614ed787858501614cdd565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b84811015614f8457601f19868403018952815160a06001600160401b03808351168652868301518288880152614f4883880182613ce2565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101614f10565b5090979650505050505050565b6001600160a01b038516815260006020608081840152614fb46080840187614ef3565b83810360408581019190915286518083528388019284019060005b81811015614ff457845180518452860151868401529385019391830191600101614fcf565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561507957835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615042565b50508583015187820388850152805180835290840192506000918401905b808310156150d257835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615097565b50979650505050505050565b602081526000610ad26020830184615022565b60006020828403121561510357600080fd5b815161392081613b0a565b600181811c9082168061512257607f821691505b60208210810361514257634e487b7160e01b600052602260045260246000fd5b50919050565b60008083546151568161510e565b6001828116801561516e5760018114615183576151b2565b60ff19841687528215158302870194506151b2565b8760005260208060002060005b858110156151a95781548a820152908401908201615190565b50505082870194505b50929695505050505050565b600081546151cb8161510e565b8085526020600183811680156151e8576001811461520257615230565b60ff1985168884015283151560051b880183019550615230565b866000528260002060005b858110156152285781548a820186015290830190840161520d565b890184019650505b505050505092915050565b60408152600061524e6040830185613ce2565b82810360208401526148e781856151be565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561529657615296615260565b5092915050565b6040815260006152b06040830185614ef3565b82810360208401526148e78185615022565b6000602082840312156152d457600080fd5b81356001600160401b038111156152ea57600080fd5b61338484828501614365565b81810381811115610ad557610ad5615260565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061533957615339615309565b92169190910692915050565b8082028115828204841417610ad557610ad5615260565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261538f60a0870182613ce2565b9050606085015186820360608801526153a88282613ce2565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156150d257835180516001600160a01b03168352860151868301529285019260019290920191908401906153cb565b602081526000610ad2602083018461535c565b608081526000615423608083018761535c565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561546157600080fd5b835161546c81613b0a565b60208501519093506001600160401b0381111561548857600080fd5b8401601f8101861361549957600080fd5b80516154a7613b6982613b23565b8181528760208385010111156154bc57600080fd5b6154cd826020830160208601613cbe565b809450505050604084015190509250925092565b601f821115610d65576000816000526020600020601f850160051c8101602086101561550a5750805b601f850160051c820191505b8181101561552957828155600101615516565b505050505050565b81516001600160401b0381111561554a5761554a6139e2565b61555e81615558845461510e565b846154e1565b602080601f831160018114615593576000841561557b5750858301515b600019600386901b1c1916600185901b178555615529565b600085815260208120601f198616915b828110156155c2578886015182559484019460019091019084016155a3565b50858210156155e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610ad260a08301600185016151be565b80820180821115610ad557610ad5615260565b60ff8181168382160190811115610ad557610ad5615260565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b03808416806156a8576156a8615309565b92169190910492915050565b6000602082840312156156c657600080fd5b610ad282613fa3565b6000808335601e198436030181126156e657600080fd5b8301803591506001600160401b0382111561570057600080fd5b602001915036819003821315613d7357600080fd5b602081016006831061572957615729613ef6565b91905290565b60ff818116838216029081169081811461529657615296615260565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156157a35784546001600160a01b03168352600194850194928401920161577e565b50508481036060860152865180825290820192508187019060005b818110156157e35782516001600160a01b0316855293830193918301916001016157be565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b038086168352808516602084015250606060408301526148e76060830184613ce2565b8281526040602082015260006133846040830184613ce2565b6001600160401b03848116825283166020820152606081016133846040830184613f0c565b8481526158776020820185613f0c565b60806040820152600061588d6080830185613ce2565b905082606083015295945050505050565b6000602082840312156158b057600080fd5b815161392081613ad9565b60208152600082516101008060208501526158da610120850183613ce2565b915060208501516158f660408601826001600160401b03169052565b5060408501516001600160a01b03811660608601525060608501516080850152608085015161593060a08601826001600160a01b03169052565b5060a0850151601f19808685030160c087015261594d8483613ce2565b935060c08701519150808685030160e087015261596a8483613ce2565b935060e08701519150808685030183870152506157f38382613ce2565b60006020828403121561599957600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b84811015614f8457601f19868403018952815160a081518186526159e382870182613ce2565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615a1f8382613ce2565b60809485015197909401969096525050988401989250908301906001016159bd565b602081526000610ad260208301846159a0565b60008282518085526020808601955060208260051b8401016020860160005b84811015614f8457601f19868403018952615a8f838351613ce2565b98840198925090830190600101615a73565b60008151808452602080850194506020840160005b8381101561487057815163ffffffff1687529582019590820190600101615ab6565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615b406101a0850183613ce2565b91506040870151605f198086850301610120870152615b5f8483613ce2565b935060608901519150615b7c838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615ba582826159a0565b9150508281036020840152615bba8186615a54565b905082810360408401526157f38185615aa156fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/report_codec/report_codec.go b/core/gethwrappers/ccip/generated/report_codec/report_codec.go index 06ec6c7b41..c693335bc4 100644 --- a/core/gethwrappers/ccip/generated/report_codec/report_codec.go +++ b/core/gethwrappers/ccip/generated/report_codec/report_codec.go @@ -95,11 +95,12 @@ type OffRampCommitReport struct { PriceUpdates InternalPriceUpdates MerkleRoots []InternalMerkleRoot RmnSignatures []IRMNV2Signature + RmnRawVs *big.Int } var ReportCodecMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506113c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e610049366004610231565b610084565b60405161005b91906104ee565b60405180910390f35b610077610072366004610231565b6100a0565b60405161005b9190610833565b60608180602001905181019061009a9190610e6d565b92915050565b6040805160a08101825260608082018181526080830182905282526020808301829052928201528251909161009a918401810190840161122d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561012d5761012d6100db565b60405290565b60405160c0810167ffffffffffffffff8111828210171561012d5761012d6100db565b6040805190810167ffffffffffffffff8111828210171561012d5761012d6100db565b6040516060810167ffffffffffffffff8111828210171561012d5761012d6100db565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156101e3576101e36100db565b604052919050565b600067ffffffffffffffff821115610205576102056100db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561024357600080fd5b813567ffffffffffffffff81111561025a57600080fd5b8201601f8101841361026b57600080fd5b803561027e610279826101eb565b61019c565b81815285602083850101111561029357600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102cc5781810151838201526020016102b4565b50506000910152565b600081518084526102ed8160208601602086016102b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a08151818652610380828701826102d5565b91505073ffffffffffffffffffffffffffffffffffffffff868301511686860152604063ffffffff81840151168187015250606080830151868303828801526103c983826102d5565b608094850151979094019690965250509884019892509083019060010161033c565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561048c57858a830301845261047a8286516102d5565b948c0194938c01939150600101610460565b509e8a019e97505050938701935050600101610418565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104e3578151875295820195908201906001016104c7565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b8181101561067f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a08901526106026101408901826102d5565b9050604082015188820360c08a015261061b82826102d5565b915050606082015161064560e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a0820151915087810361012089015261066b818361031f565b97505050928c0192918c0191600101610582565b50505050506040820151878203604089015261069b82826103f8565b915050606082015187820360608901526106b582826104b2565b60809384015198909301979097525094509285019290850190600101610515565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104e3578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1683880152604090960195908201906001016106f8565b600082825180855260208086019550808260051b84010181860160005b848110156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a067ffffffffffffffff8083511686528683015182888801526107bb838801826102d5565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101610764565b60008151808452602080850194506020840160005b838110156104e357815180518852830151838801526040909601959082019060010161080c565b602080825282516060838301528051604060808501819052815160c086018190526000949392840191859160e08801905b808410156108c1578451805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1687830152938601936001939093019290820190610864565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160a0890152936108fb81866106e3565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08085830301604086015261093c8284610747565b925060408601519150808584030160608601525061095a82826107f7565b95945050505050565b600067ffffffffffffffff82111561097d5761097d6100db565b5060051b60200190565b805167ffffffffffffffff8116811461099f57600080fd5b919050565b600060a082840312156109b657600080fd5b6109be61010a565b9050815181526109d060208301610987565b60208201526109e160408301610987565b60408201526109f260608301610987565b6060820152610a0360808301610987565b608082015292915050565b600082601f830112610a1f57600080fd5b8151610a2d610279826101eb565b818152846020838601011115610a4257600080fd5b610a538260208301602087016102b1565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff8116811461099f57600080fd5b600082601f830112610a9057600080fd5b81516020610aa061027983610963565b82815260059290921b84018101918181019086841115610abf57600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610ae45760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610b1d5760008081fd5b610b2561010a565b8784015183811115610b375760008081fd5b610b458d8a83880101610a0e565b8252506040610b55818601610a5b565b8983015260608086015163ffffffff81168114610b725760008081fd5b808385015250608091508186015185811115610b8e5760008081fd5b610b9c8f8c838a0101610a0e565b9184019190915250919093015190830152508352918301918301610ac3565b509695505050505050565b600082601f830112610bd757600080fd5b81516020610be761027983610963565b82815260059290921b84018101918181019086841115610c0657600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610c2b5760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610c655760008081fd5b610c6d610133565b610c798c8986016109a4565b815260c084015183811115610c8e5760008081fd5b610c9c8d8a83880101610a0e565b898301525060e084015183811115610cb45760008081fd5b610cc28d8a83880101610a0e565b604083015250610cd56101008501610a5b565b60608201526101208401516080820152908301519082821115610cf85760008081fd5b610d068c8984870101610a7f565b60a08201528652505050918301918301610c0a565b600082601f830112610d2c57600080fd5b81516020610d3c61027983610963565b82815260059290921b84018101918181019086841115610d5b57600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610d7f57600080fd5b818901915089603f830112610d9357600080fd5b85820151610da361027982610963565b81815260059190911b830160400190878101908c831115610dc357600080fd5b604085015b83811015610dfc57805185811115610ddf57600080fd5b610dee8f6040838a0101610a0e565b845250918901918901610dc8565b50875250505092840192508301610d5f565b600082601f830112610e1f57600080fd5b81516020610e2f61027983610963565b8083825260208201915060208460051b870101935086841115610e5157600080fd5b602086015b84811015610bbb5780518352918301918301610e56565b60006020808385031215610e8057600080fd5b825167ffffffffffffffff80821115610e9857600080fd5b818501915085601f830112610eac57600080fd5b8151610eba61027982610963565b81815260059190911b83018401908481019088831115610ed957600080fd5b8585015b83811015610fd357805185811115610ef457600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610f295760008081fd5b610f3161010a565b610f3c898301610987565b815260408083015188811115610f525760008081fd5b610f608e8c83870101610bc6565b8b8401525060608084015189811115610f795760008081fd5b610f878f8d83880101610d1b565b8385015250608091508184015189811115610fa25760008081fd5b610fb08f8d83880101610e0e565b918401919091525060a09290920151918101919091528352918601918601610edd565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461099f57600080fd5b600082601f83011261101d57600080fd5b8151602061102d61027983610963565b82815260069290921b8401810191818101908684111561104c57600080fd5b8286015b84811015610bbb57604081890312156110695760008081fd5b611071610156565b61107a82610987565b8152611087858301610fe0565b81860152835291830191604001611050565b600082601f8301126110aa57600080fd5b815160206110ba61027983610963565b82815260059290921b840181019181810190868411156110d957600080fd5b8286015b84811015610bbb57805167ffffffffffffffff808211156110fe5760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156111375760008081fd5b61113f61010a565b61114a888501610987565b8152604080850151848111156111605760008081fd5b61116e8e8b83890101610a0e565b8a8401525060609350611182848601610987565b908201526080611193858201610987565b938201939093529201519082015283529183019183016110dd565b600082601f8301126111bf57600080fd5b815160206111cf61027983610963565b82815260069290921b840181019181810190868411156111ee57600080fd5b8286015b84811015610bbb576040818903121561120b5760008081fd5b611213610156565b8151815284820151858201528352918301916040016111f2565b6000602080838503121561124057600080fd5b825167ffffffffffffffff8082111561125857600080fd5b908401906060828703121561126c57600080fd5b611274610179565b82518281111561128357600080fd5b8301604081890381131561129657600080fd5b61129e610156565b8251858111156112ad57600080fd5b8301601f81018b136112be57600080fd5b80516112cc61027982610963565b81815260069190911b8201890190898101908d8311156112eb57600080fd5b928a01925b828410156113395785848f0312156113085760008081fd5b611310610156565b61131985610a5b565b81526113268c8601610fe0565b818d0152825292850192908a01906112f0565b84525050508287015191508482111561135157600080fd5b61135d8a83850161100c565b8188015283525050828401518281111561137657600080fd5b61138288828601611099565b8583015250604083015193508184111561139b57600080fd5b6113a7878585016111ae565b6040820152969550505050505056fea164736f6c6343000818000a", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"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\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506113e8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e61004936600461023a565b610084565b60405161005b91906104f7565b60405180910390f35b61007761007236600461023a565b6100a0565b60405161005b919061083c565b60608180602001905181019061009a9190610e85565b92915050565b6040805160c08101825260606080820181815260a08301829052825260208083018290529282018190526000908201528251909161009a9184018101908401611245565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610136576101366100e4565b60405290565b60405160c0810167ffffffffffffffff81118282101715610136576101366100e4565b6040805190810167ffffffffffffffff81118282101715610136576101366100e4565b6040516080810167ffffffffffffffff81118282101715610136576101366100e4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156101ec576101ec6100e4565b604052919050565b600067ffffffffffffffff82111561020e5761020e6100e4565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561024c57600080fd5b813567ffffffffffffffff81111561026357600080fd5b8201601f8101841361027457600080fd5b8035610287610282826101f4565b6101a5565b81815285602083850101111561029c57600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600081518084526102f68160208601602086016102ba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103f4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a08151818652610389828701826102de565b91505073ffffffffffffffffffffffffffffffffffffffff868301511686860152604063ffffffff81840151168187015250606080830151868303828801526103d283826102de565b6080948501519790940196909652505098840198925090830190600101610345565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104ac577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561049557858a83030184526104838286516102de565b948c0194938c01939150600101610469565b509e8a019e97505050938701935050600101610421565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104ec578151875295820195908201906001016104d0565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b81811015610688577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a089015261060b6101408901826102de565b9050604082015188820360c08a015261062482826102de565b915050606082015161064e60e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a082015191508781036101208901526106748183610328565b97505050928c0192918c019160010161058b565b5050505050604082015187820360408901526106a48282610401565b915050606082015187820360608901526106be82826104bb565b6080938401519890930197909752509450928501929085019060010161051e565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104ec578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168388015260409096019590820190600101610701565b600082825180855260208086019550808260051b84010181860160005b848110156103f4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a067ffffffffffffffff8083511686528683015182888801526107c4838801826102de565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161076d565b60008151808452602080850194506020840160005b838110156104ec578151805188528301518388015260409096019590820190600101610815565b602080825282516080838301528051604060a08501819052815160e08601819052600094939284019185916101008801905b808410156108cb578451805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168783015293860193600193909301929082019061086e565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160c08901529361090581866106ec565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808583030160408601526109468284610750565b92506040860151915080858403016060860152506109648282610800565b915050606084015160808401528091505092915050565b600067ffffffffffffffff821115610995576109956100e4565b5060051b60200190565b805167ffffffffffffffff811681146109b757600080fd5b919050565b600060a082840312156109ce57600080fd5b6109d6610113565b9050815181526109e86020830161099f565b60208201526109f96040830161099f565b6040820152610a0a6060830161099f565b6060820152610a1b6080830161099f565b608082015292915050565b600082601f830112610a3757600080fd5b8151610a45610282826101f4565b818152846020838601011115610a5a57600080fd5b610a6b8260208301602087016102ba565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff811681146109b757600080fd5b600082601f830112610aa857600080fd5b81516020610ab86102828361097b565b82815260059290921b84018101918181019086841115610ad757600080fd5b8286015b84811015610bd357805167ffffffffffffffff80821115610afc5760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610b355760008081fd5b610b3d610113565b8784015183811115610b4f5760008081fd5b610b5d8d8a83880101610a26565b8252506040610b6d818601610a73565b8983015260608086015163ffffffff81168114610b8a5760008081fd5b808385015250608091508186015185811115610ba65760008081fd5b610bb48f8c838a0101610a26565b9184019190915250919093015190830152508352918301918301610adb565b509695505050505050565b600082601f830112610bef57600080fd5b81516020610bff6102828361097b565b82815260059290921b84018101918181019086841115610c1e57600080fd5b8286015b84811015610bd357805167ffffffffffffffff80821115610c435760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610c7d5760008081fd5b610c8561013c565b610c918c8986016109bc565b815260c084015183811115610ca65760008081fd5b610cb48d8a83880101610a26565b898301525060e084015183811115610ccc5760008081fd5b610cda8d8a83880101610a26565b604083015250610ced6101008501610a73565b60608201526101208401516080820152908301519082821115610d105760008081fd5b610d1e8c8984870101610a97565b60a08201528652505050918301918301610c22565b600082601f830112610d4457600080fd5b81516020610d546102828361097b565b82815260059290921b84018101918181019086841115610d7357600080fd5b8286015b84811015610bd357805167ffffffffffffffff80821115610d9757600080fd5b818901915089603f830112610dab57600080fd5b85820151610dbb6102828261097b565b81815260059190911b830160400190878101908c831115610ddb57600080fd5b604085015b83811015610e1457805185811115610df757600080fd5b610e068f6040838a0101610a26565b845250918901918901610de0565b50875250505092840192508301610d77565b600082601f830112610e3757600080fd5b81516020610e476102828361097b565b8083825260208201915060208460051b870101935086841115610e6957600080fd5b602086015b84811015610bd35780518352918301918301610e6e565b60006020808385031215610e9857600080fd5b825167ffffffffffffffff80821115610eb057600080fd5b818501915085601f830112610ec457600080fd5b8151610ed26102828261097b565b81815260059190911b83018401908481019088831115610ef157600080fd5b8585015b83811015610feb57805185811115610f0c57600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610f415760008081fd5b610f49610113565b610f5489830161099f565b815260408083015188811115610f6a5760008081fd5b610f788e8c83870101610bde565b8b8401525060608084015189811115610f915760008081fd5b610f9f8f8d83880101610d33565b8385015250608091508184015189811115610fba5760008081fd5b610fc88f8d83880101610e26565b918401919091525060a09290920151918101919091528352918601918601610ef5565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146109b757600080fd5b600082601f83011261103557600080fd5b815160206110456102828361097b565b82815260069290921b8401810191818101908684111561106457600080fd5b8286015b84811015610bd357604081890312156110815760008081fd5b61108961015f565b6110928261099f565b815261109f858301610ff8565b81860152835291830191604001611068565b600082601f8301126110c257600080fd5b815160206110d26102828361097b565b82815260059290921b840181019181810190868411156110f157600080fd5b8286015b84811015610bd357805167ffffffffffffffff808211156111165760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d0301121561114f5760008081fd5b611157610113565b61116288850161099f565b8152604080850151848111156111785760008081fd5b6111868e8b83890101610a26565b8a840152506060935061119a84860161099f565b9082015260806111ab85820161099f565b938201939093529201519082015283529183019183016110f5565b600082601f8301126111d757600080fd5b815160206111e76102828361097b565b82815260069290921b8401810191818101908684111561120657600080fd5b8286015b84811015610bd357604081890312156112235760008081fd5b61122b61015f565b81518152848201518582015283529183019160400161120a565b6000602080838503121561125857600080fd5b825167ffffffffffffffff8082111561127057600080fd5b908401906080828703121561128457600080fd5b61128c610182565b82518281111561129b57600080fd5b830160408189038113156112ae57600080fd5b6112b661015f565b8251858111156112c557600080fd5b8301601f81018b136112d657600080fd5b80516112e46102828261097b565b81815260069190911b8201890190898101908d83111561130357600080fd5b928a01925b828410156113515785848f0312156113205760008081fd5b61132861015f565b61133185610a73565b815261133e8c8601610ff8565b818d0152825292850192908a0190611308565b84525050508287015191508482111561136957600080fd5b6113758a838501611024565b8188015283525050828401518281111561138e57600080fd5b61139a888286016110b1565b858301525060408301519350818411156113b357600080fd5b6113bf878585016111c6565b604082015260608301516060820152809450505050509291505056fea164736f6c6343000818000a", } var ReportCodecABI = ReportCodecMetaData.ABI @@ -529,7 +530,7 @@ func (_ReportCodec *ReportCodec) ParseLog(log types.Log) (generated.AbigenLog, e } func (ReportCodecCommitReportDecoded) Topic() common.Hash { - return common.HexToHash("0x31a4e1cb25733cdb9679561cd59cdc238d70a7d486f8bfc1f13242efd60fc29d") + return common.HexToHash("0x39ecb9cbf9994ec2d914cd3ec4bff76f953a004c8f16cd9d8fdd5e620b956834") } func (ReportCodecExecuteReportDecoded) Topic() common.Hash { diff --git a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go index bf210e2eb1..f830b9da14 100644 --- a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go +++ b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go @@ -54,21 +54,16 @@ type RMNRemoteSigner struct { NodeIndex uint64 } -type RMNRemoteVersionedConfig struct { - Version uint32 - Config RMNRemoteConfig -} - var RMNRemoteMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"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\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"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\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"components\":[{\"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\"}],\"internalType\":\"structRMNRemote.VersionedConfig\",\"name\":\"\",\"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\":[],\"name\":\"test\",\"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\":[{\"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\":\"destLaneUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNV2.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620018293803806200182983398101604081905262000034916200017e565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000d3565b5050506001600160401b0316608052620001b0565b336001600160a01b038216036200012d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200019157600080fd5b81516001600160401b0381168114620001a957600080fd5b9392505050565b608051611660620001c9600039600050506116606000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806379ba509711610076578063ccd5af001161005b578063ccd5af001461019a578063f2fde38b146101ac578063f8a8fd6d1461012857600080fd5b806379ba50971461016a5780638da5cb5b1461017257600080fd5b80631add205f116100a75780631add205f1461012a5780632cbc26bb1461013f578063397796f71461016357600080fd5b8063181f5a77146100c3578063198f0f7714610115575b600080fd5b6100ff6040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161010c9190610c4b565b60405180910390f35b610128610123366004610c65565b6101bf565b005b6101326105f0565b60405161010c9190610ca0565b61015361014d366004610d58565b50600090565b604051901515815260200161010c565b6000610153565b6101286106d6565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010c565b6101286101a8366004610f60565b5050565b6101286101ba366004611137565b610a0d565b6101c7610a23565b60015b6101d76020830183611154565b90508110156102a7576101ed6020830183611154565b828181106101fd576101fd6111c3565b905060400201602001602081019061021591906111f2565b67ffffffffffffffff1661022c6020840184611154565b61023760018561123e565b818110610246576102466111c3565b905060400201602001602081019061025e91906111f2565b67ffffffffffffffff161061029f576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016101ca565b506102b56020820182611154565b90506102c760608301604084016111f2565b67ffffffffffffffff161115610309576040517ffba0d9e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025b60018101541561040557600180820180546006926000929161032e919061123e565b8154811061033e5761033e6111c3565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600181018054806103a8576103a8611257565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffff0000000000000000000000000000000000000000000000000000000016905501905561030c565b5060005b6104166020830183611154565b905081101561054b57600660006104306020850185611154565b84818110610440576104406111c3565b6104569260206040909202019081019150611137565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff16156104b7576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600660006104ca6020860186611154565b858181106104da576104da6111c3565b6104f09260206040909202019081019150611137565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610409565b50806002610559828261133f565b5050600580546000919082906105749063ffffffff1661147a565b91906101000a81548163ffffffff021916908363ffffffff160217905590507f6cc65868ae41a007e6c3ed18ce591c123dd4e5864b421888c68ce92dae98cea460405180604001604052808363ffffffff168152602001846105d59061149d565b90526040516105e49190610ca0565b60405180910390a15050565b6105f8610b99565b60408051808201825260055463ffffffff1681528151606081018352600280548252600380548551602082810282018101909752818152949580870195858201939092909160009084015b828210156106b1576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff1681830152825260019092019101610643565b505050908252506002919091015467ffffffffffffffff166020909101529052919050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461075c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b84518110156109bf5760008582815181106107f5576107f56111c3565b602002602001015190506000600186601b8460000151856020015160405160008152602001604052604051610846949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610868573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166108e0576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610945576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205460ff166109a4576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250826109b08561161b565b945050508060010190506107d8565b5060045467ffffffffffffffff16821015610a06576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b610a15610a23565b610a1e81610aa4565b50565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610753565b3373ffffffffffffffffffffffffffffffffffffffff821603610b23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610753565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6040518060400160405280600063ffffffff168152602001610be260405180606001604052806000801916815260200160608152602001600067ffffffffffffffff1681525090565b905290565b6000815180845260005b81811015610c0d57602081850181015186830182015201610bf1565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610c5e6020830184610be7565b9392505050565b600060208284031215610c7757600080fd5b813567ffffffffffffffff811115610c8e57600080fd5b820160608185031215610c5e57600080fd5b6000602080835263ffffffff8451168184015280840151604080604086015260c0850182516060870152838301516060608088015281815180845260e0890191508683019350600092505b80831015610d34578351805173ffffffffffffffffffffffffffffffffffffffff16835287015167ffffffffffffffff1687830152928601926001929092019190840190610ceb565b50604085015167ffffffffffffffff811660a08a0152955098975050505050505050565b600060208284031215610d6a57600080fd5b81357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081168114610c5e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610dec57610dec610d9a565b60405290565b60405160a0810167ffffffffffffffff81118282101715610dec57610dec610d9a565b6040516060810167ffffffffffffffff81118282101715610dec57610dec610d9a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610e7f57610e7f610d9a565b604052919050565b600067ffffffffffffffff821115610ea157610ea1610d9a565b5060051b60200190565b67ffffffffffffffff81168114610a1e57600080fd5b8035610ecc81610eab565b919050565b600082601f830112610ee257600080fd5b81356020610ef7610ef283610e87565b610e38565b82815260069290921b84018101918181019086841115610f1657600080fd5b8286015b84811015610f555760408189031215610f335760008081fd5b610f3b610dc9565b813581528482013585820152835291830191604001610f1a565b509695505050505050565b60008060408385031215610f7357600080fd5b823567ffffffffffffffff80821115610f8b57600080fd5b818501915085601f830112610f9f57600080fd5b81356020610faf610ef283610e87565b82815260059290921b84018101918181019089841115610fce57600080fd5b8286015b848110156110e757803586811115610fe957600080fd5b87017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060a0828e038201121561101e57600080fd5b611026610df2565b8683013561103381610eab565b815260408301358981111561104757600080fd5b8301603f81018f1361105857600080fd5b878101358a81111561106c5761106c610d9a565b61107c8985601f84011601610e38565b93508084528f604082840101111561109357600080fd5b80604083018a8601376000898286010152505081878201526110b760608401610ec1565b60408201526110c860808401610ec1565b606082015260a092909201356080830152508352918301918301610fd2565b50965050860135925050808211156110fe57600080fd5b5061110b85828601610ed1565b9150509250929050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a1e57600080fd5b60006020828403121561114957600080fd5b8135610c5e81611115565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261118957600080fd5b83018035915067ffffffffffffffff8211156111a457600080fd5b6020019150600681901b36038213156111bc57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561120457600080fd5b8135610c5e81610eab565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156112515761125161120f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000813561125181610eab565b813561129e81611115565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff0000000000000000000000000000000000000000821617835560208401356112ee81610eab565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261137d57600080fd5b8401803567ffffffffffffffff81111561139657600080fd5b6020820191508060061b36038213156113ae57600080fd5b680100000000000000008111156113c7576113c7610d9a565b8254818455808210156113fc576000848152602081208381019083015b808210156113f857828255908701906113e4565b5050505b50600092835260208320925b8181101561142c5761141a8385611293565b92840192604092909201918401611408565b50505050506101a861144060408401611286565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff8083168181036114935761149361120f565b6001019392505050565b6000606082360312156114af57600080fd5b6114b7610e15565b8235815260208084013567ffffffffffffffff8111156114d657600080fd5b840136601f8201126114e757600080fd5b80356114f5610ef282610e87565b81815260069190911b8201830190838101903683111561151457600080fd5b928401925b8284101561156a57604084360312156115325760008081fd5b61153a610dc9565b843561154581611115565b81528486013561155481610eab565b8187015282526040939093019290840190611519565b8085870152505050505061158060408401610ec1565b604082015292915050565b81811015611608577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c01526115d7858c0182610be7565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a529850968901969289019260010161158b565b50969d9c50505050505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361164c5761164c61120f565b506001019056fea164736f6c6343000818000a", + 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\":\"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\":\"structIRMNV2.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002131380380620021318339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051611f33620001fe600039600081816102410152610a920152611f336000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379ba509711610097578063d881e09211610066578063d881e0921461021e578063eaa83ddd14610233578063f2fde38b1461026b578063f8bb876e1461027e57600080fd5b806379ba5097146101c85780638d8741cb146101d05780638da5cb5b146101e35780639a19b3291461020b57600080fd5b80632cbc26bb116100d35780632cbc26bb14610177578063397796f71461019a57806362eed415146101a25780636d2d3993146101b557600080fd5b8063181f5a77146100fa578063198f0f771461014c5780631add205f14610161575b600080fd5b6101366040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b6040516101439190611380565b60405180910390f35b61015f61015a366004611393565b610291565b005b61016961063d565b6040516101439291906113ce565b61018a6101853660046114ac565b610735565b6040519015158152602001610143565b61018a610792565b61015f6101b03660046114ac565b61080c565b61015f6101c33660046114ac565b610880565b61015f6108f0565b61015f6101de366004611535565b6109f2565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610143565b61015f6102193660046116bc565b610d46565b610226610e43565b6040516101439190611759565b60405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610143565b61015f6102793660046117bf565b610e4f565b61015f61028c3660046116bc565b610e63565b610299610f55565b60015b6102a960208301836117dc565b9050811015610379576102bf60208301836117dc565b828181106102cf576102cf611844565b90506040020160200160208101906102e79190611894565b67ffffffffffffffff166102fe60208401846117dc565b6103096001856118e0565b81811061031857610318611844565b90506040020160200160208101906103309190611894565b67ffffffffffffffff1610610371576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60010161029c565b5061038760208201826117dc565b90506103996060830160408401611894565b67ffffffffffffffff1611156103db576040517ffba0d9e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b801561046d576008600060036103f66001856118e0565b8154811061040657610406611844565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610466816118f3565b90506103df565b5060005b61047e60208301836117dc565b90508110156105b3576008600061049860208501856117dc565b848181106104a8576104a8611844565b6104be92602060409092020190810191506117bf565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561051f576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016008600061053260208601866117dc565b8581811061054257610542611844565b61055892602060409092020190810191506117bf565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610471565b508060026105c182826119e1565b5050600580546000919082906105dc9063ffffffff16611b1c565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c836040516106319190611b3f565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561070c576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff168183015282526001909201910161069e565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b60006107416006610fd8565b60000361075057506000919050565b61075b600683610fe2565b8061078c575061078c60067f0100000000000000000000000000000100000000000000000000000000000000610fe2565b92915050565b600061079e6006610fd8565b6000036107ab5750600090565b6107d660067f0100000000000000000000000000000000000000000000000000000000000000610fe2565b80610807575061080760067f0100000000000000000000000000000100000000000000000000000000000000610fe2565b905090565b60408051600180825281830190925260009160208083019080368337019050509050818160008151811061084257610842611844565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261087c81610e63565b5050565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106108b6576108b6611844565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261087c81610d46565b60015473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60055463ffffffff16600003610a34576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045467ffffffffffffffff16821015610a7a576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8716606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610b16888a611c49565b9052604051610b29929190602001611da9565b60405160208183030381529060405280519060200120905060008060005b85811015610d3a57600184610b6182841b8816601b611ede565b898985818110610b7357610b73611844565b905060400201600001358a8a86818110610b8f57610b8f611844565b9050604002016020013560405160008152602001604052604051610bcf949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610bf1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610c69576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610cce576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610d2d576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610b47565b50505050505050505050565b610d4e610f55565b60005b8151811015610e0857610d87828281518110610d6f57610d6f611844565b6020026020010151600661102090919063ffffffff16565b610e0057818181518110610d9d57610d9d611844565b60200260200101516040517f73281fa100000000000000000000000000000000000000000000000000000000815260040161096d91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610d51565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e389190611759565b60405180910390a150565b6060610807600661104e565b610e57610f55565b610e608161105b565b50565b610e6b610f55565b60005b8151811015610f2557610ea4828281518110610e8c57610e8c611844565b6020026020010151600661115090919063ffffffff16565b610f1d57818181518110610eba57610eba611844565b60200260200101516040517f19d5c79b00000000000000000000000000000000000000000000000000000000815260040161096d91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610e6e565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e389190611759565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161096d565b565b600061078c825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b6000611019837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841661117e565b6060600061101983611271565b3373ffffffffffffffffffffffffffffffffffffffff8216036110da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161096d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611019837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166112cd565b600081815260018301602052604081205480156112675760006111a26001836118e0565b85549091506000906111b6906001906118e0565b905080821461121b5760008660000182815481106111d6576111d6611844565b90600052602060002001549050808760000184815481106111f9576111f9611844565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061122c5761122c611ef7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061078c565b600091505061078c565b6060816000018054806020026020016040519081016040528092919081815260200182805480156112c157602002820191906000526020600020905b8154815260200190600101908083116112ad575b50505050509050919050565b60008181526001830160205260408120546113145750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561078c565b50600061078c565b6000815180845260005b8181101561134257602081850181015186830182015201611326565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611019602083018461131c565b6000602082840312156113a557600080fd5b813567ffffffffffffffff8111156113bc57600080fd5b82016060818503121561101957600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b80831015611453578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff168583015292840192600192909201919085019061140a565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146114a757600080fd5b919050565b6000602082840312156114be57600080fd5b61101982611477565b73ffffffffffffffffffffffffffffffffffffffff81168114610e6057600080fd5b60008083601f8401126114fb57600080fd5b50813567ffffffffffffffff81111561151357600080fd5b6020830191508360208260061b850101111561152e57600080fd5b9250929050565b6000806000806000806080878903121561154e57600080fd5b8635611559816114c7565b9550602087013567ffffffffffffffff8082111561157657600080fd5b818901915089601f83011261158a57600080fd5b81358181111561159957600080fd5b8a60208260051b85010111156115ae57600080fd5b6020830197508096505060408901359150808211156115cc57600080fd5b506115d989828a016114e9565b979a9699509497949695606090950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715611643576116436115f1565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611690576116906115f1565b604052919050565b600067ffffffffffffffff8211156116b2576116b26115f1565b5060051b60200190565b600060208083850312156116cf57600080fd5b823567ffffffffffffffff8111156116e657600080fd5b8301601f810185136116f757600080fd5b803561170a61170582611698565b611649565b81815260059190911b8201830190838101908783111561172957600080fd5b928401925b8284101561174e5761173f84611477565b8252928401929084019061172e565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156117b35783517fffffffffffffffffffffffffffffffff000000000000000000000000000000001683529284019291840191600101611775565b50909695505050505050565b6000602082840312156117d157600080fd5b8135611019816114c7565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261181157600080fd5b83018035915067ffffffffffffffff82111561182c57600080fd5b6020019150600681901b360382131561152e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610e6057600080fd5b80356114a781611873565b6000602082840312156118a657600080fd5b813561101981611873565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561078c5761078c6118b1565b600081611902576119026118b1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000813561078c81611873565b8135611940816114c7565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff00000000000000000000000000000000000000008216178355602084013561199081611873565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611a1f57600080fd5b8401803567ffffffffffffffff811115611a3857600080fd5b6020820191508060061b3603821315611a5057600080fd5b68010000000000000000811115611a6957611a696115f1565b825481845580821015611a9e576000848152602081208381019083015b80821015611a9a5782825590870190611a86565b5050505b50600092835260208320925b81811015611ace57611abc8385611935565b92840192604092909201918401611aaa565b505050505061087c611ae260408401611928565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611b3557611b356118b1565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611b8457600080fd5b8501828101903567ffffffffffffffff80821115611ba157600080fd5b8160061b3603831315611bb357600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611c1e578535611be1816114c7565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611c0681611873565b83168188015294810194600194909401938101611bce565b611c2a60408b01611889565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611c5761170584611698565b80848252602080830192508560051b850136811115611c7557600080fd5b855b81811015611d9d57803567ffffffffffffffff80821115611c985760008081fd5b818901915060a08236031215611cae5760008081fd5b611cb6611620565b8235611cc181611873565b81528286013582811115611cd55760008081fd5b8301601f3681830112611ce85760008081fd5b813584811115611cfa57611cfa6115f1565b611d29897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601611649565b94508085523689828501011115611d4257600091508182fd5b808984018a8701376000898287010152505050818682015260409150611d69828401611889565b8282015260609150611d7c828401611889565b91810191909152608091820135918101919091528552938201938201611c77565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611ecb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611e9a858c018261131c565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611e4e565b50969d9c50505050505050505050505050565b60ff818116838216019081111561078c5761078c6118b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var RMNRemoteABI = RMNRemoteMetaData.ABI var RMNRemoteBin = RMNRemoteMetaData.Bin -func DeployRMNRemote(auth *bind.TransactOpts, backend bind.ContractBackend, chainSelector uint64) (common.Address, *types.Transaction, *RMNRemote, error) { +func DeployRMNRemote(auth *bind.TransactOpts, backend bind.ContractBackend, localChainSelector uint64) (common.Address, *types.Transaction, *RMNRemote, error) { parsed, err := RMNRemoteMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -77,7 +72,7 @@ func DeployRMNRemote(auth *bind.TransactOpts, backend bind.ContractBackend, chai return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNRemoteBin), backend, chainSelector) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNRemoteBin), backend, localChainSelector) if err != nil { return common.Address{}, nil, nil, err } @@ -200,25 +195,77 @@ func (_RMNRemote *RMNRemoteTransactorRaw) Transact(opts *bind.TransactOpts, meth return _RMNRemote.Contract.contract.Transact(opts, method, params...) } -func (_RMNRemote *RMNRemoteCaller) GetVersionedConfig(opts *bind.CallOpts) (RMNRemoteVersionedConfig, error) { +func (_RMNRemote *RMNRemoteCaller) GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) { var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "getVersionedConfig") + err := _RMNRemote.contract.Call(opts, &out, "getCursedSubjects") + + if err != nil { + return *new([][16]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][16]byte)).(*[][16]byte) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) GetCursedSubjects() ([][16]byte, error) { + return _RMNRemote.Contract.GetCursedSubjects(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) GetCursedSubjects() ([][16]byte, error) { + return _RMNRemote.Contract.GetCursedSubjects(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) GetLocalChainSelector(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "getLocalChainSelector") if err != nil { - return *new(RMNRemoteVersionedConfig), err + return *new(uint64), err } - out0 := *abi.ConvertType(out[0], new(RMNRemoteVersionedConfig)).(*RMNRemoteVersionedConfig) + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) return out0, err } -func (_RMNRemote *RMNRemoteSession) GetVersionedConfig() (RMNRemoteVersionedConfig, error) { +func (_RMNRemote *RMNRemoteSession) GetLocalChainSelector() (uint64, error) { + return _RMNRemote.Contract.GetLocalChainSelector(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) GetLocalChainSelector() (uint64, error) { + return _RMNRemote.Contract.GetLocalChainSelector(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) GetVersionedConfig(opts *bind.CallOpts) (GetVersionedConfig, + + error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "getVersionedConfig") + + outstruct := new(GetVersionedConfig) + if err != nil { + return *outstruct, err + } + + outstruct.Version = *abi.ConvertType(out[0], new(uint32)).(*uint32) + outstruct.Config = *abi.ConvertType(out[1], new(RMNRemoteConfig)).(*RMNRemoteConfig) + + return *outstruct, err + +} + +func (_RMNRemote *RMNRemoteSession) GetVersionedConfig() (GetVersionedConfig, + + error) { return _RMNRemote.Contract.GetVersionedConfig(&_RMNRemote.CallOpts) } -func (_RMNRemote *RMNRemoteCallerSession) GetVersionedConfig() (RMNRemoteVersionedConfig, error) { +func (_RMNRemote *RMNRemoteCallerSession) GetVersionedConfig() (GetVersionedConfig, + + error) { return _RMNRemote.Contract.GetVersionedConfig(&_RMNRemote.CallOpts) } @@ -310,9 +357,9 @@ func (_RMNRemote *RMNRemoteCallerSession) TypeAndVersion() (string, error) { return _RMNRemote.Contract.TypeAndVersion(&_RMNRemote.CallOpts) } -func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, destLaneUpdates []InternalMerkleRoot, signatures []IRMNV2Signature) error { +func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNV2Signature, rawVs *big.Int) error { var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "verify", destLaneUpdates, signatures) + err := _RMNRemote.contract.Call(opts, &out, "verify", offrampAddress, merkleRoots, signatures, rawVs) if err != nil { return err @@ -322,12 +369,12 @@ func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, destLaneUpdates [ } -func (_RMNRemote *RMNRemoteSession) Verify(destLaneUpdates []InternalMerkleRoot, signatures []IRMNV2Signature) error { - return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, destLaneUpdates, signatures) +func (_RMNRemote *RMNRemoteSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNV2Signature, rawVs *big.Int) error { + return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures, rawVs) } -func (_RMNRemote *RMNRemoteCallerSession) Verify(destLaneUpdates []InternalMerkleRoot, signatures []IRMNV2Signature) error { - return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, destLaneUpdates, signatures) +func (_RMNRemote *RMNRemoteCallerSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNV2Signature, rawVs *big.Int) error { + return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures, rawVs) } func (_RMNRemote *RMNRemoteTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { @@ -342,28 +389,40 @@ func (_RMNRemote *RMNRemoteTransactorSession) AcceptOwnership() (*types.Transact return _RMNRemote.Contract.AcceptOwnership(&_RMNRemote.TransactOpts) } -func (_RMNRemote *RMNRemoteTransactor) SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "setConfig", newConfig) +func (_RMNRemote *RMNRemoteTransactor) Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "curse", subject) } -func (_RMNRemote *RMNRemoteSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { - return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) +func (_RMNRemote *RMNRemoteSession) Curse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse(&_RMNRemote.TransactOpts, subject) } -func (_RMNRemote *RMNRemoteTransactorSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { - return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) +func (_RMNRemote *RMNRemoteTransactorSession) Curse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactor) Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "curse0", subjects) +} + +func (_RMNRemote *RMNRemoteSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse0(&_RMNRemote.TransactOpts, subjects) } -func (_RMNRemote *RMNRemoteTransactor) Test(opts *bind.TransactOpts) (*types.Transaction, error) { - return _RMNRemote.contract.Transact(opts, "test") +func (_RMNRemote *RMNRemoteTransactorSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse0(&_RMNRemote.TransactOpts, subjects) } -func (_RMNRemote *RMNRemoteSession) Test() (*types.Transaction, error) { - return _RMNRemote.Contract.Test(&_RMNRemote.TransactOpts) +func (_RMNRemote *RMNRemoteTransactor) SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "setConfig", newConfig) } -func (_RMNRemote *RMNRemoteTransactorSession) Test() (*types.Transaction, error) { - return _RMNRemote.Contract.Test(&_RMNRemote.TransactOpts) +func (_RMNRemote *RMNRemoteSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { + return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) +} + +func (_RMNRemote *RMNRemoteTransactorSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { + return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) } func (_RMNRemote *RMNRemoteTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { @@ -378,6 +437,30 @@ func (_RMNRemote *RMNRemoteTransactorSession) TransferOwnership(to common.Addres return _RMNRemote.Contract.TransferOwnership(&_RMNRemote.TransactOpts, to) } +func (_RMNRemote *RMNRemoteTransactor) Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "uncurse", subject) +} + +func (_RMNRemote *RMNRemoteSession) Uncurse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactorSession) Uncurse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactor) Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "uncurse0", subjects) +} + +func (_RMNRemote *RMNRemoteSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse0(&_RMNRemote.TransactOpts, subjects) +} + +func (_RMNRemote *RMNRemoteTransactorSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse0(&_RMNRemote.TransactOpts, subjects) +} + type RMNRemoteConfigSetIterator struct { Event *RMNRemoteConfigSet @@ -439,22 +522,33 @@ func (it *RMNRemoteConfigSetIterator) Close() error { } type RMNRemoteConfigSet struct { - VersionedConfig RMNRemoteVersionedConfig - Raw types.Log + Version uint32 + Config RMNRemoteConfig + Raw types.Log } -func (_RMNRemote *RMNRemoteFilterer) FilterConfigSet(opts *bind.FilterOpts) (*RMNRemoteConfigSetIterator, error) { +func (_RMNRemote *RMNRemoteFilterer) FilterConfigSet(opts *bind.FilterOpts, version []uint32) (*RMNRemoteConfigSetIterator, error) { - logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "ConfigSet") + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "ConfigSet", versionRule) if err != nil { return nil, err } return &RMNRemoteConfigSetIterator{contract: _RMNRemote.contract, event: "ConfigSet", logs: logs, sub: sub}, nil } -func (_RMNRemote *RMNRemoteFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet) (event.Subscription, error) { +func (_RMNRemote *RMNRemoteFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet, version []uint32) (event.Subscription, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } - logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "ConfigSet") + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "ConfigSet", versionRule) if err != nil { return nil, err } @@ -495,6 +589,123 @@ func (_RMNRemote *RMNRemoteFilterer) ParseConfigSet(log types.Log) (*RMNRemoteCo return event, nil } +type RMNRemoteCursedIterator struct { + Event *RMNRemoteCursed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteCursedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteCursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteCursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteCursedIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteCursedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteCursed struct { + Subjects [][16]byte + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterCursed(opts *bind.FilterOpts) (*RMNRemoteCursedIterator, error) { + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "Cursed") + if err != nil { + return nil, err + } + return &RMNRemoteCursedIterator{contract: _RMNRemote.contract, event: "Cursed", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteCursed) (event.Subscription, error) { + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "Cursed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteCursed) + if err := _RMNRemote.contract.UnpackLog(event, "Cursed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMNRemote *RMNRemoteFilterer) ParseCursed(log types.Log) (*RMNRemoteCursed, error) { + event := new(RMNRemoteCursed) + if err := _RMNRemote.contract.UnpackLog(event, "Cursed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + type RMNRemoteOwnershipTransferRequestedIterator struct { Event *RMNRemoteOwnershipTransferRequested @@ -767,14 +978,140 @@ func (_RMNRemote *RMNRemoteFilterer) ParseOwnershipTransferred(log types.Log) (* return event, nil } +type RMNRemoteUncursedIterator struct { + Event *RMNRemoteUncursed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteUncursedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteUncursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteUncursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteUncursedIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteUncursedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteUncursed struct { + Subjects [][16]byte + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterUncursed(opts *bind.FilterOpts) (*RMNRemoteUncursedIterator, error) { + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "Uncursed") + if err != nil { + return nil, err + } + return &RMNRemoteUncursedIterator{contract: _RMNRemote.contract, event: "Uncursed", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteUncursed) (event.Subscription, error) { + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "Uncursed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteUncursed) + if err := _RMNRemote.contract.UnpackLog(event, "Uncursed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_RMNRemote *RMNRemoteFilterer) ParseUncursed(log types.Log) (*RMNRemoteUncursed, error) { + event := new(RMNRemoteUncursed) + if err := _RMNRemote.contract.UnpackLog(event, "Uncursed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetVersionedConfig struct { + Version uint32 + Config RMNRemoteConfig +} + func (_RMNRemote *RMNRemote) ParseLog(log types.Log) (generated.AbigenLog, error) { switch log.Topics[0] { case _RMNRemote.abi.Events["ConfigSet"].ID: return _RMNRemote.ParseConfigSet(log) + case _RMNRemote.abi.Events["Cursed"].ID: + return _RMNRemote.ParseCursed(log) case _RMNRemote.abi.Events["OwnershipTransferRequested"].ID: return _RMNRemote.ParseOwnershipTransferRequested(log) case _RMNRemote.abi.Events["OwnershipTransferred"].ID: return _RMNRemote.ParseOwnershipTransferred(log) + case _RMNRemote.abi.Events["Uncursed"].ID: + return _RMNRemote.ParseUncursed(log) default: return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) @@ -782,7 +1119,11 @@ func (_RMNRemote *RMNRemote) ParseLog(log types.Log) (generated.AbigenLog, error } func (RMNRemoteConfigSet) Topic() common.Hash { - return common.HexToHash("0x6cc65868ae41a007e6c3ed18ce591c123dd4e5864b421888c68ce92dae98cea4") + return common.HexToHash("0x7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c") +} + +func (RMNRemoteCursed) Topic() common.Hash { + return common.HexToHash("0x1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f74") } func (RMNRemoteOwnershipTransferRequested) Topic() common.Hash { @@ -793,12 +1134,22 @@ func (RMNRemoteOwnershipTransferred) Topic() common.Hash { return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") } +func (RMNRemoteUncursed) Topic() common.Hash { + return common.HexToHash("0x0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba1") +} + func (_RMNRemote *RMNRemote) Address() common.Address { return _RMNRemote.address } type RMNRemoteInterface interface { - GetVersionedConfig(opts *bind.CallOpts) (RMNRemoteVersionedConfig, error) + GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) + + GetLocalChainSelector(opts *bind.CallOpts) (uint64, error) + + GetVersionedConfig(opts *bind.CallOpts) (GetVersionedConfig, + + error) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) @@ -808,22 +1159,34 @@ type RMNRemoteInterface interface { TypeAndVersion(opts *bind.CallOpts) (string, error) - Verify(opts *bind.CallOpts, destLaneUpdates []InternalMerkleRoot, signatures []IRMNV2Signature) error + Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNV2Signature, rawVs *big.Int) error AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) - SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) + Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) + + Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) - Test(opts *bind.TransactOpts) (*types.Transaction, error) + SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) - FilterConfigSet(opts *bind.FilterOpts) (*RMNRemoteConfigSetIterator, error) + Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) + + Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) + + FilterConfigSet(opts *bind.FilterOpts, version []uint32) (*RMNRemoteConfigSetIterator, error) - WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet) (event.Subscription, error) + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet, version []uint32) (event.Subscription, error) ParseConfigSet(log types.Log) (*RMNRemoteConfigSet, error) + FilterCursed(opts *bind.FilterOpts) (*RMNRemoteCursedIterator, error) + + WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteCursed) (event.Subscription, error) + + ParseCursed(log types.Log) (*RMNRemoteCursed, error) + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferRequestedIterator, error) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) @@ -836,6 +1199,12 @@ type RMNRemoteInterface interface { ParseOwnershipTransferred(log types.Log) (*RMNRemoteOwnershipTransferred, error) + FilterUncursed(opts *bind.FilterOpts) (*RMNRemoteUncursedIterator, error) + + WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteUncursed) (event.Subscription, error) + + ParseUncursed(log types.Log) (*RMNRemoteUncursed, error) + ParseLog(log types.Log) (generated.AbigenLog, error) Address() common.Address 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 c71e5d53dd..8a70af06e5 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 @@ -5,8 +5,8 @@ burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoo burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 6333d0314d0bd29e75ea5e05fe62a4516ade0c6db91c30b6f93645035db52ed8 burn_with_from_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.bin 08ed1235dda921ce8841b26aa18d0c0f36db4884779dd7670857159801b6d597 ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin f67d4a98804a9534a6554da3a57779632d55ad76db5ecc16ade74774769cdd69 -ccip_encoding_utils: ../../../contracts/solc/v0.8.24/CCIPEncodingUtils/CCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/CCIPEncodingUtils/CCIPEncodingUtils.bin 1d48b49fc0668c4f8c5e19a208cf4cae124a9a5c361e7900fbc35b97a62dd1bc -ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin f6405e2c1e76b22810953572079710a5aa28d1171c70d3a0dc3ca8b365c8df1c +ccip_encoding_utils: ../../../contracts/solc/v0.8.24/CCIPEncodingUtils/CCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/CCIPEncodingUtils/CCIPEncodingUtils.bin ebabd5311ad4374df0f2f5cd5640bb58d938d92f5a82962ac4df7b6e5af2c197 +ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 1181c7150062d6f0793beb50cb6b984c7f7adef0b9528ef1b419923fffcfdcac commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin 274d87db70b643e00ab0a7e7845bb4b791f3b613bfc87708d33fc5a8369e2a41 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin f7128dcc2ee6dbcbc976288abcc16970ffb19b59412c5202ef6b259d2007f801 ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de @@ -24,15 +24,15 @@ multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRate multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 04b6b261dd71925670bf4d904aaf7bf08543452009feefb88e07d4c49d12e969 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin d507c3ac70a7d1033b75151c1e5b854b41aaee164dfaa3e5477de400db1aa1f7 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 2eb54a0993aee70490421597d0ada1de92abe0929d415b56f527ba52050bb948 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 941b18b4e2aef977195fefba514e17c9475667e6f8513b18cabfb07ff90136ce onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 1f31a62ebb3fa5f4702ee27d4fa86604de5afff56787ef67c8dac764eefd2956 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353 -report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 314427fc02cbf208d6b27197b89bb98bb81d1b9b18dc46e6a761cdc024b1e538 +report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 7413576693f76bac7c01fbaec4a161d37a1de51b13dcab78455d2c484ed938b1 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 c58cc9f0102413373f45882e87d69b4bf9a4f4516ecfa866584618a1384a8416 +rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin ed08711d211cbe7e2ed389838864a33044fa5a95c4a2fcdeb4ac049d1c225475 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 diff --git a/tools/ci/ccip_lcov_prune b/tools/ci/ccip_lcov_prune index 494b2d526c..9ec51e5353 100755 --- a/tools/ci/ccip_lcov_prune +++ b/tools/ci/ccip_lcov_prune @@ -27,4 +27,5 @@ lcov --remove $1 -o $2 \ 'src/v0.8/tests/MockV3Aggregator.sol' \ 'src/v0.8/ccip/applications/CCIPClientExample.sol' \ 'src/v0.8/ccip/pools/BurnWithFromMintTokenPool.sol' \ + 'src/v0.8/ccip/rmn/RMNHome.sol' \ --rc lcov_branch_coverage=1 \ No newline at end of file