diff --git a/.changeset/angry-fishes-ring.md b/.changeset/angry-fishes-ring.md deleted file mode 100644 index 86671967372..00000000000 --- a/.changeset/angry-fishes-ring.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"chainlink": minor ---- - -#internal add getNextDonId() and getNodes(bytes32[] calldata p2pIds) in CapabilitiesRegistry and define interface for node info - - -PR issue: CCIP-3569 \ No newline at end of file diff --git a/.changeset/brave-ads-explode.md b/.changeset/brave-ads-explode.md deleted file mode 100644 index 4be608e2d1d..00000000000 --- a/.changeset/brave-ads-explode.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"chainlink": patch ---- - -Remove finality depth as the default value for minConfirmation for tx jobs. -Update the sql query for fetching pending callback transactions: -if minConfirmation is not null, we check difference if the current block - tx block > minConfirmation -else we check if the tx block is <= finalizedBlock -#updated diff --git a/.changeset/chilled-months-bow.md b/.changeset/chilled-months-bow.md deleted file mode 100644 index d3bbf7f97e3..00000000000 --- a/.changeset/chilled-months-bow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added oracle support in standard capabilities diff --git a/.changeset/chilled-plants-clap.md b/.changeset/chilled-plants-clap.md deleted file mode 100644 index 2a23b0960f1..00000000000 --- a/.changeset/chilled-plants-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -The findBroadcastedAttempts in detectStuckTransactionsHeuristic can returns uninitialized struct that potentially cause nil pointer error. Changed the return type of findBroadcastedAttempts to be pointers and added nil pointer check. #bugfix diff --git a/.changeset/chilly-crews-retire.md b/.changeset/chilly-crews-retire.md deleted file mode 100644 index 28b531a9ddb..00000000000 --- a/.changeset/chilly-crews-retire.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added log-event-trigger LOOPP capability, using ChainReader diff --git a/.changeset/cool-owls-laugh.md b/.changeset/cool-owls-laugh.md new file mode 100644 index 00000000000..a3667ed20e0 --- /dev/null +++ b/.changeset/cool-owls-laugh.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +Bump to start the next version diff --git a/.changeset/cuddly-colts-speak.md b/.changeset/cuddly-colts-speak.md deleted file mode 100644 index ab16cc83123..00000000000 --- a/.changeset/cuddly-colts-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Fix for Mercury transmitter decoding reports of a different codec version #internal diff --git a/.changeset/curly-baboons-enjoy.md b/.changeset/curly-baboons-enjoy.md deleted file mode 100644 index 440f394d23b..00000000000 --- a/.changeset/curly-baboons-enjoy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Added the compute unit limit estimation feature for the Solana TXM #added diff --git a/.changeset/curvy-eyes-own.md b/.changeset/curvy-eyes-own.md deleted file mode 100644 index 30e72a7cf57..00000000000 --- a/.changeset/curvy-eyes-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Update dynamic fee types to align with geth #internal diff --git a/.changeset/early-rules-yell.md b/.changeset/early-rules-yell.md deleted file mode 100644 index 718f48063e8..00000000000 --- a/.changeset/early-rules-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#updated support aptos creation in chain config UI diff --git a/.changeset/eighty-bulldogs-smile.md b/.changeset/eighty-bulldogs-smile.md deleted file mode 100644 index c91d0cf58b7..00000000000 --- a/.changeset/eighty-bulldogs-smile.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Use ApplyDefaultsAndValidate diff --git a/.changeset/eleven-olives-accept.md b/.changeset/eleven-olives-accept.md deleted file mode 100644 index c06cd65c9fe..00000000000 --- a/.changeset/eleven-olives-accept.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added #fix add chain fee tests to initial deploy diff --git a/.changeset/empty-bees-fix.md b/.changeset/empty-bees-fix.md deleted file mode 100644 index e76ee621253..00000000000 --- a/.changeset/empty-bees-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#wip implement gateway handler that forwards outgoing request from http target capability. introduce gateway http client diff --git a/.changeset/empty-pianos-attack.md b/.changeset/empty-pianos-attack.md deleted file mode 100644 index 5ec420b14ca..00000000000 --- a/.changeset/empty-pianos-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal Update gethwrapper for FeeQuoter, Internal.sol comment and byte calc update diff --git a/.changeset/fair-swans-accept.md b/.changeset/fair-swans-accept.md deleted file mode 100644 index dd834aa2d80..00000000000 --- a/.changeset/fair-swans-accept.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal Add support for data word detail manual input in Contract Reader for searching through EVM log event data with Contract Reader QueryKey ValueComparators. diff --git a/.changeset/few-pillows-yawn.md b/.changeset/few-pillows-yawn.md deleted file mode 100644 index ada48200d53..00000000000 --- a/.changeset/few-pillows-yawn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Add RMNRemote in the chain reader definition diff --git a/.changeset/few-sloths-explain.md b/.changeset/few-sloths-explain.md new file mode 100644 index 00000000000..78efd6cc7f3 --- /dev/null +++ b/.changeset/few-sloths-explain.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#updated ignoring tx type 126 on celo diff --git a/.changeset/fifty-pillows-peel.md b/.changeset/fifty-pillows-peel.md deleted file mode 100644 index 711a8869aa4..00000000000 --- a/.changeset/fifty-pillows-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Added `EVM.HeadTracker.PersistenceEnabled` config option to disable persistence for HeadTracker. #added diff --git a/.changeset/fifty-squids-juggle.md b/.changeset/fifty-squids-juggle.md deleted file mode 100644 index 5c5530bf03c..00000000000 --- a/.changeset/fifty-squids-juggle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -FHE empty reward fix #internal diff --git a/.changeset/five-chicken-talk.md b/.changeset/five-chicken-talk.md deleted file mode 100644 index 5f93b29364b..00000000000 --- a/.changeset/five-chicken-talk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#updated introduce network field on chain resolver diff --git a/.changeset/flat-horses-argue.md b/.changeset/flat-horses-argue.md deleted file mode 100644 index 08f151cd5aa..00000000000 --- a/.changeset/flat-horses-argue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added LogPoller MaxLogsKept feature: recency count-based instead of time based log retention diff --git a/.changeset/flat-spiders-sing.md b/.changeset/flat-spiders-sing.md deleted file mode 100644 index 6fba341b191..00000000000 --- a/.changeset/flat-spiders-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Set chainType in chain client #internal diff --git a/.changeset/forty-lizards-camp.md b/.changeset/forty-lizards-camp.md deleted file mode 100644 index 3e0a5a59b0e..00000000000 --- a/.changeset/forty-lizards-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Enable rotating encryptionPublicKey in CapabilitiesRegistry contract diff --git a/.changeset/four-buses-invite.md b/.changeset/four-buses-invite.md deleted file mode 100644 index 2f657dd4503..00000000000 --- a/.changeset/four-buses-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Introduce aptosKeys Graphql query diff --git a/.changeset/four-kangaroos-appear.md b/.changeset/four-kangaroos-appear.md new file mode 100644 index 00000000000..b8ef32ff69e --- /dev/null +++ b/.changeset/four-kangaroos-appear.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Add config validation so it requires ws url when http polling disabled #bugfix diff --git a/.changeset/fresh-falcons-cheer.md b/.changeset/fresh-falcons-cheer.md deleted file mode 100644 index 505582cc4fd..00000000000 --- a/.changeset/fresh-falcons-cheer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added solana: compute unit limit configuration and transaction instruction diff --git a/.changeset/giant-pillows-sort.md b/.changeset/giant-pillows-sort.md deleted file mode 100644 index a2b44319ecb..00000000000 --- a/.changeset/giant-pillows-sort.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Add prometheus metrics exposing health of telemetry client diff --git a/.changeset/gorgeous-wolves-collect.md b/.changeset/gorgeous-wolves-collect.md deleted file mode 100644 index 62b11100151..00000000000 --- a/.changeset/gorgeous-wolves-collect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Add DA oracle type to arbitrum and zksync configs #bugfix diff --git a/.changeset/healthy-flowers-nail.md b/.changeset/healthy-flowers-nail.md deleted file mode 100644 index aefc463472d..00000000000 --- a/.changeset/healthy-flowers-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Return ErrConnectivity error when halting bumping #internal diff --git a/.changeset/honest-cameras-cross.md b/.changeset/honest-cameras-cross.md deleted file mode 100644 index 1da50c97bd5..00000000000 --- a/.changeset/honest-cameras-cross.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Implementing evm specific token data encoder for CCIP #internal diff --git a/.changeset/khaki-pants-melt.md b/.changeset/khaki-pants-melt.md deleted file mode 100644 index 133fd480f56..00000000000 --- a/.changeset/khaki-pants-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#updated Workflows Engine loop refactored diff --git a/.changeset/late-pillows-shake.md b/.changeset/late-pillows-shake.md deleted file mode 100644 index f27f09519db..00000000000 --- a/.changeset/late-pillows-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Refactor OP oracle to accept generic DA oracle config #wip diff --git a/.changeset/lemon-apples-explain.md b/.changeset/lemon-apples-explain.md deleted file mode 100644 index 75f2b874fc4..00000000000 --- a/.changeset/lemon-apples-explain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal update ccip chainreader config. diff --git a/.changeset/metal-eels-check.md b/.changeset/metal-eels-check.md deleted file mode 100644 index 387eb51fc6d..00000000000 --- a/.changeset/metal-eels-check.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#updated Consume Feeds Manager WSRPC protos from Chainlink Protos Repository. diff --git a/.changeset/metal-meals-mix.md b/.changeset/metal-meals-mix.md deleted file mode 100644 index 66ebcec9982..00000000000 --- a/.changeset/metal-meals-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Adjustments for usdc reader tests #internal diff --git a/.changeset/metal-pots-lie.md b/.changeset/metal-pots-lie.md deleted file mode 100644 index bfa498cd4ac..00000000000 --- a/.changeset/metal-pots-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Registering USDC/CCTP events in the ChainReader during oracle creation #internal diff --git a/.changeset/moody-rules-agree.md b/.changeset/moody-rules-agree.md deleted file mode 100644 index ef1f3bcaf62..00000000000 --- a/.changeset/moody-rules-agree.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"chainlink": patch ---- - -- register polling subscription to avoid subscription leaking when rpc client gets closed. -- add a temporary special treatment for SubscribeNewHead before we replace it with SubscribeToHeads. Add a goroutine that forwards new head from poller to caller channel. -- fix a deadlock in poller, by using a new lock for subs slice in rpc client. -#bugfix diff --git a/.changeset/moody-trains-grow.md b/.changeset/moody-trains-grow.md deleted file mode 100644 index 304e91c1664..00000000000 --- a/.changeset/moody-trains-grow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added graceful shutdown for ccip oracles diff --git a/.changeset/neat-numbers-lay.md b/.changeset/neat-numbers-lay.md deleted file mode 100644 index 69276e84f68..00000000000 --- a/.changeset/neat-numbers-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#removed Removing unreferenced unused files. diff --git a/.changeset/nervous-books-push.md b/.changeset/nervous-books-push.md deleted file mode 100644 index b0f797344e3..00000000000 --- a/.changeset/nervous-books-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal Updated QueryKey to be able to do advanced queries on contract event data words diff --git a/.changeset/nice-cows-yell.md b/.changeset/nice-cows-yell.md deleted file mode 100644 index 1e7f045b476..00000000000 --- a/.changeset/nice-cows-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#updated Refactors store_db diff --git a/.changeset/ninety-feet-change.md b/.changeset/ninety-feet-change.md deleted file mode 100644 index 2c4cea72106..00000000000 --- a/.changeset/ninety-feet-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#updated default config values for FinalityTagEnabled to match CCIP configs diff --git a/.changeset/old-humans-watch.md b/.changeset/old-humans-watch.md deleted file mode 100644 index e58dedcd368..00000000000 --- a/.changeset/old-humans-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Fix TXM flakey test #internal diff --git a/.changeset/olive-bugs-relax.md b/.changeset/olive-bugs-relax.md deleted file mode 100644 index 6e681000358..00000000000 --- a/.changeset/olive-bugs-relax.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -add address bytes to string modifier to chainReader. #internal diff --git a/.changeset/orange-feet-share.md b/.changeset/orange-feet-share.md deleted file mode 100644 index 9583bce3d64..00000000000 --- a/.changeset/orange-feet-share.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -"chainlink": minor ---- - -Implemented new chain agnostic MultiNode design along with the corresponding EVM implementation. The chain agnostic components enable Multinode to be integrated with Solana and other non-EVM chains. Previously the Multinode was coupled with EVM specific actions, and was called to execute these actions direclty. With this change, the MultiNode's responsibility has been simplified to focus on RPC selection along with performing health checks. Chain specific actions will instead be executed on the RPC directly after being selected by MultiNode. The Chain Agnostic MultiNode provides improved reliability and metrics for all chain integrations using it. - -These are following main components: -Node: Common component which wraps an RPC with state information, health checks, and an alive loop to handle state changes along with maintaining chain information. -RPCClient: Chain-specific RPC wrapper which implements required interface for MultiNode along with any chain-specific functionality needed. -MultiNode: Perform RPCClient selection and performs health checks on all RPCs. -TransactionSender: Chain agnostic component which broadcasts transactions to all healthy RPCs and aggregates results. A chain-specific error classifier must be implemented. - -MultiNode picks the "best" RPC based on one of the configurable criteria: -- Priority defined in the config. -- Highest latest block. -- Round-robin within the same priority level (or using other configurable selection algorithms) - -Benefits of Chain Agnostic MultiNode: - Reliability: Improved RPC reliability scaleable to all chains - Maintainability: Can apply changes across all chain integrations through the use of common code - Extendability: Can add new health checks, RPC selection and ranking algorithms - Integration Speed: Much faster to integrate MultiNode with new chains - Reduced Generics: Significantly less bulky code! - -#updated #changed #internal diff --git a/.changeset/orange-humans-laugh.md b/.changeset/orange-humans-laugh.md deleted file mode 100644 index b9f8fa74f54..00000000000 --- a/.changeset/orange-humans-laugh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Support Zircuit fraud transactions detection and zk overflow detection #added diff --git a/.changeset/perfect-peaches-work.md b/.changeset/perfect-peaches-work.md new file mode 100644 index 00000000000..9a3b461e1c9 --- /dev/null +++ b/.changeset/perfect-peaches-work.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Fix flaky WS test server #internal diff --git a/.changeset/polite-tips-sneeze.md b/.changeset/polite-tips-sneeze.md deleted file mode 100644 index 4dc0e000046..00000000000 --- a/.changeset/polite-tips-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added keystone contract deployment diff --git a/.changeset/pretty-worms-smell.md b/.changeset/pretty-worms-smell.md deleted file mode 100644 index 9633de09502..00000000000 --- a/.changeset/pretty-worms-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Added a custom client error message for Mantle to capture NonceTooLow error. #added diff --git a/.changeset/real-doors-visit.md b/.changeset/real-doors-visit.md deleted file mode 100644 index 39fa064c3a8..00000000000 --- a/.changeset/real-doors-visit.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"chainlink": patch ---- - -Implement blue-green Configurator contract and retirement report handover for LLO -#added diff --git a/.changeset/red-jobs-marry.md b/.changeset/red-jobs-marry.md deleted file mode 100644 index d66ad019027..00000000000 --- a/.changeset/red-jobs-marry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Rename DA oracle consts to be more descriptive #wip diff --git a/.changeset/rude-spies-serve.md b/.changeset/rude-spies-serve.md deleted file mode 100644 index d861b5cf6ba..00000000000 --- a/.changeset/rude-spies-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added new config field to FeeQuoter diff --git a/.changeset/seven-forks-hug.md b/.changeset/seven-forks-hug.md deleted file mode 100644 index 5ddcbfe3fec..00000000000 --- a/.changeset/seven-forks-hug.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Add encryptionPublicKey to CapabilitiesRegistry.sol diff --git a/.changeset/silent-foxes-battle.md b/.changeset/silent-foxes-battle.md deleted file mode 100644 index f3f4b48962c..00000000000 --- a/.changeset/silent-foxes-battle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Bump chainlink-solana and fix tests #internal diff --git a/.changeset/silly-lies-boil.md b/.changeset/silly-lies-boil.md deleted file mode 100644 index b2a5084a36c..00000000000 --- a/.changeset/silly-lies-boil.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"chainlink": minor ---- - -Make websocket URL `WSURL` for `EVM.Nodes` optional, and apply logic so that: -* If WS URL was not provided, SubscribeFilterLogs should fail with an explicit error -* If WS URL was not provided LogBroadcaster should be disabled -#nops diff --git a/.changeset/silly-starfishes-destroy.md b/.changeset/silly-starfishes-destroy.md deleted file mode 100644 index ebb552fdca2..00000000000 --- a/.changeset/silly-starfishes-destroy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal ccip contract reader config. diff --git a/.changeset/silver-pens-float.md b/.changeset/silver-pens-float.md deleted file mode 100644 index e8a135b9de4..00000000000 --- a/.changeset/silver-pens-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal: Adding test for rmn home reader diff --git a/.changeset/six-frogs-juggle.md b/.changeset/six-frogs-juggle.md deleted file mode 100644 index 2b960c4be0f..00000000000 --- a/.changeset/six-frogs-juggle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added HTTP target capability and gateway connector handler diff --git a/.changeset/smooth-queens-dance.md b/.changeset/smooth-queens-dance.md deleted file mode 100644 index 861c5284984..00000000000 --- a/.changeset/smooth-queens-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Add compute capability #internal diff --git a/.changeset/stale-pugs-sin.md b/.changeset/stale-pugs-sin.md deleted file mode 100644 index 58ebd2d7acd..00000000000 --- a/.changeset/stale-pugs-sin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added introduce cosmosKeys and starknetKeys graphql query diff --git a/.changeset/ten-rats-tie.md b/.changeset/ten-rats-tie.md deleted file mode 100644 index f97594914cd..00000000000 --- a/.changeset/ten-rats-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Fix testWSServer issue causing panic in testing #internal diff --git a/.changeset/three-otters-drum.md b/.changeset/three-otters-drum.md deleted file mode 100644 index c3888df8580..00000000000 --- a/.changeset/three-otters-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Hedera chain type: broadcast transactions only to a single healthy RPC instead of all healthy RPCs to avoid redundant relay fees. #changed diff --git a/.changeset/tidy-apricots-care.md b/.changeset/tidy-apricots-care.md deleted file mode 100644 index 60429107f11..00000000000 --- a/.changeset/tidy-apricots-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Pass the home chain selector to the commit plugin factory diff --git a/.changeset/tough-boats-shop.md b/.changeset/tough-boats-shop.md deleted file mode 100644 index 45a16fc965a..00000000000 --- a/.changeset/tough-boats-shop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -start of next release diff --git a/.changeset/two-snails-mix.md b/.changeset/two-snails-mix.md deleted file mode 100644 index 0fb49dce9b2..00000000000 --- a/.changeset/two-snails-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Rename SequenceAt to NonceAt #internal diff --git a/.changeset/two-spies-arrive.md b/.changeset/two-spies-arrive.md new file mode 100644 index 00000000000..cb46c46bce6 --- /dev/null +++ b/.changeset/two-spies-arrive.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#updated Use labelers from `chainlink-common` diff --git a/.changeset/wise-pandas-join.md b/.changeset/wise-pandas-join.md deleted file mode 100644 index 7b375b0895d..00000000000 --- a/.changeset/wise-pandas-join.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Fix BHE PriceMax bug #bugfix diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml index 024dabe2781..7c60a2d13de 100644 --- a/.github/workflows/changeset.yml +++ b/.github/workflows/changeset.yml @@ -50,7 +50,7 @@ jobs: - '!core/**/*.json' - '!core/chainlink.goreleaser.Dockerfile' - '!core/chainlink.Dockerfile' - - '!core/gethwrappers/*' + - '!core/gethwrappers/**' core-changeset: - added: '.changeset/**' diff --git a/.github/workflows/llm-action-error-reporter.yml b/.github/workflows/llm-action-error-reporter.yml index c0d01253c9f..73ebc53bb9c 100644 --- a/.github/workflows/llm-action-error-reporter.yml +++ b/.github/workflows/llm-action-error-reporter.yml @@ -13,11 +13,11 @@ jobs: pull-requests: write repository-projects: read actions: read - steps: + steps: - name: Analyze logs - uses: smartcontractkit/.github/actions/llm-action-error-reporter@d125ca9fe5e3b410de7c6db4a4ce3ed7a0728cd6 # v0.3.0 + uses: smartcontractkit/.github/actions/llm-action-error-reporter@05ae80b1ccba5e73ce9e773983d805b13656840c # v0.4.0 with: parent-workflow-conclusion: ${{ github.event.workflow_run.conclusion }} skip-on-success: true # Skip posting comment if no errors are found gh-token: ${{ github.token }} - openai-api-key: ${{ secrets.OPENAI_API_KEY }} \ No newline at end of file + openai-api-key: ${{ secrets.OPENAI_API_KEY }} diff --git a/.github/workflows/solidity-foundry.yml b/.github/workflows/solidity-foundry.yml index 025749a5848..3a00f8b25e2 100644 --- a/.github/workflows/solidity-foundry.yml +++ b/.github/workflows/solidity-foundry.yml @@ -1,5 +1,7 @@ name: Solidity Foundry -on: [pull_request] +on: + pull_request: + merge_group: env: FOUNDRY_PROFILE: ci @@ -256,7 +258,7 @@ jobs: analyze: needs: [ changes, define-matrix ] name: Run static analysis - if: needs.changes.outputs.not_test_sol_modified == 'true' + if: needs.changes.outputs.not_test_sol_modified == 'true' && github.event_name != 'merge_group' runs-on: ubuntu-22.04 steps: - name: Checkout this repository diff --git a/.gitignore b/.gitignore index 718d4e4fe82..34d25ebb472 100644 --- a/.gitignore +++ b/.gitignore @@ -75,6 +75,7 @@ __debug_bin* db_dumps/ .run.id integration-tests/**/traces/ +integration-tests/**/integration-tests benchmark_report.csv benchmark_summary.json secrets.toml diff --git a/CHANGELOG.md b/CHANGELOG.md index c1a09677ba7..52b5cd967ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,114 @@ # Changelog Chainlink Core +## 2.18.0 - UNRELEASED + +### Minor Changes + +- [#14696](https://github.com/smartcontractkit/chainlink/pull/14696) [`072bfb667a`](https://github.com/smartcontractkit/chainlink/commit/072bfb667a4e1f7cc0c874409ebfe6ef7f7b6cbe) Thanks [@0xsuryansh](https://github.com/0xsuryansh)! - #internal add getNextDonId() and getNodes(bytes32[] calldata p2pIds) in CapabilitiesRegistry and define interface for node info + + PR issue: CCIP-3569 + +- [#14305](https://github.com/smartcontractkit/chainlink/pull/14305) [`5ca0d1f19f`](https://github.com/smartcontractkit/chainlink/commit/5ca0d1f19f90c7b42c3cb1ae7b6b860802c92f64) Thanks [@DeividasK](https://github.com/DeividasK)! - #added oracle support in standard capabilities +- [#14308](https://github.com/smartcontractkit/chainlink/pull/14308) [`3e9e058da4`](https://github.com/smartcontractkit/chainlink/commit/3e9e058da4f2ba4b51286d4f05aa7efcba179e79) Thanks [@kidambisrinivas](https://github.com/kidambisrinivas)! - #added log-event-trigger LOOPP capability, using ChainReader +- [#14741](https://github.com/smartcontractkit/chainlink/pull/14741) [`89fcfea8a4`](https://github.com/smartcontractkit/chainlink/commit/89fcfea8a42f67a592cb1187538f9b3a9791b58f) Thanks [@amit-momin](https://github.com/amit-momin)! - Added the compute unit limit estimation feature for the Solana TXM #added +- [#14602](https://github.com/smartcontractkit/chainlink/pull/14602) [`002296d9db`](https://github.com/smartcontractkit/chainlink/commit/002296d9dbbcb356d6f66d5e274b18bfb16681be) Thanks [@dimriou](https://github.com/dimriou)! - Update dynamic fee types to align with geth #internal +- [#14765](https://github.com/smartcontractkit/chainlink/pull/14765) [`ca31213970`](https://github.com/smartcontractkit/chainlink/commit/ca31213970eac30d46ffbb0e6551e12fc31ce7e5) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #updated support aptos creation in chain config UI +- [#14651](https://github.com/smartcontractkit/chainlink/pull/14651) [`8ca41fc8f7`](https://github.com/smartcontractkit/chainlink/commit/8ca41fc8f722accfccccb4b1778db2df8fef5437) Thanks [@0xnogo](https://github.com/0xnogo)! - #added Use ApplyDefaultsAndValidate +- [#14536](https://github.com/smartcontractkit/chainlink/pull/14536) [`4b977021ed`](https://github.com/smartcontractkit/chainlink/commit/4b977021ed2150678bbe497afeb1312aa64e62cf) Thanks [@jinhoonbang](https://github.com/jinhoonbang)! - #wip implement gateway handler that forwards outgoing request from http target capability. introduce gateway http client +- [#14622](https://github.com/smartcontractkit/chainlink/pull/14622) [`c654322ace`](https://github.com/smartcontractkit/chainlink/commit/c654322acea7da8e6bd84a8a045690002f1f172d) Thanks [@ilija42](https://github.com/ilija42)! - #internal Add support for data word detail manual input in Contract Reader for searching through EVM log event data with Contract Reader QueryKey ValueComparators. +- [#14588](https://github.com/smartcontractkit/chainlink/pull/14588) [`fc1fefcba7`](https://github.com/smartcontractkit/chainlink/commit/fc1fefcba7a09699dade771d992a388cf71e82b4) Thanks [@0xnogo](https://github.com/0xnogo)! - #added Add RMNRemote in the chain reader definition +- [#14857](https://github.com/smartcontractkit/chainlink/pull/14857) [`b8ae4adcfc`](https://github.com/smartcontractkit/chainlink/commit/b8ae4adcfc1ab6b92f287a2c2a7051b140782a56) Thanks [@dimriou](https://github.com/dimriou)! - FHE empty reward fix #internal +- [#14718](https://github.com/smartcontractkit/chainlink/pull/14718) [`16499e5cb7`](https://github.com/smartcontractkit/chainlink/commit/16499e5cb79e3ccba654070d13d9af7be3d33a07) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #updated introduce network field on chain resolver +- [#14574](https://github.com/smartcontractkit/chainlink/pull/14574) [`accbf0fe96`](https://github.com/smartcontractkit/chainlink/commit/accbf0fe9647f36bab9016f75b48a9338546ae7d) Thanks [@reductionista](https://github.com/reductionista)! - #added LogPoller MaxLogsKept feature: recency count-based instead of time based log retention +- [#14729](https://github.com/smartcontractkit/chainlink/pull/14729) [`770d2bc9b0`](https://github.com/smartcontractkit/chainlink/commit/770d2bc9b097b78b6396d7912eb64ddc2950afa6) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #added Introduce aptosKeys Graphql query +- [#14576](https://github.com/smartcontractkit/chainlink/pull/14576) [`0e35bc794c`](https://github.com/smartcontractkit/chainlink/commit/0e35bc794ce666f13fb24a6918f7617928c17235) Thanks [@aalu1418](https://github.com/aalu1418)! - #added solana: compute unit limit configuration and transaction instruction +- [#14661](https://github.com/smartcontractkit/chainlink/pull/14661) [`9641ea29da`](https://github.com/smartcontractkit/chainlink/commit/9641ea29daa9da459975afaddc78120f5b15d38c) Thanks [@emate](https://github.com/emate)! - #added Add prometheus metrics exposing health of telemetry client +- [#14702](https://github.com/smartcontractkit/chainlink/pull/14702) [`ca9fb64356`](https://github.com/smartcontractkit/chainlink/commit/ca9fb64356735a4d4b6b6c1914256e74cd127d4b) Thanks [@dimriou](https://github.com/dimriou)! - Return ErrConnectivity error when halting bumping #internal +- [#14706](https://github.com/smartcontractkit/chainlink/pull/14706) [`f7abc3eb0e`](https://github.com/smartcontractkit/chainlink/commit/f7abc3eb0e9c6525a2d470205f730c888c8b929a) Thanks [@pavel-raykov](https://github.com/pavel-raykov)! - #removed Removing unreferenced unused files. +- [#14511](https://github.com/smartcontractkit/chainlink/pull/14511) [`8fa9a67dfc`](https://github.com/smartcontractkit/chainlink/commit/8fa9a67dfc130feab290860f0b7bf860ddc86bb3) Thanks [@silaslenihan](https://github.com/silaslenihan)! - #internal Updated QueryKey to be able to do advanced queries on contract event data words +- [#14697](https://github.com/smartcontractkit/chainlink/pull/14697) [`4c3e7ec8c3`](https://github.com/smartcontractkit/chainlink/commit/4c3e7ec8c3b334a13be13780dbfe19dc1f2eacd1) Thanks [@dimriou](https://github.com/dimriou)! - Fix TXM flakey test #internal +- [#14620](https://github.com/smartcontractkit/chainlink/pull/14620) [`09145baa9b`](https://github.com/smartcontractkit/chainlink/commit/09145baa9bb37103605cbebaad87c5059d1d454b) Thanks [@Farber98](https://github.com/Farber98)! - add address bytes to string modifier to chainReader. #internal +- [#13386](https://github.com/smartcontractkit/chainlink/pull/13386) [`4b21c32e25`](https://github.com/smartcontractkit/chainlink/commit/4b21c32e257f534f97829f50aaac4bbe8e9c1ae7) Thanks [@DylanTinianov](https://github.com/DylanTinianov)! - Implemented new chain agnostic MultiNode design along with the corresponding EVM implementation. The chain agnostic components enable Multinode to be integrated with Solana and other non-EVM chains. Previously the Multinode was coupled with EVM specific actions, and was called to execute these actions direclty. With this change, the MultiNode's responsibility has been simplified to focus on RPC selection along with performing health checks. Chain specific actions will instead be executed on the RPC directly after being selected by MultiNode. The Chain Agnostic MultiNode provides improved reliability and metrics for all chain integrations using it. + + These are following main components: + Node: Common component which wraps an RPC with state information, health checks, and an alive loop to handle state changes along with maintaining chain information. + RPCClient: Chain-specific RPC wrapper which implements required interface for MultiNode along with any chain-specific functionality needed. + MultiNode: Perform RPCClient selection and performs health checks on all RPCs. + TransactionSender: Chain agnostic component which broadcasts transactions to all healthy RPCs and aggregates results. A chain-specific error classifier must be implemented. + + MultiNode picks the "best" RPC based on one of the configurable criteria: + + - Priority defined in the config. + - Highest latest block. + - Round-robin within the same priority level (or using other configurable selection algorithms) + + Benefits of Chain Agnostic MultiNode: + Reliability: Improved RPC reliability scaleable to all chains + Maintainability: Can apply changes across all chain integrations through the use of common code + Extendability: Can add new health checks, RPC selection and ranking algorithms + Integration Speed: Much faster to integrate MultiNode with new chains + Reduced Generics: Significantly less bulky code! + + #updated #changed #internal +- [#14629](https://github.com/smartcontractkit/chainlink/pull/14629) [`4928e60ddf`](https://github.com/smartcontractkit/chainlink/commit/4928e60ddfe375e4a0c644cb210802b4c4db5dbd) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - Support Zircuit fraud transactions detection and zk overflow detection #added +- [#14334](https://github.com/smartcontractkit/chainlink/pull/14334) [`0ad624673f`](https://github.com/smartcontractkit/chainlink/commit/0ad624673f6f1a8e155fc43c67a8ae6caddefa90) Thanks [@krehermann](https://github.com/krehermann)! - #added keystone contract deployment +- [#14709](https://github.com/smartcontractkit/chainlink/pull/14709) [`1560aa9167`](https://github.com/smartcontractkit/chainlink/commit/1560aa9167a812abe3a8370c033b3290dcbcb261) Thanks [@KuphJr](https://github.com/KuphJr)! - Add encryptionPublicKey to CapabilitiesRegistry.sol +- [#14364](https://github.com/smartcontractkit/chainlink/pull/14364) [`5d96be59a2`](https://github.com/smartcontractkit/chainlink/commit/5d96be59a27f68f2f491a7d9f8cb0b2af4e0e835) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - Make websocket URL `WSURL` for `EVM.Nodes` optional, and apply logic so that: + + - If WS URL was not provided, SubscribeFilterLogs should fail with an explicit error + - If WS URL was not provided LogBroadcaster should be disabled + #nops + +- [#14789](https://github.com/smartcontractkit/chainlink/pull/14789) [`5dfb13071e`](https://github.com/smartcontractkit/chainlink/commit/5dfb13071e96f8e0cda7b79a4c1797c1f064972b) Thanks [@0xnogo](https://github.com/0xnogo)! - #internal: Adding test for rmn home reader +- [#14491](https://github.com/smartcontractkit/chainlink/pull/14491) [`c6e6e213a6`](https://github.com/smartcontractkit/chainlink/commit/c6e6e213a698b558d3302277566587ba0c30a6fe) Thanks [@jinhoonbang](https://github.com/jinhoonbang)! - #added HTTP target capability and gateway connector handler +- [#14496](https://github.com/smartcontractkit/chainlink/pull/14496) [`25c469880f`](https://github.com/smartcontractkit/chainlink/commit/25c469880f537556278e3d4eff3e87f185917834) Thanks [@cedric-cordenier](https://github.com/cedric-cordenier)! - Add compute capability #internal +- [#14764](https://github.com/smartcontractkit/chainlink/pull/14764) [`56d4b84cc2`](https://github.com/smartcontractkit/chainlink/commit/56d4b84cc2ccde953241a81bcaeb1929724c77a2) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #added introduce cosmosKeys and starknetKeys graphql query +- [#14500](https://github.com/smartcontractkit/chainlink/pull/14500) [`d435981038`](https://github.com/smartcontractkit/chainlink/commit/d4359810380a34fbcdd2839e0fc23a35c5236acd) Thanks [@0xnogo](https://github.com/0xnogo)! - #added Pass the home chain selector to the commit plugin factory +- [#14564](https://github.com/smartcontractkit/chainlink/pull/14564) [`8b01661e03`](https://github.com/smartcontractkit/chainlink/commit/8b01661e032add54c07f269624b46bddd4476b95) Thanks [@momentmaker](https://github.com/momentmaker)! - start of next release +- [#14855](https://github.com/smartcontractkit/chainlink/pull/14855) [`7cd384b945`](https://github.com/smartcontractkit/chainlink/commit/7cd384b945ec66532b68cbdfffa3b48a8e375158) Thanks [@dimriou](https://github.com/dimriou)! - Rename SequenceAt to NonceAt #internal +- [#14670](https://github.com/smartcontractkit/chainlink/pull/14670) [`ad29b19612`](https://github.com/smartcontractkit/chainlink/commit/ad29b19612dbd9e2aab093bd0e7df85daa995662) Thanks [@dimriou](https://github.com/dimriou)! - Fix BHE PriceMax bug #bugfix + +### Patch Changes + +- [#14509](https://github.com/smartcontractkit/chainlink/pull/14509) [`dbd42db9b8`](https://github.com/smartcontractkit/chainlink/commit/dbd42db9b838b619d0f8a5acd21328ecd5043cd3) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - Remove finality depth as the default value for minConfirmation for tx jobs. + Update the sql query for fetching pending callback transactions: + if minConfirmation is not null, we check difference if the current block - tx block > minConfirmation + else we check if the tx block is <= finalizedBlock + #updated +- [#14685](https://github.com/smartcontractkit/chainlink/pull/14685) [`c5e9f932ca`](https://github.com/smartcontractkit/chainlink/commit/c5e9f932ca2115b833675d9c098e96676c2b6b58) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - The findBroadcastedAttempts in detectStuckTransactionsHeuristic can returns uninitialized struct that potentially cause nil pointer error. Changed the return type of findBroadcastedAttempts to be pointers and added nil pointer check. #bugfix +- [#14631](https://github.com/smartcontractkit/chainlink/pull/14631) [`ad9398a8fd`](https://github.com/smartcontractkit/chainlink/commit/ad9398a8fd2c2e95f3b4241bbfcfe264d8cda030) Thanks [@martin-cll](https://github.com/martin-cll)! - Fix for Mercury transmitter decoding reports of a different codec version #internal +- [#14829](https://github.com/smartcontractkit/chainlink/pull/14829) [`83c3a329b8`](https://github.com/smartcontractkit/chainlink/commit/83c3a329b87e08693d347deb588ad9725dbc681a) Thanks [@asoliman92](https://github.com/asoliman92)! - #added #fix add chain fee tests to initial deploy +- [#14798](https://github.com/smartcontractkit/chainlink/pull/14798) [`26e22eb6cf`](https://github.com/smartcontractkit/chainlink/commit/26e22eb6cfc320d981c91b1bfeb87c3c645f10d6) Thanks [@0xsuryansh](https://github.com/0xsuryansh)! - #internal Update gethwrapper for FeeQuoter, Internal.sol comment and byte calc update +- [#14558](https://github.com/smartcontractkit/chainlink/pull/14558) [`133e347872`](https://github.com/smartcontractkit/chainlink/commit/133e3478727814575636d5989af9d61cbf7997cb) Thanks [@dhaidashenko](https://github.com/dhaidashenko)! - Added `EVM.HeadTracker.PersistenceEnabled` config option to disable persistence for HeadTracker. #added +- [#14719](https://github.com/smartcontractkit/chainlink/pull/14719) [`de9ce674c6`](https://github.com/smartcontractkit/chainlink/commit/de9ce674c6fd18c1c0a2ce7896682d7b711eea8c) Thanks [@amit-momin](https://github.com/amit-momin)! - Set chainType in chain client #internal +- [#14760](https://github.com/smartcontractkit/chainlink/pull/14760) [`3af39c8032`](https://github.com/smartcontractkit/chainlink/commit/3af39c803201461009ef63f709851fe6a24f0284) Thanks [@KuphJr](https://github.com/KuphJr)! - Enable rotating encryptionPublicKey in CapabilitiesRegistry contract +- [#14835](https://github.com/smartcontractkit/chainlink/pull/14835) [`468fc4cd35`](https://github.com/smartcontractkit/chainlink/commit/468fc4cd352b5be8cfd0e65f7da370fdf544be46) Thanks [@ogtownsend](https://github.com/ogtownsend)! - Add DA oracle type to arbitrum and zksync configs #bugfix +- [#14603](https://github.com/smartcontractkit/chainlink/pull/14603) [`19690b0c44`](https://github.com/smartcontractkit/chainlink/commit/19690b0c4499cf01379f98396917be170ba2b333) Thanks [@mateusz-sekara](https://github.com/mateusz-sekara)! - Implementing evm specific token data encoder for CCIP #internal +- [#14375](https://github.com/smartcontractkit/chainlink/pull/14375) [`816b25c001`](https://github.com/smartcontractkit/chainlink/commit/816b25c00122003e14e3d214d9de7a6e58b3323e) Thanks [@vyzaldysanchez](https://github.com/vyzaldysanchez)! - #updated Workflows Engine loop refactored +- [#14599](https://github.com/smartcontractkit/chainlink/pull/14599) [`4ac405a6d5`](https://github.com/smartcontractkit/chainlink/commit/4ac405a6d5e3bc668ee96eac6bdbecc524467fd6) Thanks [@ogtownsend](https://github.com/ogtownsend)! - Refactor OP oracle to accept generic DA oracle config #wip +- [#14607](https://github.com/smartcontractkit/chainlink/pull/14607) [`eec0ff9469`](https://github.com/smartcontractkit/chainlink/commit/eec0ff946986dfbeeb46ed3d311ff9b8d0e21735) Thanks [@winder](https://github.com/winder)! - #internal update ccip chainreader config. +- [#14693](https://github.com/smartcontractkit/chainlink/pull/14693) [`03df8989e8`](https://github.com/smartcontractkit/chainlink/commit/03df8989e8e7549afb05bb49c765c0c07db8669e) Thanks [@ChrisAmora](https://github.com/ChrisAmora)! - #updated Consume Feeds Manager WSRPC protos from Chainlink Protos Repository. +- [#14694](https://github.com/smartcontractkit/chainlink/pull/14694) [`e9b3397f46`](https://github.com/smartcontractkit/chainlink/commit/e9b3397f465e26209c8c8ccfed66aa9595f8246b) Thanks [@mateusz-sekara](https://github.com/mateusz-sekara)! - Adjustments for usdc reader tests #internal +- [#14624](https://github.com/smartcontractkit/chainlink/pull/14624) [`be774f00a9`](https://github.com/smartcontractkit/chainlink/commit/be774f00a961d9a7361d9ae5b10c97996f7ab164) Thanks [@mateusz-sekara](https://github.com/mateusz-sekara)! - Registering USDC/CCTP events in the ChainReader during oracle creation #internal +- [#14534](https://github.com/smartcontractkit/chainlink/pull/14534) [`de268e98b8`](https://github.com/smartcontractkit/chainlink/commit/de268e98b8d68a284e1260297925b91c5d2411bc) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - - register polling subscription to avoid subscription leaking when rpc client gets closed. + + - add a temporary special treatment for SubscribeNewHead before we replace it with SubscribeToHeads. Add a goroutine that forwards new head from poller to caller channel. + - fix a deadlock in poller, by using a new lock for subs slice in rpc client. + #bugfix + +- [#14656](https://github.com/smartcontractkit/chainlink/pull/14656) [`004a0de233`](https://github.com/smartcontractkit/chainlink/commit/004a0de2337b0312558ae7c045e7fc2fb4a05916) Thanks [@dimkouv](https://github.com/dimkouv)! - #added graceful shutdown for ccip oracles +- [#14720](https://github.com/smartcontractkit/chainlink/pull/14720) [`4f8c55eb01`](https://github.com/smartcontractkit/chainlink/commit/4f8c55eb01b5823f43f49761344e92dc37ec0114) Thanks [@vyzaldysanchez](https://github.com/vyzaldysanchez)! - #updated Refactors store_db +- [#14530](https://github.com/smartcontractkit/chainlink/pull/14530) [`2c16f46311`](https://github.com/smartcontractkit/chainlink/commit/2c16f4631184a6e3da7f2f3957173500e2c4837b) Thanks [@Madalosso](https://github.com/Madalosso)! - #updated default config values for FinalityTagEnabled to match CCIP configs +- [#14859](https://github.com/smartcontractkit/chainlink/pull/14859) [`80b0501bee`](https://github.com/smartcontractkit/chainlink/commit/80b0501bee805f30da170f779e7ceeb4b0ebe179) Thanks [@ma33r](https://github.com/ma33r)! - Added a custom client error message for Mantle to capture NonceTooLow error. #added +- [#14628](https://github.com/smartcontractkit/chainlink/pull/14628) [`6ec5ab8315`](https://github.com/smartcontractkit/chainlink/commit/6ec5ab83158172ac0c8e591bfa8dd9ffb35880ea) Thanks [@samsondav](https://github.com/samsondav)! - Implement blue-green Configurator contract and retirement report handover for LLO + #added +- [#14743](https://github.com/smartcontractkit/chainlink/pull/14743) [`d5dfe4af8c`](https://github.com/smartcontractkit/chainlink/commit/d5dfe4af8c87d481e9963275caf95407d38361f1) Thanks [@ogtownsend](https://github.com/ogtownsend)! - Rename DA oracle consts to be more descriptive #wip +- [#14734](https://github.com/smartcontractkit/chainlink/pull/14734) [`ca71878aa5`](https://github.com/smartcontractkit/chainlink/commit/ca71878aa5a55fe239a456d7b564ffeba9bc84d7) Thanks [@RyanRHall](https://github.com/RyanRHall)! - #added new config field to FeeQuoter +- [#14575](https://github.com/smartcontractkit/chainlink/pull/14575) [`1b41e69cca`](https://github.com/smartcontractkit/chainlink/commit/1b41e69cca2f4622d367ef18733c36fcae433505) Thanks [@DylanTinianov](https://github.com/DylanTinianov)! - Bump chainlink-solana and fix tests #internal +- [#14668](https://github.com/smartcontractkit/chainlink/pull/14668) [`dacb6a8c70`](https://github.com/smartcontractkit/chainlink/commit/dacb6a8c708e8d7cb94aa63ae7463f58a38d0e59) Thanks [@winder](https://github.com/winder)! - #internal ccip contract reader config. +- [#14814](https://github.com/smartcontractkit/chainlink/pull/14814) [`f708ebb094`](https://github.com/smartcontractkit/chainlink/commit/f708ebb094ecd6f4f77e9c480ceacd250fc1fadc) Thanks [@DylanTinianov](https://github.com/DylanTinianov)! - Fix testWSServer issue causing panic in testing #internal +- [#14635](https://github.com/smartcontractkit/chainlink/pull/14635) [`ee1d6e3b1a`](https://github.com/smartcontractkit/chainlink/commit/ee1d6e3b1a60dc657a5cab869aac0897e33dc76d) Thanks [@dhaidashenko](https://github.com/dhaidashenko)! - Hedera chain type: broadcast transactions only to a single healthy RPC instead of all healthy RPCs to avoid redundant relay fees. #changed + ## 2.17.0 - 2024-10-10 ### Minor Changes diff --git a/contracts/.changeset/happy-crabs-rescue.md b/contracts/.changeset/happy-crabs-rescue.md new file mode 100644 index 00000000000..2aa3bbacecc --- /dev/null +++ b/contracts/.changeset/happy-crabs-rescue.md @@ -0,0 +1,10 @@ +--- +'@chainlink/contracts': patch +--- + +Gas optimizations and comment cleanup #internal + + +PR issue: CCIP-3736 + +Solidity Review issue: CCIP-3966 \ No newline at end of file diff --git a/contracts/.changeset/ninety-coins-mate.md b/contracts/.changeset/ninety-coins-mate.md new file mode 100644 index 00000000000..eda09d5c473 --- /dev/null +++ b/contracts/.changeset/ninety-coins-mate.md @@ -0,0 +1,10 @@ +--- +'@chainlink/contracts': patch +--- + +Modified TokenPriceFeedConfig to support tokens with zero decimals #bugfix + + +PR issue: CCIP-3723 + +Solidity Review issue: CCIP-3966 \ No newline at end of file diff --git a/contracts/.changeset/warm-queens-tan.md b/contracts/.changeset/warm-queens-tan.md new file mode 100644 index 00000000000..d3b94761a5c --- /dev/null +++ b/contracts/.changeset/warm-queens-tan.md @@ -0,0 +1,9 @@ +--- +'@chainlink/contracts': minor +--- + +#internal applyRateLimiterConfigUpdates validation + +PR issue: CCIP-3797 + +Solidity Review issue: CCIP-3966 \ No newline at end of file diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index eb9c104183c..b68ea51a1e3 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -19,7 +19,7 @@ BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28842) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55271) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244092) BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24189) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2108354) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2108425) CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332601) CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458549) CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289173) @@ -67,7 +67,7 @@ CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 139 CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365381) DefensiveExampleTest:test_HappyPath_Success() (gas: 200048) DefensiveExampleTest:test_Recovery() (gas: 424306) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1516792) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1516297) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96909) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49796) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17435) @@ -89,112 +89,114 @@ EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrit EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17925) EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25329) EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26348) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16878) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16758) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 16800) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41225) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroIntput_Success() (gas: 12484) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140316) -FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162560) -FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12287) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11547) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54662) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45153) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12310) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 87853) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13255) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17366) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12352) -FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106589) -FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 110939) -FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 110992) -FeeQuoter_constructor:test_Setup_Success() (gas: 5020726) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16856) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16736) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 16778) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41181) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroIntput_Success() (gas: 12462) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140340) +FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162349) +FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12265) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11613) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54728) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45219) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12376) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 87827) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13233) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17397) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12330) +FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106738) +FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 111088) +FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111141) +FeeQuoter_constructor:test_Setup_Success() (gas: 5086711) FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68361) -FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29076) -FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96045) +FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29234) +FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96069) FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14774) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20809) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20832) FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 72793) -FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 26309) -FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 111759) +FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 26388) +FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 111816) FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16081) -FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 109015) -FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 67299) -FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 33219) -FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78388) -FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 39239) -FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 34876) -FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 27972) -FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 97567) -FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20441) -FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 27780) -FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 27803) -FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40372) -FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29499) -FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18354) -FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 82824) -FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 53482) -FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 239286) -FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22571) -FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29879) -FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100330) -FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 142541) -FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21211) -FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 113804) -FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 22729) -FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63687) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1974036) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 1973994) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 1954113) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 1973768) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 1973972) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 1973784) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 64690) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 64570) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 58894) -FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 1973410) -FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61764) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116495) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 14103) -FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 1972087) -FeeQuoter_onReport:test_OnReport_StaleUpdate_Revert() (gas: 43675) -FeeQuoter_onReport:test_onReport_InvalidForwarder_Reverts() (gas: 23514) -FeeQuoter_onReport:test_onReport_Success() (gas: 80116) -FeeQuoter_onReport:test_onReport_UnsupportedToken_Reverts() (gas: 26882) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17427) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21545) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 18636) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 18154) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 18513) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 18636) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 44725) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 19936) -FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 20333) -FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 17904) -FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 122753) -FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 42054) -FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 28578) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 29949) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 76189) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 28176) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 26047) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 19523) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 108993) +FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 67849) +FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 33342) +FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78366) +FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 39282) +FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 34919) +FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 28015) +FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 97630) +FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20506) +FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 27823) +FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 27846) +FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40609) +FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29542) +FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18377) +FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 82916) +FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 53483) +FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 239378) +FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22594) +FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29902) +FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100353) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 142587) +FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21234) +FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 113938) +FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 23409) +FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63711) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1974510) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 1974468) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 1954587) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 1974242) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 1974446) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 1974258) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 65176) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 65056) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 58872) +FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 1973884) +FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61821) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116870) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 14160) +FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 1972561) +FeeQuoter_onReport:test_OnReport_StaleUpdate_Revert() (gas: 43873) +FeeQuoter_onReport:test_onReport_InvalidForwarder_Reverts() (gas: 23492) +FeeQuoter_onReport:test_onReport_Success() (gas: 80467) +FeeQuoter_onReport:test_onReport_TokenNotSupported_Revert() (gas: 22771) +FeeQuoter_onReport:test_onReport_UnsupportedToken_Reverts() (gas: 26982) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17471) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21589) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 18680) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 18198) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 18557) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 18680) +FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 21372) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 44681) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 19914) +FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 20311) +FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 17882) +FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 122505) +FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 42010) +FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 28534) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 29927) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 75957) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 28132) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 26003) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 19501) FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 12154) -FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23796) -FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28528) -FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74596) -FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 145320) -FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 50898) -FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 63825) -FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 20142) -FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 89470) -FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 51121) -FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 12437) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 10655) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 4001581) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10862) -FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6797) -FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6511) +FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23840) +FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28572) +FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74668) +FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 145584) +FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 52376) +FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 66245) +FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 20192) +FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 93429) +FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 53087) +FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 12409) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 10633) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 3979031) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10840) +FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6775) +FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6489) HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209230) HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135879) HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 107090) @@ -250,41 +252,45 @@ MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 60842) MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126576) MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 63455) MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 44034) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 133573) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Success() (gas: 315608) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 17908) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 76431) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 76392) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateMoreThanCapacity_Revert() (gas: 16554) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateZero_Revert() (gas: 16634) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DiableConfigCapacityNonZero_Revert() (gas: 16585) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DisableConfigRateNonZero_Revert() (gas: 16571) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 133973) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Success() (gas: 316663) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 17886) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 76620) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 76603) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 38736) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 53912) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 17109) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 12436) -MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 1958738) -MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2075068) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 53934) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 17154) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 12481) +MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 1999640) +MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2115969) MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 30794) MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 48166) MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 15907) -MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17525) -MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21408) +MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17569) +MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21531) MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 14617) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210107) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58394) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210239) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58438) MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 17721) MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 45162) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46370) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76605) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308233) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50536) -MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 51181) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46458) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76781) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308409) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50624) +MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 51269) MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 19345) MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 15913) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 209885) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60182) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210017) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60226) MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 46980) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 48179) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 77706) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308215) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52324) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 48267) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 77882) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308391) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52412) MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 11315) MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 19157) MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 10609) @@ -338,10 +344,10 @@ NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 25 NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 220866) NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 60382) NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 152988) -NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166070) -NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195673) -NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139139) -NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105187) +NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166004) +NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195563) +NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139073) +NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105143) NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates_success() (gas: 123118) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43282) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64610) @@ -374,8 +380,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 61590) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151) OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670951) -OffRamp_commit:test_NoConfig_Revert() (gas: 6254557) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670974) +OffRamp_commit:test_NoConfig_Revert() (gas: 6254580) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113033) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121381) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113032) @@ -384,10 +390,10 @@ OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164378) OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139413) OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146578) OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59858) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232042) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232130) OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125387) OffRamp_commit:test_Unhealthy_Revert() (gas: 58656) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206691) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206735) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) OffRamp_constructor:test_Constructor_Success() (gas: 6215957) OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135933) @@ -400,12 +406,12 @@ OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3409595) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371194) OffRamp_execute:test_MultipleReports_Success() (gas: 299305) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079222) -OffRamp_execute:test_NoConfig_Revert() (gas: 6303697) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079245) +OffRamp_execute:test_NoConfig_Revert() (gas: 6303720) OffRamp_execute:test_NonArray_Revert() (gas: 27562) OffRamp_execute:test_SingleReport_Success() (gas: 175796) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147814) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7081971) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7081994) OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18515) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 243683) @@ -484,7 +490,7 @@ OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 294834) OffRamp_trialExecute:test_trialExecute_Success() (gas: 277312) -OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 250779) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 250848) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17209) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67048) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 325706) @@ -496,34 +502,34 @@ OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Rever OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98232) OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93245) OnRamp_constructor:test_Constructor_Success() (gas: 2762169) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115351) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146174) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145749) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143976) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145946) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145344) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140719) -OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38560) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115307) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146130) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145705) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143932) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145902) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145300) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140697) +OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38538) OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143078) -OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36625) +OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36603) OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36511) OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18269) OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38460) OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23669) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186396) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212780) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 146978) -OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161083) -OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3615293) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186264) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212648) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 146934) +OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161127) +OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3615067) OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24016) OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75850) OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38583) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280301) -OnRamp_getFee:test_EmptyMessage_Success() (gas: 98597) -OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65467) -OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 86990) -OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35092) -OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113770) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280047) +OnRamp_getFee:test_EmptyMessage_Success() (gas: 98689) +OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65468) +OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 87080) +OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35115) +OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113862) OnRamp_getFee:test_Unhealthy_Revert() (gas: 17039) OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10474) OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35282) @@ -533,12 +539,12 @@ OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert( OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 16850) OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13243) OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56390) -OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97325) -PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172600) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97303) +PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172601) PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20240) PingPong_plumbing:test_Pausing_Success() (gas: 17718) -PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 153736) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 179373) +PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 153737) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 179374) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18822) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18660) RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20371) @@ -606,23 +612,23 @@ Router_applyRampUpdates:test_OffRampMismatch_Revert() (gas: 89366) Router_applyRampUpdates:test_OffRampUpdatesWithRouting() (gas: 10663332) Router_applyRampUpdates:test_OnRampDisable() (gas: 56007) Router_applyRampUpdates:test_OnlyOwner_Revert() (gas: 12334) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131251) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 220951) -Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71652) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131252) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 220974) +Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71675) Router_ccipSend:test_InvalidMsgValue() (gas: 32267) -Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69340) -Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 192950) -Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61388) -Router_ccipSend:test_NativeFeeToken_Success() (gas: 191576) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226370) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69363) +Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 192974) +Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61411) +Router_ccipSend:test_NativeFeeToken_Success() (gas: 191600) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226349) Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 24900) Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 44902) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 193820) -Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140512) -Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230125) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 193844) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140513) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230148) Router_constructor:test_Constructor_Success() (gas: 13076) Router_getArmProxy:test_getArmProxy() (gas: 10573) -Router_getFee:test_GetFeeSupportedChain_Success() (gas: 51693) +Router_getFee:test_GetFeeSupportedChain_Success() (gas: 51716) Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17150) Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10474) Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 11334) diff --git a/contracts/src/v0.8/ccip/FeeQuoter.sol b/contracts/src/v0.8/ccip/FeeQuoter.sol index 66f63c7c720..c9a97e04264 100644 --- a/contracts/src/v0.8/ccip/FeeQuoter.sol +++ b/contracts/src/v0.8/ccip/FeeQuoter.sol @@ -42,7 +42,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, error MessageFeeTooHigh(uint256 msgFeeJuels, uint256 maxFeeJuelsPerMsg); error InvalidStaticConfig(); error MessageTooLarge(uint256 maxSize, uint256 actualSize); - error UnsupportedNumberOfTokens(); + error UnsupportedNumberOfTokens(uint256 numberOfTokens, uint256 maxNumberOfTokensPerMsg); + error InvalidFeeRange(uint256 minFeeUSDCents, uint256 maxFeeUSDCents); event FeeTokenAdded(address indexed feeToken); event FeeTokenRemoved(address indexed feeToken); @@ -57,10 +58,11 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, event DestChainConfigUpdated(uint64 indexed destChainSelector, DestChainConfig destChainConfig); event DestChainAdded(uint64 indexed destChainSelector, DestChainConfig destChainConfig); - /// @dev Token price data feed configuration + /// @dev Contains token price configuration used in both the keystone price updates and the price feed fallback logic. struct TokenPriceFeedConfig { - address dataFeedAddress; // ─╮ AggregatorV3Interface contract (0 - feed is unset) - uint8 tokenDecimals; // ─────╯ Decimals of the token that the feed represents + address dataFeedAddress; // ──╮ Price feed contract. Can be address(0) to indicate no feed is configured. + uint8 tokenDecimals; // | Decimals of the token, used for both keystone and price feed decimal multiplications. + bool isEnabled; // ───────────╯ Whether the token is configured to receive keystone and/or price feed updates. } /// @dev Token price data feed update @@ -248,16 +250,16 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, return tokenPrice; } + // When we have a stale price we should check if there is a more up to date source. If not, return the stale price. TokenPriceFeedConfig memory priceFeedConfig = s_usdPriceFeedsPerToken[token]; - - // If the token price feed is not set, return the stale price - if (priceFeedConfig.dataFeedAddress == address(0)) { + if (!priceFeedConfig.isEnabled || priceFeedConfig.dataFeedAddress == address(0)) { return tokenPrice; } // If the token price feed is set, retrieve the price from the feed Internal.TimestampedPackedUint224 memory feedPrice = _getTokenPriceFromDataFeed(priceFeedConfig); + // We check if the feed price isn't more stale than the stored price. Return the most recent one. return feedPrice.timestamp >= tokenPrice.timestamp ? feedPrice : tokenPrice; } @@ -507,18 +509,21 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, ReceivedCCIPFeedReport[] memory feeds = abi.decode(report, (ReceivedCCIPFeedReport[])); for (uint256 i = 0; i < feeds.length; ++i) { - uint8 tokenDecimals = s_usdPriceFeedsPerToken[feeds[i].token].tokenDecimals; - if (tokenDecimals == 0) { + TokenPriceFeedConfig memory feedConfig = s_usdPriceFeedsPerToken[feeds[i].token]; + + if (!feedConfig.isEnabled) { revert TokenNotSupported(feeds[i].token); } // Keystone reports prices in USD with 18 decimals, so we passing it as 18 in the _calculateRebasedValue function - uint224 rebasedValue = _calculateRebasedValue(uint8(KEYSTONE_PRICE_DECIMALS), tokenDecimals, feeds[i].price); + uint224 rebasedValue = + _calculateRebasedValue(uint8(KEYSTONE_PRICE_DECIMALS), feedConfig.tokenDecimals, feeds[i].price); //if stale update then revert if (feeds[i].timestamp < s_usdPerToken[feeds[i].token].timestamp) { revert StaleKeystoneUpdate(feeds[i].token, feeds[i].timestamp, s_usdPerToken[feeds[i].token].timestamp); } + // Update the token price with the new value and timestamp s_usdPerToken[feeds[i].token] = Internal.TimestampedPackedUint224({value: rebasedValue, timestamp: feeds[i].timestamp}); emit UsdPerTokenUpdated(feeds[i].token, rebasedValue, feeds[i].timestamp); @@ -583,8 +588,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, // We then multiply this gas total with the gas multiplier and gas price, converting it into USD with 36 decimals. // uint112(packedGasPrice) = executionGasPrice - // NOTE: when supporting non-EVM chains, revisit how generic this fee logic can be - // NOTE: revisit parsing non-EVM args + // NOTE: Fee logic is currently only supported for EVM-Chains, and the gas price is assumed to be in wei. + // fee logic for other chains should be implemented in the future. uint256 executionCost = uint112(packedGasPrice) * ( destChainConfig.destGasOverhead + (message.data.length * destChainConfig.destGasPerPayloadByte) + tokenTransferGas @@ -801,6 +806,10 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, tokenTransferFeeConfigArg.tokenTransferFeeConfigs[j].tokenTransferFeeConfig; address token = tokenTransferFeeConfigArg.tokenTransferFeeConfigs[j].token; + if (tokenTransferFeeConfig.minFeeUSDCents >= tokenTransferFeeConfig.maxFeeUSDCents) { + revert InvalidFeeRange(tokenTransferFeeConfig.minFeeUSDCents, tokenTransferFeeConfig.maxFeeUSDCents); + } + if (tokenTransferFeeConfig.destBytesOverhead < Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES) { revert InvalidDestBytesOverhead(token, tokenTransferFeeConfig.destBytesOverhead); } @@ -846,6 +855,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, _parseUnvalidatedEVMExtraArgsFromBytes(extraArgs, destChainConfig.defaultTxGasLimit); if (evmExtraArgs.gasLimit > uint256(destChainConfig.maxPerMsgGasLimit)) revert MessageGasLimitTooHigh(); + + // If the chain enforces out of order execution, the extra args must allow it, otherwise revert if (destChainConfig.enforceOutOfOrder && !evmExtraArgs.allowOutOfOrderExecution) { revert ExtraArgOutOfOrderExecutionMustBeTrue(); } @@ -896,7 +907,9 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, if (dataLength > uint256(destChainConfig.maxDataBytes)) { revert MessageTooLarge(uint256(destChainConfig.maxDataBytes), dataLength); } - if (numberOfTokens > uint256(destChainConfig.maxNumberOfTokensPerMsg)) revert UnsupportedNumberOfTokens(); + if (numberOfTokens > uint256(destChainConfig.maxNumberOfTokensPerMsg)) { + revert UnsupportedNumberOfTokens(numberOfTokens, destChainConfig.maxNumberOfTokensPerMsg); + } _validateDestFamilyAddress(destChainConfig.chainFamilySelector, receiver); } @@ -929,8 +942,10 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, if (msgFeeJuels > i_maxFeeJuelsPerMsg) revert MessageFeeTooHigh(msgFeeJuels, i_maxFeeJuelsPerMsg); uint64 defaultTxGasLimit = s_destChainConfigs[destChainSelector].defaultTxGasLimit; - // NOTE: when supporting non-EVM chains, revisit this and parse non-EVM args. - // We can parse unvalidated args since this message is called after getFee (which will already validate the params) + + // NOTE: Only EVM chains are supported for now, additional validation logic will be added when supporting other + // chain families to parse non-EVM args + // Since the message is called after getFee, which will already validate the params, no validation is necessary Client.EVMExtraArgsV2 memory parsedExtraArgs = _parseUnvalidatedEVMExtraArgsFromBytes(extraArgs, defaultTxGasLimit); isOutOfOrderExecution = parsedExtraArgs.allowOutOfOrderExecution; destExecDataPerToken = _processPoolReturnData(destChainSelector, onRampTokenTransfers, sourceTokenAmounts); @@ -966,10 +981,12 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, _validateDestFamilyAddress(chainFamilySelector, onRampTokenTransfers[i].destTokenAddress); FeeQuoter.TokenTransferFeeConfig memory tokenTransferFeeConfig = s_tokenTransferFeeConfig[destChainSelector][sourceToken]; - uint32 defaultGasOverhead = s_destChainConfigs[destChainSelector].defaultTokenDestGasOverhead; - // NOTE: Revisit this when adding new non-EVM chain family selector support - uint32 destGasAmount = - tokenTransferFeeConfig.isEnabled ? tokenTransferFeeConfig.destGasOverhead : defaultGasOverhead; + + // NOTE: Only EVM chains' gas model is supported for now, additional fee logic for non-EVM chains will + // be required in the future with parsing based on chain family selector. + uint32 destGasAmount = tokenTransferFeeConfig.isEnabled + ? tokenTransferFeeConfig.destGasOverhead + : s_destChainConfigs[destChainSelector].defaultTokenDestGasOverhead; // The user will be billed either the default or the override, so we send the exact amount that we billed for // to the destination chain to be used for the token releaseOrMint and transfer. @@ -1008,7 +1025,8 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, uint64 destChainSelector = destChainConfigArgs[i].destChainSelector; DestChainConfig memory destChainConfig = destChainConfigArg.destChainConfig; - // NOTE: when supporting non-EVM chains, update chainFamilySelector validations + // destChainSelector must be non-zero, defaultTxGasLimit must be set, and must be less than maxPerMsgGasLimit + // Only EVM chains are supported for now, additional validation logic will be added when supporting other chain families if ( destChainSelector == 0 || destChainConfig.defaultTxGasLimit == 0 || destChainConfig.chainFamilySelector != Internal.CHAIN_FAMILY_SELECTOR_EVM diff --git a/contracts/src/v0.8/ccip/MultiAggregateRateLimiter.sol b/contracts/src/v0.8/ccip/MultiAggregateRateLimiter.sol index 7dfcc0ef603..0d439257d3d 100644 --- a/contracts/src/v0.8/ccip/MultiAggregateRateLimiter.sol +++ b/contracts/src/v0.8/ccip/MultiAggregateRateLimiter.sol @@ -176,6 +176,7 @@ contract MultiAggregateRateLimiter is IMessageInterceptor, AuthorizedCallers, IT if (tokenBucket.lastUpdated == 0) { // Token bucket needs to be newly added + RateLimiter._validateTokenBucketConfig(configUpdate, false); RateLimiter.TokenBucket memory newTokenBucket = RateLimiter.TokenBucket({ rate: configUpdate.rate, capacity: configUpdate.capacity, diff --git a/contracts/src/v0.8/ccip/interfaces/IFeeQuoter.sol b/contracts/src/v0.8/ccip/interfaces/IFeeQuoter.sol index 84d430410b2..831941d4878 100644 --- a/contracts/src/v0.8/ccip/interfaces/IFeeQuoter.sol +++ b/contracts/src/v0.8/ccip/interfaces/IFeeQuoter.sol @@ -17,8 +17,8 @@ interface IFeeQuoter is IPriceRegistry { /// @notice Converts the extraArgs to the latest version and returns the converted message fee in juels /// @notice Validates pool return data - /// @param destChainSelector destination chain selector to process - /// @param feeToken Fee token address used to pay for message fees + /// @param destChainSelector destination chain selector to process, must be a configured valid chain + /// @param feeToken token address used to pay for message fees, must be a configured valid fee token /// @param feeTokenAmount Fee token amount /// @param extraArgs Message extra args that were passed in by the client /// @param onRampTokenTransfers Token amounts with populated pool return data diff --git a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol index 0fff94ee4fc..51997129036 100644 --- a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol +++ b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol @@ -34,9 +34,9 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { error MustBeCalledByRouter(); error RouterMustSetOriginalSender(); error InvalidConfig(); - error CursedByRMN(uint64 sourceChainSelector); + error CursedByRMN(uint64 destChainSelector); error GetSupportedTokensFunctionalityRemovedCheckAdminRegistry(); - error InvalidDestChainConfig(uint64 sourceChainSelector); + error InvalidDestChainConfig(uint64 destChainSelector); error OnlyCallableByOwnerOrAllowlistAdmin(); error SenderNotAllowed(address sender); error InvalidAllowListRequest(uint64 destChainSelector); @@ -400,7 +400,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { /// @return router address of the router function getDestChainConfig( uint64 destChainSelector - ) public view returns (uint64 sequenceNumber, bool allowlistEnabled, address router) { + ) external view returns (uint64 sequenceNumber, bool allowlistEnabled, address router) { DestChainConfig storage config = s_destChainConfigs[destChainSelector]; sequenceNumber = config.sequenceNumber; allowlistEnabled = config.allowlistEnabled; @@ -417,7 +417,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { /// configured. function getAllowedSendersList( uint64 destChainSelector - ) public view returns (bool isEnabled, address[] memory configuredAddresses) { + ) external view returns (bool isEnabled, address[] memory configuredAddresses) { return ( s_destChainConfigs[destChainSelector].allowlistEnabled, s_destChainConfigs[destChainSelector].allowedSendersList.values() diff --git a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol index 36ccb14da93..d5df2f99c9d 100644 --- a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol +++ b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol @@ -1125,6 +1125,20 @@ contract FeeQuoter_applyTokenTransferFeeConfigUpdates is FeeQuoterSetup { function test_Fuzz_ApplyTokenTransferFeeConfig_Success( FeeQuoter.TokenTransferFeeConfig[2] memory tokenTransferFeeConfigs ) public { + // To prevent Invalid Fee Range error from the fuzzer, bound the results to a valid range that + // where minFee < maxFee + tokenTransferFeeConfigs[0].minFeeUSDCents = + uint32(bound(tokenTransferFeeConfigs[0].minFeeUSDCents, 0, type(uint8).max)); + tokenTransferFeeConfigs[1].minFeeUSDCents = + uint32(bound(tokenTransferFeeConfigs[1].minFeeUSDCents, 0, type(uint8).max)); + + tokenTransferFeeConfigs[0].maxFeeUSDCents = uint32( + bound(tokenTransferFeeConfigs[0].maxFeeUSDCents, tokenTransferFeeConfigs[0].minFeeUSDCents + 1, type(uint32).max) + ); + tokenTransferFeeConfigs[1].maxFeeUSDCents = uint32( + bound(tokenTransferFeeConfigs[1].maxFeeUSDCents, tokenTransferFeeConfigs[1].minFeeUSDCents + 1, type(uint32).max) + ); + FeeQuoter.TokenTransferFeeConfigArgs[] memory tokenTransferFeeConfigArgs = _generateTokenTransferFeeConfigArgs(2, 2); tokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR; tokenTransferFeeConfigArgs[1].destChainSelector = DEST_CHAIN_SELECTOR + 1; @@ -1414,8 +1428,8 @@ contract FeeQuoter_getTokenTransferCost is FeeQuoterFeeSetup { tokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR; tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].token = s_sourceFeeToken; tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig = FeeQuoter.TokenTransferFeeConfig({ - minFeeUSDCents: 1, - maxFeeUSDCents: 0, + minFeeUSDCents: 0, + maxFeeUSDCents: 1, deciBps: 0, destGasOverhead: 0, destBytesOverhead: uint32(Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES), @@ -1766,7 +1780,7 @@ contract FeeQuoter_getValidatedFee is FeeQuoterFeeSetup { Client.EVM2AnyMessage memory message = _generateEmptyMessage(); uint256 tooMany = MAX_TOKENS_LENGTH + 1; message.tokenAmounts = new Client.EVMTokenAmount[](tooMany); - vm.expectRevert(FeeQuoter.UnsupportedNumberOfTokens.selector); + vm.expectRevert(abi.encodeWithSelector(FeeQuoter.UnsupportedNumberOfTokens.selector, tooMany, MAX_TOKENS_LENGTH)); s_feeQuoter.getValidatedFee(DEST_CHAIN_SELECTOR, message); } @@ -2010,6 +2024,29 @@ contract FeeQuoter_processMessageArgs is FeeQuoterFeeSetup { ); } + function test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() public { + address sourceETH = s_sourceTokens[1]; + + // Set token config to allow larger data + FeeQuoter.TokenTransferFeeConfigArgs[] memory tokenTransferFeeConfigArgs = _generateTokenTransferFeeConfigArgs(1, 1); + tokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR; + tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].token = sourceETH; + tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig = FeeQuoter.TokenTransferFeeConfig({ + minFeeUSDCents: 1, + maxFeeUSDCents: 0, + deciBps: 0, + destGasOverhead: 0, + destBytesOverhead: uint32(Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES) + 32, + isEnabled: true + }); + + vm.expectRevert(abi.encodeWithSelector(FeeQuoter.InvalidFeeRange.selector, 1, 0)); + + s_feeQuoter.applyTokenTransferFeeConfigUpdates( + tokenTransferFeeConfigArgs, new FeeQuoter.TokenTransferFeeConfigRemoveArgs[](0) + ); + } + function test_processMessageArgs_SourceTokenDataTooLarge_Revert() public { address sourceETH = s_sourceTokens[1]; @@ -2043,8 +2080,8 @@ contract FeeQuoter_processMessageArgs is FeeQuoterFeeSetup { tokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR; tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].token = sourceETH; tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig = FeeQuoter.TokenTransferFeeConfig({ - minFeeUSDCents: 1, - maxFeeUSDCents: 0, + minFeeUSDCents: 0, + maxFeeUSDCents: 1, deciBps: 0, destGasOverhead: 0, destBytesOverhead: uint32(Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES) + 32, @@ -2218,11 +2255,11 @@ contract FeeQuoter_KeystoneSetup is FeeQuoterSetup { FeeQuoter.TokenPriceFeedUpdate[] memory tokenPriceFeeds = new FeeQuoter.TokenPriceFeedUpdate[](2); tokenPriceFeeds[0] = FeeQuoter.TokenPriceFeedUpdate({ sourceToken: onReportTestToken1, - feedConfig: FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: address(0x0), tokenDecimals: 18}) + feedConfig: FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: address(0x0), tokenDecimals: 18, isEnabled: true}) }); tokenPriceFeeds[1] = FeeQuoter.TokenPriceFeedUpdate({ sourceToken: onReportTestToken2, - feedConfig: FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: address(0x0), tokenDecimals: 20}) + feedConfig: FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: address(0x0), tokenDecimals: 20, isEnabled: true}) }); s_feeQuoter.setReportPermissions(permissions); s_feeQuoter.updateTokenPriceFeeds(tokenPriceFeeds); @@ -2257,6 +2294,19 @@ contract FeeQuoter_onReport is FeeQuoter_KeystoneSetup { vm.assertEq(s_feeQuoter.getTokenPrice(report[1].token).timestamp, report[1].timestamp); } + function test_onReport_TokenNotSupported_Revert() public { + bytes memory encodedPermissionsMetadata = + abi.encodePacked(keccak256(abi.encode("workflowCID")), WORKFLOW_NAME_1, WORKFLOW_OWNER_1, REPORT_NAME_1); + FeeQuoter.ReceivedCCIPFeedReport[] memory report = new FeeQuoter.ReceivedCCIPFeedReport[](1); + report[0] = + FeeQuoter.ReceivedCCIPFeedReport({token: s_sourceTokens[1], price: 4e18, timestamp: uint32(block.timestamp)}); + + // Revert due to token config not being set with the isEnabled flag + vm.expectRevert(abi.encodeWithSelector(FeeQuoter.TokenNotSupported.selector, s_sourceTokens[1])); + vm.startPrank(FORWARDER_1); + s_feeQuoter.onReport(encodedPermissionsMetadata, abi.encode(report)); + } + function test_onReport_InvalidForwarder_Reverts() public { bytes memory encodedPermissionsMetadata = abi.encodePacked(keccak256(abi.encode("workflowCID")), WORKFLOW_NAME_1, WORKFLOW_OWNER_1, REPORT_NAME_1); diff --git a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoterSetup.t.sol b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoterSetup.t.sol index f1a00be78c3..20283da17bf 100644 --- a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoterSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoterSetup.t.sol @@ -210,7 +210,11 @@ contract FeeQuoterSetup is TokenSetup { ) internal pure returns (FeeQuoter.TokenPriceFeedUpdate memory) { return FeeQuoter.TokenPriceFeedUpdate({ sourceToken: sourceToken, - feedConfig: FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: dataFeedAddress, tokenDecimals: tokenDecimals}) + feedConfig: FeeQuoter.TokenPriceFeedConfig({ + dataFeedAddress: dataFeedAddress, + tokenDecimals: tokenDecimals, + isEnabled: true + }) }); } @@ -268,13 +272,14 @@ contract FeeQuoterSetup is TokenSetup { ) internal pure virtual { assertEq(config1.dataFeedAddress, config2.dataFeedAddress); assertEq(config1.tokenDecimals, config2.tokenDecimals); + assertEq(config1.isEnabled, config2.isEnabled); } function _assertTokenPriceFeedConfigUnconfigured( FeeQuoter.TokenPriceFeedConfig memory config ) internal pure virtual { _assertTokenPriceFeedConfigEquality( - config, FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: address(0), tokenDecimals: 0}) + config, FeeQuoter.TokenPriceFeedConfig({dataFeedAddress: address(0), tokenDecimals: 0, isEnabled: false}) ); } diff --git a/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol index d7a50a7724e..7f9d6c7fb7e 100644 --- a/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol @@ -578,8 +578,8 @@ contract OnRamp_forwardFromRouter is OnRampSetup { tokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR; tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].token = sourceETH; tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig = FeeQuoter.TokenTransferFeeConfig({ - minFeeUSDCents: 1, - maxFeeUSDCents: 0, + minFeeUSDCents: 0, + maxFeeUSDCents: 1, deciBps: 0, destGasOverhead: 0, destBytesOverhead: uint32(Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES) + 32, diff --git a/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol b/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol index a7d73cc8b37..d11c9cdb7d9 100644 --- a/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol +++ b/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol @@ -439,6 +439,66 @@ contract MultiAggregateRateLimiter_applyRateLimiterConfigUpdates is MultiAggrega vm.expectRevert(bytes("Only callable by owner")); s_rateLimiter.applyRateLimiterConfigUpdates(configUpdates); } + + function test_ConfigRateMoreThanCapacity_Revert() public { + MultiAggregateRateLimiter.RateLimiterConfigArgs[] memory configUpdates = + new MultiAggregateRateLimiter.RateLimiterConfigArgs[](1); + configUpdates[0] = MultiAggregateRateLimiter.RateLimiterConfigArgs({ + remoteChainSelector: CHAIN_SELECTOR_1 + 1, + isOutboundLane: false, + rateLimiterConfig: RateLimiter.Config({isEnabled: true, rate: 100, capacity: 100}) + }); + + vm.expectRevert( + abi.encodeWithSelector(RateLimiter.InvalidRateLimitRate.selector, configUpdates[0].rateLimiterConfig) + ); + s_rateLimiter.applyRateLimiterConfigUpdates(configUpdates); + } + + function test_ConfigRateZero_Revert() public { + MultiAggregateRateLimiter.RateLimiterConfigArgs[] memory configUpdates = + new MultiAggregateRateLimiter.RateLimiterConfigArgs[](1); + configUpdates[0] = MultiAggregateRateLimiter.RateLimiterConfigArgs({ + remoteChainSelector: CHAIN_SELECTOR_1 + 1, + isOutboundLane: false, + rateLimiterConfig: RateLimiter.Config({isEnabled: true, rate: 0, capacity: 100}) + }); + + vm.expectRevert( + abi.encodeWithSelector(RateLimiter.InvalidRateLimitRate.selector, configUpdates[0].rateLimiterConfig) + ); + s_rateLimiter.applyRateLimiterConfigUpdates(configUpdates); + } + + function test_DisableConfigRateNonZero_Revert() public { + MultiAggregateRateLimiter.RateLimiterConfigArgs[] memory configUpdates = + new MultiAggregateRateLimiter.RateLimiterConfigArgs[](1); + configUpdates[0] = MultiAggregateRateLimiter.RateLimiterConfigArgs({ + remoteChainSelector: CHAIN_SELECTOR_1 + 1, + isOutboundLane: false, + rateLimiterConfig: RateLimiter.Config({isEnabled: false, rate: 5, capacity: 100}) + }); + + vm.expectRevert( + abi.encodeWithSelector(RateLimiter.DisabledNonZeroRateLimit.selector, configUpdates[0].rateLimiterConfig) + ); + s_rateLimiter.applyRateLimiterConfigUpdates(configUpdates); + } + + function test_DiableConfigCapacityNonZero_Revert() public { + MultiAggregateRateLimiter.RateLimiterConfigArgs[] memory configUpdates = + new MultiAggregateRateLimiter.RateLimiterConfigArgs[](1); + configUpdates[0] = MultiAggregateRateLimiter.RateLimiterConfigArgs({ + remoteChainSelector: CHAIN_SELECTOR_1 + 1, + isOutboundLane: false, + rateLimiterConfig: RateLimiter.Config({isEnabled: false, rate: 0, capacity: 100}) + }); + + vm.expectRevert( + abi.encodeWithSelector(RateLimiter.DisabledNonZeroRateLimit.selector, configUpdates[0].rateLimiterConfig) + ); + s_rateLimiter.applyRateLimiterConfigUpdates(configUpdates); + } } contract MultiAggregateRateLimiter_getTokenValue is MultiAggregateRateLimiterSetup { diff --git a/contracts/src/v0.8/shared/test/helpers/ChainReaderTester.sol b/contracts/src/v0.8/shared/test/helpers/ChainReaderTester.sol index bf4bd4b25d5..51017944ff6 100644 --- a/contracts/src/v0.8/shared/test/helpers/ChainReaderTester.sol +++ b/contracts/src/v0.8/shared/test/helpers/ChainReaderTester.sol @@ -7,14 +7,18 @@ struct TestStruct { string DifferentField; uint8 OracleId; uint8[32] OracleIds; - address Account; - address AccountStr; + AccountStruct AccountStruct; address[] Accounts; int192 BigField; MidLevelDynamicTestStruct NestedDynamicStruct; MidLevelStaticTestStruct NestedStaticStruct; } +struct AccountStruct { + address Account; + address AccountStr; +} + struct MidLevelDynamicTestStruct { bytes2 FixedBytes; InnerDynamicTestStruct Inner; @@ -42,8 +46,7 @@ contract ChainReaderTester { MidLevelDynamicTestStruct nestedDynamicStruct, MidLevelStaticTestStruct nestedStaticStruct, uint8[32] oracleIds, - address Account, - address AccountStr, + AccountStruct accountStruct, address[] Accounts, string differentField, int192 bigField @@ -75,8 +78,7 @@ contract ChainReaderTester { string calldata differentField, uint8 oracleId, uint8[32] calldata oracleIds, - address account, - address accountStr, + AccountStruct calldata accountStruct, address[] calldata accounts, int192 bigField, MidLevelDynamicTestStruct calldata nestedDynamicStruct, @@ -88,8 +90,7 @@ contract ChainReaderTester { differentField, oracleId, oracleIds, - account, - accountStr, + accountStruct, accounts, bigField, nestedDynamicStruct, @@ -107,8 +108,7 @@ contract ChainReaderTester { string calldata differentField, uint8 oracleId, uint8[32] calldata oracleIds, - address account, - address accountStr, + AccountStruct calldata accountStruct, address[] calldata accounts, int192 bigField, MidLevelDynamicTestStruct calldata nestedDynamicStruct, @@ -120,8 +120,7 @@ contract ChainReaderTester { differentField, oracleId, oracleIds, - account, - accountStr, + accountStruct, accounts, bigField, nestedDynamicStruct, @@ -159,8 +158,7 @@ contract ChainReaderTester { MidLevelDynamicTestStruct calldata nestedDynamicStruct, MidLevelStaticTestStruct calldata nestedStaticStruct, uint8[32] calldata oracleIds, - address account, - address accountStr, + AccountStruct calldata accountStruct, address[] calldata accounts, string calldata differentField, int192 bigField @@ -171,8 +169,7 @@ contract ChainReaderTester { nestedDynamicStruct, nestedStaticStruct, oracleIds, - account, - accountStr, + accountStruct, accounts, differentField, bigField diff --git a/core/capabilities/ccip/launcher/deployment.go b/core/capabilities/ccip/launcher/deployment.go index bed6296549e..631c02d5cc9 100644 --- a/core/capabilities/ccip/launcher/deployment.go +++ b/core/capabilities/ccip/launcher/deployment.go @@ -31,10 +31,19 @@ type ccipDeployment struct { // Close shuts down all OCR instances in the deployment. func (c *ccipDeployment) Close() error { + // we potentially run into this situation when + // trying to close an active instance that doesn't exist + // this check protects us from nil pointer exception + + if c == nil { + return nil + } var err error // shutdown active commit instance. - err = multierr.Append(err, c.commit.active.Close()) + if c.commit.active != nil { + err = multierr.Append(err, c.commit.active.Close()) + } // shutdown candidate commit instance. if c.commit.candidate != nil { @@ -42,7 +51,9 @@ func (c *ccipDeployment) Close() error { } // shutdown active exec instance. - err = multierr.Append(err, c.exec.active.Close()) + if c.exec.active != nil { + err = multierr.Append(err, c.exec.active.Close()) + } // shutdown candidate exec instance. if c.exec.candidate != nil { diff --git a/core/capabilities/ccip/launcher/launcher.go b/core/capabilities/ccip/launcher/launcher.go index bc351291dc0..6b512d142c1 100644 --- a/core/capabilities/ccip/launcher/launcher.go +++ b/core/capabilities/ccip/launcher/launcher.go @@ -2,6 +2,7 @@ package launcher import ( "context" + "errors" "fmt" "sync" "time" @@ -189,6 +190,10 @@ func (l *launcher) processUpdate(updated map[registrysyncer.DonID]registrysyncer if !ok { return fmt.Errorf("invariant violation: expected to find CCIP DON %d in the map of running deployments", don.ID) } + // we encounter this when a node is removed from the don + if prevDeployment == nil { + return errors.New("this node was closed") + } futDeployment, err := updateDON( l.lggr, @@ -201,16 +206,19 @@ func (l *launcher) processUpdate(updated map[registrysyncer.DonID]registrysyncer if err != nil { return err } - if err := futDeployment.TransitionDeployment(prevDeployment); err != nil { - // TODO: how to handle a failed active-candidate deployment? - return fmt.Errorf("failed to handle active-candidate deployment for CCIP DON %d: %w", donID, err) - } + // When we remove a node from the don, this node does not have a future deployment + if futDeployment != nil { + if err := futDeployment.TransitionDeployment(prevDeployment); err != nil { + // TODO: how to handle a failed active-candidate deployment? + return fmt.Errorf("failed to handle active-candidate deployment for CCIP DON %d: %w", donID, err) + } - // update state. - l.dons[donID] = futDeployment - // update the state with the latest config. - // this way if one of the starts errors, we don't retry all of them. - l.regState.IDsToDONs[donID] = updated[donID] + // update state. + l.dons[donID] = futDeployment + // update the state with the latest config. + // this way if one of the starts errors, we don't retry all of them. + l.regState.IDsToDONs[donID] = updated[donID] + } } return nil diff --git a/core/chains/evm/config/toml/config.go b/core/chains/evm/config/toml/config.go index faf115e07ad..4af3b9bc7c1 100644 --- a/core/chains/evm/config/toml/config.go +++ b/core/chains/evm/config/toml/config.go @@ -314,10 +314,15 @@ func (c *EVMConfig) ValidateConfig() (err error) { } else { var hasPrimary bool var logBroadcasterEnabled bool + var newHeadsPollingInterval commonconfig.Duration if c.LogBroadcasterEnabled != nil { logBroadcasterEnabled = *c.LogBroadcasterEnabled } + if c.NodePool.NewHeadsPollInterval != nil { + newHeadsPollingInterval = *c.NodePool.NewHeadsPollInterval + } + for i, n := range c.Nodes { if n.SendOnly != nil && *n.SendOnly { continue @@ -325,9 +330,15 @@ func (c *EVMConfig) ValidateConfig() (err error) { hasPrimary = true - // if the node is a primary node, then the WS URL is required when LogBroadcaster is enabled - if logBroadcasterEnabled && (n.WSURL == nil || n.WSURL.IsZero()) { - err = multierr.Append(err, commonconfig.ErrMissing{Name: "Nodes", Msg: fmt.Sprintf("%vth node (primary) must have a valid WSURL when LogBroadcaster is enabled", i)}) + // if the node is a primary node, then the WS URL is required when + // 1. LogBroadcaster is enabled + // 2. The http polling is disabled (newHeadsPollingInterval == 0) + if n.WSURL == nil || n.WSURL.IsZero() { + if logBroadcasterEnabled { + err = multierr.Append(err, commonconfig.ErrMissing{Name: "Nodes", Msg: fmt.Sprintf("%vth node (primary) must have a valid WSURL when LogBroadcaster is enabled", i)}) + } else if newHeadsPollingInterval.Duration() == 0 { + err = multierr.Append(err, commonconfig.ErrMissing{Name: "Nodes", Msg: fmt.Sprintf("%vth node (primary) must have a valid WSURL when http polling is disabled", i)}) + } } } diff --git a/core/chains/evm/gas/block_history_estimator_test.go b/core/chains/evm/gas/block_history_estimator_test.go index de698fc9a08..384825c3a2c 100644 --- a/core/chains/evm/gas/block_history_estimator_test.go +++ b/core/chains/evm/gas/block_history_estimator_test.go @@ -1433,15 +1433,19 @@ func TestBlockHistoryEstimator_IsUsable(t *testing.T) { assert.Equal(t, true, bhe.IsUsable(tx, block, defaultChainType, geCfg.PriceMin(), logger.Test(t))) }) - t.Run("returns false if transaction is of type 0x7c or 0x7b only on Celo", func(t *testing.T) { + t.Run("returns false if transaction is of type 0x7c, 0x7b, or 0x7e only on Celo", func(t *testing.T) { tx := evmtypes.Transaction{Type: 0x7c, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()} - assert.Equal(t, false, bhe.IsUsable(tx, block, chaintype.ChainCelo, geCfg.PriceMin(), logger.Test(t))) + assert.False(t, bhe.IsUsable(tx, block, chaintype.ChainCelo, geCfg.PriceMin(), logger.Test(t))) tx2 := evmtypes.Transaction{Type: 0x7b, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()} - assert.Equal(t, false, bhe.IsUsable(tx2, block, chaintype.ChainCelo, geCfg.PriceMin(), logger.Test(t))) + assert.False(t, bhe.IsUsable(tx2, block, chaintype.ChainCelo, geCfg.PriceMin(), logger.Test(t))) - assert.Equal(t, true, bhe.IsUsable(tx, block, defaultChainType, geCfg.PriceMin(), logger.Test(t))) - assert.Equal(t, true, bhe.IsUsable(tx2, block, defaultChainType, geCfg.PriceMin(), logger.Test(t))) + tx3 := evmtypes.Transaction{Type: 0x7e, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()} + assert.False(t, bhe.IsUsable(tx2, block, chaintype.ChainCelo, geCfg.PriceMin(), logger.Test(t))) + + assert.True(t, bhe.IsUsable(tx, block, defaultChainType, geCfg.PriceMin(), logger.Test(t))) + assert.True(t, bhe.IsUsable(tx2, block, defaultChainType, geCfg.PriceMin(), logger.Test(t))) + assert.True(t, bhe.IsUsable(tx3, block, defaultChainType, geCfg.PriceMin(), logger.Test(t))) }) t.Run("returns false if transaction is of type 0x16 only on WeMix", func(t *testing.T) { diff --git a/core/chains/evm/gas/chain_specific.go b/core/chains/evm/gas/chain_specific.go index d1add00758b..a647f2ad272 100644 --- a/core/chains/evm/gas/chain_specific.go +++ b/core/chains/evm/gas/chain_specific.go @@ -31,7 +31,7 @@ func chainSpecificIsUsable(tx evmtypes.Transaction, baseFee *assets.Wei, chainTy } if chainType == chaintype.ChainCelo { // Celo specific transaction types that utilize the feeCurrency field. - if tx.Type == 0x7c || tx.Type == 0x7b { + if tx.Type == 0x7c || tx.Type == 0x7b || tx.Type == 0x7e { return false } // Celo has not yet fully migrated to the 0x7c type for special feeCurrency transactions diff --git a/core/chains/evm/testutils/client.go b/core/chains/evm/testutils/client.go index 325e24300be..ba455c08a85 100644 --- a/core/chains/evm/testutils/client.go +++ b/core/chains/evm/testutils/client.go @@ -137,7 +137,7 @@ func (ts *testWSServer) newWSHandler(chainID *big.Int, callback JSONRPCHandler) ts.mu.Unlock() for { - _, data, err := conn.ReadMessage() + err := ts.handleNewMsg(chainID, conn, callback) if err != nil { if websocket.IsCloseError(err, websocket.CloseNormalClosure, websocket.CloseAbnormalClosure) { ts.t.Log("Websocket closing") @@ -146,97 +146,98 @@ func (ts *testWSServer) newWSHandler(chainID *big.Int, callback JSONRPCHandler) ts.t.Logf("Failed to read message: %v", err) return } - ts.t.Log("Received message", string(data)) - - req := gjson.ParseBytes(data) - - if req.IsArray() { // Handle batch request - ts.t.Log("Received batch request") - responses := []string{} - for _, reqElem := range req.Array() { - m := reqElem.Get("method") - if m.Type != gjson.String { - ts.t.Logf("Method must be string: %v", m.Type) - continue - } - - var resp JSONRPCResponse - if chainID != nil && m.String() == "eth_chainId" { - resp.Result = `"0x` + chainID.Text(16) + `"` - } else if m.String() == "eth_syncing" { - resp.Result = "false" - } else { - resp = callback(m.String(), reqElem.Get("params")) - } - id := reqElem.Get("id") - var msg string - if resp.Error.Message != "" { - msg = fmt.Sprintf(`{"jsonrpc":"2.0","id":%s,"error":{"code":%d,"message":"%s"}}`, id, resp.Error.Code, resp.Error.Message) - } else { - msg = fmt.Sprintf(`{"jsonrpc":"2.0","id":%s,"result":%s}`, id, resp.Result) - } - responses = append(responses, msg) - } - responseBatch := fmt.Sprintf("[%s]", strings.Join(responses, ",")) - ts.t.Logf("Sending batch response: %v", responseBatch) - ts.mu.Lock() - err = conn.WriteMessage(websocket.BinaryMessage, []byte(responseBatch)) - ts.mu.Unlock() - if err != nil { - ts.t.Logf("Failed to write message: %v", err) - } - return - } - // Handle single request - if e := req.Get("error"); e.Exists() { - ts.t.Logf("Received jsonrpc error: %v", e) - continue - } + } + } +} - m := req.Get("method") - if m.Type != gjson.String { - ts.t.Logf("Method must be string: %v", m.Type) - return - } +func (ts *testWSServer) handleNewMsg(chainID *big.Int, conn *websocket.Conn, callback JSONRPCHandler) error { + _, data, err := conn.ReadMessage() + if err != nil { + return err + } - var resp JSONRPCResponse - if chainID != nil && m.String() == "eth_chainId" { - resp.Result = `"0x` + chainID.Text(16) + `"` - } else if m.String() == "eth_syncing" { - resp.Result = "false" - } else { - resp = callback(m.String(), req.Get("params")) - } - id := req.Get("id") - var msg string - if resp.Error.Message != "" { - msg = fmt.Sprintf(`{"jsonrpc":"2.0","id":%s,"error":{"code":%d,"message":"%s"}}`, id, resp.Error.Code, resp.Error.Message) - } else { - msg = fmt.Sprintf(`{"jsonrpc":"2.0","id":%s,"result":%s}`, id, resp.Result) - } - ts.t.Logf("Sending message: %v", msg) - ts.mu.Lock() - err = conn.WriteMessage(websocket.BinaryMessage, []byte(msg)) - ts.mu.Unlock() + ts.t.Log("Received message", string(data)) + + req := gjson.ParseBytes(data) + + if req.IsArray() { // Handle batch request + ts.t.Log("Received batch request") + var responses []string + for i, reqElem := range req.Array() { + var response string + response, _, err = ts.handleRequest(chainID, callback, reqElem) if err != nil { - ts.t.Logf("Failed to write message: %v", err) - return + return fmt.Errorf("failed to handle elem %d of batch request: %w", i, err) } + responses = append(responses, response) + } - if resp.Notify != "" { - time.Sleep(100 * time.Millisecond) - msg := fmt.Sprintf(`{"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0x00","result":%s}}`, resp.Notify) - ts.t.Log("Sending message", msg) - ts.mu.Lock() - err = conn.WriteMessage(websocket.BinaryMessage, []byte(msg)) - ts.mu.Unlock() - if err != nil { - ts.t.Logf("Failed to write message: %v", err) - return - } - } + return ts.writeMsg(conn, fmt.Sprintf("[%s]", strings.Join(responses, ","))) + } + // Handle single request + response, asyncResponse, err := ts.handleRequest(chainID, callback, req) + if err != nil { + return fmt.Errorf("failed to handle request: %w", err) + } + + if response != "" { + err = ts.writeMsg(conn, response) + if err != nil { + return err } } + + if asyncResponse != "" { + time.Sleep(100 * time.Millisecond) + return ts.writeMsg(conn, asyncResponse) + } + + return nil +} + +func (ts *testWSServer) handleRequest(chainID *big.Int, callback JSONRPCHandler, req gjson.Result) (response, asyncResponse string, err error) { + if e := req.Get("error"); e.Exists() { + ts.t.Logf("Received jsonrpc error: %v", e) + return + } + + m := req.Get("method") + if m.Type != gjson.String { + err = fmt.Errorf("method must be string: %v", m.Type) + return + } + + var resp JSONRPCResponse + if chainID != nil && m.String() == "eth_chainId" { + resp.Result = `"0x` + chainID.Text(16) + `"` + } else if m.String() == "eth_syncing" { + resp.Result = "false" + } else { + resp = callback(m.String(), req.Get("params")) + } + id := req.Get("id") + if resp.Error.Message != "" { + response = fmt.Sprintf(`{"jsonrpc":"2.0","id":%s,"error":{"code":%d,"message":"%s"}}`, id, resp.Error.Code, resp.Error.Message) + } else { + response = fmt.Sprintf(`{"jsonrpc":"2.0","id":%s,"result":%s}`, id, resp.Result) + } + + if resp.Notify != "" { + asyncResponse = fmt.Sprintf(`{"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0x00","result":%s}}`, resp.Notify) + } + + return +} + +func (ts *testWSServer) writeMsg(conn *websocket.Conn, msg string) error { + ts.t.Logf("Sending message: %v", msg) + ts.mu.Lock() + err := conn.WriteMessage(websocket.BinaryMessage, []byte(msg)) + ts.mu.Unlock() + if err != nil { + return fmt.Errorf("failed to write msg: %w", err) + } + return nil } type MockEth struct { diff --git a/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go b/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go index 45d4f8b5aba..c845cae7ed1 100644 --- a/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go +++ b/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go @@ -87,6 +87,7 @@ type FeeQuoterStaticConfig struct { type FeeQuoterTokenPriceFeedConfig struct { DataFeedAddress common.Address TokenDecimals uint8 + IsEnabled bool } type FeeQuoterTokenPriceFeedUpdate struct { @@ -155,8 +156,8 @@ type KeystoneFeedsPermissionHandlerPermission struct { } var FeeQuoterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"priceUpdaters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeeds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DataFeedValueOutOfUint224Range\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"DestinationChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExtraArgOutOfOrderExecutionMustBeTrue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"FeeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"name\":\"InvalidDestBytesOverhead\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint256\"}],\"name\":\"MessageFeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"}],\"name\":\"ReportForwarderUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SourceTokenDataTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePassed\",\"type\":\"uint256\"}],\"name\":\"StaleGasPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feedTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storedTimeStamp\",\"type\":\"uint256\"}],\"name\":\"StaleKeystoneUpdate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenRemoved\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"name\":\"PremiumMultiplierWeiPerEthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"priceFeedConfig\",\"type\":\"tuple\"}],\"name\":\"PriceFeedPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"reportId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"ReportPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenTransferFeeConfigDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"name\":\"TokenTransferFeeConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChain\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerUnitGasUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_BASE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KEYSTONE_PRICE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokensToRemove\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokensToAdd\",\"type\":\"address[]\"}],\"name\":\"applyFeeTokensUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPremiumMultiplierWeiPerEthUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigRemoveArgs[]\",\"name\":\"tokensToUseDefaultFeeConfigs\",\"type\":\"tuple[]\"}],\"name\":\"applyTokenTransferFeeConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"convertTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestinationChainGasPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPremiumMultiplierWeiPerEth\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getTokenAndGasPrices\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"tokenPrice\",\"type\":\"uint224\"},{\"internalType\":\"uint224\",\"name\":\"gasPriceValue\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPriceFeedConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getTokenPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getValidatedFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getValidatedTokenPrice\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"onReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"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\":\"onRampTokenTransfers\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"processMessageArgs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOutOfOrderExecution\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"convertedExtraArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"destExecDataPerToken\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"name\":\"setReportPermissions\",\"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\":[{\"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\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeedUpdates\",\"type\":\"tuple[]\"}],\"name\":\"updateTokenPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200789238038062007892833981016040819052620000349162001870565b8533806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000206565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620002b1565b5060208701516001600160a01b0316158062000112575086516001600160601b0316155b80620001265750604087015163ffffffff16155b15620001455760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c05280516000815291820190526200018b908662000400565b620001968462000548565b620001a18162000619565b620001ac8262000a81565b60408051600080825260208201909252620001f991859190620001f2565b6040805180820190915260008082526020820152815260200190600190039081620001ca5790505b5062000b4d565b5050505050505062001b2e565b336001600160a01b03821603620002605760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000341576000828281518110620002da57620002da6200198f565b60209081029190910101519050620002f460028262000e86565b1562000337576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620002b9565b50815160005b8151811015620003fa5760008282815181106200036857620003686200198f565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003a6576040516342bcdf7f60e11b815260040160405180910390fd5b620003b360028262000ea6565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000347565b50505050565b60005b8251811015620004a1576200043f8382815181106200042657620004266200198f565b6020026020010151600b62000ebd60201b90919060201c565b1562000498578281815181106200045a576200045a6200198f565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b60010162000403565b5060005b81518110156200054357620004e1828281518110620004c857620004c86200198f565b6020026020010151600b62000ea660201b90919060201c565b156200053a57818181518110620004fc57620004fc6200198f565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b600101620004a5565b505050565b60005b8151811015620006155760008282815181106200056c576200056c6200198f565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a018051929096166001600160a81b03199091168117600160a01b60ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506200054b565b5050565b60005b8151811015620006155760008282815181106200063d576200063d6200198f565b6020026020010151905060008383815181106200065e576200065e6200198f565b6020026020010151600001519050600082602001519050816001600160401b03166000148062000697575061016081015163ffffffff16155b80620006b957506102008101516001600160e01b031916630a04b54b60e21b14155b80620006d95750806060015163ffffffff1681610160015163ffffffff16115b15620007045760405163c35aa79d60e01b81526001600160401b038316600482015260240162000083565b6001600160401b038216600090815260096020526040812060010154600160a81b900460e01b6001600160e01b03191690036200078457816001600160401b03167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051620007769190620019a5565b60405180910390a2620007c8565b816001600160401b03167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051620007bf9190620019a5565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506200061c565b60005b81518110156200061557600082828151811062000aa55762000aa56200198f565b6020026020010151600001519050600083838151811062000aca5762000aca6200198f565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000a84565b60005b825181101562000dc057600083828151811062000b715762000b716200198f565b6020026020010151905060008160000151905060005b82602001515181101562000db15760008360200151828151811062000bb05762000bb06200198f565b602002602001015160200151905060008460200151838151811062000bd95762000bd96200198f565b6020026020010151600001519050602063ffffffff16826080015163ffffffff16101562000c385760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff909116602482015260440162000083565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000d9e908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000b87565b50505080600101905062000b50565b5060005b81518110156200054357600082828151811062000de55762000de56200198f565b6020026020010151600001519050600083838151811062000e0a5762000e0a6200198f565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000dc4565b600062000e9d836001600160a01b03841662000ed4565b90505b92915050565b600062000e9d836001600160a01b03841662000fd8565b600062000e9d836001600160a01b0384166200102a565b6000818152600183016020526040812054801562000fcd57600062000efb60018362001af6565b855490915060009062000f119060019062001af6565b905081811462000f7d57600086600001828154811062000f355762000f356200198f565b906000526020600020015490508087600001848154811062000f5b5762000f5b6200198f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000f915762000f9162001b18565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000ea0565b600091505062000ea0565b6000818152600183016020526040812054620010215750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000ea0565b50600062000ea0565b6000818152600183016020526040812054801562000fcd5760006200105160018362001af6565b8554909150600090620010679060019062001af6565b905080821462000f7d57600086600001828154811062000f355762000f356200198f565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620010c657620010c66200108b565b60405290565b60405160c081016001600160401b0381118282101715620010c657620010c66200108b565b60405161022081016001600160401b0381118282101715620010c657620010c66200108b565b604051601f8201601f191681016001600160401b03811182821017156200114257620011426200108b565b604052919050565b80516001600160a01b03811681146200116257600080fd5b919050565b805163ffffffff811681146200116257600080fd5b6000606082840312156200118f57600080fd5b604051606081016001600160401b0381118282101715620011b457620011b46200108b565b604052825190915081906001600160601b0381168114620011d457600080fd5b8152620011e4602084016200114a565b6020820152620011f76040840162001167565b60408201525092915050565b60006001600160401b038211156200121f576200121f6200108b565b5060051b60200190565b600082601f8301126200123b57600080fd5b81516020620012546200124e8362001203565b62001117565b8083825260208201915060208460051b8701019350868411156200127757600080fd5b602086015b848110156200129e5762001290816200114a565b83529183019183016200127c565b509695505050505050565b600082601f830112620012bb57600080fd5b81516020620012ce6200124e8362001203565b82815260609283028501820192828201919087851115620012ee57600080fd5b8387015b858110156200138157808903828112156200130d5760008081fd5b62001317620010a1565b62001322836200114a565b8152604080601f1984011215620013395760008081fd5b62001343620010a1565b9250620013528885016200114a565b835283015160ff81168114620013685760008081fd5b82880152808701919091528452928401928101620012f2565b5090979650505050505050565b80516001600160401b03811681146200116257600080fd5b805161ffff811681146200116257600080fd5b805180151581146200116257600080fd5b600082601f830112620013dc57600080fd5b81516020620013ef6200124e8362001203565b82815260059290921b840181019181810190868411156200140f57600080fd5b8286015b848110156200129e5780516001600160401b03808211156200143457600080fd5b908801906040601f19838c0381018213156200144f57600080fd5b62001459620010a1565b620014668986016200138e565b815282850151848111156200147a57600080fd5b8086019550508c603f8601126200149057600080fd5b888501519350620014a56200124e8562001203565b84815260e09094028501830193898101908e861115620014c457600080fd5b958401955b858710156200159d57868f0360e0811215620014e457600080fd5b620014ee620010a1565b620014f9896200114a565b815260c086830112156200150c57600080fd5b62001516620010cc565b9150620015258d8a0162001167565b825262001534878a0162001167565b8d8301526200154660608a01620013a6565b878301526200155860808a0162001167565b60608301526200156b60a08a0162001167565b60808301526200157e60c08a01620013b9565b60a0830152808d0191909152825260e09690960195908a0190620014c9565b828b01525087525050509284019250830162001413565b600082601f830112620015c657600080fd5b81516020620015d96200124e8362001203565b82815260069290921b84018101918181019086841115620015f957600080fd5b8286015b848110156200129e5760408189031215620016185760008081fd5b62001622620010a1565b6200162d826200114a565b81526200163c8583016200138e565b81860152835291830191604001620015fd565b80516001600160e01b0319811681146200116257600080fd5b600082601f8301126200167a57600080fd5b815160206200168d6200124e8362001203565b8281526102409283028501820192828201919087851115620016ae57600080fd5b8387015b85811015620013815780890382811215620016cd5760008081fd5b620016d7620010a1565b620016e2836200138e565b815261022080601f1984011215620016fa5760008081fd5b62001704620010f1565b925062001713888501620013b9565b8352604062001724818601620013a6565b8985015260606200173781870162001167565b82860152608091506200174c82870162001167565b9085015260a06200175f86820162001167565b8286015260c0915062001774828701620013a6565b9085015260e06200178786820162001167565b8286015261010091506200179d828701620013a6565b90850152610120620017b1868201620013a6565b828601526101409150620017c7828701620013a6565b90850152610160620017db86820162001167565b828601526101809150620017f182870162001167565b908501526101a0620018058682016200138e565b828601526101c091506200181b82870162001167565b908501526101e06200182f86820162001167565b82860152610200915062001845828701620013b9565b90850152620018568583016200164f565b9084015250808701919091528452928401928101620016b2565b6000806000806000806000610120888a0312156200188d57600080fd5b6200189989896200117c565b60608901519097506001600160401b0380821115620018b757600080fd5b620018c58b838c0162001229565b975060808a0151915080821115620018dc57600080fd5b620018ea8b838c0162001229565b965060a08a01519150808211156200190157600080fd5b6200190f8b838c01620012a9565b955060c08a01519150808211156200192657600080fd5b620019348b838c01620013ca565b945060e08a01519150808211156200194b57600080fd5b620019598b838c01620015b4565b93506101008a01519150808211156200197157600080fd5b50620019808a828b0162001668565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b81511515815261022081016020830151620019c6602084018261ffff169052565b506040830151620019df604084018263ffffffff169052565b506060830151620019f8606084018263ffffffff169052565b50608083015162001a11608084018263ffffffff169052565b5060a083015162001a2860a084018261ffff169052565b5060c083015162001a4160c084018263ffffffff169052565b5060e083015162001a5860e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200928301516001600160e01b031916929091019190915290565b8181038181111562000ea057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615d1162001b81600039600081816102fa01526118750152600081816102be01528181610eb80152610f1801526000818161028a01528181610f410152610fb10152615d116000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063770e2dc411610104578063a69c64c0116100a2578063d63d3af211610071578063d63d3af214610ab0578063d8694ccd14610ab8578063f2fde38b14610acb578063ffdb4b3714610ade57600080fd5b8063a69c64c0146109d5578063bf78e03f146109e8578063cdc73d5114610a95578063d02641a014610a9d57600080fd5b8063805f2132116100de578063805f21321461081757806382b49eb01461082a5780638da5cb5b1461099a57806391a2749a146109c257600080fd5b8063770e2dc4146107e957806379ba5097146107fc5780637afac3221461080457600080fd5b8063407e10861161017c5780634ab35b0b1161014b5780634ab35b0b14610457578063514e8cff146104975780636cb5f3dd1461053a5780636def4ce71461054d57600080fd5b8063407e1086146103ee57806341ed29e714610401578063430d138c1461041457806345ac924d1461043757600080fd5b8063181f5a77116101b8578063181f5a77146103735780632451a627146103bc578063325c868e146103d15780633937306f146103d957600080fd5b806241e5be146101de578063061877e31461020457806306285c691461025d575b600080fd5b6101f16101ec3660046143f1565b610b26565b6040519081526020015b60405180910390f35b61024461021236600461442d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016101fb565b610327604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff16908201526060016101fb565b6103af6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516101fb91906144ac565b6103c4610b94565b6040516101fb91906144bf565b6101f1602481565b6103ec6103e7366004614519565b610ba5565b005b6103ec6103fc3660046146bb565b610e5a565b6103ec61040f3660046147ed565b610e6e565b6104276104223660046149c7565b610eb0565b6040516101fb9493929190614abb565b61044a610445366004614b5a565b6110c0565b6040516101fb9190614b9c565b61046a61046536600461442d565b61118b565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b61052d6104a5366004614c17565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516101fb9190614c32565b6103ec610548366004614cc3565b611196565b6107dc61055b366004614c17565b6040805161022081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161022081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a0850152710100000000000000000000000000000000008304871660c08501527501000000000000000000000000000000000000000000808404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c01000000000000000000000000860485166101a083015270010000000000000000000000000000000086049094166101c082015274010000000000000000000000000000000000000000850490911615156101e08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b1661020082015290565b6040516101fb9190614ee3565b6103ec6107f73660046150e1565b6111a7565b6103ec6111b9565b6103ec6108123660046153fb565b6112b6565b6103ec61082536600461545f565b6112c8565b61093a6108383660046154cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516101fb9190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b6103ec6109d03660046154f5565b6117b0565b6103ec6109e3366004615586565b6117c1565b610a616109f636600461442d565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff93841681526007825282902082518084019093525492831682527401000000000000000000000000000000000000000090920460ff169181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260209283015160ff1692810192909252016101fb565b6103c46117d2565b61052d610aab36600461442d565b6117de565b6101f1601281565b6101f1610ac636600461564b565b61194b565b6103ec610ad936600461442d565b611e83565b610af1610aec3660046156a0565b611e94565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101fb565b6000610b3182611f4c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b5885611f4c565b610b80907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16856156f9565b610b8a9190615710565b90505b9392505050565b6060610ba06002611fe6565b905090565b610bad611ff3565b6000610bb9828061574b565b9050905060005b81811015610d03576000610bd4848061574b565b83818110610be457610be46157b3565b905060400201803603810190610bfa919061580e565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a92610cf29290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610bc0565b506000610d13602084018461574b565b9050905060005b81811015610e54576000610d31602086018661574b565b83818110610d4157610d416157b3565b905060400201803603810190610d57919061584b565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e92610e439290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610d1a565b50505050565b610e62612038565b610e6b816120b9565b50565b610e76612038565b60005b8151811015610eac57610ea4828281518110610e9757610e976157b3565b60200260200101516121b7565b600101610e79565b5050565b6000806060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610f11578a9350610f3f565b610f3c8c8c7f0000000000000000000000000000000000000000000000000000000000000000610b26565b93505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16841115610fe3576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b67ffffffffffffffff8d1660009081526009602052604081206001015463ffffffff16906110128c8c84612389565b9050806020015194506110288f8b8b8b8b612532565b925085856110a8836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b95509550955050509950995099509995505050505050565b60608160008167ffffffffffffffff8111156110de576110de614554565b60405190808252806020026020018201604052801561112357816020015b60408051808201909152600080825260208201528152602001906001900390816110fc5790505b50905060005b828110156111805761115b868683818110611146576111466157b3565b9050602002016020810190610aab919061442d565b82828151811061116d5761116d6157b3565b6020908102919091010152600101611129565b509150505b92915050565b600061118582611f4c565b61119e612038565b610e6b816128a3565b6111af612038565b610eac8282612d75565b60015473ffffffffffffffffffffffffffffffffffffffff16331461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610fda565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112be612038565b610eac8282613187565b600080600061130c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132ce92505050565b92509250925061131e338385846132e9565b600061132c8587018761586e565b905060005b81518110156117a557600060076000848481518110611352576113526157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205474010000000000000000000000000000000000000000900460ff169150819003611413578282815181106113bc576113bc6157b3565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610fda565b600061145c60128386868151811061142d5761142d6157b3565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613441565b905060066000858581518110611474576114746157b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff168484815181106114e6576114e66157b3565b60200260200101516040015163ffffffff1610156115f057838381518110611510576115106157b3565b60200260200101516000015184848151811061152e5761152e6157b3565b60200260200101516040015160066000878781518110611550576115506157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000205490517f191ec70600000000000000000000000000000000000000000000000000000000815293909116600484015263ffffffff91821660248401527c01000000000000000000000000000000000000000000000000000000009004166044820152606401610fda565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001858581518110611631576116316157b3565b60200260200101516040015163ffffffff168152506006600086868151811061165c5761165c6157b3565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905583518490849081106116f4576116f46157b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a8286868151811061174a5761174a6157b3565b6020026020010151604001516040516117939291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a25050600101611331565b505050505050505050565b6117b8612038565b610e6b81613504565b6117c9612038565b610e6b81613690565b6060610ba0600b611fe6565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116835263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169183018290527f000000000000000000000000000000000000000000000000000000000000000016906118a09042615935565b10156118ac5792915050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600760209081526040918290208251808401909352549283168083527401000000000000000000000000000000000000000090930460ff169082015290611911575092915050565b600061191c8261377a565b9050826020015163ffffffff16816020015163ffffffff1610156119405782611942565b805b95945050505050565b67ffffffffffffffff8083166000908152600960209081526040808320815161022081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a0860152710100000000000000000000000000000000008404871660c08601527501000000000000000000000000000000000000000000808504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c01000000000000000000000000880485166101a084015270010000000000000000000000000000000088049094166101c083015274010000000000000000000000000000000000000000870490931615156101e08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b16610200840152909190611b85576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fda565b611ba0611b98608085016060860161442d565b600b9061390c565b611bff57611bb4608084016060850161442d565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610fda565b6000611c0e604085018561574b565b9150611c6a905082611c236020870187615948565b905083611c308880615948565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061393b92505050565b6000611c84611c7f608087016060880161442d565b611f4c565b90506000611c9787856101c001516139e5565b9050600080808515611cd757611ccb878b611cb860808d0160608e0161442d565b88611cc660408f018f61574b565b613ae5565b91945092509050611cf7565b6101a0870151611cf49063ffffffff16662386f26fc100006156f9565b92505b61010087015160009061ffff1615611d3b57611d38886dffffffffffffffffffffffffffff607088901c16611d2f60208e018e615948565b90508a86613dbd565b90505b61018088015160009067ffffffffffffffff16611d64611d5e60808e018e615948565b8c613e6d565b600001518563ffffffff168b60a0015161ffff168e8060200190611d889190615948565b611d939291506156f9565b8c6080015163ffffffff16611da891906159ad565b611db291906159ad565b611dbc91906159ad565b611dd6906dffffffffffffffffffffffffffff89166156f9565b611de091906156f9565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f6060016020810190611e1a919061442d565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054611e559067ffffffffffffffff16896156f9565b611e5f91906159ad565b611e6991906159ad565b611e739190615710565b9c9b505050505050505050505050565b611e8b612038565b610e6b81613f2e565b67ffffffffffffffff8116600090815260096020526040812054819060ff16611ef5576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610fda565b611efe84611f4c565b67ffffffffffffffff8416600090815260096020526040902060010154611f40908590700100000000000000000000000000000000900463ffffffff166139e5565b915091505b9250929050565b600080611f58836117de565b9050806020015163ffffffff1660001480611f90575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b15611fdf576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610fda565b5192915050565b60606000610b8d83614023565b611ffe60023361390c565b612036576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610fda565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610fda565b60005b8151811015610eac5760008282815181106120d9576120d96157b3565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a018051929096167fffffffffffffffffffffff00000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000060ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506120bc565b600061227082600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a39061237d908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b604080518082019091526000808252602082015260008390036123ca57506040805180820190915267ffffffffffffffff8216815260006020820152610b8d565b60006123d684866159c0565b905060006123e78560048189615a06565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f00000000000000000000000000000000000000000000000000000000001612484578080602001905181019061247b9190615a30565b92505050610b8d565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601612500576040518060400160405280828060200190518101906124ec9190615a5c565b815260006020909101529250610b8d915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808616600090815260096020526040902060010154606091750100000000000000000000000000000000000000000090910460e01b90859081111561258257612582614554565b6040519080825280602002602001820160405280156125b557816020015b60608152602001906001900390816125a05790505b50915060005b858110156128985760008585838181106125d7576125d76157b3565b6125ed926020604090920201908101915061442d565b90506000888884818110612603576126036157b3565b90506020028101906126159190615a75565b612623906040810190615948565b91505060208111156126d35767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff168111156126d3576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610fda565b612743848a8a868181106126e9576126e96157b3565b90506020028101906126fb9190615a75565b612709906020810190615948565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061407f92505050565b67ffffffffffffffff8a166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684528252808320815160c081018352905463ffffffff8082168352640100000000820481168386015268010000000000000000820461ffff16838501526a01000000000000000000008204811660608401526e010000000000000000000000000000820481166080840152720100000000000000000000000000000000000090910460ff16151560a08301908152958552600990935290832054935190937b01000000000000000000000000000000000000000000000000000000900490911691906128425781612848565b82606001515b6040805163ffffffff831660208201529192500160405160208183030381529060405288878151811061287d5761287d6157b3565b602002602001018190525050505050508060010190506125bb565b505095945050505050565b60005b8151811015610eac5760008282815181106128c3576128c36157b3565b6020026020010151905060008383815181106128e1576128e16157b3565b60200260200101516000015190506000826020015190508167ffffffffffffffff166000148061291a575061016081015163ffffffff16155b8061296c57506102008101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b8061298b5750806060015163ffffffff1681610160015163ffffffff16115b156129ce576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fda565b67ffffffffffffffff82166000908152600960205260408120600101547501000000000000000000000000000000000000000000900460e01b7fffffffff00000000000000000000000000000000000000000000000000000000169003612a76578167ffffffffffffffff167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051612a699190614ee3565b60405180910390a2612ab9565b8167ffffffffffffffff167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051612ab09190614ee3565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506128a6565b60005b825181101561309e576000838281518110612d9557612d956157b3565b6020026020010151905060008160000151905060005b82602001515181101561309057600083602001518281518110612dd057612dd06157b3565b6020026020010151602001519050600084602001518381518110612df657612df66157b3565b6020026020010151600001519050602063ffffffff16826080015163ffffffff161015612e795760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610fda565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59061307e908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a35050600101612dab565b505050806001019050612d78565b5060005b81518110156131825760008282815181106130bf576130bf6157b3565b602002602001015160000151905060008383815181106130e1576130e16157b3565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a350506001016130a2565b505050565b60005b825181101561322a576131c08382815181106131a8576131a86157b3565b6020026020010151600b6140d190919063ffffffff16565b15613222578281815181106131d7576131d76157b3565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b60010161318a565b5060005b81518110156131825761326482828151811061324c5761324c6157b3565b6020026020010151600b6140f390919063ffffffff16565b156132c65781818151811061327b5761327b6157b3565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010161322e565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff1661343a576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610fda565b5050505050565b60008061344e8486615ab3565b9050600060248260ff1611156134885761346c602460ff8416615935565b61347790600a615bec565b6134819085615710565b90506134ae565b61349660ff83166024615935565b6134a190600a615bec565b6134ab90856156f9565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611942576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160005b815181101561359f576000828281518110613529576135296157b3565b6020026020010151905061354781600261411590919063ffffffff16565b156135965760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010161350c565b50815160005b8151811015610e545760008282815181106135c2576135c26157b3565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613632576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61363d6002826140f3565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a1506001016135a5565b60005b8151811015610eac5760008282815181106136b0576136b06157b3565b602002602001015160000151905060008383815181106136d2576136d26157b3565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a25050600101613693565b60408051808201909152600080825260208201526000826000015190506000808273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156137e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138099190615c12565b50935050925050600082121561384b576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006138ca8473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561389b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bf9190615c62565b876020015185613441565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff909216602083015250949350505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b8d565b836040015163ffffffff168311156139945760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610fda565b836020015161ffff168211156139d6576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e548461020001518261407f565b67ffffffffffffffff821660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116825263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169282019290925290831615613add576000816020015163ffffffff1642613a7a9190615935565b90508363ffffffff16811115613adb576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff8516602482015260448101829052606401610fda565b505b519392505050565b6000808083815b81811015613daf576000878783818110613b0857613b086157b3565b905060400201803603810190613b1e9190615c7f565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613c3e576101208d0151613c0b9061ffff16662386f26fc100006156f9565b613c1590886159ad565b96508c610140015186613c289190615cb8565b9550613c35602086615cb8565b94505050613da7565b604081015160009061ffff1615613cf75760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613c9a578351613c9390611f4c565b9050613c9d565b508a5b620186a0836040015161ffff16613cdf8660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661413790919063ffffffff16565b613ce991906156f9565b613cf39190615710565b9150505b6060820151613d069088615cb8565b9650816080015186613d189190615cb8565b8251909650600090613d379063ffffffff16662386f26fc100006156f9565b905080821015613d5657613d4b818a6159ad565b985050505050613da7565b6000836020015163ffffffff16662386f26fc10000613d7591906156f9565b905080831115613d9557613d89818b6159ad565b99505050505050613da7565b613d9f838b6159ad565b995050505050505b600101613aec565b505096509650969350505050565b60008063ffffffff8316613dd3610120866156f9565b613ddf876101e06159ad565b613de991906159ad565b613df391906159ad565b905060008760c0015163ffffffff168860e0015161ffff1683613e1691906156f9565b613e2091906159ad565b61010089015190915061ffff16613e476dffffffffffffffffffffffffffff8916836156f9565b613e5191906156f9565b613e6190655af3107a40006156f9565b98975050505050505050565b60408051808201909152600080825260208201526000613e99858585610160015163ffffffff16612389565b9050826060015163ffffffff1681600001511115613ee3576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101e001518015613ef757508060200151155b15610b8a576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610fda565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60608160000180548060200260200160405190810160405280929190818152602001828054801561407357602002820191906000526020600020905b81548152602001906001019080831161405f575b50505050509050919050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601610eac5761318281614174565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614227565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614321565b6000610b8d8373ffffffffffffffffffffffffffffffffffffffff8416614370565b6000670de0b6b3a764000061416a837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166156f9565b610b8d9190615710565b600081516020146141b357816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610fda91906144ac565b6000828060200190518101906141c99190615a5c565b905073ffffffffffffffffffffffffffffffffffffffff8111806141ee575061040081105b1561118557826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610fda91906144ac565b6000818152600183016020526040812054801561431057600061424b600183615935565b855490915060009061425f90600190615935565b90508082146142c457600086600001828154811061427f5761427f6157b3565b90600052602060002001549050808760000184815481106142a2576142a26157b3565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142d5576142d5615cd5565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611185565b6000915050611185565b5092915050565b600081815260018301602052604081205461436857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611185565b506000611185565b60008181526001830160205260408120548015614310576000614394600183615935565b85549091506000906143a890600190615935565b90508181146142c457600086600001828154811061427f5761427f6157b3565b803573ffffffffffffffffffffffffffffffffffffffff811681146143ec57600080fd5b919050565b60008060006060848603121561440657600080fd5b61440f846143c8565b925060208401359150614424604085016143c8565b90509250925092565b60006020828403121561443f57600080fd5b610b8d826143c8565b6000815180845260005b8181101561446e57602081850181015186830182015201614452565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610b8d6020830184614448565b6020808252825182820181905260009190848201906040850190845b8181101561450d57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016144db565b50909695505050505050565b60006020828403121561452b57600080fd5b813567ffffffffffffffff81111561454257600080fd5b820160408185031215610b8d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156145a6576145a6614554565b60405290565b60405160a0810167ffffffffffffffff811182821017156145a6576145a6614554565b604051610220810167ffffffffffffffff811182821017156145a6576145a6614554565b60405160c0810167ffffffffffffffff811182821017156145a6576145a6614554565b6040516060810167ffffffffffffffff811182821017156145a6576145a6614554565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468057614680614554565b604052919050565b600067ffffffffffffffff8211156146a2576146a2614554565b5060051b60200190565b60ff81168114610e6b57600080fd5b600060208083850312156146ce57600080fd5b823567ffffffffffffffff8111156146e557600080fd5b8301601f810185136146f657600080fd5b803561470961470482614688565b614639565b8181526060918202830184019184820191908884111561472857600080fd5b938501935b838510156147c857848903818112156147465760008081fd5b61474e614583565b614757876143c8565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401121561478b5760008081fd5b614793614583565b92506147a08989016143c8565b83528701356147ae816146ac565b82890152808801919091528352938401939185019161472d565b50979650505050505050565b8015158114610e6b57600080fd5b80356143ec816147d4565b6000602080838503121561480057600080fd5b823567ffffffffffffffff81111561481757600080fd5b8301601f8101851361482857600080fd5b803561483661470482614688565b81815260a0918202830184019184820191908884111561485557600080fd5b938501935b838510156147c85780858a0312156148725760008081fd5b61487a6145ac565b614883866143c8565b8152868601357fffffffffffffffffffff00000000000000000000000000000000000000000000811681146148b85760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146148f15760008081fd5b9082015260606149028782016143c8565b90820152608086810135614915816147d4565b908201528352938401939185019161485a565b803567ffffffffffffffff811681146143ec57600080fd5b60008083601f84011261495257600080fd5b50813567ffffffffffffffff81111561496a57600080fd5b602083019150836020828501011115611f4557600080fd5b60008083601f84011261499457600080fd5b50813567ffffffffffffffff8111156149ac57600080fd5b6020830191508360208260051b8501011115611f4557600080fd5b600080600080600080600080600060c08a8c0312156149e557600080fd5b6149ee8a614928565b98506149fc60208b016143c8565b975060408a0135965060608a013567ffffffffffffffff80821115614a2057600080fd5b614a2c8d838e01614940565b909850965060808c0135915080821115614a4557600080fd5b614a518d838e01614982565b909650945060a08c0135915080821115614a6a57600080fd5b818c0191508c601f830112614a7e57600080fd5b813581811115614a8d57600080fd5b8d60208260061b8501011115614aa257600080fd5b6020830194508093505050509295985092959850929598565b848152600060208515158184015260806040840152614add6080840186614448565b8381036060850152845180825282820190600581901b8301840184880160005b83811015614b49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552614b37838351614448565b94870194925090860190600101614afd565b50909b9a5050505050505050505050565b60008060208385031215614b6d57600080fd5b823567ffffffffffffffff811115614b8457600080fd5b614b9085828601614982565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614c0a57614bfa84835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614bb9565b5091979650505050505050565b600060208284031215614c2957600080fd5b610b8d82614928565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff169082015260408101611185565b803561ffff811681146143ec57600080fd5b803563ffffffff811681146143ec57600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146143ec57600080fd5b60006020808385031215614cd657600080fd5b823567ffffffffffffffff811115614ced57600080fd5b8301601f81018513614cfe57600080fd5b8035614d0c61470482614688565b8181526102409182028301840191848201919088841115614d2c57600080fd5b938501935b838510156147c85784890381811215614d4a5760008081fd5b614d52614583565b614d5b87614928565b8152610220807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084011215614d905760008081fd5b614d986145cf565b9250614da58989016147e2565b83526040614db4818a01614c6d565b8a8501526060614dc5818b01614c7f565b8286015260809150614dd8828b01614c7f565b9085015260a0614de98a8201614c7f565b8286015260c09150614dfc828b01614c6d565b9085015260e0614e0d8a8201614c7f565b828601526101009150614e21828b01614c6d565b90850152610120614e338a8201614c6d565b828601526101409150614e47828b01614c6d565b90850152610160614e598a8201614c7f565b828601526101809150614e6d828b01614c7f565b908501526101a0614e7f8a8201614928565b828601526101c09150614e93828b01614c7f565b908501526101e0614ea58a8201614c7f565b828601526102009150614eb9828b016147e2565b90850152614ec8898301614c93565b90840152508088019190915283529384019391850191614d31565b81511515815261022081016020830151614f03602084018261ffff169052565b506040830151614f1b604084018263ffffffff169052565b506060830151614f33606084018263ffffffff169052565b506080830151614f4b608084018263ffffffff169052565b5060a0830151614f6160a084018261ffff169052565b5060c0830151614f7960c084018263ffffffff169052565b5060e0830151614f8f60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b600082601f83011261505a57600080fd5b8135602061506a61470483614688565b82815260069290921b8401810191818101908684111561508957600080fd5b8286015b848110156150d657604081890312156150a65760008081fd5b6150ae614583565b6150b782614928565b81526150c48583016143c8565b8186015283529183019160400161508d565b509695505050505050565b600080604083850312156150f457600080fd5b67ffffffffffffffff8335111561510a57600080fd5b83601f84358501011261511c57600080fd5b61512c6147048435850135614688565b8335840180358083526020808401939260059290921b9091010186101561515257600080fd5b602085358601015b85358601803560051b0160200181101561535f5767ffffffffffffffff8135111561518457600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a030112156151bd57600080fd5b6151c5614583565b6151d160208301614928565b815267ffffffffffffffff604083013511156151ec57600080fd5b88603f60408401358401011261520157600080fd5b6152176147046020604085013585010135614688565b6020604084810135850182810135808552928401939260e00201018b101561523e57600080fd5b6040808501358501015b6040858101358601602081013560e00201018110156153405760e0818d03121561527157600080fd5b615279614583565b615282826143c8565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f030112156152b657600080fd5b6152be6145f3565b6152ca60208401614c7f565b81526152d860408401614c7f565b60208201526152e960608401614c6d565b60408201526152fa60808401614c7f565b606082015261530b60a08401614c7f565b608082015261531d60c08401356147d4565b60c083013560a0820152602082810191909152908452929092019160e001615248565b508060208401525050808552505060208301925060208101905061515a565b5092505067ffffffffffffffff6020840135111561537c57600080fd5b61538c8460208501358501615049565b90509250929050565b600082601f8301126153a657600080fd5b813560206153b661470483614688565b8083825260208201915060208460051b8701019350868411156153d857600080fd5b602086015b848110156150d6576153ee816143c8565b83529183019183016153dd565b6000806040838503121561540e57600080fd5b823567ffffffffffffffff8082111561542657600080fd5b61543286838701615395565b9350602085013591508082111561544857600080fd5b5061545585828601615395565b9150509250929050565b6000806000806040858703121561547557600080fd5b843567ffffffffffffffff8082111561548d57600080fd5b61549988838901614940565b909650945060208701359150808211156154b257600080fd5b506154bf87828801614940565b95989497509550505050565b600080604083850312156154de57600080fd5b6154e783614928565b915061538c602084016143c8565b60006020828403121561550757600080fd5b813567ffffffffffffffff8082111561551f57600080fd5b908301906040828603121561553357600080fd5b61553b614583565b82358281111561554a57600080fd5b61555687828601615395565b82525060208301358281111561556b57600080fd5b61557787828601615395565b60208301525095945050505050565b6000602080838503121561559957600080fd5b823567ffffffffffffffff8111156155b057600080fd5b8301601f810185136155c157600080fd5b80356155cf61470482614688565b81815260069190911b820183019083810190878311156155ee57600080fd5b928401925b82841015615640576040848903121561560c5760008081fd5b615614614583565b61561d856143c8565b815261562a868601614928565b81870152825260409390930192908401906155f3565b979650505050505050565b6000806040838503121561565e57600080fd5b61566783614928565b9150602083013567ffffffffffffffff81111561568357600080fd5b830160a0818603121561569557600080fd5b809150509250929050565b600080604083850312156156b357600080fd5b6156bc836143c8565b915061538c60208401614928565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417611185576111856156ca565b600082615746577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261578057600080fd5b83018035915067ffffffffffffffff82111561579b57600080fd5b6020019150600681901b3603821315611f4557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146143ec57600080fd5b60006040828403121561582057600080fd5b615828614583565b615831836143c8565b815261583f602084016157e2565b60208201529392505050565b60006040828403121561585d57600080fd5b615865614583565b61583183614928565b6000602080838503121561588157600080fd5b823567ffffffffffffffff81111561589857600080fd5b8301601f810185136158a957600080fd5b80356158b761470482614688565b818152606091820283018401918482019190888411156158d657600080fd5b938501935b838510156147c85780858a0312156158f35760008081fd5b6158fb614616565b615904866143c8565b81526159118787016157e2565b878201526040615922818801614c7f565b90820152835293840193918501916158db565b81810381811115611185576111856156ca565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261597d57600080fd5b83018035915067ffffffffffffffff82111561599857600080fd5b602001915036819003821315611f4557600080fd5b80820180821115611185576111856156ca565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156150415760049490940360031b84901b1690921692915050565b60008085851115615a1657600080fd5b83861115615a2357600080fd5b5050820193919092039150565b600060408284031215615a4257600080fd5b615a4a614583565b82518152602083015161583f816147d4565b600060208284031215615a6e57600080fd5b5051919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615aa957600080fd5b9190910192915050565b60ff8181168382160190811115611185576111856156ca565b600181815b80851115615b2557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b0b57615b0b6156ca565b80851615615b1857918102915b93841c9390800290615ad1565b509250929050565b600082615b3c57506001611185565b81615b4957506000611185565b8160018114615b5f5760028114615b6957615b85565b6001915050611185565b60ff841115615b7a57615b7a6156ca565b50506001821b611185565b5060208310610133831016604e8410600b8410161715615ba8575081810a611185565b615bb28383615acc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615be457615be46156ca565b029392505050565b6000610b8d8383615b2d565b805169ffffffffffffffffffff811681146143ec57600080fd5b600080600080600060a08688031215615c2a57600080fd5b615c3386615bf8565b9450602086015193506040860151925060608601519150615c5660808701615bf8565b90509295509295909350565b600060208284031215615c7457600080fd5b8151610b8d816146ac565b600060408284031215615c9157600080fd5b615c99614583565b615ca2836143c8565b8152602083013560208201528091505092915050565b63ffffffff81811683821601908082111561431a5761431a6156ca565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"priceUpdaters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeeds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DataFeedValueOutOfUint224Range\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"DestinationChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExtraArgOutOfOrderExecutionMustBeTrue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"FeeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"name\":\"InvalidDestBytesOverhead\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minFeeUSDCents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint256\"}],\"name\":\"InvalidFeeRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint256\"}],\"name\":\"MessageFeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"}],\"name\":\"ReportForwarderUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SourceTokenDataTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePassed\",\"type\":\"uint256\"}],\"name\":\"StaleGasPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feedTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storedTimeStamp\",\"type\":\"uint256\"}],\"name\":\"StaleKeystoneUpdate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint256\"}],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenRemoved\",\"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\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"name\":\"PremiumMultiplierWeiPerEthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"priceFeedConfig\",\"type\":\"tuple\"}],\"name\":\"PriceFeedPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"reportId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"ReportPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenTransferFeeConfigDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"name\":\"TokenTransferFeeConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChain\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerUnitGasUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_BASE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KEYSTONE_PRICE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokensToRemove\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokensToAdd\",\"type\":\"address[]\"}],\"name\":\"applyFeeTokensUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPremiumMultiplierWeiPerEthUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigRemoveArgs[]\",\"name\":\"tokensToUseDefaultFeeConfigs\",\"type\":\"tuple[]\"}],\"name\":\"applyTokenTransferFeeConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"convertTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestinationChainGasPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPremiumMultiplierWeiPerEth\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getTokenAndGasPrices\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"tokenPrice\",\"type\":\"uint224\"},{\"internalType\":\"uint224\",\"name\":\"gasPriceValue\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPriceFeedConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getTokenPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getValidatedFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getValidatedTokenPrice\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"onReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"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\":\"onRampTokenTransfers\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"processMessageArgs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOutOfOrderExecution\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"convertedExtraArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"destExecDataPerToken\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"name\":\"setReportPermissions\",\"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\":[{\"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\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeedUpdates\",\"type\":\"tuple[]\"}],\"name\":\"updateTokenPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b5060405162007acd38038062007acd8339810160408190526200003491620018ff565b8533806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000206565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620002b1565b5060208701516001600160a01b0316158062000112575086516001600160601b0316155b80620001265750604087015163ffffffff16155b15620001455760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c05280516000815291820190526200018b908662000400565b620001968462000548565b620001a18162000640565b620001ac8262000aa8565b60408051600080825260208201909252620001f991859190620001f2565b6040805180820190915260008082526020820152815260200190600190039081620001ca5790505b5062000b74565b5050505050505062001bbd565b336001600160a01b03821603620002605760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000341576000828281518110620002da57620002da62001a1e565b60209081029190910101519050620002f460028262000efa565b1562000337576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620002b9565b50815160005b8151811015620003fa57600082828151811062000368576200036862001a1e565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003a6576040516342bcdf7f60e11b815260040160405180910390fd5b620003b360028262000f1a565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000347565b50505050565b60005b8251811015620004a1576200043f83828151811062000426576200042662001a1e565b6020026020010151600b62000f3160201b90919060201c565b1562000498578281815181106200045a576200045a62001a1e565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b60010162000403565b5060005b81518110156200054357620004e1828281518110620004c857620004c862001a1e565b6020026020010151600b62000f1a60201b90919060201c565b156200053a57818181518110620004fc57620004fc62001a1e565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b600101620004a5565b505050565b60005b81518110156200063c5760008282815181106200056c576200056c62001a1e565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a0180518589018051949098166001600160a81b03199093168317600160a01b60ff928316021760ff60a81b1916600160a81b9415159490940293909317909355835190815291511697810197909752915115159186019190915292945090929091907fe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf9060600160405180910390a25050508060010190506200054b565b5050565b60005b81518110156200063c57600082828151811062000664576200066462001a1e565b60200260200101519050600083838151811062000685576200068562001a1e565b6020026020010151600001519050600082602001519050816001600160401b031660001480620006be575061016081015163ffffffff16155b80620006e057506102008101516001600160e01b031916630a04b54b60e21b14155b80620007005750806060015163ffffffff1681610160015163ffffffff16115b156200072b5760405163c35aa79d60e01b81526001600160401b038316600482015260240162000083565b6001600160401b038216600090815260096020526040812060010154600160a81b900460e01b6001600160e01b0319169003620007ab57816001600160401b03167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda46265826040516200079d919062001a34565b60405180910390a2620007ef565b816001600160401b03167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051620007e6919062001a34565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c021790555090505050505080600101905062000643565b60005b81518110156200063c57600082828151811062000acc5762000acc62001a1e565b6020026020010151600001519050600083838151811062000af15762000af162001a1e565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000aab565b60005b825181101562000e3457600083828151811062000b985762000b9862001a1e565b6020026020010151905060008160000151905060005b82602001515181101562000e255760008360200151828151811062000bd75762000bd762001a1e565b602002602001015160200151905060008460200151838151811062000c005762000c0062001a1e565b6020026020010151600001519050816020015163ffffffff16826000015163ffffffff161062000c5b57815160208301516040516305a7b3d160e11b815263ffffffff92831660048201529116602482015260440162000083565b602063ffffffff16826080015163ffffffff16101562000cac5760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff909116602482015260440162000083565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000e12908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000bae565b50505080600101905062000b77565b5060005b81518110156200054357600082828151811062000e595762000e5962001a1e565b6020026020010151600001519050600083838151811062000e7e5762000e7e62001a1e565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000e38565b600062000f11836001600160a01b03841662000f48565b90505b92915050565b600062000f11836001600160a01b0384166200104c565b600062000f11836001600160a01b0384166200109e565b600081815260018301602052604081205480156200104157600062000f6f60018362001b85565b855490915060009062000f859060019062001b85565b905081811462000ff157600086600001828154811062000fa95762000fa962001a1e565b906000526020600020015490508087600001848154811062000fcf5762000fcf62001a1e565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062001005576200100562001ba7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000f14565b600091505062000f14565b6000818152600183016020526040812054620010955750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000f14565b50600062000f14565b6000818152600183016020526040812054801562001041576000620010c560018362001b85565b8554909150600090620010db9060019062001b85565b905080821462000ff157600086600001828154811062000fa95762000fa962001a1e565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156200113a576200113a620010ff565b60405290565b604080519081016001600160401b03811182821017156200113a576200113a620010ff565b60405160c081016001600160401b03811182821017156200113a576200113a620010ff565b60405161022081016001600160401b03811182821017156200113a576200113a620010ff565b604051601f8201601f191681016001600160401b0381118282101715620011db57620011db620010ff565b604052919050565b80516001600160a01b0381168114620011fb57600080fd5b919050565b805163ffffffff81168114620011fb57600080fd5b6000606082840312156200122857600080fd5b6200123262001115565b82519091506001600160601b03811681146200124d57600080fd5b81526200125d60208301620011e3565b6020820152620012706040830162001200565b604082015292915050565b60006001600160401b03821115620012975762001297620010ff565b5060051b60200190565b600082601f830112620012b357600080fd5b81516020620012cc620012c6836200127b565b620011b0565b8083825260208201915060208460051b870101935086841115620012ef57600080fd5b602086015b8481101562001316576200130881620011e3565b8352918301918301620012f4565b509695505050505050565b80518015158114620011fb57600080fd5b600082601f8301126200134457600080fd5b8151602062001357620012c6836200127b565b82815260079290921b840181019181810190868411156200137757600080fd5b8286015b8481101562001316578088036080811215620013975760008081fd5b620013a162001140565b620013ac83620011e3565b8152606080601f1984011215620013c35760008081fd5b620013cd62001115565b9250620013dc878501620011e3565b835260408085015160ff81168114620013f55760008081fd5b848901526200140685830162001321565b9084015250808601919091528352918301916080016200137b565b80516001600160401b0381168114620011fb57600080fd5b805161ffff81168114620011fb57600080fd5b600082601f8301126200145e57600080fd5b8151602062001471620012c6836200127b565b82815260059290921b840181019181810190868411156200149157600080fd5b8286015b84811015620013165780516001600160401b0380821115620014b657600080fd5b908801906040601f19838c038101821315620014d157600080fd5b620014db62001140565b620014e889860162001421565b81528285015184811115620014fc57600080fd5b8086019550508c603f8601126200151257600080fd5b88850151935062001527620012c6856200127b565b84815260e09094028501830193898101908e8611156200154657600080fd5b958401955b858710156200161f57868f0360e08112156200156657600080fd5b6200157062001140565b6200157b89620011e3565b815260c086830112156200158e57600080fd5b6200159862001165565b9150620015a78d8a0162001200565b8252620015b6878a0162001200565b8d830152620015c860608a0162001439565b87830152620015da60808a0162001200565b6060830152620015ed60a08a0162001200565b60808301526200160060c08a0162001321565b60a0830152808d0191909152825260e09690960195908a01906200154b565b828b01525087525050509284019250830162001495565b600082601f8301126200164857600080fd5b815160206200165b620012c6836200127b565b82815260069290921b840181019181810190868411156200167b57600080fd5b8286015b848110156200131657604081890312156200169a5760008081fd5b620016a462001140565b620016af82620011e3565b8152620016be85830162001421565b818601528352918301916040016200167f565b80516001600160e01b031981168114620011fb57600080fd5b600082601f830112620016fc57600080fd5b815160206200170f620012c6836200127b565b82815261024092830285018201928282019190878511156200173057600080fd5b8387015b85811015620018f257808903828112156200174f5760008081fd5b6200175962001140565b620017648362001421565b815261022080601f19840112156200177c5760008081fd5b620017866200118a565b92506200179588850162001321565b83526040620017a681860162001439565b898501526060620017b981870162001200565b8286015260809150620017ce82870162001200565b9085015260a0620017e186820162001200565b8286015260c09150620017f682870162001439565b9085015260e06200180986820162001200565b8286015261010091506200181f82870162001439565b908501526101206200183386820162001439565b8286015261014091506200184982870162001439565b908501526101606200185d86820162001200565b8286015261018091506200187382870162001200565b908501526101a06200188786820162001421565b828601526101c091506200189d82870162001200565b908501526101e0620018b186820162001200565b828601526102009150620018c782870162001321565b90850152620018d8858301620016d1565b908401525080870191909152845292840192810162001734565b5090979650505050505050565b6000806000806000806000610120888a0312156200191c57600080fd5b62001928898962001215565b60608901519097506001600160401b03808211156200194657600080fd5b620019548b838c01620012a1565b975060808a01519150808211156200196b57600080fd5b620019798b838c01620012a1565b965060a08a01519150808211156200199057600080fd5b6200199e8b838c0162001332565b955060c08a0151915080821115620019b557600080fd5b620019c38b838c016200144c565b945060e08a0151915080821115620019da57600080fd5b620019e88b838c0162001636565b93506101008a015191508082111562001a0057600080fd5b5062001a0f8a828b01620016ea565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b8151151581526102208101602083015162001a55602084018261ffff169052565b50604083015162001a6e604084018263ffffffff169052565b50606083015162001a87606084018263ffffffff169052565b50608083015162001aa0608084018263ffffffff169052565b5060a083015162001ab760a084018261ffff169052565b5060c083015162001ad060c084018263ffffffff169052565b5060e083015162001ae760e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200928301516001600160e01b031916929091019190915290565b8181038181111562000f1457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615ebd62001c10600039600081816102fa01526118d30152600081816102be01528181610ed50152610f3501526000818161028a01528181610f5e0152610fce0152615ebd6000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c806379ba509711610104578063bf78e03f116100a2578063d8694ccd11610071578063d8694ccd14610ad6578063f2fde38b14610ae9578063fbe3f77814610afc578063ffdb4b3714610b0f57600080fd5b8063bf78e03f146109d5578063cdc73d5114610ab3578063d02641a014610abb578063d63d3af214610ace57600080fd5b806382b49eb0116100de57806382b49eb0146108175780638da5cb5b1461098757806391a2749a146109af578063a69c64c0146109c257600080fd5b806379ba5097146107e95780637afac322146107f1578063805f21321461080457600080fd5b806341ed29e71161017c578063514e8cff1161014b578063514e8cff146104845780636cb5f3dd146105275780636def4ce71461053a578063770e2dc4146107d657600080fd5b806341ed29e7146103ee578063430d138c1461040157806345ac924d146104245780634ab35b0b1461044457600080fd5b8063181f5a77116101b8578063181f5a77146103735780632451a627146103bc578063325c868e146103d15780633937306f146103d957600080fd5b806241e5be146101de578063061877e31461020457806306285c691461025d575b600080fd5b6101f16101ec366004614585565b610b57565b6040519081526020015b60405180910390f35b6102446102123660046145c1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016101fb565b610327604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff16908201526060016101fb565b6103af6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516101fb9190614640565b6103c4610bc5565b6040516101fb9190614653565b6101f1602481565b6103ec6103e73660046146ad565b610bd6565b005b6103ec6103fc366004614859565b610e8b565b61041461040f366004614a44565b610ecd565b6040516101fb9493929190614b38565b610437610432366004614bd7565b6110dd565b6040516101fb9190614c19565b6104576104523660046145c1565b6111a8565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b61051a610492366004614c94565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516101fb9190614caf565b6103ec610535366004614d40565b6111b3565b6107c9610548366004614c94565b6040805161022081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161022081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a0850152710100000000000000000000000000000000008304871660c08501527501000000000000000000000000000000000000000000808404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c01000000000000000000000000860485166101a083015270010000000000000000000000000000000086049094166101c082015274010000000000000000000000000000000000000000850490911615156101e08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b1661020082015290565b6040516101fb9190614f60565b6103ec6107e436600461515e565b6111c7565b6103ec6111d9565b6103ec6107ff366004615478565b6112d6565b6103ec6108123660046154dc565b6112e8565b610927610825366004615548565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516101fb9190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b6103ec6109bd366004615572565b61180e565b6103ec6109d0366004615603565b61181f565b610a766109e33660046145c1565b60408051606080820183526000808352602080840182905292840181905273ffffffffffffffffffffffffffffffffffffffff9485168152600783528390208351918201845254938416815260ff74010000000000000000000000000000000000000000850481169282019290925275010000000000000000000000000000000000000000009093041615159082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015160ff1690820152918101511515908201526060016101fb565b6103c4611830565b61051a610ac93660046145c1565b61183c565b6101f1601281565b6101f1610ae43660046156c8565b6119f1565b6103ec610af73660046145c1565b611f29565b6103ec610b0a36600461572c565b611f3a565b610b22610b1d36600461584c565b611f4b565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101fb565b6000610b6282612003565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b8985612003565b610bb1907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16856158a5565b610bbb91906158bc565b90505b9392505050565b6060610bd1600261209d565b905090565b610bde6120aa565b6000610bea82806158f7565b9050905060005b81811015610d34576000610c0584806158f7565b83818110610c1557610c1561595f565b905060400201803603810190610c2b91906159ba565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a92610d239290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610bf1565b506000610d4460208401846158f7565b9050905060005b81811015610e85576000610d6260208601866158f7565b83818110610d7257610d7261595f565b905060400201803603810190610d8891906159f7565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e92610e749290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610d4b565b50505050565b610e936120ef565b60005b8151811015610ec957610ec1828281518110610eb457610eb461595f565b6020026020010151612170565b600101610e96565b5050565b6000806060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610f2e578a9350610f5c565b610f598c8c7f0000000000000000000000000000000000000000000000000000000000000000610b57565b93505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16841115611000576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b67ffffffffffffffff8d1660009081526009602052604081206001015463ffffffff169061102f8c8c84612342565b9050806020015194506110458f8b8b8b8b6124eb565b925085856110c5836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b95509550955050509950995099509995505050505050565b60608160008167ffffffffffffffff8111156110fb576110fb6146e8565b60405190808252806020026020018201604052801561114057816020015b60408051808201909152600080825260208201528152602001906001900390816111195790505b50905060005b8281101561119d576111788686838181106111635761116361595f565b9050602002016020810190610ac991906145c1565b82828151811061118a5761118a61595f565b6020908102919091010152600101611146565b509150505b92915050565b60006111a282612003565b6111bb6120ef565b6111c48161286e565b50565b6111cf6120ef565b610ec98282612d40565b60015473ffffffffffffffffffffffffffffffffffffffff16331461125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610ff7565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112de6120ef565b610ec982826131b6565b600080600061132c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132fd92505050565b92509250925061133e33838584613318565b600061134c85870187615a1a565b905060005b8151811015611803576000600760008484815181106113725761137261595f565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160002082516060810184529054938416815260ff740100000000000000000000000000000000000000008504811692820192909252750100000000000000000000000000000000000000000090930416151590820181905290915061146d578282815181106114165761141661595f565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ff7565b60006114ba6012836020015186868151811061148b5761148b61595f565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613470565b9050600660008585815181106114d2576114d261595f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff168484815181106115445761154461595f565b60200260200101516040015163ffffffff16101561164e5783838151811061156e5761156e61595f565b60200260200101516000015184848151811061158c5761158c61595f565b602002602001015160400151600660008787815181106115ae576115ae61595f565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000205490517f191ec70600000000000000000000000000000000000000000000000000000000815293909116600484015263ffffffff91821660248401527c01000000000000000000000000000000000000000000000000000000009004166044820152606401610ff7565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260200185858151811061168f5761168f61595f565b60200260200101516040015163ffffffff16815250600660008686815181106116ba576116ba61595f565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905583518490849081106117525761175261595f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a828686815181106117a8576117a861595f565b6020026020010151604001516040516117f19291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a25050600101611351565b505050505050505050565b6118166120ef565b6111c481613533565b6118276120ef565b6111c4816136bf565b6060610bd1600b61209d565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116835263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169183018290527f000000000000000000000000000000000000000000000000000000000000000016906118fe9042615ae1565b101561190a5792915050565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526007602090815260409182902082516060810184529054938416815260ff74010000000000000000000000000000000000000000850481169282019290925275010000000000000000000000000000000000000000009093041615801591830191909152806119ab5750805173ffffffffffffffffffffffffffffffffffffffff16155b156119b7575092915050565b60006119c2826137a9565b9050826020015163ffffffff16816020015163ffffffff1610156119e657826119e8565b805b95945050505050565b67ffffffffffffffff8083166000908152600960209081526040808320815161022081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a0860152710100000000000000000000000000000000008404871660c08601527501000000000000000000000000000000000000000000808504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c01000000000000000000000000880485166101a084015270010000000000000000000000000000000088049094166101c083015274010000000000000000000000000000000000000000870490931615156101e08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b16610200840152909190611c2b576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610ff7565b611c46611c3e60808501606086016145c1565b600b9061393b565b611ca557611c5a60808401606085016145c1565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ff7565b6000611cb460408501856158f7565b9150611d10905082611cc96020870187615af4565b905083611cd68880615af4565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061396a92505050565b6000611d2a611d2560808701606088016145c1565b612003565b90506000611d3d87856101c00151613a27565b9050600080808515611d7d57611d71878b611d5e60808d0160608e016145c1565b88611d6c60408f018f6158f7565b613b27565b91945092509050611d9d565b6101a0870151611d9a9063ffffffff16662386f26fc100006158a5565b92505b61010087015160009061ffff1615611de157611dde886dffffffffffffffffffffffffffff607088901c16611dd560208e018e615af4565b90508a86613dff565b90505b61018088015160009067ffffffffffffffff16611e0a611e0460808e018e615af4565b8c613eaf565b600001518563ffffffff168b60a0015161ffff168e8060200190611e2e9190615af4565b611e399291506158a5565b8c6080015163ffffffff16611e4e9190615b59565b611e589190615b59565b611e629190615b59565b611e7c906dffffffffffffffffffffffffffff89166158a5565b611e8691906158a5565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f6060016020810190611ec091906145c1565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054611efb9067ffffffffffffffff16896158a5565b611f059190615b59565b611f0f9190615b59565b611f1991906158bc565b9c9b505050505050505050505050565b611f316120ef565b6111c481613f70565b611f426120ef565b6111c481614065565b67ffffffffffffffff8116600090815260096020526040812054819060ff16611fac576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610ff7565b611fb584612003565b67ffffffffffffffff8416600090815260096020526040902060010154611ff7908590700100000000000000000000000000000000900463ffffffff16613a27565b915091505b9250929050565b60008061200f8361183c565b9050806020015163ffffffff1660001480612047575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b15612096576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610ff7565b5192915050565b60606000610bbe836141b7565b6120b560023361393b565b6120ed576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610ff7565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146120ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610ff7565b600061222982600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a390612336908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b6040805180820190915260008082526020820152600083900361238357506040805180820190915267ffffffffffffffff8216815260006020820152610bbe565b600061238f8486615b6c565b905060006123a08560048189615bb2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f0000000000000000000000000000000000000000000000000000000000161243d57808060200190518101906124349190615bdc565b92505050610bbe565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016124b9576040518060400160405280828060200190518101906124a59190615c08565b815260006020909101529250610bbe915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808616600090815260096020526040902060010154606091750100000000000000000000000000000000000000000090910460e01b90859081111561253b5761253b6146e8565b60405190808252806020026020018201604052801561256e57816020015b60608152602001906001900390816125595790505b50915060005b858110156128635760008585838181106125905761259061595f565b6125a692602060409092020190810191506145c1565b905060008888848181106125bc576125bc61595f565b90506020028101906125ce9190615c21565b6125dc906040810190615af4565b915050602081111561268c5767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff1681111561268c576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ff7565b6126fc848a8a868181106126a2576126a261595f565b90506020028101906126b49190615c21565b6126c2906020810190615af4565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061421392505050565b67ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684528252808320815160c081018352905463ffffffff8082168352640100000000820481169483019490945268010000000000000000810461ffff16928201929092526a01000000000000000000008204831660608201526e010000000000000000000000000000820490921660808301527201000000000000000000000000000000000000900460ff16151560a0820181905290919061280e5767ffffffffffffffff8c166000908152600960205260409020547b01000000000000000000000000000000000000000000000000000000900463ffffffff16612814565b81606001515b6040805163ffffffff83166020820152919250016040516020818303038152906040528786815181106128495761284961595f565b602002602001018190525050505050806001019050612574565b505095945050505050565b60005b8151811015610ec957600082828151811061288e5761288e61595f565b6020026020010151905060008383815181106128ac576128ac61595f565b60200260200101516000015190506000826020015190508167ffffffffffffffff16600014806128e5575061016081015163ffffffff16155b8061293757506102008101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b806129565750806060015163ffffffff1681610160015163ffffffff16115b15612999576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ff7565b67ffffffffffffffff82166000908152600960205260408120600101547501000000000000000000000000000000000000000000900460e01b7fffffffff00000000000000000000000000000000000000000000000000000000169003612a41578167ffffffffffffffff167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda4626582604051612a349190614f60565b60405180910390a2612a84565b8167ffffffffffffffff167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051612a7b9190614f60565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c0217905550905050505050806001019050612871565b60005b82518110156130cd576000838281518110612d6057612d6061595f565b6020026020010151905060008160000151905060005b8260200151518110156130bf57600083602001518281518110612d9b57612d9b61595f565b6020026020010151602001519050600084602001518381518110612dc157612dc161595f565b6020026020010151600001519050816020015163ffffffff16826000015163ffffffff1610612e3357815160208301516040517f0b4f67a200000000000000000000000000000000000000000000000000000000815263ffffffff928316600482015291166024820152604401610ff7565b602063ffffffff16826080015163ffffffff161015612ea85760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610ff7565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b5906130ad908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a35050600101612d76565b505050806001019050612d43565b5060005b81518110156131b15760008282815181106130ee576130ee61595f565b602002602001015160000151905060008383815181106131105761311061595f565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a350506001016130d1565b505050565b60005b8251811015613259576131ef8382815181106131d7576131d761595f565b6020026020010151600b61426590919063ffffffff16565b15613251578281815181106132065761320661595f565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b6001016131b9565b5060005b81518110156131b15761329382828151811061327b5761327b61595f565b6020026020010151600b61428790919063ffffffff16565b156132f5578181815181106132aa576132aa61595f565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010161325d565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff16613469576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610ff7565b5050505050565b60008061347d8486615c5f565b9050600060248260ff1611156134b75761349b602460ff8416615ae1565b6134a690600a615d98565b6134b090856158bc565b90506134dd565b6134c560ff83166024615ae1565b6134d090600a615d98565b6134da90856158a5565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111156119e8576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160005b81518110156135ce5760008282815181106135585761355861595f565b602002602001015190506135768160026142a990919063ffffffff16565b156135c55760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010161353b565b50815160005b8151811015610e855760008282815181106135f1576135f161595f565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613661576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61366c600282614287565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a1506001016135d4565b60005b8151811015610ec95760008282815181106136df576136df61595f565b602002602001015160000151905060008383815181106137015761370161595f565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a250506001016136c2565b60408051808201909152600080825260208201526000826000015190506000808273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138389190615dbe565b50935050925050600082121561387a576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006138f98473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ee9190615e0e565b876020015185613470565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff909216602083015250949350505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610bbe565b836040015163ffffffff168311156139c35760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610ff7565b836020015161ffff16821115613a185760208401516040517fd88dddd60000000000000000000000000000000000000000000000000000000081526004810184905261ffff9091166024820152604401610ff7565b610e8584610200015182614213565b67ffffffffffffffff821660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116825263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169282019290925290831615613b1f576000816020015163ffffffff1642613abc9190615ae1565b90508363ffffffff16811115613b1d576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff8516602482015260448101829052606401610ff7565b505b519392505050565b6000808083815b81811015613df1576000878783818110613b4a57613b4a61595f565b905060400201803603810190613b609190615e2b565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613c80576101208d0151613c4d9061ffff16662386f26fc100006158a5565b613c579088615b59565b96508c610140015186613c6a9190615e64565b9550613c77602086615e64565b94505050613de9565b604081015160009061ffff1615613d395760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613cdc578351613cd590612003565b9050613cdf565b508a5b620186a0836040015161ffff16613d218660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166142cb90919063ffffffff16565b613d2b91906158a5565b613d3591906158bc565b9150505b6060820151613d489088615e64565b9650816080015186613d5a9190615e64565b8251909650600090613d799063ffffffff16662386f26fc100006158a5565b905080821015613d9857613d8d818a615b59565b985050505050613de9565b6000836020015163ffffffff16662386f26fc10000613db791906158a5565b905080831115613dd757613dcb818b615b59565b99505050505050613de9565b613de1838b615b59565b995050505050505b600101613b2e565b505096509650969350505050565b60008063ffffffff8316613e15610120866158a5565b613e21876101e0615b59565b613e2b9190615b59565b613e359190615b59565b905060008760c0015163ffffffff168860e0015161ffff1683613e5891906158a5565b613e629190615b59565b61010089015190915061ffff16613e896dffffffffffffffffffffffffffff8916836158a5565b613e9391906158a5565b613ea390655af3107a40006158a5565b98975050505050505050565b60408051808201909152600080825260208201526000613edb858585610160015163ffffffff16612342565b9050826060015163ffffffff1681600001511115613f25576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101e001518015613f3957508060200151155b15610bbb576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613fef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ff7565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60005b8151811015610ec95760008282815181106140855761408561595f565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a0180518589018051949098167fffffffffffffffffffffff00000000000000000000000000000000000000000090931683177401000000000000000000000000000000000000000060ff92831602177fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000009415159490940293909317909355835190815291511697810197909752915115159186019190915292945090929091907fe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf9060600160405180910390a2505050806001019050614068565b60608160000180548060200260200160405190810160405280929190818152602001828054801561420757602002820191906000526020600020905b8154815260200190600101908083116141f3575b50505050509050919050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601610ec9576131b181614308565b6000610bbe8373ffffffffffffffffffffffffffffffffffffffff84166143bb565b6000610bbe8373ffffffffffffffffffffffffffffffffffffffff84166144b5565b6000610bbe8373ffffffffffffffffffffffffffffffffffffffff8416614504565b6000670de0b6b3a76400006142fe837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166158a5565b610bbe91906158bc565b6000815160201461434757816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610ff79190614640565b60008280602001905181019061435d9190615c08565b905073ffffffffffffffffffffffffffffffffffffffff811180614382575061040081105b156111a257826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610ff79190614640565b600081815260018301602052604081205480156144a45760006143df600183615ae1565b85549091506000906143f390600190615ae1565b90508082146144585760008660000182815481106144135761441361595f565b90600052602060002001549050808760000184815481106144365761443661595f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061446957614469615e81565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111a2565b60009150506111a2565b5092915050565b60008181526001830160205260408120546144fc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111a2565b5060006111a2565b600081815260018301602052604081205480156144a4576000614528600183615ae1565b855490915060009061453c90600190615ae1565b90508181146144585760008660000182815481106144135761441361595f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461458057600080fd5b919050565b60008060006060848603121561459a57600080fd5b6145a38461455c565b9250602084013591506145b86040850161455c565b90509250925092565b6000602082840312156145d357600080fd5b610bbe8261455c565b6000815180845260005b81811015614602576020818501810151868301820152016145e6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610bbe60208301846145dc565b6020808252825182820181905260009190848201906040850190845b818110156146a157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161466f565b50909695505050505050565b6000602082840312156146bf57600080fd5b813567ffffffffffffffff8111156146d657600080fd5b820160408185031215610bbe57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561473a5761473a6146e8565b60405290565b6040805190810167ffffffffffffffff8111828210171561473a5761473a6146e8565b604051610220810167ffffffffffffffff8111828210171561473a5761473a6146e8565b60405160c0810167ffffffffffffffff8111828210171561473a5761473a6146e8565b6040516060810167ffffffffffffffff8111828210171561473a5761473a6146e8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614814576148146146e8565b604052919050565b600067ffffffffffffffff821115614836576148366146e8565b5060051b60200190565b80151581146111c457600080fd5b803561458081614840565b6000602080838503121561486c57600080fd5b823567ffffffffffffffff81111561488357600080fd5b8301601f8101851361489457600080fd5b80356148a76148a28261481c565b6147cd565b81815260a091820283018401918482019190888411156148c657600080fd5b938501935b838510156149995780858a0312156148e35760008081fd5b6148eb614717565b6148f48661455c565b8152868601357fffffffffffffffffffff00000000000000000000000000000000000000000000811681146149295760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146149625760008081fd5b90820152606061497387820161455c565b9082015260808681013561498681614840565b90820152835293840193918501916148cb565b50979650505050505050565b803567ffffffffffffffff8116811461458057600080fd5b60008083601f8401126149cf57600080fd5b50813567ffffffffffffffff8111156149e757600080fd5b602083019150836020828501011115611ffc57600080fd5b60008083601f840112614a1157600080fd5b50813567ffffffffffffffff811115614a2957600080fd5b6020830191508360208260051b8501011115611ffc57600080fd5b600080600080600080600080600060c08a8c031215614a6257600080fd5b614a6b8a6149a5565b9850614a7960208b0161455c565b975060408a0135965060608a013567ffffffffffffffff80821115614a9d57600080fd5b614aa98d838e016149bd565b909850965060808c0135915080821115614ac257600080fd5b614ace8d838e016149ff565b909650945060a08c0135915080821115614ae757600080fd5b818c0191508c601f830112614afb57600080fd5b813581811115614b0a57600080fd5b8d60208260061b8501011115614b1f57600080fd5b6020830194508093505050509295985092959850929598565b848152600060208515158184015260806040840152614b5a60808401866145dc565b8381036060850152845180825282820190600581901b8301840184880160005b83811015614bc6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552614bb48383516145dc565b94870194925090860190600101614b7a565b50909b9a5050505050505050505050565b60008060208385031215614bea57600080fd5b823567ffffffffffffffff811115614c0157600080fd5b614c0d858286016149ff565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614c8757614c7784835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614c36565b5091979650505050505050565b600060208284031215614ca657600080fd5b610bbe826149a5565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff1690820152604081016111a2565b803561ffff8116811461458057600080fd5b803563ffffffff8116811461458057600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461458057600080fd5b60006020808385031215614d5357600080fd5b823567ffffffffffffffff811115614d6a57600080fd5b8301601f81018513614d7b57600080fd5b8035614d896148a28261481c565b8181526102409182028301840191848201919088841115614da957600080fd5b938501935b838510156149995784890381811215614dc75760008081fd5b614dcf614740565b614dd8876149a5565b8152610220807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084011215614e0d5760008081fd5b614e15614763565b9250614e2289890161484e565b83526040614e31818a01614cea565b8a8501526060614e42818b01614cfc565b8286015260809150614e55828b01614cfc565b9085015260a0614e668a8201614cfc565b8286015260c09150614e79828b01614cea565b9085015260e0614e8a8a8201614cfc565b828601526101009150614e9e828b01614cea565b90850152610120614eb08a8201614cea565b828601526101409150614ec4828b01614cea565b90850152610160614ed68a8201614cfc565b828601526101809150614eea828b01614cfc565b908501526101a0614efc8a82016149a5565b828601526101c09150614f10828b01614cfc565b908501526101e0614f228a8201614cfc565b828601526102009150614f36828b0161484e565b90850152614f45898301614d10565b90840152508088019190915283529384019391850191614dae565b81511515815261022081016020830151614f80602084018261ffff169052565b506040830151614f98604084018263ffffffff169052565b506060830151614fb0606084018263ffffffff169052565b506080830151614fc8608084018263ffffffff169052565b5060a0830151614fde60a084018261ffff169052565b5060c0830151614ff660c084018263ffffffff169052565b5060e083015161500c60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b600082601f8301126150d757600080fd5b813560206150e76148a28361481c565b82815260069290921b8401810191818101908684111561510657600080fd5b8286015b8481101561515357604081890312156151235760008081fd5b61512b614740565b615134826149a5565b815261514185830161455c565b8186015283529183019160400161510a565b509695505050505050565b6000806040838503121561517157600080fd5b67ffffffffffffffff8335111561518757600080fd5b83601f84358501011261519957600080fd5b6151a96148a2843585013561481c565b8335840180358083526020808401939260059290921b909101018610156151cf57600080fd5b602085358601015b85358601803560051b016020018110156153dc5767ffffffffffffffff8135111561520157600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a0301121561523a57600080fd5b615242614740565b61524e602083016149a5565b815267ffffffffffffffff6040830135111561526957600080fd5b88603f60408401358401011261527e57600080fd5b6152946148a2602060408501358501013561481c565b6020604084810135850182810135808552928401939260e00201018b10156152bb57600080fd5b6040808501358501015b6040858101358601602081013560e00201018110156153bd5760e0818d0312156152ee57600080fd5b6152f6614740565b6152ff8261455c565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f0301121561533357600080fd5b61533b614787565b61534760208401614cfc565b815261535560408401614cfc565b602082015261536660608401614cea565b604082015261537760808401614cfc565b606082015261538860a08401614cfc565b608082015261539a60c0840135614840565b60c083013560a0820152602082810191909152908452929092019160e0016152c5565b50806020840152505080855250506020830192506020810190506151d7565b5092505067ffffffffffffffff602084013511156153f957600080fd5b61540984602085013585016150c6565b90509250929050565b600082601f83011261542357600080fd5b813560206154336148a28361481c565b8083825260208201915060208460051b87010193508684111561545557600080fd5b602086015b848110156151535761546b8161455c565b835291830191830161545a565b6000806040838503121561548b57600080fd5b823567ffffffffffffffff808211156154a357600080fd5b6154af86838701615412565b935060208501359150808211156154c557600080fd5b506154d285828601615412565b9150509250929050565b600080600080604085870312156154f257600080fd5b843567ffffffffffffffff8082111561550a57600080fd5b615516888389016149bd565b9096509450602087013591508082111561552f57600080fd5b5061553c878288016149bd565b95989497509550505050565b6000806040838503121561555b57600080fd5b615564836149a5565b91506154096020840161455c565b60006020828403121561558457600080fd5b813567ffffffffffffffff8082111561559c57600080fd5b90830190604082860312156155b057600080fd5b6155b8614740565b8235828111156155c757600080fd5b6155d387828601615412565b8252506020830135828111156155e857600080fd5b6155f487828601615412565b60208301525095945050505050565b6000602080838503121561561657600080fd5b823567ffffffffffffffff81111561562d57600080fd5b8301601f8101851361563e57600080fd5b803561564c6148a28261481c565b81815260069190911b8201830190838101908783111561566b57600080fd5b928401925b828410156156bd57604084890312156156895760008081fd5b615691614740565b61569a8561455c565b81526156a78686016149a5565b8187015282526040939093019290840190615670565b979650505050505050565b600080604083850312156156db57600080fd5b6156e4836149a5565b9150602083013567ffffffffffffffff81111561570057600080fd5b830160a0818603121561571257600080fd5b809150509250929050565b60ff811681146111c457600080fd5b6000602080838503121561573f57600080fd5b823567ffffffffffffffff81111561575657600080fd5b8301601f8101851361576757600080fd5b80356157756148a28261481c565b81815260079190911b8201830190838101908783111561579457600080fd5b928401925b828410156156bd5783880360808112156157b35760008081fd5b6157bb614740565b6157c48661455c565b81526060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840112156157f85760008081fd5b6158006147aa565b925061580d88880161455c565b835260408088013561581e8161571d565b848a0152908701359061583082614840565b8301528087019190915282526080939093019290840190615799565b6000806040838503121561585f57600080fd5b6158688361455c565b9150615409602084016149a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176111a2576111a2615876565b6000826158f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261592c57600080fd5b83018035915067ffffffffffffffff82111561594757600080fd5b6020019150600681901b3603821315611ffc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461458057600080fd5b6000604082840312156159cc57600080fd5b6159d4614740565b6159dd8361455c565b81526159eb6020840161598e565b60208201529392505050565b600060408284031215615a0957600080fd5b615a11614740565b6159dd836149a5565b60006020808385031215615a2d57600080fd5b823567ffffffffffffffff811115615a4457600080fd5b8301601f81018513615a5557600080fd5b8035615a636148a28261481c565b81815260609182028301840191848201919088841115615a8257600080fd5b938501935b838510156149995780858a031215615a9f5760008081fd5b615aa76147aa565b615ab08661455c565b8152615abd87870161598e565b878201526040615ace818801614cfc565b9082015283529384019391850191615a87565b818103818111156111a2576111a2615876565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615b2957600080fd5b83018035915067ffffffffffffffff821115615b4457600080fd5b602001915036819003821315611ffc57600080fd5b808201808211156111a2576111a2615876565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156150be5760049490940360031b84901b1690921692915050565b60008085851115615bc257600080fd5b83861115615bcf57600080fd5b5050820193919092039150565b600060408284031215615bee57600080fd5b615bf6614740565b8251815260208301516159eb81614840565b600060208284031215615c1a57600080fd5b5051919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615c5557600080fd5b9190910192915050565b60ff81811683821601908111156111a2576111a2615876565b600181815b80851115615cd157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615cb757615cb7615876565b80851615615cc457918102915b93841c9390800290615c7d565b509250929050565b600082615ce8575060016111a2565b81615cf5575060006111a2565b8160018114615d0b5760028114615d1557615d31565b60019150506111a2565b60ff841115615d2657615d26615876565b50506001821b6111a2565b5060208310610133831016604e8410600b8410161715615d54575081810a6111a2565b615d5e8383615c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615d9057615d90615876565b029392505050565b6000610bbe8383615cd9565b805169ffffffffffffffffffff8116811461458057600080fd5b600080600080600060a08688031215615dd657600080fd5b615ddf86615da4565b9450602086015193506040860151925060608601519150615e0260808701615da4565b90509295509295909350565b600060208284031215615e2057600080fd5b8151610bbe8161571d565b600060408284031215615e3d57600080fd5b615e45614740565b615e4e8361455c565b8152602083013560208201528091505092915050565b63ffffffff8181168382160190808211156144ae576144ae615876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var FeeQuoterABI = FeeQuoterMetaData.ABI @@ -2880,7 +2881,7 @@ func (FeeQuoterPremiumMultiplierWeiPerEthUpdated) Topic() common.Hash { } func (FeeQuoterPriceFeedPerTokenUpdated) Topic() common.Hash { - return common.HexToHash("0x08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464") + return common.HexToHash("0xe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf") } func (FeeQuoterReportPermissionSet) Topic() common.Hash { diff --git a/core/gethwrappers/ccip/generated/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go b/core/gethwrappers/ccip/generated/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go index e1942e68dab..00c5d3f6417 100644 --- a/core/gethwrappers/ccip/generated/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go +++ b/core/gethwrappers/ccip/generated/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go @@ -87,8 +87,8 @@ type RateLimiterTokenBucket struct { } var MultiAggregateRateLimiterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"authorizedCallers\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeQuoter\",\"type\":\"address\"}],\"name\":\"FeeQuoterSet\",\"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\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RateLimiterConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structMultiAggregateRateLimiter.RateLimiterConfigArgs[]\",\"name\":\"rateLimiterUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applyRateLimiterConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"}],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllRateLimitTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"localTokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"remoteTokens\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeQuoter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"onInboundMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"onOutboundMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newFeeQuoter\",\"type\":\"address\"}],\"name\":\"setFeeQuoter\",\"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\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structMultiAggregateRateLimiter.LocalRateLimitToken[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structMultiAggregateRateLimiter.LocalRateLimitToken\",\"name\":\"localTokenArgs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"}],\"internalType\":\"structMultiAggregateRateLimiter.RateLimitTokenArgs[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"updateRateLimitTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200327338038062003273833981016040819052620000349162000538565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000102565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620001ad565b50620000fa82620002fc565b50506200066f565b336001600160a01b038216036200015c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b81518110156200023d576000828281518110620001d657620001d662000621565b60209081029190910101519050620001f060028262000378565b1562000233576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620001b5565b50815160005b8151811015620002f657600082828151811062000264576200026462000621565b6020026020010151905060006001600160a01b0316816001600160a01b031603620002a2576040516342bcdf7f60e11b815260040160405180910390fd5b620002af60028262000398565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000243565b50505050565b6001600160a01b03811662000324576040516342bcdf7f60e11b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac9060200160405180910390a150565b60006200038f836001600160a01b038416620003af565b90505b92915050565b60006200038f836001600160a01b038416620004b3565b60008181526001830160205260408120548015620004a8576000620003d660018362000637565b8554909150600090620003ec9060019062000637565b90508181146200045857600086600001828154811062000410576200041062000621565b906000526020600020015490508087600001848154811062000436576200043662000621565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200046c576200046c62000659565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000392565b600091505062000392565b6000818152600183016020526040812054620004fc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000392565b50600062000392565b80516001600160a01b03811681146200051d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200054c57600080fd5b620005578362000505565b602084810151919350906001600160401b03808211156200057757600080fd5b818601915086601f8301126200058c57600080fd5b815181811115620005a157620005a162000522565b8060051b604051601f19603f83011681018181108582111715620005c957620005c962000522565b604052918252848201925083810185019189831115620005e857600080fd5b938501935b828510156200061157620006018562000505565b84529385019392850192620005ed565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b818103818111156200039257634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b612bf4806200067f6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063e145291611610066578063e145291614610247578063e835232b14610265578063f2fde38b14610278578063fe843cd01461028b57600080fd5b80638da5cb5b146101e257806391a2749a14610221578063e0a0e5061461023457600080fd5b80631af18b7b116100c85780631af18b7b146101915780632451a627146101a4578063537e304e146101b957806379ba5097146101da57600080fd5b806308d450a1146100ef5780630a35bcc414610104578063181f5a771461017c575b600080fd5b6101026100fd366004612003565b61029e565b005b6101176101123660046120e3565b6102bd565b604051610173919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60405180910390f35b610184610382565b604051610173919061217a565b61010261019f3660046122b4565b61039e565b6101ac6105ca565b60405161017391906123d1565b6101cc6101c73660046123e4565b6105db565b6040516101739291906123ff565b610102610748565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b61010261022f3660046124f5565b61084a565b610102610242366004612586565b61085b565b60055473ffffffffffffffffffffffffffffffffffffffff166101fc565b6101026102733660046125db565b6108d0565b6101026102863660046125db565b6108e1565b610102610299366004612616565b6108f2565b6102a6610c31565b6102ba816020015182608001516000610c76565b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526103796102f58484610d4d565b6040805160a08101825282546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff16151593830193909352600190930154808316606083015292909204166080820152610d7d565b90505b92915050565b604051806060016040528060238152602001612bc56023913981565b6103a6610e2f565b60005b82518110156104845760008382815181106103c6576103c661274a565b602002602001015160200151905060008483815181106103e8576103e861274a565b6020908102919091018101515167ffffffffffffffff811660009081526004909252604090912090915061041c9083610eb0565b1561047a576040805167ffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff841660208201527f530cabd30786b7235e124a6c0db77e0b685ef22813b1fe87554247f404eb8ed6910160405180910390a15b50506001016103a9565b5060005b81518110156105c55760008282815181106104a5576104a561274a565b602002602001015160000151905060008383815181106104c7576104c761274a565b6020026020010151602001519050600082602001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061051857508151155b1561054f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825167ffffffffffffffff81166000908152600460205260409020610575908385610ed2565b156105b6577fad72a792d2a307f400c278be7deaeec6964276783304580cdc4e905436b8d5c58184846040516105ad93929190612779565b60405180910390a15b50505050806001019050610488565b505050565b60606105d66002610eff565b905090565b67ffffffffffffffff81166000908152600460205260408120606091829161060290610f0c565b90508067ffffffffffffffff81111561061d5761061d611d74565b604051908082528060200260200182016040528015610646578160200160208202803683370190505b5092508067ffffffffffffffff81111561066257610662611d74565b60405190808252806020026020018201604052801561069557816020015b60608152602001906001900390816106805790505b50915060005b818110156107415767ffffffffffffffff8516600090815260046020526040812081906106c89084610f17565b91509150818684815181106106df576106df61274a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508085848151811061072c5761072c61274a565b6020908102919091010152505060010161069b565b5050915091565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610852610e2f565b6102ba81610f36565b610863610c31565b6108cc8261087460408401846127c2565b808060200260200160405190810160405280939291908181526020016000905b828210156108c0576108b16040830286013681900381019061282a565b81526020019060010190610894565b50505050506001610c76565b5050565b6108d8610e2f565b6102ba816110c2565b6108e9610e2f565b6102ba81611188565b6108fa610e2f565b60005b81518110156108cc57600082828151811061091a5761091a61274a565b6020908102919091010151604081015181519192509067ffffffffffffffff8116600003610974576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160006109858383610d4d565b8054909150700100000000000000000000000000000000900463ffffffff16600003610bd3576040805160a081018252602080870180516fffffffffffffffffffffffffffffffff908116845263ffffffff421692840192909252875115158385015251811660608301529186015190911660808201528215610aec5767ffffffffffffffff8416600090815260066020908152604091829020835160028201805493860151948601516fffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009095169490941770010000000000000000000000000000000063ffffffff9096168602177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000941515949094029390931790925560608401516080850151908316921690920217600390910155610bcd565b67ffffffffffffffff84166000908152600660209081526040918290208351815492850151938501516fffffffffffffffffffffffffffffffff9182167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931770010000000000000000000000000000000063ffffffff9095168502177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000093151593909302929092178155606084015160808501519083169216909202176001909101555b50610bdd565b610bdd818561127d565b8267ffffffffffffffff167ff14a5415ce6988a9e870a85fff0b9d7b7dd79bbc228cb63cad610daf6f7b6b978386604051610c19929190612846565b60405180910390a250505050508060010190506108fd565b610c3c60023361142c565b610c74576040517fd86ad9cf0000000000000000000000000000000000000000000000000000000081523360048201526024016107c5565b565b6000610c828483610d4d565b805490915074010000000000000000000000000000000000000000900460ff1615610d47576000805b8451811015610d3257610cf6858281518110610cc957610cc961274a565b6020908102919091018101515167ffffffffffffffff89166000908152600490925260409091209061145b565b15610d2a57610d1d858281518110610d1057610d1061274a565b602002602001015161147d565b610d2790836128b9565b91505b600101610cab565b508015610d4557610d45828260006115b9565b505b50505050565b67ffffffffffffffff821660009081526006602052604081208215610d7657600201905061037c565b905061037c565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152610e0b82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642610def91906128cc565b85608001516fffffffffffffffffffffffffffffffff1661193c565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107c5565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611964565b6000610ef58473ffffffffffffffffffffffffffffffffffffffff851684611988565b90505b9392505050565b60606000610ef8836119ad565b600061037c82611a09565b600060608180610f278686611a14565b909450925050505b9250929050565b602081015160005b8151811015610fd1576000828281518110610f5b57610f5b61274a565b60200260200101519050610f79816002611ad190919063ffffffff16565b15610fc85760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101610f3e565b50815160005b8151811015610d47576000828281518110610ff457610ff461274a565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611064576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61106f600282611af3565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101610fd7565b73ffffffffffffffffffffffffffffffffffffffff811661110f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac9060200160405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff821603611207576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107c5565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b81546000906112a690700100000000000000000000000000000000900463ffffffff16426128cc565b9050801561134857600183015483546112ee916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661193c565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461136e916fffffffffffffffffffffffffffffffff9081169116611b15565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061141f9084906128df565b60405180910390a1505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610379565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611b2b565b60055481516040517fd02641a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526000928392169063d02641a0906024016040805180830381865afa1580156114f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611515919061291b565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811660000361158b5782516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107c5565b6020830151610ef8907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690611b37565b825474010000000000000000000000000000000000000000900460ff1615806115e0575081155b156115ea57505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061163090700100000000000000000000000000000000900463ffffffff16426128cc565b905080156116f05781831115611672576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546116ac9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661193c565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156117a75773ffffffffffffffffffffffffffffffffffffffff841661174f576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016107c5565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016107c5565b848310156118ba5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906117eb90826128cc565b6117f5878a6128cc565b6117ff91906128b9565b6118099190612986565b905073ffffffffffffffffffffffffffffffffffffffff8616611862576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016107c5565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016107c5565b6118c485846128cc565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b600061195b8561194c84866129c1565b61195690876128b9565b611b15565b95945050505050565b6000818152600283016020526040812061197e9082611d26565b6103798383611b74565b600082815260028401602052604081206119a28382612a7b565b50610ef58484611b80565b6060816000018054806020026020016040519081016040528092919081815260200182805480156119fd57602002820191906000526020600020905b8154815260200190600101908083116119e9575b50505050509050919050565b600061037c82611b8c565b6000606081611a238585611b96565b60008181526002870160205260409020805491925082918190611a45906129d8565b80601f0160208091040260200160405190810160405280929190818152602001828054611a71906129d8565b8015611abe5780601f10611a9357610100808354040283529160200191611abe565b820191906000526020600020905b815481529060010190602001808311611aa157829003601f168201915b5050505050905092509250509250929050565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611ba2565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611c95565b6000818310611b245781610379565b5090919050565b60006103798383611ce4565b6000670de0b6b3a7640000611b6a837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166129c1565b6103799190612986565b60006103798383611ba2565b60006103798383611c95565b600061037c825490565b60006103798383611cfc565b60008181526001830160205260408120548015611c8b576000611bc66001836128cc565b8554909150600090611bda906001906128cc565b9050818114611c3f576000866000018281548110611bfa57611bfa61274a565b9060005260206000200154905080876000018481548110611c1d57611c1d61274a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c5057611c50612b95565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061037c565b600091505061037c565b6000818152600183016020526040812054611cdc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561037c565b50600061037c565b60008181526001830160205260408120541515610379565b6000826000018281548110611d1357611d1361274a565b9060005260206000200154905092915050565b508054611d32906129d8565b6000825580601f10611d42575050565b601f0160209004906000526020600020908101906102ba91905b80821115611d705760008155600101611d5c565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611dc657611dc6611d74565b60405290565b60405160a0810167ffffffffffffffff81118282101715611dc657611dc6611d74565b6040516060810167ffffffffffffffff81118282101715611dc657611dc6611d74565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611e5957611e59611d74565b604052919050565b803567ffffffffffffffff81168114611e7957600080fd5b919050565b600082601f830112611e8f57600080fd5b813567ffffffffffffffff811115611ea957611ea9611d74565b611eda60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611e12565b818152846020838601011115611eef57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115611f2657611f26611d74565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e7957600080fd5b600060408284031215611f6657600080fd5b611f6e611da3565b9050611f7982611f30565b81526020820135602082015292915050565b600082601f830112611f9c57600080fd5b81356020611fb1611fac83611f0c565b611e12565b8083825260208201915060208460061b870101935086841115611fd357600080fd5b602086015b84811015611ff857611fea8882611f54565b835291830191604001611fd8565b509695505050505050565b60006020828403121561201557600080fd5b813567ffffffffffffffff8082111561202d57600080fd5b9083019060a0828603121561204157600080fd5b612049611dcc565b8235815261205960208401611e61565b602082015260408301358281111561207057600080fd5b61207c87828601611e7e565b60408301525060608301358281111561209457600080fd5b6120a087828601611e7e565b6060830152506080830135828111156120b857600080fd5b6120c487828601611f8b565b60808301525095945050505050565b80358015158114611e7957600080fd5b600080604083850312156120f657600080fd5b6120ff83611e61565b915061210d602084016120d3565b90509250929050565b6000815180845260005b8181101561213c57602081850181015186830182015201612120565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006103796020830184612116565b60006040828403121561219f57600080fd5b6121a7611da3565b90506121b282611e61565b81526121c060208301611f30565b602082015292915050565b600082601f8301126121dc57600080fd5b813560206121ec611fac83611f0c565b82815260059290921b8401810191818101908684111561220b57600080fd5b8286015b84811015611ff857803567ffffffffffffffff808211156122305760008081fd5b81890191506060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156122695760008081fd5b612271611da3565b61227d8c89860161218d565b81529083013590828211156122925760008081fd5b6122a08c8984870101611e7e565b81890152865250505091830191830161220f565b60008060408084860312156122c857600080fd5b833567ffffffffffffffff808211156122e057600080fd5b818601915086601f8301126122f457600080fd5b81356020612304611fac83611f0c565b8083825260208201915060208460061b87010193508a84111561232657600080fd5b6020860195505b8386101561234e5761233f8b8761218d565b8252948601949082019061232d565b9750505050602086013592508083111561236757600080fd5b5050612375858286016121cb565b9150509250929050565b60008151808452602080850194506020840160005b838110156123c657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612394565b509495945050505050565b602081526000610379602083018461237f565b6000602082840312156123f657600080fd5b61037982611e61565b604081526000612412604083018561237f565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015612480577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087840301855261246e838351612116565b94860194925090850190600101612434565b50909998505050505050505050565b600082601f8301126124a057600080fd5b813560206124b0611fac83611f0c565b8083825260208201915060208460051b8701019350868411156124d257600080fd5b602086015b84811015611ff8576124e881611f30565b83529183019183016124d7565b60006020828403121561250757600080fd5b813567ffffffffffffffff8082111561251f57600080fd5b908301906040828603121561253357600080fd5b61253b611da3565b82358281111561254a57600080fd5b6125568782860161248f565b82525060208301358281111561256b57600080fd5b6125778782860161248f565b60208301525095945050505050565b6000806040838503121561259957600080fd5b6125a283611e61565b9150602083013567ffffffffffffffff8111156125be57600080fd5b830160a081860312156125d057600080fd5b809150509250929050565b6000602082840312156125ed57600080fd5b61037982611f30565b80356fffffffffffffffffffffffffffffffff81168114611e7957600080fd5b6000602080838503121561262957600080fd5b823567ffffffffffffffff81111561264057600080fd5b8301601f8101851361265157600080fd5b803561265f611fac82611f0c565b81815260a0918202830184019184820191908884111561267e57600080fd5b938501935b8385101561273e578489038181121561269c5760008081fd5b6126a4611def565b6126ad87611e61565b81526126ba8888016120d3565b8882015260406060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0850112156126f25760008081fd5b6126fa611def565b9350612707828a016120d3565b8452612714818a016125f6565b8a85015250612725608089016125f6565b8382015281019190915283529384019391850191612683565b50979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff8416815260606020820152600061279c6060830185612116565b905073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127f757600080fd5b83018035915067ffffffffffffffff82111561281257600080fd5b6020019150600681901b3603821315610f2f57600080fd5b60006040828403121561283c57600080fd5b6103798383611f54565b821515815260808101610ef860208301848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561037c5761037c61288a565b8181038181111561037c5761037c61288a565b6060810161037c82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006040828403121561292d57600080fd5b612935611da3565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461296157600080fd5b8152602083015163ffffffff8116811461297a57600080fd5b60208201529392505050565b6000826129bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761037c5761037c61288a565b600181811c908216806129ec57607f821691505b602082108103612a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156105c5576000816000526020600020601f850160051c81016020861015612a545750805b601f850160051c820191505b81811015612a7357828155600101612a60565b505050505050565b815167ffffffffffffffff811115612a9557612a95611d74565b612aa981612aa384546129d8565b84612a2b565b602080601f831160018114612afc5760008415612ac65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612a73565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612b4957888601518255948401946001909101908401612b2a565b5085821015612b8557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4d756c7469416767726567617465526174654c696d6974657220312e362e302d646576a164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"authorizedCallers\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeQuoter\",\"type\":\"address\"}],\"name\":\"FeeQuoterSet\",\"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\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RateLimiterConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structMultiAggregateRateLimiter.RateLimiterConfigArgs[]\",\"name\":\"rateLimiterUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applyRateLimiterConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"}],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllRateLimitTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"localTokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"remoteTokens\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeQuoter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"message\",\"type\":\"tuple\"}],\"name\":\"onInboundMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"onOutboundMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newFeeQuoter\",\"type\":\"address\"}],\"name\":\"setFeeQuoter\",\"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\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structMultiAggregateRateLimiter.LocalRateLimitToken[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structMultiAggregateRateLimiter.LocalRateLimitToken\",\"name\":\"localTokenArgs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"}],\"internalType\":\"structMultiAggregateRateLimiter.RateLimitTokenArgs[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"updateRateLimitTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620033b7380380620033b7833981016040819052620000349162000538565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000102565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620001ad565b50620000fa82620002fc565b50506200066f565b336001600160a01b038216036200015c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b81518110156200023d576000828281518110620001d657620001d662000621565b60209081029190910101519050620001f060028262000378565b1562000233576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620001b5565b50815160005b8151811015620002f657600082828151811062000264576200026462000621565b6020026020010151905060006001600160a01b0316816001600160a01b031603620002a2576040516342bcdf7f60e11b815260040160405180910390fd5b620002af60028262000398565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000243565b50505050565b6001600160a01b03811662000324576040516342bcdf7f60e11b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac9060200160405180910390a150565b60006200038f836001600160a01b038416620003af565b90505b92915050565b60006200038f836001600160a01b038416620004b3565b60008181526001830160205260408120548015620004a8576000620003d660018362000637565b8554909150600090620003ec9060019062000637565b90508181146200045857600086600001828154811062000410576200041062000621565b906000526020600020015490508087600001848154811062000436576200043662000621565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200046c576200046c62000659565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000392565b600091505062000392565b6000818152600183016020526040812054620004fc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000392565b50600062000392565b80516001600160a01b03811681146200051d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200054c57600080fd5b620005578362000505565b602084810151919350906001600160401b03808211156200057757600080fd5b818601915086601f8301126200058c57600080fd5b815181811115620005a157620005a162000522565b8060051b604051601f19603f83011681018181108582111715620005c957620005c962000522565b604052918252848201925083810185019189831115620005e857600080fd5b938501935b828510156200061157620006018562000505565b84529385019392850192620005ed565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b818103818111156200039257634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b612d38806200067f6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063e145291611610066578063e145291614610247578063e835232b14610265578063f2fde38b14610278578063fe843cd01461028b57600080fd5b80638da5cb5b146101e257806391a2749a14610221578063e0a0e5061461023457600080fd5b80631af18b7b116100c85780631af18b7b146101915780632451a627146101a4578063537e304e146101b957806379ba5097146101da57600080fd5b806308d450a1146100ef5780630a35bcc414610104578063181f5a771461017c575b600080fd5b6101026100fd366004612147565b61029e565b005b610117610112366004612227565b6102bd565b604051610173919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60405180910390f35b610184610382565b60405161017391906122be565b61010261019f3660046123f8565b61039e565b6101ac6105ca565b6040516101739190612515565b6101cc6101c7366004612528565b6105db565b604051610173929190612543565b610102610748565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b61010261022f366004612639565b61084a565b6101026102423660046126ca565b61085b565b60055473ffffffffffffffffffffffffffffffffffffffff166101fc565b61010261027336600461271f565b6108d0565b61010261028636600461271f565b6108e1565b61010261029936600461275a565b6108f2565b6102a6610c3c565b6102ba816020015182608001516000610c81565b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526103796102f58484610d58565b6040805160a08101825282546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff16151593830193909352600190930154808316606083015292909204166080820152610d88565b90505b92915050565b604051806060016040528060238152602001612d096023913981565b6103a6610e3a565b60005b82518110156104845760008382815181106103c6576103c661288e565b602002602001015160200151905060008483815181106103e8576103e861288e565b6020908102919091018101515167ffffffffffffffff811660009081526004909252604090912090915061041c9083610ebb565b1561047a576040805167ffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff841660208201527f530cabd30786b7235e124a6c0db77e0b685ef22813b1fe87554247f404eb8ed6910160405180910390a15b50506001016103a9565b5060005b81518110156105c55760008282815181106104a5576104a561288e565b602002602001015160000151905060008383815181106104c7576104c761288e565b6020026020010151602001519050600082602001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061051857508151155b1561054f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825167ffffffffffffffff81166000908152600460205260409020610575908385610edd565b156105b6577fad72a792d2a307f400c278be7deaeec6964276783304580cdc4e905436b8d5c58184846040516105ad939291906128bd565b60405180910390a15b50505050806001019050610488565b505050565b60606105d66002610f0a565b905090565b67ffffffffffffffff81166000908152600460205260408120606091829161060290610f17565b90508067ffffffffffffffff81111561061d5761061d611eb8565b604051908082528060200260200182016040528015610646578160200160208202803683370190505b5092508067ffffffffffffffff81111561066257610662611eb8565b60405190808252806020026020018201604052801561069557816020015b60608152602001906001900390816106805790505b50915060005b818110156107415767ffffffffffffffff8516600090815260046020526040812081906106c89084610f22565b91509150818684815181106106df576106df61288e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508085848151811061072c5761072c61288e565b6020908102919091010152505060010161069b565b5050915091565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610852610e3a565b6102ba81610f41565b610863610c3c565b6108cc826108746040840184612906565b808060200260200160405190810160405280939291908181526020016000905b828210156108c0576108b16040830286013681900381019061296e565b81526020019060010190610894565b50505050506001610c81565b5050565b6108d8610e3a565b6102ba816110cd565b6108e9610e3a565b6102ba81611193565b6108fa610e3a565b60005b81518110156108cc57600082828151811061091a5761091a61288e565b6020908102919091010151604081015181519192509067ffffffffffffffff8116600003610974576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160006109858383610d58565b8054909150700100000000000000000000000000000000900463ffffffff16600003610bde576109b6846000611288565b6040805160a081018252602080870180516fffffffffffffffffffffffffffffffff908116845263ffffffff421692840192909252875115158385015251811660608301529186015190911660808201528215610af75767ffffffffffffffff8416600090815260066020908152604091829020835160028201805493860151948601516fffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009095169490941770010000000000000000000000000000000063ffffffff9096168602177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000941515949094029390931790925560608401516080850151908316921690920217600390910155610bd8565b67ffffffffffffffff84166000908152600660209081526040918290208351815492850151938501516fffffffffffffffffffffffffffffffff9182167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931770010000000000000000000000000000000063ffffffff9095168502177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000093151593909302929092178155606084015160808501519083169216909202176001909101555b50610be8565b610be881856113c1565b8267ffffffffffffffff167ff14a5415ce6988a9e870a85fff0b9d7b7dd79bbc228cb63cad610daf6f7b6b978386604051610c2492919061298a565b60405180910390a250505050508060010190506108fd565b610c47600233611570565b610c7f576040517fd86ad9cf0000000000000000000000000000000000000000000000000000000081523360048201526024016107c5565b565b6000610c8d8483610d58565b805490915074010000000000000000000000000000000000000000900460ff1615610d52576000805b8451811015610d3d57610d01858281518110610cd457610cd461288e565b6020908102919091018101515167ffffffffffffffff89166000908152600490925260409091209061159f565b15610d3557610d28858281518110610d1b57610d1b61288e565b60200260200101516115c1565b610d3290836129fd565b91505b600101610cb6565b508015610d5057610d50828260006116fd565b505b50505050565b67ffffffffffffffff821660009081526006602052604081208215610d8157600201905061037c565b905061037c565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152610e1682606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642610dfa9190612a10565b85608001516fffffffffffffffffffffffffffffffff16611a80565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107c5565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611aa8565b6000610f008473ffffffffffffffffffffffffffffffffffffffff851684611acc565b90505b9392505050565b60606000610f0383611af1565b600061037c82611b4d565b600060608180610f328686611b58565b909450925050505b9250929050565b602081015160005b8151811015610fdc576000828281518110610f6657610f6661288e565b60200260200101519050610f84816002611c1590919063ffffffff16565b15610fd35760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101610f49565b50815160005b8151811015610d52576000828281518110610fff57610fff61288e565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361106f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61107a600282611c37565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101610fe2565b73ffffffffffffffffffffffffffffffffffffffff811661111a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac9060200160405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff821603611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107c5565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b81511561134f5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff161015806112de575060408201516fffffffffffffffffffffffffffffffff16155b1561131757816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016107c59190612a23565b80156108cc576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611388575060208201516fffffffffffffffffffffffffffffffff1615155b156108cc57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107c59190612a23565b81546000906113ea90700100000000000000000000000000000000900463ffffffff1642612a10565b9050801561148c5760018301548354611432916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416611a80565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546114b2916fffffffffffffffffffffffffffffffff9081169116611c59565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611563908490612a23565b60405180910390a1505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610379565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611c6f565b60055481516040517fd02641a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526000928392169063d02641a0906024016040805180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116599190612a5f565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166000036116cf5782516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107c5565b6020830151610f03907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690611c7b565b825474010000000000000000000000000000000000000000900460ff161580611724575081155b1561172e57505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061177490700100000000000000000000000000000000900463ffffffff1642612a10565b9050801561183457818311156117b6576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546117f09083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611a80565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156118eb5773ffffffffffffffffffffffffffffffffffffffff8416611893576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016107c5565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016107c5565b848310156119fe5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061192f9082612a10565b611939878a612a10565b61194391906129fd565b61194d9190612aca565b905073ffffffffffffffffffffffffffffffffffffffff86166119a6576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016107c5565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016107c5565b611a088584612a10565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b6000611a9f85611a908486612b05565b611a9a90876129fd565b611c59565b95945050505050565b60008181526002830160205260408120611ac29082611e6a565b6103798383611cb8565b60008281526002840160205260408120611ae68382612bbf565b50610f008484611cc4565b606081600001805480602002602001604051908101604052809291908181526020018280548015611b4157602002820191906000526020600020905b815481526020019060010190808311611b2d575b50505050509050919050565b600061037c82611cd0565b6000606081611b678585611cda565b60008181526002870160205260409020805491925082918190611b8990612b1c565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb590612b1c565b8015611c025780601f10611bd757610100808354040283529160200191611c02565b820191906000526020600020905b815481529060010190602001808311611be557829003601f168201915b5050505050905092509250509250929050565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611ce6565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611dd9565b6000818310611c685781610379565b5090919050565b60006103798383611e28565b6000670de0b6b3a7640000611cae837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616612b05565b6103799190612aca565b60006103798383611ce6565b60006103798383611dd9565b600061037c825490565b60006103798383611e40565b60008181526001830160205260408120548015611dcf576000611d0a600183612a10565b8554909150600090611d1e90600190612a10565b9050818114611d83576000866000018281548110611d3e57611d3e61288e565b9060005260206000200154905080876000018481548110611d6157611d6161288e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d9457611d94612cd9565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061037c565b600091505061037c565b6000818152600183016020526040812054611e205750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561037c565b50600061037c565b60008181526001830160205260408120541515610379565b6000826000018281548110611e5757611e5761288e565b9060005260206000200154905092915050565b508054611e7690612b1c565b6000825580601f10611e86575050565b601f0160209004906000526020600020908101906102ba91905b80821115611eb45760008155600101611ea0565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611f0a57611f0a611eb8565b60405290565b60405160a0810167ffffffffffffffff81118282101715611f0a57611f0a611eb8565b6040516060810167ffffffffffffffff81118282101715611f0a57611f0a611eb8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f9d57611f9d611eb8565b604052919050565b803567ffffffffffffffff81168114611fbd57600080fd5b919050565b600082601f830112611fd357600080fd5b813567ffffffffffffffff811115611fed57611fed611eb8565b61201e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611f56565b81815284602083860101111561203357600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111561206a5761206a611eb8565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbd57600080fd5b6000604082840312156120aa57600080fd5b6120b2611ee7565b90506120bd82612074565b81526020820135602082015292915050565b600082601f8301126120e057600080fd5b813560206120f56120f083612050565b611f56565b8083825260208201915060208460061b87010193508684111561211757600080fd5b602086015b8481101561213c5761212e8882612098565b83529183019160400161211c565b509695505050505050565b60006020828403121561215957600080fd5b813567ffffffffffffffff8082111561217157600080fd5b9083019060a0828603121561218557600080fd5b61218d611f10565b8235815261219d60208401611fa5565b60208201526040830135828111156121b457600080fd5b6121c087828601611fc2565b6040830152506060830135828111156121d857600080fd5b6121e487828601611fc2565b6060830152506080830135828111156121fc57600080fd5b612208878286016120cf565b60808301525095945050505050565b80358015158114611fbd57600080fd5b6000806040838503121561223a57600080fd5b61224383611fa5565b915061225160208401612217565b90509250929050565b6000815180845260005b8181101561228057602081850181015186830182015201612264565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610379602083018461225a565b6000604082840312156122e357600080fd5b6122eb611ee7565b90506122f682611fa5565b815261230460208301612074565b602082015292915050565b600082601f83011261232057600080fd5b813560206123306120f083612050565b82815260059290921b8401810191818101908684111561234f57600080fd5b8286015b8481101561213c57803567ffffffffffffffff808211156123745760008081fd5b81890191506060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156123ad5760008081fd5b6123b5611ee7565b6123c18c8986016122d1565b81529083013590828211156123d65760008081fd5b6123e48c8984870101611fc2565b818901528652505050918301918301612353565b600080604080848603121561240c57600080fd5b833567ffffffffffffffff8082111561242457600080fd5b818601915086601f83011261243857600080fd5b813560206124486120f083612050565b8083825260208201915060208460061b87010193508a84111561246a57600080fd5b6020860195505b83861015612492576124838b876122d1565b82529486019490820190612471565b975050505060208601359250808311156124ab57600080fd5b50506124b98582860161230f565b9150509250929050565b60008151808452602080850194506020840160005b8381101561250a57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016124d8565b509495945050505050565b60208152600061037960208301846124c3565b60006020828403121561253a57600080fd5b61037982611fa5565b60408152600061255660408301856124c3565b6020838203818501528185518084528284019150828160051b85010183880160005b838110156125c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526125b283835161225a565b94860194925090850190600101612578565b50909998505050505050505050565b600082601f8301126125e457600080fd5b813560206125f46120f083612050565b8083825260208201915060208460051b87010193508684111561261657600080fd5b602086015b8481101561213c5761262c81612074565b835291830191830161261b565b60006020828403121561264b57600080fd5b813567ffffffffffffffff8082111561266357600080fd5b908301906040828603121561267757600080fd5b61267f611ee7565b82358281111561268e57600080fd5b61269a878286016125d3565b8252506020830135828111156126af57600080fd5b6126bb878286016125d3565b60208301525095945050505050565b600080604083850312156126dd57600080fd5b6126e683611fa5565b9150602083013567ffffffffffffffff81111561270257600080fd5b830160a0818603121561271457600080fd5b809150509250929050565b60006020828403121561273157600080fd5b61037982612074565b80356fffffffffffffffffffffffffffffffff81168114611fbd57600080fd5b6000602080838503121561276d57600080fd5b823567ffffffffffffffff81111561278457600080fd5b8301601f8101851361279557600080fd5b80356127a36120f082612050565b81815260a091820283018401918482019190888411156127c257600080fd5b938501935b8385101561288257848903818112156127e05760008081fd5b6127e8611f33565b6127f187611fa5565b81526127fe888801612217565b8882015260406060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0850112156128365760008081fd5b61283e611f33565b935061284b828a01612217565b8452612858818a0161273a565b8a850152506128696080890161273a565b83820152810191909152835293840193918501916127c7565b50979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff841681526060602082015260006128e0606083018561225a565b905073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261293b57600080fd5b83018035915067ffffffffffffffff82111561295657600080fd5b6020019150600681901b3603821315610f3a57600080fd5b60006040828403121561298057600080fd5b6103798383612098565b821515815260808101610f0360208301848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561037c5761037c6129ce565b8181038181111561037c5761037c6129ce565b6060810161037c82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b600060408284031215612a7157600080fd5b612a79611ee7565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114612aa557600080fd5b8152602083015163ffffffff81168114612abe57600080fd5b60208201529392505050565b600082612b00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761037c5761037c6129ce565b600181811c90821680612b3057607f821691505b602082108103612b69577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156105c5576000816000526020600020601f850160051c81016020861015612b985750805b601f850160051c820191505b81811015612bb757828155600101612ba4565b505050505050565b815167ffffffffffffffff811115612bd957612bd9611eb8565b612bed81612be78454612b1c565b84612b6f565b602080601f831160018114612c405760008415612c0a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612bb7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612c8d57888601518255948401946001909101908401612c6e565b5085821015612cc957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4d756c7469416767726567617465526174654c696d6974657220312e362e302d646576a164736f6c6343000818000a", } var MultiAggregateRateLimiterABI = MultiAggregateRateLimiterMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/onramp/onramp.go b/core/gethwrappers/ccip/generated/onramp/onramp.go index 9a7ca14fc59..a8f35f65319 100644 --- a/core/gethwrappers/ccip/generated/onramp/onramp.go +++ b/core/gethwrappers/ccip/generated/onramp/onramp.go @@ -100,7 +100,7 @@ type OnRampStaticConfig struct { } var OnRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"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\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"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\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"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\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowlistConfigArgs[]\",\"name\":\"allowlistConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowlistUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"configuredAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"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\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"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\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"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\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"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\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"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\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowlistConfigArgs[]\",\"name\":\"allowlistConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowlistUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"configuredAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"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\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"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\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", Bin: "0x6101006040523480156200001257600080fd5b50604051620043173803806200431783398101604081905262000035916200076e565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d81620003e0565b5050506200086f565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060608101516001600160a01b0316155b8062000261575080602001515b1562000280576040516306b7c75960e31b815260040160405180910390fd5b8051600280546020808501511515600160a01b026001600160a81b03199092166001600160a01b039485161791909117909155604080840151600380549185166001600160a01b0319928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251808301845291516001600160401b0316825260a05185169382019390935260c05184168183015260e05190931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191620003d591849082516001600160401b031681526020808401516001600160a01b03908116828401526040858101518216818501526060958601518216868501528451821660808086019190915292850151151560a0850152840151811660c084015293830151841660e0830152909101519091166101008201526101200190565b60405180910390a150565b60005b81518110156200053057600082828151811062000404576200040462000859565b60200260200101519050600083838151811062000425576200042562000859565b6020026020010151600001519050806001600160401b03166000036200046a5760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6001600160401b0381811660008181526006602090815260409182902086820151815488850151600160401b600160e81b031990911669010000000000000000006001600160a01b0390931692830260ff60401b19161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a2505050806001019050620003e3565b5050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156200056f576200056f62000534565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620005a057620005a062000534565b604052919050565b80516001600160401b0381168114620005c057600080fd5b919050565b6001600160a01b0381168114620005db57600080fd5b50565b80518015158114620005c057600080fd5b600060a082840312156200060257600080fd5b60405160a081016001600160401b038111828210171562000627576200062762000534565b806040525080915082516200063c81620005c5565b81526200064c60208401620005de565b602082015260408301516200066181620005c5565b604082015260608301516200067681620005c5565b606082015260808301516200068b81620005c5565b6080919091015292915050565b600082601f830112620006aa57600080fd5b815160206001600160401b03821115620006c857620006c862000534565b620006d8818360051b0162000575565b82815260609283028501820192828201919087851115620006f857600080fd5b8387015b85811015620007615781818a031215620007165760008081fd5b620007206200054a565b6200072b82620005a8565b8152858201516200073c81620005c5565b8187015260406200074f838201620005de565b908201528452928401928101620006fc565b5090979650505050505050565b60008060008385036101408112156200078657600080fd5b60808112156200079557600080fd5b50604051608081016001600160401b038082118383101715620007bc57620007bc62000534565b81604052620007cb87620005a8565b835260208701519150620007df82620005c5565b81602084015260408701519150620007f782620005c5565b816040840152606087015191506200080f82620005c5565b816060840152829550620008278860808901620005ef565b94506101208701519250808311156200083f57600080fd5b50506200084f8682870162000698565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051613a2f620008e860003960008181610217015281816109f40152611c290152600081816101db015281816115ee0152611c0201526000818161019f015281816106020152611bd801526000818161016f015281816111750152818161170b0152611bb40152613a2f6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806379ba5097116100b2578063c9b146b311610081578063df0aa9e911610066578063df0aa9e914610558578063f2fde38b1461056b578063fbca3b741461057e57600080fd5b8063c9b146b3146104f8578063d77d5ed01461050b57600080fd5b806379ba5097146104855780638da5cb5b1461048d5780639041be3d146104ab578063972b4612146104d757600080fd5b806327e936f11161010957806348a98aa4116100ee57806348a98aa4146103045780636def4ce71461033c5780637437ff9f146103db57600080fd5b806327e936f1146102e95780633a019940146102fc57600080fd5b806306285c691461013b578063181f5a771461026a57806320487ded146102b35780632716072b146102d4575b600080fd5b61025460408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b604051610261919061271f565b60405180910390f35b6102a66040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b60405161026191906127e4565b6102c66102c1366004612825565b61059e565b604051908152602001610261565b6102e76102e2366004612993565b610757565b005b6102e76102f7366004612a81565b61076b565b6102e761077c565b610317610312366004612b19565b6109ac565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610261565b61039f61034a366004612b52565b67ffffffffffffffff9081166000908152600660205260409020549081169168010000000000000000820460ff16916901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6040805167ffffffffffffffff9094168452911515602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610261565b6104786040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff80821683527401000000000000000000000000000000000000000090910460ff161515602083015260035481169282019290925260045482166060820152600554909116608082015290565b6040516102619190612b6f565b6102e7610a61565b60005473ffffffffffffffffffffffffffffffffffffffff16610317565b6104be6104b9366004612b52565b610b5e565b60405167ffffffffffffffff9091168152602001610261565b6104ea6104e5366004612b52565b610b87565b604051610261929190612c1a565b6102e7610506366004612c35565b610bcb565b610317610519366004612b52565b67ffffffffffffffff166000908152600660205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6102c6610566366004612caa565b610ee2565b6102e7610579366004612d16565b6117f0565b61059161058c366004612b52565b611801565b6040516102619190612d33565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066d9190612d46565b156106b5576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd9061070d9086908690600401612e6c565b602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190612fb5565b90505b92915050565b61075f611835565b610768816118b8565b50565b610773611835565b61076881611a5b565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa1580156107eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108319190810190612fce565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b82518110156109a757600083828151811061086d5761086d61305d565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c9190612fb5565b9050801561099d5761093573ffffffffffffffffffffffffffffffffffffffff83168583611c8b565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e8360405161099491815260200190565b60405180910390a35b5050600101610850565b505050565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e919061308c565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016106ac565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff8082166000908152600660205260408120549091610751911660016130d8565b67ffffffffffffffff8116600090815260066020526040812080546060916801000000000000000090910460ff1690610bc290600101611d18565b91509150915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c3b5760055473ffffffffffffffffffffffffffffffffffffffff163314610c3b576040517f905d7d9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109a7576000838383818110610c5a57610c5a61305d565b9050602002810190610c6c91906130f9565b610c75906131aa565b805167ffffffffffffffff1660009081526006602090815260409182902090830151815490151568010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff90911617815590820151519192509015610e3557816020015115610df45760005b826040015151811015610da457600083604001518281518110610d0e57610d0e61305d565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d8d5783516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016106ac565b610d9a6001840182611d2c565b5050600101610ce9565b50816000015167ffffffffffffffff167f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc32818360400151604051610de79190612d33565b60405180910390a2610e35565b81516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016106ac565b60005b826060015151811015610e8157610e7883606001518281518110610e5e57610e5e61305d565b602002602001015183600101611d4e90919063ffffffff16565b50600101610e38565b5060608201515115610ed857816000015167ffffffffffffffff167fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d4215868360600151604051610ecf9190612d33565b60405180910390a25b5050600101610c3e565b60025460009074010000000000000000000000000000000000000000900460ff1615610f3a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905567ffffffffffffffff8516600090815260066020526040902073ffffffffffffffffffffffffffffffffffffffff8316610fdf576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900460ff1615611050576110026001820184611d70565b611050576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016106ac565b80546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146110ad576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff168015611153576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690611120908a908a90600401612e6c565b600060405180830381600087803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b505050505b50604080516101c081019091526000610120820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101408501528981166101608501528454929392839291610180840191879187916111c1911661325b565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168152602001600067ffffffffffffffff1681525081526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018780602001906112359190613282565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016112798880613282565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051602081810183529381529284019290925250016112d56080890160608a01612d16565b73ffffffffffffffffffffffffffffffffffffffff1681526020018681526020016000815260200187806040019061130d91906132e7565b905067ffffffffffffffff81111561132757611327612875565b6040519080825280602002602001820160405280156113a057816020015b61138d6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816113455790505b509052905060006113b460408801886132e7565b808060200260200160405190810160405280939291908181526020016000905b82821015611400576113f16040830286013681900381019061334f565b815260200190600101906113d4565b5050505050905060005b61141760408901896132e7565b90508110156114b1576114878282815181106114355761143561305d565b60209081029190910101518a61144b8b80613282565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250611d9f915050565b836101000151828151811061149e5761149e61305d565b602090810291909101015260010161140a565b50600254600090606090819073ffffffffffffffffffffffffffffffffffffffff1663430d138c8c6114e860808e018e8601612d16565b8c8e80608001906114f99190613282565b8b61010001518b6040518863ffffffff1660e01b8152600401611522979695949392919061346c565b600060405180830381865afa15801561153f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611585919081019061359e565b60e08901939093529094509250905082611660576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015611637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165b9190613691565b611663565b60005b855167ffffffffffffffff909116608091820152850182905260005b856101000151518110156116d55781818151811061169f5761169f61305d565b602002602001015186610100015182815181106116be576116be61305d565b60209081029190910101516080015260010161167f565b50604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c16606082015230608082015261176590869060a001604051602081830303815290604052805190602001206120b6565b85515284516060015160405167ffffffffffffffff918216918d16907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f32906117ae9089906136ae565b60405180910390a35050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505051519150505b949350505050565b6117f8611835565b61076881612208565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633146118b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016106ac565b565b60005b8151811015611a575760008282815181106118d8576118d861305d565b6020026020010151905060008383815181106118f6576118f661305d565b60200260200101516000015190508067ffffffffffffffff16600003611954576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016106ac565b67ffffffffffffffff818116600081815260066020908152604091829020868201518154888501517fffffff000000000000000000000000000000000000000000ffffffffffffffff909116690100000000000000000073ffffffffffffffffffffffffffffffffffffffff9093169283027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a25050508060010190506118bb565b5050565b805173ffffffffffffffffffffffffffffffffffffffff161580611a975750606081015173ffffffffffffffffffffffffffffffffffffffff16155b80611aa3575080602001515b15611ada576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160028054602080850151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff9485161791909117909155604080840151600380549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251918201835267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001682527f00000000000000000000000000000000000000000000000000000000000000008516938201939093527f00000000000000000000000000000000000000000000000000000000000000008416818301527f000000000000000000000000000000000000000000000000000000000000000090931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191611c80918490613806565b60405180910390a150565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526109a79084906122fd565b60606000611d2583612409565b9392505050565b600061074e8373ffffffffffffffffffffffffffffffffffffffff8416612465565b600061074e8373ffffffffffffffffffffffffffffffffffffffff84166124b4565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561074e565b611de76040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8460200151600003611e25576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e358587600001516109ac565b905073ffffffffffffffffffffffffffffffffffffffff81161580611f0557506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611edf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f039190612d46565b155b15611f575785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016106ac565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b8152600401611ff691906138b4565b6000604051808303816000875af1158015612015573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261205b919081019061392a565b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff90941684528151602080860191909152918201518482015288820151606085015280519182019052600081526080830152509050949350505050565b60008060001b8284602001518560000151606001518660000151608001518760a001518860c0015160405160200161213495949392919073ffffffffffffffffffffffffffffffffffffffff958616815267ffffffffffffffff94851660208201529290931660408301529092166060830152608082015260a00190565b6040516020818303038152906040528051906020012085606001518051906020012086604001518051906020012087610100015160405160200161217891906139bb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808d0151805190840120928501999099529183019690965260608201949094529485019190915260a084015260c083015260e08201526101000160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff821603612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016106ac565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061235f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166125ae9092919063ffffffff16565b8051909150156109a7578080602001905181019061237d9190612d46565b6109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106ac565b60608160000180548060200260200160405190810160405280929190818152602001828054801561245957602002820191906000526020600020905b815481526020019060010190808311612445575b50505050509050919050565b60008181526001830160205260408120546124ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610751565b506000610751565b6000818152600183016020526040812054801561259d5760006124d86001836139ce565b85549091506000906124ec906001906139ce565b905080821461255157600086600001828154811061250c5761250c61305d565b906000526020600020015490508087600001848154811061252f5761252f61305d565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612562576125626139e1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610751565b6000915050610751565b5092915050565b60606117e88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125e29190613a10565b60006040518083038185875af1925050503d806000811461261f576040519150601f19603f3d011682016040523d82523d6000602084013e612624565b606091505b509150915061263587838387612640565b979650505050505050565b606083156126d65782516000036126cf5773ffffffffffffffffffffffffffffffffffffffff85163b6126cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ac565b50816117e8565b6117e883838151156126eb5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ac91906127e4565b60808101610751828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b83811015612791578181015183820152602001612779565b50506000910152565b600081518084526127b2816020860160208601612776565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061074e602083018461279a565b67ffffffffffffffff8116811461076857600080fd5b600060a0828403121561281f57600080fd5b50919050565b6000806040838503121561283857600080fd5b8235612843816127f7565b9150602083013567ffffffffffffffff81111561285f57600080fd5b61286b8582860161280d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156128c7576128c7612875565b60405290565b6040805190810167ffffffffffffffff811182821017156128c7576128c7612875565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561293757612937612875565b604052919050565b600067ffffffffffffffff82111561295957612959612875565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461076857600080fd5b801515811461076857600080fd5b600060208083850312156129a657600080fd5b823567ffffffffffffffff8111156129bd57600080fd5b8301601f810185136129ce57600080fd5b80356129e16129dc8261293f565b6128f0565b81815260609182028301840191848201919088841115612a0057600080fd5b938501935b83851015612a655780858a031215612a1d5760008081fd5b612a256128a4565b8535612a30816127f7565b815285870135612a3f81612963565b81880152604086810135612a5281612985565b9082015283529384019391850191612a05565b50979650505050505050565b8035612a7c81612963565b919050565b600060a08284031215612a9357600080fd5b60405160a0810181811067ffffffffffffffff82111715612ab657612ab6612875565b6040528235612ac481612963565b81526020830135612ad481612985565b60208201526040830135612ae781612963565b60408201526060830135612afa81612963565b60608201526080830135612b0d81612963565b60808201529392505050565b60008060408385031215612b2c57600080fd5b8235612b37816127f7565b91506020830135612b4781612963565b809150509250929050565b600060208284031215612b6457600080fd5b8135611d25816127f7565b60a08101610751828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152806060830151166060840152806080830151166080840152505050565b60008151808452602080850194506020840160005b83811015612c0f57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612bdd565b509495945050505050565b82151581526040602082015260006117e86040830184612bc8565b60008060208385031215612c4857600080fd5b823567ffffffffffffffff80821115612c6057600080fd5b818501915085601f830112612c7457600080fd5b813581811115612c8357600080fd5b8660208260051b8501011115612c9857600080fd5b60209290920196919550909350505050565b60008060008060808587031215612cc057600080fd5b8435612ccb816127f7565b9350602085013567ffffffffffffffff811115612ce757600080fd5b612cf38782880161280d565b935050604085013591506060850135612d0b81612963565b939692955090935050565b600060208284031215612d2857600080fd5b8135611d2581612963565b60208152600061074e6020830184612bc8565b600060208284031215612d5857600080fd5b8151611d2581612985565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612d9857600080fd5b830160208101925035905067ffffffffffffffff811115612db857600080fd5b803603821315612dc757600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612c0f578135612e3a81612963565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612e27565b600067ffffffffffffffff808516835260406020840152612e8d8485612d63565b60a06040860152612ea260e086018284612dce565b915050612eb26020860186612d63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878503016060880152612ee8848385612dce565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612f2157600080fd5b60209288019283019235915084821115612f3a57600080fd5b8160061b3603831315612f4c57600080fd5b80878503016080880152612f61848385612e17565b9450612f6f60608901612a71565b73ffffffffffffffffffffffffffffffffffffffff811660a08901529350612f9a6080890189612d63565b94509250808786030160c08801525050612635838383612dce565b600060208284031215612fc757600080fd5b5051919050565b60006020808385031215612fe157600080fd5b825167ffffffffffffffff811115612ff857600080fd5b8301601f8101851361300957600080fd5b80516130176129dc8261293f565b81815260059190911b8201830190838101908783111561303657600080fd5b928401925b8284101561263557835161304e81612963565b8252928401929084019061303b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561309e57600080fd5b8151611d2581612963565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156125a7576125a76130a9565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261312d57600080fd5b9190910192915050565b600082601f83011261314857600080fd5b813560206131586129dc8361293f565b8083825260208201915060208460051b87010193508684111561317a57600080fd5b602086015b8481101561319f57803561319281612963565b835291830191830161317f565b509695505050505050565b6000608082360312156131bc57600080fd5b6040516080810167ffffffffffffffff82821081831117156131e0576131e0612875565b81604052843591506131f1826127f7565b90825260208401359061320382612985565b816020840152604085013591508082111561321d57600080fd5b61322936838701613137565b6040840152606085013591508082111561324257600080fd5b5061324f36828601613137565b60608301525092915050565b600067ffffffffffffffff808316818103613278576132786130a9565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126132b757600080fd5b83018035915067ffffffffffffffff8211156132d257600080fd5b602001915036819003821315612dc757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261331c57600080fd5b83018035915067ffffffffffffffff82111561333757600080fd5b6020019150600681901b3603821315612dc757600080fd5b60006040828403121561336157600080fd5b6133696128cd565b823561337481612963565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b8481101561345f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff82511685528582015181878701526134088287018261279a565b91505060408083015186830382880152613422838261279a565b9250505060608083015181870152506080808301519250858203818701525061344b818361279a565b9a86019a94505050908301906001016133a6565b5090979650505050505050565b67ffffffffffffffff881681526000602073ffffffffffffffffffffffffffffffffffffffff808a1682850152604089604086015260c060608601526134b660c08601898b612dce565b85810360808701526134c88189613389565b86810360a0880152875180825285890192509085019060005b818110156135085783518051871684528701518784015292860192918401916001016134e1565b50909e9d5050505050505050505050505050565b600082601f83011261352d57600080fd5b815167ffffffffffffffff81111561354757613547612875565b61357860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128f0565b81815284602083860101111561358d57600080fd5b6117e8826020830160208701612776565b600080600080608085870312156135b457600080fd5b845193506020808601516135c781612985565b604087015190945067ffffffffffffffff808211156135e557600080fd5b6135f189838a0161351c565b9450606088015191508082111561360757600080fd5b818801915088601f83011261361b57600080fd5b81516136296129dc8261293f565b81815260059190911b8301840190848101908b83111561364857600080fd5b8585015b83811015613680578051858111156136645760008081fd5b6136728e89838a010161351c565b84525091860191860161364c565b50989b979a50959850505050505050565b6000602082840312156136a357600080fd5b8151611d25816127f7565b602081526136ff60208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b6000602083015161372860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e08501526137456101c085018361279a565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610100818786030181880152613783858461279a565b94506080880151925081878603016101208801526137a1858461279a565b945060a088015192506137cd61014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e08801516101808801528701518685039091018387015290506137fc8382613389565b9695505050505050565b610120810161385e828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff9081166080848101919091526020850151151560a08501526040850151821660c08501526060850151821660e085015284015116610100830152611d25565b602081526000825160a060208401526138d060c084018261279a565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b60006020828403121561393c57600080fd5b815167ffffffffffffffff8082111561395457600080fd5b908301906040828603121561396857600080fd5b6139706128cd565b82518281111561397f57600080fd5b61398b8782860161351c565b8252506020830151828111156139a057600080fd5b6139ac8782860161351c565b60208301525095945050505050565b60208152600061074e6020830184613389565b81810381811115610751576107516130a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000825161312d81846020870161277656fea164736f6c6343000818000a", } 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 6a1d8342103..74d1224a1c6 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 @@ -6,18 +6,18 @@ ccip_encoding_utils: ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEnc ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin 8c603a0de19c4649d69bdd18774ee3b5edfd24c696aabdb7cdb982bd8e304829 ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 5db06eb7fad07ec0d1ae5ac8d39f61398687fe3cda8290716ce0cd8fb9dca1ab ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de -fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 3eb799751e92bb09cf94c8ad9245c620026c3a8a0a0fffee8c3921f8fcd37eb8 +fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 9e0491fe2117abe5538b7297ec6a52307bf3c187fce1409721a89631385da9fc lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin e6a8ec9e8faccb1da7d90e0f702ed72975964f97dc3222b54cfcca0a0ba3fea2 maybe_revert_message_receiver: ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin d73956c26232ebcc4a5444429fa99cbefed960e323be9b5a24925885c2e477d5 message_hasher: ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.abi ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.bin ec2d3a92348d8e7b8f0d359b62a45157b9d2c750c01fbcf991826c4392f6e218 mock_usdc_token_messenger: ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.bin d976651d36b33ac2196b32b9d2f4fa6690c6a18d41b621365659fce1c1d1e737 mock_usdc_token_transmitter: ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.bin be0dbc3e475741ea0b7a54ec2b935a321b428baa9f4ce18180a87fb38bb87de2 mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.abi ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.bin 518e19efa2ff52b0fefd8e597b05765317ee7638189bfe34ca43de2f6599faf4 -multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin 0b541232e49727e947dc164eadf35963c66e67576f21baa0ecaa06a8833148ed +multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin cc63ca92012b7473f77a1c49f77ee20f9242bbecaad2c73c1dc581b447a77e91 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 eb234dfb57c6dc64f83cfbf9d78a27939a7241fd0de41342d41c919c156a3633 offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin c136eccc974484bb87e472fb778f6a34f847abf57f1819766e669545bd67fbba -onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4766632d0938b33bfa04f30a5e6b301a944b6920dc1101ce8230e6b23706e898 +onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin b241bea65902828c3614a9ec85e0320a65d986e22ef942ddcb41fe67bd47e888 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b 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 695b4798f1e9d6f1442f7e6d7c499d23464d9237f325effde132913c404607f7 diff --git a/core/gethwrappers/generated/chain_reader_tester/chain_reader_tester.go b/core/gethwrappers/generated/chain_reader_tester/chain_reader_tester.go index aa76f2a79d4..407858373c9 100644 --- a/core/gethwrappers/generated/chain_reader_tester/chain_reader_tester.go +++ b/core/gethwrappers/generated/chain_reader_tester/chain_reader_tester.go @@ -30,6 +30,11 @@ var ( _ = abi.ConvertType ) +type AccountStruct struct { + Account common.Address + AccountStr common.Address +} + type InnerDynamicTestStruct struct { IntVal int64 S string @@ -55,8 +60,7 @@ type TestStruct struct { DifferentField string OracleId uint8 OracleIds [32]uint8 - Account common.Address - AccountStr common.Address + AccountStruct AccountStruct Accounts []common.Address BigField *big.Int NestedDynamicStruct MidLevelDynamicTestStruct @@ -64,8 +68,8 @@ type TestStruct struct { } var ChainReaderTesterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"StaticBytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"Accounts\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"}],\"name\":\"Triggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"fieldHash\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"field\",\"type\":\"string\"}],\"name\":\"TriggeredEventWithDynamicTopic\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field1\",\"type\":\"int32\"},{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field2\",\"type\":\"int32\"},{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field3\",\"type\":\"int32\"}],\"name\":\"TriggeredWithFourTopics\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"field1\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint8[32]\",\"name\":\"field2\",\"type\":\"uint8[32]\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"field3\",\"type\":\"bytes32\"}],\"name\":\"TriggeredWithFourTopicsWithHashed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accountStr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"}],\"name\":\"addTestStruct\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlterablePrimitiveValue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDifferentPrimitiveValue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"}],\"name\":\"getElementAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"Field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"DifferentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"OracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"OracleIds\",\"type\":\"uint8[32]\"},{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"Accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"BigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"NestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"NestedStaticStruct\",\"type\":\"tuple\"}],\"internalType\":\"structTestStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrimitiveValue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSliceValue\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accountStr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"}],\"name\":\"returnSeen\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"Field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"DifferentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"OracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"OracleIds\",\"type\":\"uint8[32]\"},{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"Accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"BigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"NestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"NestedStaticStruct\",\"type\":\"tuple\"}],\"internalType\":\"structTestStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"setAlterablePrimitiveValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"},{\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accountStr\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"}],\"name\":\"triggerEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"field\",\"type\":\"string\"}],\"name\":\"triggerEventWithDynamicTopic\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"val1\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"val2\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"val3\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"val4\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"val5\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"val6\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"val7\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"raw\",\"type\":\"bytes\"}],\"name\":\"triggerStaticBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field1\",\"type\":\"int32\"},{\"internalType\":\"int32\",\"name\":\"field2\",\"type\":\"int32\"},{\"internalType\":\"int32\",\"name\":\"field3\",\"type\":\"int32\"}],\"name\":\"triggerWithFourTopics\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"field1\",\"type\":\"string\"},{\"internalType\":\"uint8[32]\",\"name\":\"field2\",\"type\":\"uint8[32]\"},{\"internalType\":\"bytes32\",\"name\":\"field3\",\"type\":\"bytes32\"}],\"name\":\"triggerWithFourTopicsWithHashed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600180548082018255600082905260048082047fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6908101805460086003958616810261010090810a8088026001600160401b0391820219909416939093179093558654808801909755848704909301805496909516909202900a918202910219909216919091179055612077806100a96000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063679004a41161008c578063ab5e0b3811610066578063ab5e0b38146101df578063dbfd7332146101fc578063ef4e1ced1461020f578063fbe9fbf61461021657600080fd5b8063679004a41461016e5780636c9a43b614610183578063a90e1998146101cc57600080fd5b80633272b66c116100bd5780633272b66c1461013557806338e372ba1461014857806351f3f54d1461015b57600080fd5b8063236aadd6146100e45780632c45576f1461010d57806331a2c37914610120575b600080fd5b6100f76100f2366004611041565b610228565b60405161010491906112b4565b60405180910390f35b6100f761011b36600461141d565b610356565b61013361012e366004611436565b6106c6565b005b610133610143366004611546565b610723565b610133610156366004611041565b610778565b6101336101693660046116a0565b610b60565b610176610bd4565b6040516101049190611751565b61013361019136600461179f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6101336101da3660046117e1565b610c60565b6107c65b60405167ffffffffffffffff9091168152602001610104565b61013361020a366004611896565b610cba565b60036101e3565b60025467ffffffffffffffff166101e3565b610230610cf7565b6040518061014001604052808e60030b81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060ff8c166020808301919091526040805161040081810183529190930192918d9183908390808284376000920191909152505050815273ffffffffffffffffffffffffffffffffffffffff808b16602080840191909152908a1660408084019190915280518983028181018401909252898152606090930192918a918a91829190850190849080828437600092019190915250505090825250601786900b602082015260400161032d8561191b565b8152602001610341368590038501856119b9565b905290505b9c9b505050505050505050505050565b61035e610cf7565b600061036b600184611a49565b8154811061037b5761037b611a83565b6000918252602091829020604080516101408101909152600d90920201805460030b825260018101805492939192918401916103b690611ab2565b80601f01602080910402602001604051908101604052809291908181526020018280546103e290611ab2565b801561042f5780601f106104045761010080835404028352916020019161042f565b820191906000526020600020905b81548152906001019060200180831161041257829003601f168201915b5050509183525050600282015460ff166020808301919091526040805161040081018083529190930192916003850191826000855b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161046457505050928452505050600482015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526005840154909116604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561053657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161050b575b505050918352505060078281015460170b60208084019190915260408051808201825260088601805460f01b7fffff0000000000000000000000000000000000000000000000000000000000001682528251808401845260098801805490960b8152600a88018054949097019692959194868101949193908401916105ba90611ab2565b80601f01602080910402602001604051908101604052809291908181526020018280546105e690611ab2565b80156106335780601f1061060857610100808354040283529160200191610633565b820191906000526020600020905b81548152906001019060200180831161061657829003601f168201915b505050919092525050509052508152604080518082018252600b84015460f01b7fffff0000000000000000000000000000000000000000000000000000000000001681528151808301909252600c90930154600781900b825268010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660208083019190915280840191909152015292915050565b8b60030b7f855ac250d95b464eea2a7645e23a88fdab21031016175b7dc4d65e8efc72c2ea8c8c8c8c8c8c8c8c8c8c8c60405161070d9b9a99989796959493929190611c2f565b60405180910390a2505050505050505050505050565b8181604051610733929190611dcc565b60405180910390207f3d969732b1bbbb9f1d7eb9f3f14e4cb50a74d950b3ef916a397b85dfbab93c67838360405161076c929190611ddc565b60405180910390a25050565b60006040518061014001604052808e60030b81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060ff8c166020808301919091526040805161040081810183529190930192918d9183908390808284376000920191909152505050815273ffffffffffffffffffffffffffffffffffffffff808b16602080840191909152908a1660408084019190915280518983028181018401909252898152606090930192918a918a91829190850190849080828437600092019190915250505090825250601786900b60208201526040016108778561191b565b815260200161088b368590038501856119b9565b905281546001808201845560009384526020938490208351600d9093020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9093169290921782559282015191929091908201906108f19082611e3f565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055606082015161093f9060038301906020610d7f565b50608082015160048201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560a084015160058401805491909316911617905560c082015180516109ba916006840191602090910190610e12565b5060e08201516007820180547fffffffffffffffff0000000000000000000000000000000000000000000000001677ffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905561010082015180516008830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660f09290921c91909117815560208083015180516009860180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90921691909117815591810151909190600a860190610a9e9082611e3f565b5050505061012092909201518051600b8301805460f09290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169190911790556020908101518051600c9093018054919092015173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911667ffffffffffffffff9093169290921791909117905550505050505050505050505050565b60008888888888888888604051602001610b81989796959493929190611f59565b60405160208183030381529060405290507f1e40927ec0bdc7319f09a53452590433ec395dec3b70b982eba779c740685bfe81604051610bc19190611fff565b60405180910390a1505050505050505050565b60606001805480602002602001604051908101604052809291908181526020018280548015610c5657602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610c115790505b5050505050905090565b8082604051610c6f9190612012565b604051809103902084604051610c85919061204e565b604051908190038120907f7220e4dbe4e9d0ed5f71acd022bc89c26748ac6784f2c548bc17bb8e52af34b090600090a4505050565b8060030b8260030b8460030b7f91c80dc390f3d041b3a04b0099b19634499541ea26972250986ee4b24a12fac560405160405180910390a4505050565b6040805161014081018252600080825260606020830181905292820152908101610d1f610e8c565b815260006020820181905260408201819052606080830152608082015260a001610d47610eab565b8152602001610d7a6040805180820182526000808252825180840190935280835260208381019190915290919082015290565b905290565b600183019183908215610e025791602002820160005b83821115610dd357835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302610d95565b8015610e005782816101000a81549060ff0219169055600101602081600001049283019260010302610dd3565b505b50610e0e929150610efe565b5090565b828054828255906000526020600020908101928215610e02579160200282015b82811115610e0257825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190610e32565b6040518061040001604052806020906020820280368337509192915050565b604051806040016040528060007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001610d7a6040518060400160405280600060070b8152602001606081525090565b5b80821115610e0e5760008155600101610eff565b8035600381900b8114610f2557600080fd5b919050565b60008083601f840112610f3c57600080fd5b50813567ffffffffffffffff811115610f5457600080fd5b602083019150836020828501011115610f6c57600080fd5b9250929050565b803560ff81168114610f2557600080fd5b806104008101831015610f9657600080fd5b92915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2557600080fd5b60008083601f840112610fd257600080fd5b50813567ffffffffffffffff811115610fea57600080fd5b6020830191508360208260051b8501011115610f6c57600080fd5b8035601781900b8114610f2557600080fd5b60006040828403121561102957600080fd5b50919050565b60006060828403121561102957600080fd5b6000806000806000806000806000806000806105608d8f03121561106457600080fd5b61106d8d610f13565b9b5067ffffffffffffffff60208e0135111561108857600080fd5b6110988e60208f01358f01610f2a565b909b5099506110a960408e01610f73565b98506110b88e60608f01610f84565b97506110c76104608e01610f9c565b96506110d66104808e01610f9c565b955067ffffffffffffffff6104a08e013511156110f257600080fd5b6111038e6104a08f01358f01610fc0565b90955093506111156104c08e01611005565b925067ffffffffffffffff6104e08e0135111561113157600080fd5b6111428e6104e08f01358f01611017565b91506111528e6105008f0161102f565b90509295989b509295989b509295989b565b60005b8381101561117f578181015183820152602001611167565b50506000910152565b600081518084526111a0816020860160208601611164565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8060005b60208082106111e557506111fc565b825160ff16855293840193909101906001016111d6565b50505050565b600081518084526020808501945080840160005b8381101561124857815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611216565b509495945050505050565b7fffff00000000000000000000000000000000000000000000000000000000000081511682526000602082015160406020850152805160070b604085015260208101519050604060608501526112ac6080850182611188565b949350505050565b602081526112c860208201835160030b9052565b6000602083015161056060408401526112e5610580840182611188565b905060408401516112fb606085018260ff169052565b50606084015161130e60808501826111d2565b50608084015173ffffffffffffffffffffffffffffffffffffffff90811661048085015260a0850151166104a084015260c08401518382037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09081016104c086015261137a8383611202565b925060e086015191506113936104e086018360170b9052565b61010086015191508085840301610500860152506113b18282611253565b61012086015180517fffff00000000000000000000000000000000000000000000000000000000000016610520870152602080820151805160070b610540890152015173ffffffffffffffffffffffffffffffffffffffff166105608701529092509050509392505050565b60006020828403121561142f57600080fd5b5035919050565b6000806000806000806000806000806000806105608d8f03121561145957600080fd5b6114628d610f13565b9b5061147060208e01610f73565b9a5067ffffffffffffffff60408e0135111561148b57600080fd5b61149b8e60408f01358f01611017565b99506114aa8e60608f0161102f565b98506114b98e60c08f01610f84565b97506114c86104c08e01610f9c565b96506114d76104e08e01610f9c565b955067ffffffffffffffff6105008e013511156114f357600080fd5b6115048e6105008f01358f01610fc0565b909550935067ffffffffffffffff6105208e0135111561152357600080fd5b6115348e6105208f01358f01610f2a565b90935091506111526105408e01611005565b6000806020838503121561155957600080fd5b823567ffffffffffffffff81111561157057600080fd5b61157c85828601610f2a565b90969095509350505050565b803563ffffffff81168114610f2557600080fd5b803567ffffffffffffffff81168114610f2557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611606576116066115b4565b60405290565b600067ffffffffffffffff80841115611627576116276115b4565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561166d5761166d6115b4565b8160405280935085815286868601111561168657600080fd5b858560208301376000602087830101525050509392505050565b600080600080600080600080610100898b0312156116bd57600080fd5b6116c689611588565b97506116d460208a01611588565b96506116e260408a01611588565b95506116f060608a0161159c565b94506080890135935060a0890135925060c0890135915060e089013567ffffffffffffffff81111561172157600080fd5b8901601f81018b1361173257600080fd5b6117418b82356020840161160c565b9150509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561179357835167ffffffffffffffff168352928401929184019160010161176d565b50909695505050505050565b6000602082840312156117b157600080fd5b6117ba8261159c565b9392505050565b600082601f8301126117d257600080fd5b6117ba8383356020850161160c565b600080600061044084860312156117f757600080fd5b833567ffffffffffffffff8082111561180f57600080fd5b61181b878388016117c1565b94506020915086603f87011261183057600080fd5b6040516104008101818110838211171561184c5761184c6115b4565b60405290508061042087018881111561186457600080fd5b8388015b818110156118865761187981610f73565b8452928401928401611868565b5095989097509435955050505050565b6000806000606084860312156118ab57600080fd5b6118b484610f13565b92506118c260208501610f13565b91506118d060408501610f13565b90509250925092565b80357fffff00000000000000000000000000000000000000000000000000000000000081168114610f2557600080fd5b8035600781900b8114610f2557600080fd5b60006040823603121561192d57600080fd5b6119356115e3565b61193e836118d9565b8152602083013567ffffffffffffffff8082111561195b57600080fd5b81850191506040823603121561197057600080fd5b6119786115e3565b61198183611909565b815260208301358281111561199557600080fd5b6119a1368286016117c1565b60208301525080602085015250505080915050919050565b600081830360608112156119cc57600080fd5b6119d46115e3565b6119dd846118d9565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083011215611a0f57600080fd5b611a176115e3565b9150611a2560208501611909565b8252611a3360408501610f9c565b6020830152816020820152809250505092915050565b81810381811115610f96577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c90821680611ac657607f821691505b602082108103611029577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b7fffff000000000000000000000000000000000000000000000000000000000000611b72826118d9565b168252611b8160208201611909565b60070b602083015273ffffffffffffffffffffffffffffffffffffffff611baa60408301610f9c565b1660408301525050565b8060005b6020808210611bc757506111fc565b60ff611bd284610f73565b168552938401939190910190600101611bb8565b8183526000602080850194508260005b858110156112485773ffffffffffffffffffffffffffffffffffffffff611c1c83610f9c565b1687529582019590820190600101611bf6565b600061054060ff8e1683528060208401527fffff000000000000000000000000000000000000000000000000000000000000611c6a8e6118d9565b16818401525060208c01357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18d3603018112611ca557600080fd5b60406105608401528c01611cb881611909565b60070b61058084015260208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112611cf657600080fd5b0160208101903567ffffffffffffffff811115611d1257600080fd5b803603821315611d2157600080fd5b60406105a0850152611d386105c085018284611aff565b915050611d48604084018d611b48565b611d5560a084018c611bb4565b73ffffffffffffffffffffffffffffffffffffffff8a166104a084015273ffffffffffffffffffffffffffffffffffffffff89166104c08401528281036104e0840152611da381888a611be6565b9050828103610500840152611db9818688611aff565b91505061034661052083018460170b9052565b8183823760009101908152919050565b6020815260006112ac602083018486611aff565b601f821115611e3a57600081815260208120601f850160051c81016020861015611e175750805b601f850160051c820191505b81811015611e3657828155600101611e23565b5050505b505050565b815167ffffffffffffffff811115611e5957611e596115b4565b611e6d81611e678454611ab2565b84611df0565b602080601f831160018114611ec05760008415611e8a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611e36565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611f0d57888601518255948401946001909101908401611eee565b5085821015611f4957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60007fffffffff00000000000000000000000000000000000000000000000000000000808b60e01b168352808a60e01b166004840152808960e01b166008840152507fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b16600c8301528560148301528460348301528360548301528251611feb816074850160208701611164565b919091016074019998505050505050505050565b6020815260006117ba6020830184611188565b60008183825b6020808210612027575061203e565b825160ff1684529283019290910190600101612018565b5050506104008201905092915050565b60008251612060818460208701611164565b919091019291505056fea164736f6c6343000813000a", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"StaticBytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structAccountStruct\",\"name\":\"accountStruct\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"Accounts\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"}],\"name\":\"Triggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"fieldHash\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"field\",\"type\":\"string\"}],\"name\":\"TriggeredEventWithDynamicTopic\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field1\",\"type\":\"int32\"},{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field2\",\"type\":\"int32\"},{\"indexed\":true,\"internalType\":\"int32\",\"name\":\"field3\",\"type\":\"int32\"}],\"name\":\"TriggeredWithFourTopics\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"field1\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint8[32]\",\"name\":\"field2\",\"type\":\"uint8[32]\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"field3\",\"type\":\"bytes32\"}],\"name\":\"TriggeredWithFourTopicsWithHashed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"}],\"internalType\":\"structAccountStruct\",\"name\":\"accountStruct\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"}],\"name\":\"addTestStruct\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlterablePrimitiveValue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDifferentPrimitiveValue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"}],\"name\":\"getElementAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"Field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"DifferentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"OracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"OracleIds\",\"type\":\"uint8[32]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"}],\"internalType\":\"structAccountStruct\",\"name\":\"AccountStruct\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"Accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"BigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"NestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"NestedStaticStruct\",\"type\":\"tuple\"}],\"internalType\":\"structTestStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrimitiveValue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSliceValue\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"}],\"internalType\":\"structAccountStruct\",\"name\":\"accountStruct\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"}],\"name\":\"returnSeen\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"Field\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"DifferentField\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"OracleId\",\"type\":\"uint8\"},{\"internalType\":\"uint8[32]\",\"name\":\"OracleIds\",\"type\":\"uint8[32]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"}],\"internalType\":\"structAccountStruct\",\"name\":\"AccountStruct\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"Accounts\",\"type\":\"address[]\"},{\"internalType\":\"int192\",\"name\":\"BigField\",\"type\":\"int192\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"NestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"NestedStaticStruct\",\"type\":\"tuple\"}],\"internalType\":\"structTestStruct\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"setAlterablePrimitiveValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field\",\"type\":\"int32\"},{\"internalType\":\"uint8\",\"name\":\"oracleId\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"S\",\"type\":\"string\"}],\"internalType\":\"structInnerDynamicTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelDynamicTestStruct\",\"name\":\"nestedDynamicStruct\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes2\",\"name\":\"FixedBytes\",\"type\":\"bytes2\"},{\"components\":[{\"internalType\":\"int64\",\"name\":\"IntVal\",\"type\":\"int64\"},{\"internalType\":\"address\",\"name\":\"A\",\"type\":\"address\"}],\"internalType\":\"structInnerStaticTestStruct\",\"name\":\"Inner\",\"type\":\"tuple\"}],\"internalType\":\"structMidLevelStaticTestStruct\",\"name\":\"nestedStaticStruct\",\"type\":\"tuple\"},{\"internalType\":\"uint8[32]\",\"name\":\"oracleIds\",\"type\":\"uint8[32]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"Account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"AccountStr\",\"type\":\"address\"}],\"internalType\":\"structAccountStruct\",\"name\":\"accountStruct\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"string\",\"name\":\"differentField\",\"type\":\"string\"},{\"internalType\":\"int192\",\"name\":\"bigField\",\"type\":\"int192\"}],\"name\":\"triggerEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"field\",\"type\":\"string\"}],\"name\":\"triggerEventWithDynamicTopic\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"val1\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"val2\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"val3\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"val4\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"val5\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"val6\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"val7\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"raw\",\"type\":\"bytes\"}],\"name\":\"triggerStaticBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"field1\",\"type\":\"int32\"},{\"internalType\":\"int32\",\"name\":\"field2\",\"type\":\"int32\"},{\"internalType\":\"int32\",\"name\":\"field3\",\"type\":\"int32\"}],\"name\":\"triggerWithFourTopics\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"field1\",\"type\":\"string\"},{\"internalType\":\"uint8[32]\",\"name\":\"field2\",\"type\":\"uint8[32]\"},{\"internalType\":\"bytes32\",\"name\":\"field3\",\"type\":\"bytes32\"}],\"name\":\"triggerWithFourTopicsWithHashed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50600180548082018255600082905260048082047fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6908101805460086003958616810261010090810a8088026001600160401b0391820219909416939093179093558654808801909755848704909301805496909516909202900a91820291021990921691909117905561209a806100a96000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636cf01bfc1161008c578063ab5e0b3811610066578063ab5e0b38146101df578063dbfd7332146101fc578063ef4e1ced1461020f578063fbe9fbf61461021657600080fd5b80636cf01bfc146101a657806380d77303146101b9578063a90e1998146101cc57600080fd5b8063660b5962116100bd578063660b596214610135578063679004a4146101485780636c9a43b61461015d57600080fd5b80632c45576f146100e45780633272b66c1461010d57806351f3f54d14610122575b600080fd5b6100f76100f2366004610f24565b610228565b604051610104919061108d565b60405180910390f35b61012061011b366004611240565b61059b565b005b61012061013036600461139f565b6105f0565b61012061014336600461150c565b610664565b610150610a33565b6040516101049190611612565b61012061016b366004611660565b600280547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6100f76101b436600461150c565b610abf565b6101206101c7366004611682565b610bd6565b6101206101da366004611795565b610c30565b6107c65b60405167ffffffffffffffff9091168152602001610104565b61012061020a36600461184a565b610c8a565b60036101e3565b60025467ffffffffffffffff166101e3565b610230610cc7565b600061023d60018461188d565b8154811061024d5761024d6118c7565b6000918252602091829020604080516101208101909152600d90920201805460030b82526001810180549293919291840191610288906118f6565b80601f01602080910402602001604051908101604052809291908181526020018280546102b4906118f6565b80156103015780601f106102d657610100808354040283529160200191610301565b820191906000526020600020905b8154815290600101906020018083116102e457829003601f168201915b5050509183525050600282015460ff166020808301919091526040805161040081018083529190930192916003850191826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116103365790505050509183525050604080518082018252600484015473ffffffffffffffffffffffffffffffffffffffff90811682526005850154166020828101919091528084019190915260068401805483518184028101840185528181529390940193909183018282801561040b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103e0575b505050918352505060078281015460170b60208084019190915260408051808201825260088601805460f01b7fffff0000000000000000000000000000000000000000000000000000000000001682528251808401845260098801805490960b8152600a880180549490970196929591948681019491939084019161048f906118f6565b80601f01602080910402602001604051908101604052809291908181526020018280546104bb906118f6565b80156105085780601f106104dd57610100808354040283529160200191610508565b820191906000526020600020905b8154815290600101906020018083116104eb57829003601f168201915b505050919092525050509052508152604080518082018252600b84015460f01b7fffff0000000000000000000000000000000000000000000000000000000000001681528151808301909252600c90930154600781900b825268010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660208083019190915280840191909152015292915050565b81816040516105ab929190611943565b60405180910390207f3d969732b1bbbb9f1d7eb9f3f14e4cb50a74d950b3ef916a397b85dfbab93c6783836040516105e492919061199c565b60405180910390a25050565b600088888888888888886040516020016106119897969594939291906119b0565b60405160208183030381529060405290507f1e40927ec0bdc7319f09a53452590433ec395dec3b70b982eba779c740685bfe816040516106519190611a56565b60405180910390a1505050505050505050565b60006040518061012001604052808d60030b81526020018c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060ff8b166020808301919091526040805161040081810183529190930192918c918390839080828437600092019190915250505081526020016106fc368a90038a018a611a8d565b8152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250601786900b602082015260400161074d85611b0c565b815260200161076136859003850185611baa565b905281546001808201845560009384526020938490208351600d9093020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9093169290921782559282015191929091908201906107c79082611c89565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560608201516108159060038301906020610d90565b506080820151805160048301805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560209283015160058501805491909316911617905560a0830151805161088f9260068501920190610e23565b5060c08201516007820180547fffffffffffffffff0000000000000000000000000000000000000000000000001677ffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905560e082015180516008830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660f09290921c91909117815560208083015180516009860180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff90921691909117815591810151909190600a8601906109729082611c89565b5050505061010092909201518051600b8301805460f09290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169190911790556020908101518051600c9093018054919092015173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911667ffffffffffffffff90931692909217919091179055505050505050505050505050565b60606001805480602002602001604051908101604052809291908181526020018280548015610ab557602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610a705790505b5050505050905090565b610ac7610cc7565b6040518061012001604052808d60030b81526020018c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060ff8b166020808301919091526040805161040081810183529190930192918c91839083908082843760009201919091525050508152602001610b5d368a90038a018a611a8d565b8152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250601786900b6020820152604001610bae85611b0c565b8152602001610bc236859003850185611baa565b905290505b9b9a5050505050505050505050565b8a60030b7f6a1c0d59d12839c1d2bd0a8cd5e73032dc60569f7f448b99b572b61c442b8add8b8b8b8b8b8b8b8b8b8b604051610c1b9a99989796959493929190611ec4565b60405180910390a25050505050505050505050565b8082604051610c3f9190612035565b604051809103902084604051610c559190612071565b604051908190038120907f7220e4dbe4e9d0ed5f71acd022bc89c26748ac6784f2c548bc17bb8e52af34b090600090a4505050565b8060030b8260030b8460030b7f91c80dc390f3d041b3a04b0099b19634499541ea26972250986ee4b24a12fac560405160405180910390a4505050565b6040805161012081018252600080825260606020830181905292820152908101610cef610e9d565b8152602001610d3d6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b81526060602082018190526000604083015201610d58610ebc565b8152602001610d8b6040805180820182526000808252825180840190935280835260208381019190915290919082015290565b905290565b600183019183908215610e135791602002820160005b83821115610de457835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302610da6565b8015610e115782816101000a81549060ff0219169055600101602081600001049283019260010302610de4565b505b50610e1f929150610f0f565b5090565b828054828255906000526020600020908101928215610e13579160200282015b82811115610e1357825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190610e43565b6040518061040001604052806020906020820280368337509192915050565b604051806040016040528060007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001610d8b6040518060400160405280600060070b8152602001606081525090565b5b80821115610e1f5760008155600101610f10565b600060208284031215610f3657600080fd5b5035919050565b60005b83811015610f58578181015183820152602001610f40565b50506000910152565b60008151808452610f79816020860160208601610f3d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8060005b6020808210610fbe5750610fd5565b825160ff1685529384019390910190600101610faf565b50505050565b600081518084526020808501945080840160005b8381101561102157815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610fef565b509495945050505050565b7fffff00000000000000000000000000000000000000000000000000000000000081511682526000602082015160406020850152805160070b604085015260208101519050604060608501526110856080850182610f61565b949350505050565b602081526110a160208201835160030b9052565b6000602083015161056060408401526110be610580840182610f61565b905060408401516110d4606085018260ff169052565b5060608401516110e76080850182610fab565b506080840151805173ffffffffffffffffffffffffffffffffffffffff9081166104808601526020820151166104a08501525060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016104c08601526111558383610fdb565b925060c0860151915061116e6104e086018360170b9052565b60e0860151915080858403016105008601525061118b828261102c565b61010086015180517fffff00000000000000000000000000000000000000000000000000000000000016610520870152602080820151805160070b610540890152015173ffffffffffffffffffffffffffffffffffffffff166105608701529092509050509392505050565b60008083601f84011261120957600080fd5b50813567ffffffffffffffff81111561122157600080fd5b60208301915083602082850101111561123957600080fd5b9250929050565b6000806020838503121561125357600080fd5b823567ffffffffffffffff81111561126a57600080fd5b611276858286016111f7565b90969095509350505050565b803563ffffffff8116811461129657600080fd5b919050565b803567ffffffffffffffff8116811461129657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611305576113056112b3565b60405290565b600067ffffffffffffffff80841115611326576113266112b3565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561136c5761136c6112b3565b8160405280935085815286868601111561138557600080fd5b858560208301376000602087830101525050509392505050565b600080600080600080600080610100898b0312156113bc57600080fd5b6113c589611282565b97506113d360208a01611282565b96506113e160408a01611282565b95506113ef60608a0161129b565b94506080890135935060a0890135925060c0890135915060e089013567ffffffffffffffff81111561142057600080fd5b8901601f81018b1361143157600080fd5b6114408b82356020840161130b565b9150509295985092959890939650565b8035600381900b811461129657600080fd5b803560ff8116811461129657600080fd5b80610400810183101561148557600080fd5b92915050565b60006040828403121561149d57600080fd5b50919050565b60008083601f8401126114b557600080fd5b50813567ffffffffffffffff8111156114cd57600080fd5b6020830191508360208260051b850101111561123957600080fd5b8035601781900b811461129657600080fd5b60006060828403121561149d57600080fd5b60008060008060008060008060008060006105608c8e03121561152e57600080fd5b6115378c611450565b9a5067ffffffffffffffff8060208e0135111561155357600080fd5b6115638e60208f01358f016111f7565b909b50995061157460408e01611462565b98506115838e60608f01611473565b97506115938e6104608f0161148b565b9650806104a08e013511156115a757600080fd5b6115b88e6104a08f01358f016114a3565b90965094506115ca6104c08e016114e8565b9350806104e08e013511156115de57600080fd5b506115f08d6104e08e01358e0161148b565b91506116008d6105008e016114fa565b90509295989b509295989b9093969950565b6020808252825182820181905260009190848201906040850190845b8181101561165457835167ffffffffffffffff168352928401929184019160010161162e565b50909695505050505050565b60006020828403121561167257600080fd5b61167b8261129b565b9392505050565b60008060008060008060008060008060006105608c8e0312156116a457600080fd5b6116ad8c611450565b9a506116bb60208d01611462565b995067ffffffffffffffff8060408e013511156116d757600080fd5b6116e78e60408f01358f0161148b565b99506116f68e60608f016114fa565b98506117058e60c08f01611473565b97506117158e6104c08f0161148b565b9650806105008e0135111561172957600080fd5b61173a8e6105008f01358f016114a3565b90965094506105208d013581101561175157600080fd5b506117638d6105208e01358e016111f7565b90935091506116006105408d016114e8565b600082601f83011261178657600080fd5b61167b8383356020850161130b565b600080600061044084860312156117ab57600080fd5b833567ffffffffffffffff808211156117c357600080fd5b6117cf87838801611775565b94506020915086603f8701126117e457600080fd5b60405161040081018181108382111715611800576118006112b3565b60405290508061042087018881111561181857600080fd5b8388015b8181101561183a5761182d81611462565b845292840192840161181c565b5095989097509435955050505050565b60008060006060848603121561185f57600080fd5b61186884611450565b925061187660208501611450565b915061188460408501611450565b90509250925092565b81810381811115611485577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061190a57607f821691505b60208210810361149d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000611085602083018486611953565b60007fffffffff00000000000000000000000000000000000000000000000000000000808b60e01b168352808a60e01b166004840152808960e01b166008840152507fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b16600c8301528560148301528460348301528360548301528251611a42816074850160208701610f3d565b919091016074019998505050505050505050565b60208152600061167b6020830184610f61565b803573ffffffffffffffffffffffffffffffffffffffff8116811461129657600080fd5b600060408284031215611a9f57600080fd5b611aa76112e2565b611ab083611a69565b8152611abe60208401611a69565b60208201529392505050565b80357fffff0000000000000000000000000000000000000000000000000000000000008116811461129657600080fd5b8035600781900b811461129657600080fd5b600060408236031215611b1e57600080fd5b611b266112e2565b611b2f83611aca565b8152602083013567ffffffffffffffff80821115611b4c57600080fd5b818501915060408236031215611b6157600080fd5b611b696112e2565b611b7283611afa565b8152602083013582811115611b8657600080fd5b611b9236828601611775565b60208301525080602085015250505080915050919050565b60008183036060811215611bbd57600080fd5b611bc56112e2565b611bce84611aca565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083011215611c0057600080fd5b611c086112e2565b9150611c1660208501611afa565b8252611c2460408501611a69565b6020830152816020820152809250505092915050565b601f821115611c8457600081815260208120601f850160051c81016020861015611c615750805b601f850160051c820191505b81811015611c8057828155600101611c6d565b5050505b505050565b815167ffffffffffffffff811115611ca357611ca36112b3565b611cb781611cb184546118f6565b84611c3a565b602080601f831160018114611d0a5760008415611cd45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611c80565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611d5757888601518255948401946001909101908401611d38565b5085821015611d9357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7fffff000000000000000000000000000000000000000000000000000000000000611dcd82611aca565b168252611ddc60208201611afa565b60070b602083015273ffffffffffffffffffffffffffffffffffffffff611e0560408301611a69565b1660408301525050565b8060005b6020808210611e225750610fd5565b60ff611e2d84611462565b168552938401939190910190600101611e13565b73ffffffffffffffffffffffffffffffffffffffff80611e6083611a69565b16835280611e7060208401611a69565b166020840152505050565b8183526000602080850194508260005b858110156110215773ffffffffffffffffffffffffffffffffffffffff611eb183611a69565b1687529582019590820190600101611e8b565b600061054060ff8d1683528060208401527fffff000000000000000000000000000000000000000000000000000000000000611eff8d611aca565b16818401525060208b01357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112611f3a57600080fd5b60406105608401528b01611f4d81611afa565b60070b61058084015260208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112611f8b57600080fd5b0160208101903567ffffffffffffffff811115611fa757600080fd5b803603821315611fb657600080fd5b60406105a0850152611fcd6105c085018284611953565b915050611fdd604084018c611da3565b611fea60a084018b611e0f565b611ff86104a084018a611e41565b8281036104e084015261200c81888a611e7b565b9050828103610500840152612022818688611953565b915050610bc761052083018460170b9052565b60008183825b602080821061204a5750612061565b825160ff168452928301929091019060010161203b565b5050506104008201905092915050565b60008251612083818460208701610f3d565b919091019291505056fea164736f6c6343000813000a", } var ChainReaderTesterABI = ChainReaderTesterMetaData.ABI @@ -314,9 +318,9 @@ func (_ChainReaderTester *ChainReaderTesterCallerSession) GetSliceValue() ([]uin return _ChainReaderTester.Contract.GetSliceValue(&_ChainReaderTester.CallOpts) } -func (_ChainReaderTester *ChainReaderTesterCaller) ReturnSeen(opts *bind.CallOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) { +func (_ChainReaderTester *ChainReaderTesterCaller) ReturnSeen(opts *bind.CallOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) { var out []interface{} - err := _ChainReaderTester.contract.Call(opts, &out, "returnSeen", field, differentField, oracleId, oracleIds, account, accountStr, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) + err := _ChainReaderTester.contract.Call(opts, &out, "returnSeen", field, differentField, oracleId, oracleIds, accountStruct, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) if err != nil { return *new(TestStruct), err @@ -328,24 +332,24 @@ func (_ChainReaderTester *ChainReaderTesterCaller) ReturnSeen(opts *bind.CallOpt } -func (_ChainReaderTester *ChainReaderTesterSession) ReturnSeen(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) { - return _ChainReaderTester.Contract.ReturnSeen(&_ChainReaderTester.CallOpts, field, differentField, oracleId, oracleIds, account, accountStr, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) +func (_ChainReaderTester *ChainReaderTesterSession) ReturnSeen(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) { + return _ChainReaderTester.Contract.ReturnSeen(&_ChainReaderTester.CallOpts, field, differentField, oracleId, oracleIds, accountStruct, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) } -func (_ChainReaderTester *ChainReaderTesterCallerSession) ReturnSeen(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) { - return _ChainReaderTester.Contract.ReturnSeen(&_ChainReaderTester.CallOpts, field, differentField, oracleId, oracleIds, account, accountStr, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) +func (_ChainReaderTester *ChainReaderTesterCallerSession) ReturnSeen(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) { + return _ChainReaderTester.Contract.ReturnSeen(&_ChainReaderTester.CallOpts, field, differentField, oracleId, oracleIds, accountStruct, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) } -func (_ChainReaderTester *ChainReaderTesterTransactor) AddTestStruct(opts *bind.TransactOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) { - return _ChainReaderTester.contract.Transact(opts, "addTestStruct", field, differentField, oracleId, oracleIds, account, accountStr, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) +func (_ChainReaderTester *ChainReaderTesterTransactor) AddTestStruct(opts *bind.TransactOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) { + return _ChainReaderTester.contract.Transact(opts, "addTestStruct", field, differentField, oracleId, oracleIds, accountStruct, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) } -func (_ChainReaderTester *ChainReaderTesterSession) AddTestStruct(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) { - return _ChainReaderTester.Contract.AddTestStruct(&_ChainReaderTester.TransactOpts, field, differentField, oracleId, oracleIds, account, accountStr, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) +func (_ChainReaderTester *ChainReaderTesterSession) AddTestStruct(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) { + return _ChainReaderTester.Contract.AddTestStruct(&_ChainReaderTester.TransactOpts, field, differentField, oracleId, oracleIds, accountStruct, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) } -func (_ChainReaderTester *ChainReaderTesterTransactorSession) AddTestStruct(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) { - return _ChainReaderTester.Contract.AddTestStruct(&_ChainReaderTester.TransactOpts, field, differentField, oracleId, oracleIds, account, accountStr, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) +func (_ChainReaderTester *ChainReaderTesterTransactorSession) AddTestStruct(field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) { + return _ChainReaderTester.Contract.AddTestStruct(&_ChainReaderTester.TransactOpts, field, differentField, oracleId, oracleIds, accountStruct, accounts, bigField, nestedDynamicStruct, nestedStaticStruct) } func (_ChainReaderTester *ChainReaderTesterTransactor) SetAlterablePrimitiveValue(opts *bind.TransactOpts, value uint64) (*types.Transaction, error) { @@ -360,16 +364,16 @@ func (_ChainReaderTester *ChainReaderTesterTransactorSession) SetAlterablePrimit return _ChainReaderTester.Contract.SetAlterablePrimitiveValue(&_ChainReaderTester.TransactOpts, value) } -func (_ChainReaderTester *ChainReaderTesterTransactor) TriggerEvent(opts *bind.TransactOpts, field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) { - return _ChainReaderTester.contract.Transact(opts, "triggerEvent", field, oracleId, nestedDynamicStruct, nestedStaticStruct, oracleIds, account, accountStr, accounts, differentField, bigField) +func (_ChainReaderTester *ChainReaderTesterTransactor) TriggerEvent(opts *bind.TransactOpts, field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) { + return _ChainReaderTester.contract.Transact(opts, "triggerEvent", field, oracleId, nestedDynamicStruct, nestedStaticStruct, oracleIds, accountStruct, accounts, differentField, bigField) } -func (_ChainReaderTester *ChainReaderTesterSession) TriggerEvent(field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) { - return _ChainReaderTester.Contract.TriggerEvent(&_ChainReaderTester.TransactOpts, field, oracleId, nestedDynamicStruct, nestedStaticStruct, oracleIds, account, accountStr, accounts, differentField, bigField) +func (_ChainReaderTester *ChainReaderTesterSession) TriggerEvent(field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) { + return _ChainReaderTester.Contract.TriggerEvent(&_ChainReaderTester.TransactOpts, field, oracleId, nestedDynamicStruct, nestedStaticStruct, oracleIds, accountStruct, accounts, differentField, bigField) } -func (_ChainReaderTester *ChainReaderTesterTransactorSession) TriggerEvent(field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) { - return _ChainReaderTester.Contract.TriggerEvent(&_ChainReaderTester.TransactOpts, field, oracleId, nestedDynamicStruct, nestedStaticStruct, oracleIds, account, accountStr, accounts, differentField, bigField) +func (_ChainReaderTester *ChainReaderTesterTransactorSession) TriggerEvent(field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) { + return _ChainReaderTester.Contract.TriggerEvent(&_ChainReaderTester.TransactOpts, field, oracleId, nestedDynamicStruct, nestedStaticStruct, oracleIds, accountStruct, accounts, differentField, bigField) } func (_ChainReaderTester *ChainReaderTesterTransactor) TriggerEventWithDynamicTopic(opts *bind.TransactOpts, field string) (*types.Transaction, error) { @@ -603,8 +607,7 @@ type ChainReaderTesterTriggered struct { NestedDynamicStruct MidLevelDynamicTestStruct NestedStaticStruct MidLevelStaticTestStruct OracleIds [32]uint8 - Account common.Address - AccountStr common.Address + AccountStruct AccountStruct Accounts []common.Address DifferentField string BigField *big.Int @@ -1114,7 +1117,7 @@ func (ChainReaderTesterStaticBytes) Topic() common.Hash { } func (ChainReaderTesterTriggered) Topic() common.Hash { - return common.HexToHash("0x855ac250d95b464eea2a7645e23a88fdab21031016175b7dc4d65e8efc72c2ea") + return common.HexToHash("0x6a1c0d59d12839c1d2bd0a8cd5e73032dc60569f7f448b99b572b61c442b8add") } func (ChainReaderTesterTriggeredEventWithDynamicTopic) Topic() common.Hash { @@ -1144,13 +1147,13 @@ type ChainReaderTesterInterface interface { GetSliceValue(opts *bind.CallOpts) ([]uint64, error) - ReturnSeen(opts *bind.CallOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) + ReturnSeen(opts *bind.CallOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (TestStruct, error) - AddTestStruct(opts *bind.TransactOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) + AddTestStruct(opts *bind.TransactOpts, field int32, differentField string, oracleId uint8, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, bigField *big.Int, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct) (*types.Transaction, error) SetAlterablePrimitiveValue(opts *bind.TransactOpts, value uint64) (*types.Transaction, error) - TriggerEvent(opts *bind.TransactOpts, field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, account common.Address, accountStr common.Address, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) + TriggerEvent(opts *bind.TransactOpts, field int32, oracleId uint8, nestedDynamicStruct MidLevelDynamicTestStruct, nestedStaticStruct MidLevelStaticTestStruct, oracleIds [32]uint8, accountStruct AccountStruct, accounts []common.Address, differentField string, bigField *big.Int) (*types.Transaction, error) TriggerEventWithDynamicTopic(opts *bind.TransactOpts, field string) (*types.Transaction, error) diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 0beae6fc42e..4d0ab287f32 100644 --- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -24,7 +24,7 @@ batch_vrf_coordinator_v2: ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2/Batc batch_vrf_coordinator_v2plus: ../../contracts/solc/v0.8.19/BatchVRFCoordinatorV2Plus/BatchVRFCoordinatorV2Plus.abi ../../contracts/solc/v0.8.19/BatchVRFCoordinatorV2Plus/BatchVRFCoordinatorV2Plus.bin f13715b38b5b9084b08bffa571fb1c8ef686001535902e1255052f074b31ad4e blockhash_store: ../../contracts/solc/v0.8.19/BlockhashStore/BlockhashStore.abi ../../contracts/solc/v0.8.19/BlockhashStore/BlockhashStore.bin 31b118f9577240c8834c35f8b5a1440e82a6ca8aea702970de2601824b6ab0e1 chain_module_base: ../../contracts/solc/v0.8.19/ChainModuleBase/ChainModuleBase.abi ../../contracts/solc/v0.8.19/ChainModuleBase/ChainModuleBase.bin 7a82cc28014761090185c2650239ad01a0901181f1b2b899b42ca293bcda3741 -chain_reader_tester: ../../contracts/solc/v0.8.19/ChainReaderTester/ChainReaderTester.abi ../../contracts/solc/v0.8.19/ChainReaderTester/ChainReaderTester.bin c25c1712046dfa691cafa58803e6fbfa163f325e6e3aabf0558f5a9d2ab1065e +chain_reader_tester: ../../contracts/solc/v0.8.19/ChainReaderTester/ChainReaderTester.abi ../../contracts/solc/v0.8.19/ChainReaderTester/ChainReaderTester.bin ee9839cc26b615d168d5dbc8ef4f31d8d8b1ef8d276d8ee50625476f87ef1508 chain_specific_util_helper: ../../contracts/solc/v0.8.6/ChainSpecificUtilHelper/ChainSpecificUtilHelper.abi ../../contracts/solc/v0.8.6/ChainSpecificUtilHelper/ChainSpecificUtilHelper.bin 66eb30b0717fefe05672df5ec863c0b9a5a654623c4757307a2726d8f31e26b1 counter: ../../contracts/solc/v0.8.6/Counter/Counter.abi ../../contracts/solc/v0.8.6/Counter/Counter.bin 6ca06e000e8423573ffa0bdfda749d88236ab3da2a4cbb4a868c706da90488c9 cron_upkeep_factory_wrapper: ../../contracts/solc/v0.8.6/CronUpkeepFactory/CronUpkeepFactory.abi - dacb0f8cdf54ae9d2781c5e720fc314b32ed5e58eddccff512c75d6067292cd7 diff --git a/core/monitoring/monitoring.go b/core/monitoring/monitoring.go deleted file mode 100644 index c1c9cf8d86f..00000000000 --- a/core/monitoring/monitoring.go +++ /dev/null @@ -1,115 +0,0 @@ -package monitoring - -import ( - "context" - "fmt" - - "google.golang.org/protobuf/proto" - - "github.com/smartcontractkit/chainlink-common/pkg/beholder" - beholderpb "github.com/smartcontractkit/chainlink-common/pkg/beholder/pb" - "github.com/smartcontractkit/chainlink-common/pkg/values" -) - -type CustomMessageLabeler struct { - labels map[string]string -} - -func NewCustomMessageLabeler() CustomMessageLabeler { - return CustomMessageLabeler{labels: make(map[string]string)} -} - -// With adds multiple key-value pairs to the CustomMessageLabeler for transmission With SendLogAsCustomMessage -func (c CustomMessageLabeler) With(keyValues ...string) CustomMessageLabeler { - newCustomMessageLabeler := NewCustomMessageLabeler() - - if len(keyValues)%2 != 0 { - // If an odd number of key-value arguments is passed, return the original CustomMessageLabeler unchanged - return c - } - - // Copy existing labels from the current agent - for k, v := range c.labels { - newCustomMessageLabeler.labels[k] = v - } - - // Add new key-value pairs - for i := 0; i < len(keyValues); i += 2 { - key := keyValues[i] - value := keyValues[i+1] - newCustomMessageLabeler.labels[key] = value - } - - return newCustomMessageLabeler -} - -// SendLogAsCustomMessage emits a BaseMessage With msg and labels as data. -// any key in labels that is not part of orderedLabelKeys will not be transmitted -func (c CustomMessageLabeler) SendLogAsCustomMessage(msg string) error { - return sendLogAsCustomMessageW(msg, c.labels) -} - -type MetricsLabeler struct { - Labels map[string]string -} - -func NewMetricsLabeler() MetricsLabeler { - return MetricsLabeler{Labels: make(map[string]string)} -} - -// With adds multiple key-value pairs to the CustomMessageLabeler for transmission With SendLogAsCustomMessage -func (c MetricsLabeler) With(keyValues ...string) MetricsLabeler { - newCustomMetricsLabeler := NewMetricsLabeler() - - if len(keyValues)%2 != 0 { - // If an odd number of key-value arguments is passed, return the original CustomMessageLabeler unchanged - return c - } - - // Copy existing labels from the current agent - for k, v := range c.Labels { - newCustomMetricsLabeler.Labels[k] = v - } - - // Add new key-value pairs - for i := 0; i < len(keyValues); i += 2 { - key := keyValues[i] - value := keyValues[i+1] - newCustomMetricsLabeler.Labels[key] = value - } - - return newCustomMetricsLabeler -} - -func sendLogAsCustomMessageW(msg string, labels map[string]string) error { - // cast to map[string]any - newLabels := map[string]any{} - for k, v := range labels { - newLabels[k] = v - } - - m, err := values.NewMap(newLabels) - if err != nil { - return fmt.Errorf("could not wrap labels to map: %w", err) - } - - // Define a custom protobuf payload to emit - payload := &beholderpb.BaseMessage{ - Msg: msg, - Labels: values.ProtoMap(m), - } - payloadBytes, err := proto.Marshal(payload) - if err != nil { - return fmt.Errorf("sending custom message failed to marshal protobuf: %w", err) - } - - err = beholder.GetEmitter().Emit(context.Background(), payloadBytes, - "beholder_data_schema", "/beholder-base-message/versions/1", // required - "beholder_data_type", "custom_message", - ) - if err != nil { - return fmt.Errorf("sending custom message failed on emit: %w", err) - } - - return nil -} diff --git a/core/monitoring/monitoring_test.go b/core/monitoring/monitoring_test.go deleted file mode 100644 index 7c79c89b1d8..00000000000 --- a/core/monitoring/monitoring_test.go +++ /dev/null @@ -1,16 +0,0 @@ -package monitoring - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -// tests CustomMessageAgent does not share state across new instances created by `With` -func Test_CustomMessageAgent(t *testing.T) { - cma := NewCustomMessageLabeler() - cma1 := cma.With("key1", "value1") - cma2 := cma1.With("key2", "value2") - - assert.NotEqual(t, cma1.labels, cma2.labels) -} diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 2392f85be45..a8dab3e260e 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -24,7 +24,7 @@ require ( github.com/prometheus/client_golang v1.20.0 github.com/shopspring/decimal v1.4.0 github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837-8c05ee9b97d5 - github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 + github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d github.com/smartcontractkit/chainlink/integration-tests v0.0.0-00010101000000-000000000000 github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000 github.com/smartcontractkit/libocr v0.0.0-20241007185508-adbe57025f12 @@ -293,7 +293,7 @@ require ( github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect @@ -339,20 +339,23 @@ require ( go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 // indirect - go.opentelemetry.io/otel/log v0.4.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.4.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/otel/log v0.6.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.6.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.3.0 // indirect @@ -372,8 +375,8 @@ require ( golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.15.0 // indirect google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/grpc v1.66.2 // indirect gopkg.in/guregu/null.v4 v4.0.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 4bd6aaca14c..d03b66b06db 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1074,8 +1074,8 @@ github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837 github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837-8c05ee9b97d5/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47 h1:kyOANlbz29uaevkjRaXlO1750A43xAvwAOKXiVNWpFQ= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47/go.mod h1:4adKaHNaxFsRvV/lYfqtbsWyyvIPUMLR0FdOJN/ljis= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 h1:qx5p01fqee86cj6EUOCzFc2zILw56v1Q3c5DUuEQWLs= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286/go.mod h1:tsGgeEJc5SUSlfVGSX0wR0EkRU3pM58D6SKF97V68ko= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d h1:34F6OuNyPwCwBXBG8I+s6BbngHlVNOtDKWMOZ9iXOpY= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d/go.mod h1:TQ9/KKXZ9vr8QAlUquqGpSvDCpR+DtABKPXZY4CiRns= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f h1:BwrIaQIx5Iy6eT+DfLhFfK2XqjxRm74mVdlX8gbu4dw= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f/go.mod h1:wHtwSR3F1CQSJJZDQKuqaqFYnvkT+kMyget7dl8Clvo= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e h1:JiETqdNM0bktAUGMc62COwXIaw3rR3M77Me6bBLG0Fg= @@ -1086,8 +1086,8 @@ github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 h1:1xTm8UGeD github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 h1:ZUihu/AMiFkZgO5XkVcpFayhIUibdovHzpbHnMPZUr0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4/go.mod h1:iZugccCLpPWtcGiR/8gurre2j3RtyKnqd1FcVR0NzQw= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= @@ -1273,37 +1273,41 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1: go.opentelemetry.io/contrib/propagators/b3 v1.24.0 h1:n4xwCdTx3pZqZs2CjS/CUZAs03y3dZcGhC/FepKtEUY= go.opentelemetry.io/contrib/propagators/b3 v1.24.0/go.mod h1:k5wRxKRU2uXx2F8uNJ4TaonuEO/V7/5xoz7kdsDACT8= go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 h1:UiRNKd1OgqsLbFwE+wkAWTdiAxXtCBqKIHeBIse4FUA= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9/go.mod h1:eqZlW3pJWhjyexnDPrdQxix1pn0wwhI4AO4GKpP/bMI= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 h1:QSKmLBzbFULSyHzOdO9JsN9lpE4zkrz1byYGmJecdVE= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0/go.mod h1:sTQ/NH8Yrirf0sJ5rWqVu+oT82i4zL9FaF6rWcqnptM= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 h1:U2guen0GhqH8o/G2un8f/aG/y++OuW6MyCo6hT9prXk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0/go.mod h1:yeGZANgEcpdx/WK0IvvRFC+2oLiMS2u4L/0Rj2M2Qr0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 h1:VrMAbeJz4gnVDg2zEzjHG4dEH86j4jO6VYB+NgtGD8s= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0/go.mod h1:qqN/uFdpeitTvm+JDqqnjm517pmQRYxTORbETHq5tOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 h1:lsInsfvhVIfOI6qHVyysXMNDnjO9Npvl7tlDPJFBVd4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0/go.mod h1:KQsVNh4OjgjTG0G6EiNi1jVpnaeeKsKMRwbLN+f1+8M= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 h1:umZgi92IyxfXd/l4kaDhnKgY8rnN/cZcF1LKc6I8OQ8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0/go.mod h1:4lVs6obhSVRb1EW5FhOuBTyiQhtRtAnnva9vD3yRfq8= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 h1:0MH3f8lZrflbUWXVxyBg/zviDFdGE062uKh5+fu8Vv0= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0/go.mod h1:Vh68vYiHY5mPdekTr0ox0sALsqjoVy0w3Os278yX5SQ= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 h1:BJee2iLkfRfl9lc7aFmBwkWxY/RI1RDdXepSF6y8TPE= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0/go.mod h1:DIzlHs3DRscCIBU3Y9YSzPfScwnYnzfnCd4g8zA7bZc= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bEkIYOVMw4q1WJxIAGoFTrtYOzWuRQ= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= -go.opentelemetry.io/otel/log v0.4.0 h1:/vZ+3Utqh18e8TPjuc3ecg284078KWrR8BRz+PQAj3o= -go.opentelemetry.io/otel/log v0.4.0/go.mod h1:DhGnQvky7pHy82MIRV43iXh3FlKN8UUKftn0KbLOq6I= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/sdk/log v0.4.0 h1:1mMI22L82zLqf6KtkjrRy5BbagOTWdJsqMY/HSqILAA= -go.opentelemetry.io/otel/sdk/log v0.4.0/go.mod h1:AYJ9FVF0hNOgAVzUG/ybg/QttnXhUePWAupmCqtdESo= -go.opentelemetry.io/otel/sdk/metric v1.28.0 h1:OkuaKgKrgAbYrrY0t92c+cC+2F6hsFNnCQArXCKlg08= -go.opentelemetry.io/otel/sdk/metric v1.28.0/go.mod h1:cWPjykihLAPvXKi4iZc1dpER3Jdq2Z0YLse3moQUCpg= +go.opentelemetry.io/otel/log v0.6.0 h1:nH66tr+dmEgW5y+F9LanGJUBYPrRgP4g2EkmPE3LeK8= +go.opentelemetry.io/otel/log v0.6.0/go.mod h1:KdySypjQHhP069JX0z/t26VHwa8vSwzgaKmXtIB3fJM= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk/log v0.6.0 h1:4J8BwXY4EeDE9Mowg+CyhWVBhTSLXVXodiXxS/+PGqI= +go.opentelemetry.io/otel/sdk/log v0.6.0/go.mod h1:L1DN8RMAduKkrwRAFDEX3E3TLOq46+XMGSbUfHU/+vE= +go.opentelemetry.io/otel/sdk/metric v1.30.0 h1:QJLT8Pe11jyHBHfSAgYH7kEmT24eX792jZO1bo4BXkM= +go.opentelemetry.io/otel/sdk/metric v1.30.0/go.mod h1:waS6P3YqFNzeP01kuo/MBBYqaoBJl7efRQHOaydhy1Y= go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1665,10 +1669,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d h1:/hmn0Ku5kWij/kjGsrcJeC1T/MrJi2iNWwgAqrihFwc= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd h1:BBOTEWLuuEGQy9n1y9MhVJ9Qt0BDu21X8qZs71/uPZo= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd h1:6TEm2ZxXoQmFWFlt1vNxvVOa1Q0dXFQD1m/rYjXmS0E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index 4171c7af164..ab73eca41fa 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -1427,7 +1427,7 @@ func TestConfig_Validate(t *testing.T) { - LDAP.RunUserGroupCN: invalid value (): LDAP ReadUserGroupCN can not be empty - LDAP.RunUserGroupCN: invalid value (): LDAP RunUserGroupCN can not be empty - LDAP.ReadUserGroupCN: invalid value (): LDAP ReadUserGroupCN can not be empty - - EVM: 9 errors: + - EVM: 10 errors: - 1.ChainID: invalid value (1): duplicate - must be unique - 0.Nodes.1.Name: invalid value (foo): duplicate - must be unique - 3.Nodes.4.WSURL: invalid value (ws://dupe.com): duplicate - must be unique @@ -1483,6 +1483,7 @@ func TestConfig_Validate(t *testing.T) { - ChainID: missing: required for all chains - Nodes: missing: must have at least one node - 5.Transactions.AutoPurge.DetectionApiUrl: invalid value (): must be set for scroll + - 6.Nodes: missing: 0th node (primary) must have a valid WSURL when http polling is disabled - Cosmos: 5 errors: - 1.ChainID: invalid value (Malaga-420): duplicate - must be unique - 0.Nodes.1.Name: invalid value (test): duplicate - must be unique diff --git a/core/services/chainlink/testdata/config-invalid.toml b/core/services/chainlink/testdata/config-invalid.toml index ca22e68c22c..411741b1b5b 100644 --- a/core/services/chainlink/testdata/config-invalid.toml +++ b/core/services/chainlink/testdata/config-invalid.toml @@ -117,6 +117,25 @@ Name = 'scroll node' WSURL = 'ws://foo.bar' HTTPURl = 'http://foo.bar' +[[EVM]] +ChainID = '100' +LogBroadcasterEnabled = false + +[[EVM.Nodes]] +Name = 'failing-fake' +HTTPURl = 'http://foo.bar1' + +[[EVM]] +ChainID = '101' +LogBroadcasterEnabled = false + +[EVM.NodePool] +NewHeadsPollInterval = '1s' + +[[EVM.Nodes]] +Name = 'passing-fake' +HTTPURl = 'http://foo.bar2' + [[Cosmos]] ChainID = 'Malaga-420' diff --git a/core/services/registrysyncer/monitoring.go b/core/services/registrysyncer/monitoring.go index 0b75e798625..97d139d044f 100644 --- a/core/services/registrysyncer/monitoring.go +++ b/core/services/registrysyncer/monitoring.go @@ -7,7 +7,9 @@ import ( "go.opentelemetry.io/otel/metric" "github.com/smartcontractkit/chainlink-common/pkg/beholder" - "github.com/smartcontractkit/chainlink/v2/core/monitoring" + "github.com/smartcontractkit/chainlink-common/pkg/metrics" + + localMonitoring "github.com/smartcontractkit/chainlink/v2/core/monitoring" ) var remoteRegistrySyncFailureCounter metric.Int64Counter @@ -30,7 +32,7 @@ func initMonitoringResources() (err error) { // syncerMetricLabeler wraps monitoring.MetricsLabeler to provide workflow specific utilities // for monitoring resources type syncerMetricLabeler struct { - monitoring.MetricsLabeler + metrics.Labeler } func (c syncerMetricLabeler) with(keyValues ...string) syncerMetricLabeler { @@ -38,11 +40,11 @@ func (c syncerMetricLabeler) with(keyValues ...string) syncerMetricLabeler { } func (c syncerMetricLabeler) incrementRemoteRegistryFailureCounter(ctx context.Context) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) remoteRegistrySyncFailureCounter.Add(ctx, 1, metric.WithAttributes(otelLabels...)) } func (c syncerMetricLabeler) incrementLauncherFailureCounter(ctx context.Context) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) launcherFailureCounter.Add(ctx, 1, metric.WithAttributes(otelLabels...)) } diff --git a/core/services/registrysyncer/monitoring_test.go b/core/services/registrysyncer/monitoring_test.go index f19f43393a1..1ddb6c57997 100644 --- a/core/services/registrysyncer/monitoring_test.go +++ b/core/services/registrysyncer/monitoring_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/smartcontractkit/chainlink/v2/core/monitoring" + "github.com/smartcontractkit/chainlink-common/pkg/metrics" ) func Test_InitMonitoringResources(t *testing.T) { @@ -13,7 +13,7 @@ func Test_InitMonitoringResources(t *testing.T) { } func Test_SyncerMetricsLabeler(t *testing.T) { - testSyncerMetricLabeler := syncerMetricLabeler{monitoring.NewMetricsLabeler()} + testSyncerMetricLabeler := syncerMetricLabeler{metrics.NewLabeler()} testSyncerMetricLabeler2 := testSyncerMetricLabeler.with("foo", "baz") require.EqualValues(t, testSyncerMetricLabeler2.Labels["foo"], "baz") } diff --git a/core/services/relay/evm/codec/codec_test.go b/core/services/relay/evm/codec/codec_test.go index 12455dd9aee..d63ed5342c4 100644 --- a/core/services/relay/evm/codec/codec_test.go +++ b/core/services/relay/evm/codec/codec_test.go @@ -217,7 +217,7 @@ func (it *codecInterfaceTester) GetCodec(t *testing.T) commontypes.Codec { if strings.StringInSlice(k, []string{TestItemType, TestItemSliceType, TestItemArray1Type, TestItemArray2Type, TestItemWithConfigExtra}) { addressByteModifier := &commoncodec.AddressBytesToStringModifierConfig{ - Fields: []string{"AccountStr"}, + Fields: []string{"AccountStruct.AccountStr"}, Modifier: codec.EVMAddressModifier{}, } @@ -227,8 +227,8 @@ func (it *codecInterfaceTester) GetCodec(t *testing.T) commontypes.Codec { if k == TestItemWithConfigExtra { hardCode := &commoncodec.HardCodeModifierConfig{ OnChainValues: map[string]any{ - "BigField": testStruct.BigField.String(), - "Account": hexutil.Encode(testStruct.Account), + "BigField": testStruct.BigField.String(), + "AccountStruct.Account": hexutil.Encode(testStruct.AccountStruct.Account), }, OffChainValues: map[string]any{"ExtraField": anyExtraValue}, } @@ -315,13 +315,17 @@ var nestedStatic = []abi.ArgumentMarshaling{ {Name: "Inner", Type: "tuple", Components: innerStatic}, } +var accountStruct = []abi.ArgumentMarshaling{ + {Name: "Account", Type: "address"}, + {Name: "AccountStr", Type: "address"}, +} + var ts = []abi.ArgumentMarshaling{ {Name: "Field", Type: "int32"}, {Name: "DifferentField", Type: "string"}, {Name: "OracleId", Type: "uint8"}, {Name: "OracleIds", Type: "uint8[32]"}, - {Name: "Account", Type: "address"}, - {Name: "AccountStr", Type: "address"}, + {Name: "AccountStruct", Type: "tuple", Components: accountStruct}, {Name: "Accounts", Type: "address[]"}, {Name: "BigField", Type: "int192"}, {Name: "NestedDynamicStruct", Type: "tuple", Components: nestedDynamic}, @@ -379,8 +383,7 @@ func argsFromTestStruct(ts TestStruct) []any { ts.DifferentField, uint8(ts.OracleID), getOracleIDs(ts), - common.Address(ts.Account), - common.HexToAddress(ts.AccountStr), + evmtesting.AccountStructToInternalType(ts.AccountStruct), getAccounts(ts), ts.BigField, evmtesting.MidDynamicToInternalType(ts.NestedDynamicStruct), diff --git a/core/services/relay/evm/evmtesting/chain_components_interface_tester.go b/core/services/relay/evm/evmtesting/chain_components_interface_tester.go index 72360afd167..968c7667882 100644 --- a/core/services/relay/evm/evmtesting/chain_components_interface_tester.go +++ b/core/services/relay/evm/evmtesting/chain_components_interface_tester.go @@ -9,14 +9,15 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + gethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/jmoiron/sqlx" "github.com/smartcontractkit/libocr/commontypes" + "github.com/stretchr/testify/require" commoncodec "github.com/smartcontractkit/chainlink-common/pkg/codec" clcommontypes "github.com/smartcontractkit/chainlink-common/pkg/types" . "github.com/smartcontractkit/chainlink-common/pkg/types/interfacetests" //nolint common practice to import test mods with . "github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives" - "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client" @@ -26,13 +27,11 @@ import ( evmtxmgr "github.com/smartcontractkit/chainlink/v2/core/chains/evm/txmgr" evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/chain_reader_tester" + "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" _ "github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest" // force binding for tx type "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm" "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/types" - - gethtypes "github.com/ethereum/go-ethereum/core/types" - "github.com/stretchr/testify/require" ) const ( @@ -115,7 +114,7 @@ func (it *EVMChainComponentsInterfaceTester[T]) Setup(t T) { &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedDynamicStruct.Inner.IntVal": "I"}}, &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedStaticStruct.Inner.IntVal": "I"}}, &commoncodec.AddressBytesToStringModifierConfig{ - Fields: []string{"AccountStr"}, + Fields: []string{"AccountStruct.AccountStr"}, }, }, } @@ -154,7 +153,7 @@ func (it *EVMChainComponentsInterfaceTester[T]) Setup(t T) { &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedDynamicStruct.Inner.IntVal": "I"}}, &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedStaticStruct.Inner.IntVal": "I"}}, &commoncodec.AddressBytesToStringModifierConfig{ - Fields: []string{"AccountStr"}, + Fields: []string{"AccountStruct.AccountStr"}, }, }, }, @@ -176,7 +175,7 @@ func (it *EVMChainComponentsInterfaceTester[T]) Setup(t T) { ReadType: types.Event, OutputModifications: commoncodec.ModifiersConfig{ &commoncodec.AddressBytesToStringModifierConfig{ - Fields: []string{"AccountStr"}, + Fields: []string{"AccountStruct.AccountStr"}, }, }, }, @@ -212,14 +211,14 @@ func (it *EVMChainComponentsInterfaceTester[T]) Setup(t T) { InputModifications: commoncodec.ModifiersConfig{ &commoncodec.HardCodeModifierConfig{ OnChainValues: map[string]any{ - "BigField": testStruct.BigField.String(), - "Account": hexutil.Encode(testStruct.Account), + "BigField": testStruct.BigField.String(), + "AccountStruct.Account": hexutil.Encode(testStruct.AccountStruct.Account), }, }, &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedDynamicStruct.Inner.IntVal": "I"}}, &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedStaticStruct.Inner.IntVal": "I"}}, &commoncodec.AddressBytesToStringModifierConfig{ - Fields: []string{"AccountStr"}, + Fields: []string{"AccountStruct.AccountStr"}, }, }, OutputModifications: commoncodec.ModifiersConfig{ @@ -227,7 +226,7 @@ func (it *EVMChainComponentsInterfaceTester[T]) Setup(t T) { &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedDynamicStruct.Inner.IntVal": "I"}}, &commoncodec.RenameModifierConfig{Fields: map[string]string{"NestedStaticStruct.Inner.IntVal": "I"}}, &commoncodec.AddressBytesToStringModifierConfig{ - Fields: []string{"AccountStr"}, + Fields: []string{"AccountStruct.AccountStr"}, }, }, }, @@ -483,8 +482,7 @@ func ToInternalType(testStruct TestStruct) chain_reader_tester.TestStruct { DifferentField: testStruct.DifferentField, OracleId: byte(testStruct.OracleID), OracleIds: OracleIDsToBytes(testStruct.OracleIDs), - Account: common.Address(testStruct.Account), - AccountStr: common.HexToAddress(testStruct.AccountStr), + AccountStruct: AccountStructToInternalType(testStruct.AccountStruct), Accounts: ConvertAccounts(testStruct.Accounts), BigField: testStruct.BigField, NestedDynamicStruct: MidDynamicToInternalType(testStruct.NestedDynamicStruct), @@ -492,6 +490,13 @@ func ToInternalType(testStruct TestStruct) chain_reader_tester.TestStruct { } } +func AccountStructToInternalType(a AccountStruct) chain_reader_tester.AccountStruct { + return chain_reader_tester.AccountStruct{ + Account: common.Address(a.Account), + AccountStr: common.HexToAddress(a.AccountStr), + } +} + func MidDynamicToInternalType(m MidLevelDynamicTestStruct) chain_reader_tester.MidLevelDynamicTestStruct { return chain_reader_tester.MidLevelDynamicTestStruct{ FixedBytes: m.FixedBytes, diff --git a/core/services/workflows/engine.go b/core/services/workflows/engine.go index 3b77a8db3a5..fe245e2208b 100644 --- a/core/services/workflows/engine.go +++ b/core/services/workflows/engine.go @@ -9,18 +9,17 @@ import ( "sync" "time" - "github.com/smartcontractkit/chainlink/v2/core/monitoring" - "github.com/jonboulle/clockwork" - "github.com/smartcontractkit/chainlink-common/pkg/workflows/exec" - "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities" + "github.com/smartcontractkit/chainlink-common/pkg/custmsg" + "github.com/smartcontractkit/chainlink-common/pkg/metrics" "github.com/smartcontractkit/chainlink-common/pkg/services" "github.com/smartcontractkit/chainlink-common/pkg/types/core" "github.com/smartcontractkit/chainlink-common/pkg/values" "github.com/smartcontractkit/chainlink-common/pkg/workflows" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/exec" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" "github.com/smartcontractkit/chainlink/v2/core/capabilities/transmission" "github.com/smartcontractkit/chainlink/v2/core/logger" @@ -96,7 +95,7 @@ type secretsFetcher interface { // Engine handles the lifecycle of a single workflow and its executions. type Engine struct { services.StateMachine - cma monitoring.CustomMessageLabeler + cma custmsg.Labeler metrics workflowsMetricLabeler logger logger.Logger registry core.CapabilitiesRegistry @@ -1182,8 +1181,8 @@ func NewEngine(cfg Config) (engine *Engine, err error) { engine = &Engine{ logger: cfg.Lggr.Named("WorkflowEngine").With("workflowID", cfg.WorkflowID), - cma: monitoring.NewCustomMessageLabeler().With(wIDKey, cfg.WorkflowID, woIDKey, cfg.WorkflowOwner, wnKey, workflow.name), - metrics: workflowsMetricLabeler{monitoring.NewMetricsLabeler().With(wIDKey, cfg.WorkflowID, woIDKey, cfg.WorkflowOwner, wnKey, workflow.name)}, + cma: custmsg.NewLabeler().With(wIDKey, cfg.WorkflowID, woIDKey, cfg.WorkflowOwner, wnKey, workflow.name), + metrics: workflowsMetricLabeler{metrics.NewLabeler().With(wIDKey, cfg.WorkflowID, woIDKey, cfg.WorkflowOwner, wnKey, workflow.name)}, registry: cfg.Registry, workflow: workflow, secretsFetcher: cfg.SecretsFetcher, @@ -1241,7 +1240,7 @@ func (e *workflowError) Error() string { return errStr } -func logCustMsg(cma monitoring.CustomMessageLabeler, msg string, log logger.Logger) { +func logCustMsg(cma custmsg.Labeler, msg string, log logger.Logger) { err := cma.SendLogAsCustomMessage(msg) if err != nil { log.Errorf("failed to send custom message with msg: %s", msg) diff --git a/core/services/workflows/models.go b/core/services/workflows/models.go index f6adb737264..0faf66d9883 100644 --- a/core/services/workflows/models.go +++ b/core/services/workflows/models.go @@ -26,8 +26,6 @@ type workflow struct { graph.Graph[string, *step] triggers []*triggerCapability - - spec *sdk.WorkflowSpec } func (w *workflow) walkDo(start string, do func(s *step) error) error { @@ -110,7 +108,6 @@ func createWorkflow(wf2 *workflows.DependencyGraph) (*workflow, error) { out := &workflow{ id: wf2.ID, triggers: []*triggerCapability{}, - spec: wf2.Spec, } for _, t := range wf2.Triggers { diff --git a/core/services/workflows/monitoring.go b/core/services/workflows/monitoring.go index 7c978196b13..48c1519914f 100644 --- a/core/services/workflows/monitoring.go +++ b/core/services/workflows/monitoring.go @@ -7,7 +7,9 @@ import ( "go.opentelemetry.io/otel/metric" "github.com/smartcontractkit/chainlink-common/pkg/beholder" - "github.com/smartcontractkit/chainlink/v2/core/monitoring" + "github.com/smartcontractkit/chainlink-common/pkg/metrics" + + localMonitoring "github.com/smartcontractkit/chainlink/v2/core/monitoring" ) var registerTriggerFailureCounter metric.Int64Counter @@ -48,7 +50,7 @@ func initMonitoringResources() (err error) { // workflowsMetricLabeler wraps monitoring.MetricsLabeler to provide workflow specific utilities // for monitoring resources type workflowsMetricLabeler struct { - monitoring.MetricsLabeler + metrics.Labeler } func (c workflowsMetricLabeler) with(keyValues ...string) workflowsMetricLabeler { @@ -56,27 +58,27 @@ func (c workflowsMetricLabeler) with(keyValues ...string) workflowsMetricLabeler } func (c workflowsMetricLabeler) incrementRegisterTriggerFailureCounter(ctx context.Context) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) registerTriggerFailureCounter.Add(ctx, 1, metric.WithAttributes(otelLabels...)) } func (c workflowsMetricLabeler) incrementCapabilityInvocationCounter(ctx context.Context) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) capabilityInvocationCounter.Add(ctx, 1, metric.WithAttributes(otelLabels...)) } func (c workflowsMetricLabeler) updateWorkflowExecutionLatencyGauge(ctx context.Context, val int64) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) workflowExecutionLatencyGauge.Record(ctx, val, metric.WithAttributes(otelLabels...)) } func (c workflowsMetricLabeler) incrementTotalWorkflowStepErrorsCounter(ctx context.Context) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) workflowStepErrorCounter.Add(ctx, 1, metric.WithAttributes(otelLabels...)) } func (c workflowsMetricLabeler) updateTotalWorkflowsGauge(ctx context.Context, val int64) { - otelLabels := monitoring.KvMapToOtelAttributes(c.Labels) + otelLabels := localMonitoring.KvMapToOtelAttributes(c.Labels) workflowsRunningGauge.Record(ctx, val, metric.WithAttributes(otelLabels...)) } diff --git a/core/services/workflows/monitoring_test.go b/core/services/workflows/monitoring_test.go index c0576b25a93..5910e583c95 100644 --- a/core/services/workflows/monitoring_test.go +++ b/core/services/workflows/monitoring_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/smartcontractkit/chainlink/v2/core/monitoring" + "github.com/smartcontractkit/chainlink-common/pkg/metrics" ) func Test_InitMonitoringResources(t *testing.T) { @@ -13,7 +13,7 @@ func Test_InitMonitoringResources(t *testing.T) { } func Test_WorkflowMetricsLabeler(t *testing.T) { - testWorkflowsMetricLabeler := workflowsMetricLabeler{monitoring.NewMetricsLabeler()} + testWorkflowsMetricLabeler := workflowsMetricLabeler{metrics.NewLabeler()} testWorkflowsMetricLabeler2 := testWorkflowsMetricLabeler.with("foo", "baz") require.EqualValues(t, testWorkflowsMetricLabeler2.Labels["foo"], "baz") } diff --git a/go.md b/go.md index d9d4ea5cf35..57c58c5dead 100644 --- a/go.md +++ b/go.md @@ -1,4 +1,5 @@ # smartcontractkit Go modules +## Main module ```mermaid flowchart LR subgraph chains @@ -22,8 +23,13 @@ flowchart LR tdh2/go/ocr2/decryptionplugin end + subgraph chainlink-protos + chainlink-protos/orchestrator + chainlink-protos/job-distributor + end + classDef outline stroke-dasharray:6,fill:none; - class chains,products,tdh2 outline + class chains,products,tdh2,chainlink-protos outline chainlink/v2 --> chain-selectors click chain-selectors href "https://github.com/smartcontractkit/chain-selectors" @@ -81,3 +87,189 @@ flowchart LR tdh2/go/ocr2/decryptionplugin --> libocr tdh2/go/ocr2/decryptionplugin --> tdh2/go/tdh2 ``` +## All modules +```mermaid +flowchart LR + subgraph chainlink + chainlink/v2 + chainlink/integration-tests + chainlink/load-tests + chainlink/core/scripts + end + + subgraph chains + chainlink-cosmos + chainlink-solana + chainlink-starknet/relayer + chainlink-evm + end + + subgraph products + chainlink-automation + chainlink-ccip + chainlink-data-streams + chainlink-feeds + chainlink-functions + chainlink-vrf + end + + subgraph tdh2 + tdh2/go/tdh2 + tdh2/go/ocr2/decryptionplugin + end + + subgraph chainlink-testing-framework + chainlink-testing-framework/grafana + chainlink-testing-framework/havoc + chainlink-testing-framework/lib + chainlink-testing-framework/lib/grafana + chainlink-testing-framework/seth + chainlink-testing-framework/wasp + end + + subgraph chainlink-protos + chainlink-protos/orchestrator + chainlink-protos/job-distributor + end + + classDef outline stroke-dasharray:6,fill:none; + class chainlink,chains,products,tdh2,chainlink-protos,chainlink-testing-framework outline + + chainlink/v2 --> chain-selectors + click chain-selectors href "https://github.com/smartcontractkit/chain-selectors" + chainlink/v2 --> chainlink-automation + click chainlink-automation href "https://github.com/smartcontractkit/chainlink-automation" + chainlink/v2 --> chainlink-ccip + click chainlink-ccip href "https://github.com/smartcontractkit/chainlink-ccip" + chainlink/v2 --> chainlink-common + click chainlink-common href "https://github.com/smartcontractkit/chainlink-common" + chainlink/v2 --> chainlink-cosmos + click chainlink-cosmos href "https://github.com/smartcontractkit/chainlink-cosmos" + chainlink/v2 --> chainlink-data-streams + click chainlink-data-streams href "https://github.com/smartcontractkit/chainlink-data-streams" + chainlink/v2 --> chainlink-feeds + click chainlink-feeds href "https://github.com/smartcontractkit/chainlink-feeds" + chainlink/v2 --> chainlink-protos/orchestrator + click chainlink-protos/orchestrator href "https://github.com/smartcontractkit/chainlink-protos" + chainlink/v2 --> chainlink-solana + click chainlink-solana href "https://github.com/smartcontractkit/chainlink-solana" + chainlink/v2 --> chainlink-starknet/relayer + click chainlink-starknet/relayer href "https://github.com/smartcontractkit/chainlink-starknet" + chainlink/v2 --> grpc-proxy + click grpc-proxy href "https://github.com/smartcontractkit/grpc-proxy" + chainlink/v2 --> libocr + click libocr href "https://github.com/smartcontractkit/libocr" + chainlink/v2 --> tdh2/go/ocr2/decryptionplugin + click tdh2/go/ocr2/decryptionplugin href "https://github.com/smartcontractkit/tdh2" + chainlink/v2 --> tdh2/go/tdh2 + click tdh2/go/tdh2 href "https://github.com/smartcontractkit/tdh2" + chainlink/v2 --> wsrpc + click wsrpc href "https://github.com/smartcontractkit/wsrpc" + chainlink-automation --> chainlink-common + chainlink-automation --> libocr + chainlink-ccip --> chain-selectors + chainlink-ccip --> chainlink-common + chainlink-ccip --> libocr + chainlink-common --> grpc-proxy + chainlink-common --> libocr + chainlink-cosmos --> chainlink-common + chainlink-cosmos --> libocr + chainlink-cosmos --> grpc-proxy + chainlink-data-streams --> chainlink-common + chainlink-data-streams --> libocr + chainlink-data-streams --> grpc-proxy + chainlink-feeds --> chainlink-common + chainlink-feeds --> libocr + chainlink-feeds --> grpc-proxy + chainlink-protos/orchestrator --> wsrpc + chainlink-solana --> chainlink-common + chainlink-solana --> libocr + chainlink-solana --> grpc-proxy + chainlink-starknet/relayer --> chainlink-common + chainlink-starknet/relayer --> libocr + chainlink-starknet/relayer --> grpc-proxy + tdh2/go/ocr2/decryptionplugin --> libocr + tdh2/go/ocr2/decryptionplugin --> tdh2/go/tdh2 + chainlink/core/scripts --> ccip-owner-contracts + click ccip-owner-contracts href "https://github.com/smartcontractkit/ccip-owner-contracts" + chainlink/core/scripts --> chain-selectors + chainlink/core/scripts --> chainlink-automation + chainlink/core/scripts --> chainlink-ccip + chainlink/core/scripts --> chainlink-common + chainlink/core/scripts --> chainlink-cosmos + chainlink/core/scripts --> chainlink-data-streams + chainlink/core/scripts --> chainlink-feeds + chainlink/core/scripts --> chainlink-protos/job-distributor + click chainlink-protos/job-distributor href "https://github.com/smartcontractkit/chainlink-protos" + chainlink/core/scripts --> chainlink-protos/orchestrator + chainlink/core/scripts --> chainlink-solana + chainlink/core/scripts --> chainlink-starknet/relayer + chainlink/core/scripts --> chainlink/integration-tests + click chainlink/integration-tests href "https://github.com/smartcontractkit/chainlink" + chainlink/core/scripts --> chainlink/v2 + click chainlink/v2 href "https://github.com/smartcontractkit/chainlink" + chainlink/core/scripts --> grpc-proxy + chainlink/core/scripts --> libocr + chainlink/core/scripts --> tdh2/go/ocr2/decryptionplugin + chainlink/core/scripts --> tdh2/go/tdh2 + chainlink/core/scripts --> wsrpc + ccip-owner-contracts --> chain-selectors + chainlink/integration-tests --> ccip-owner-contracts + chainlink/integration-tests --> chain-selectors + chainlink/integration-tests --> chainlink-automation + chainlink/integration-tests --> chainlink-ccip + chainlink/integration-tests --> chainlink-common + chainlink/integration-tests --> chainlink-protos/job-distributor + chainlink/integration-tests --> chainlink-testing-framework/havoc + click chainlink-testing-framework/havoc href "https://github.com/smartcontractkit/chainlink-testing-framework" + chainlink/integration-tests --> chainlink-testing-framework/lib + click chainlink-testing-framework/lib href "https://github.com/smartcontractkit/chainlink-testing-framework" + chainlink/integration-tests --> chainlink-testing-framework/lib/grafana + click chainlink-testing-framework/lib/grafana href "https://github.com/smartcontractkit/chainlink-testing-framework" + chainlink/integration-tests --> chainlink-testing-framework/seth + click chainlink-testing-framework/seth href "https://github.com/smartcontractkit/chainlink-testing-framework" + chainlink/integration-tests --> chainlink-testing-framework/wasp + click chainlink-testing-framework/wasp href "https://github.com/smartcontractkit/chainlink-testing-framework" + chainlink/integration-tests --> chainlink/v2 + chainlink/integration-tests --> libocr + chainlink/integration-tests --> chainlink-cosmos + chainlink/integration-tests --> chainlink-data-streams + chainlink/integration-tests --> chainlink-feeds + chainlink/integration-tests --> chainlink-protos/orchestrator + chainlink/integration-tests --> chainlink-solana + chainlink/integration-tests --> chainlink-starknet/relayer + chainlink/integration-tests --> grpc-proxy + chainlink/integration-tests --> tdh2/go/ocr2/decryptionplugin + chainlink/integration-tests --> tdh2/go/tdh2 + chainlink/integration-tests --> wsrpc + chainlink-testing-framework/havoc --> chainlink-testing-framework/lib/grafana + chainlink-testing-framework/lib --> chainlink-testing-framework/seth + chainlink-testing-framework/lib --> chainlink-testing-framework/wasp + chainlink-testing-framework/lib --> chainlink-testing-framework/grafana + click chainlink-testing-framework/grafana href "https://github.com/smartcontractkit/chainlink-testing-framework" + chainlink-testing-framework/seth --> seth + click seth href "https://github.com/smartcontractkit/seth" + chainlink-testing-framework/wasp --> chainlink-testing-framework/lib/grafana + chainlink/load-tests --> chain-selectors + chainlink/load-tests --> chainlink-automation + chainlink/load-tests --> chainlink-ccip + chainlink/load-tests --> chainlink-common + chainlink/load-tests --> chainlink-cosmos + chainlink/load-tests --> chainlink-data-streams + chainlink/load-tests --> chainlink-feeds + chainlink/load-tests --> chainlink-protos/orchestrator + chainlink/load-tests --> chainlink-solana + chainlink/load-tests --> chainlink-starknet/relayer + chainlink/load-tests --> chainlink-testing-framework/havoc + chainlink/load-tests --> chainlink-testing-framework/lib + chainlink/load-tests --> chainlink-testing-framework/lib/grafana + chainlink/load-tests --> chainlink-testing-framework/seth + chainlink/load-tests --> chainlink-testing-framework/wasp + chainlink/load-tests --> chainlink/integration-tests + chainlink/load-tests --> chainlink/v2 + chainlink/load-tests --> grpc-proxy + chainlink/load-tests --> libocr + chainlink/load-tests --> tdh2/go/ocr2/decryptionplugin + chainlink/load-tests --> tdh2/go/tdh2 + chainlink/load-tests --> wsrpc +``` diff --git a/go.mod b/go.mod index 7cb5f85c03b..0e8e78aa491 100644 --- a/go.mod +++ b/go.mod @@ -76,12 +76,12 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.27 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47 - github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 + github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e github.com/smartcontractkit/chainlink-feeds v0.1.1 github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 github.com/smartcontractkit/libocr v0.0.0-20241007185508-adbe57025f12 github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de @@ -101,9 +101,9 @@ require ( go.dedis.ch/fixbuf v1.0.3 go.dedis.ch/kyber/v3 v3.1.0 go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 - go.opentelemetry.io/otel v1.28.0 - go.opentelemetry.io/otel/metric v1.28.0 - go.opentelemetry.io/otel/trace v1.28.0 + go.opentelemetry.io/otel v1.30.0 + go.opentelemetry.io/otel/metric v1.30.0 + go.opentelemetry.io/otel/trace v1.30.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.27.0 @@ -116,7 +116,7 @@ require ( golang.org/x/time v0.6.0 golang.org/x/tools v0.25.0 gonum.org/v1/gonum v0.15.0 - google.golang.org/grpc v1.65.0 + google.golang.org/grpc v1.66.1 google.golang.org/protobuf v1.35.1 gopkg.in/guregu/null.v4 v4.0.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 @@ -337,24 +337,27 @@ require ( go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 // indirect - go.opentelemetry.io/otel/log v0.4.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.4.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect + go.opentelemetry.io/otel/log v0.6.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.6.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/ratelimit v0.3.0 // indirect golang.org/x/arch v0.8.0 // indirect golang.org/x/sys v0.25.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/guregu/null.v2 v2.1.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 4ae7f7c1c94..ead27cb41d2 100644 --- a/go.sum +++ b/go.sum @@ -1057,8 +1057,8 @@ github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgB github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47 h1:kyOANlbz29uaevkjRaXlO1750A43xAvwAOKXiVNWpFQ= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47/go.mod h1:4adKaHNaxFsRvV/lYfqtbsWyyvIPUMLR0FdOJN/ljis= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 h1:qx5p01fqee86cj6EUOCzFc2zILw56v1Q3c5DUuEQWLs= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286/go.mod h1:tsGgeEJc5SUSlfVGSX0wR0EkRU3pM58D6SKF97V68ko= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d h1:34F6OuNyPwCwBXBG8I+s6BbngHlVNOtDKWMOZ9iXOpY= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d/go.mod h1:TQ9/KKXZ9vr8QAlUquqGpSvDCpR+DtABKPXZY4CiRns= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f h1:BwrIaQIx5Iy6eT+DfLhFfK2XqjxRm74mVdlX8gbu4dw= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f/go.mod h1:wHtwSR3F1CQSJJZDQKuqaqFYnvkT+kMyget7dl8Clvo= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e h1:JiETqdNM0bktAUGMc62COwXIaw3rR3M77Me6bBLG0Fg= @@ -1067,8 +1067,8 @@ github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6An github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 h1:ZUihu/AMiFkZgO5XkVcpFayhIUibdovHzpbHnMPZUr0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4/go.mod h1:iZugccCLpPWtcGiR/8gurre2j3RtyKnqd1FcVR0NzQw= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= @@ -1253,35 +1253,41 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1: go.opentelemetry.io/contrib/propagators/b3 v1.24.0 h1:n4xwCdTx3pZqZs2CjS/CUZAs03y3dZcGhC/FepKtEUY= go.opentelemetry.io/contrib/propagators/b3 v1.24.0/go.mod h1:k5wRxKRU2uXx2F8uNJ4TaonuEO/V7/5xoz7kdsDACT8= go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 h1:UiRNKd1OgqsLbFwE+wkAWTdiAxXtCBqKIHeBIse4FUA= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9/go.mod h1:eqZlW3pJWhjyexnDPrdQxix1pn0wwhI4AO4GKpP/bMI= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 h1:QSKmLBzbFULSyHzOdO9JsN9lpE4zkrz1byYGmJecdVE= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0/go.mod h1:sTQ/NH8Yrirf0sJ5rWqVu+oT82i4zL9FaF6rWcqnptM= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 h1:U2guen0GhqH8o/G2un8f/aG/y++OuW6MyCo6hT9prXk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0/go.mod h1:yeGZANgEcpdx/WK0IvvRFC+2oLiMS2u4L/0Rj2M2Qr0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 h1:VrMAbeJz4gnVDg2zEzjHG4dEH86j4jO6VYB+NgtGD8s= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0/go.mod h1:qqN/uFdpeitTvm+JDqqnjm517pmQRYxTORbETHq5tOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 h1:lsInsfvhVIfOI6qHVyysXMNDnjO9Npvl7tlDPJFBVd4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0/go.mod h1:KQsVNh4OjgjTG0G6EiNi1jVpnaeeKsKMRwbLN+f1+8M= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 h1:umZgi92IyxfXd/l4kaDhnKgY8rnN/cZcF1LKc6I8OQ8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0/go.mod h1:4lVs6obhSVRb1EW5FhOuBTyiQhtRtAnnva9vD3yRfq8= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 h1:0MH3f8lZrflbUWXVxyBg/zviDFdGE062uKh5+fu8Vv0= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0/go.mod h1:Vh68vYiHY5mPdekTr0ox0sALsqjoVy0w3Os278yX5SQ= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 h1:BJee2iLkfRfl9lc7aFmBwkWxY/RI1RDdXepSF6y8TPE= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0/go.mod h1:DIzlHs3DRscCIBU3Y9YSzPfScwnYnzfnCd4g8zA7bZc= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bEkIYOVMw4q1WJxIAGoFTrtYOzWuRQ= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= -go.opentelemetry.io/otel/log v0.4.0 h1:/vZ+3Utqh18e8TPjuc3ecg284078KWrR8BRz+PQAj3o= -go.opentelemetry.io/otel/log v0.4.0/go.mod h1:DhGnQvky7pHy82MIRV43iXh3FlKN8UUKftn0KbLOq6I= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/sdk/log v0.4.0 h1:1mMI22L82zLqf6KtkjrRy5BbagOTWdJsqMY/HSqILAA= -go.opentelemetry.io/otel/sdk/log v0.4.0/go.mod h1:AYJ9FVF0hNOgAVzUG/ybg/QttnXhUePWAupmCqtdESo= -go.opentelemetry.io/otel/sdk/metric v1.28.0 h1:OkuaKgKrgAbYrrY0t92c+cC+2F6hsFNnCQArXCKlg08= -go.opentelemetry.io/otel/sdk/metric v1.28.0/go.mod h1:cWPjykihLAPvXKi4iZc1dpER3Jdq2Z0YLse3moQUCpg= +go.opentelemetry.io/otel/log v0.6.0 h1:nH66tr+dmEgW5y+F9LanGJUBYPrRgP4g2EkmPE3LeK8= +go.opentelemetry.io/otel/log v0.6.0/go.mod h1:KdySypjQHhP069JX0z/t26VHwa8vSwzgaKmXtIB3fJM= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk/log v0.6.0 h1:4J8BwXY4EeDE9Mowg+CyhWVBhTSLXVXodiXxS/+PGqI= +go.opentelemetry.io/otel/sdk/log v0.6.0/go.mod h1:L1DN8RMAduKkrwRAFDEX3E3TLOq46+XMGSbUfHU/+vE= +go.opentelemetry.io/otel/sdk/metric v1.30.0 h1:QJLT8Pe11jyHBHfSAgYH7kEmT24eX792jZO1bo4BXkM= +go.opentelemetry.io/otel/sdk/metric v1.30.0/go.mod h1:waS6P3YqFNzeP01kuo/MBBYqaoBJl7efRQHOaydhy1Y= go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1648,10 +1654,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d h1:/hmn0Ku5kWij/kjGsrcJeC1T/MrJi2iNWwgAqrihFwc= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd h1:BBOTEWLuuEGQy9n1y9MhVJ9Qt0BDu21X8qZs71/uPZo= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd h1:6TEm2ZxXoQmFWFlt1vNxvVOa1Q0dXFQD1m/rYjXmS0E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1667,8 +1673,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.1 h1:hO5qAXR19+/Z44hmvIM4dQFMSYX9XcWsByfoxutBpAM= +google.golang.org/grpc v1.66.1/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/integration-tests/deployment/ccip/add_lane.go b/integration-tests/deployment/ccip/add_lane.go index ab1e8f3d91b..985ef001b04 100644 --- a/integration-tests/deployment/ccip/add_lane.go +++ b/integration-tests/deployment/ccip/add_lane.go @@ -69,7 +69,7 @@ func AddLane(e deployment.Environment, state CCIPOnChainState, from, to uint64) []fee_quoter.FeeQuoterDestChainConfigArgs{ { DestChainSelector: to, - DestChainConfig: defaultFeeQuoterDestChainConfig(), + DestChainConfig: DefaultFeeQuoterDestChainConfig(), }, }) if _, err := deployment.ConfirmIfNoError(e.Chains[from], tx, err); err != nil { @@ -98,7 +98,7 @@ func AddLane(e deployment.Environment, state CCIPOnChainState, from, to uint64) return err } -func defaultFeeQuoterDestChainConfig() fee_quoter.FeeQuoterDestChainConfig { +func DefaultFeeQuoterDestChainConfig() fee_quoter.FeeQuoterDestChainConfig { // https://github.com/smartcontractkit/ccip/blob/c4856b64bd766f1ddbaf5d13b42d3c4b12efde3a/contracts/src/v0.8/ccip/libraries/Internal.sol#L337-L337 /* ```Solidity diff --git a/integration-tests/deployment/ccip/add_lane_test.go b/integration-tests/deployment/ccip/add_lane_test.go index e63d1845774..040b7f781b0 100644 --- a/integration-tests/deployment/ccip/add_lane_test.go +++ b/integration-tests/deployment/ccip/add_lane_test.go @@ -16,7 +16,7 @@ func TestAddLane(t *testing.T) { // TODO: The offchain code doesn't yet support partial lane // enablement, need to address then re-enable this test. t.Skip() - e := NewMemoryEnvironmentWithJobs(t, logger.TestLogger(t), 3) + e := NewMemoryEnvironmentWithJobs(t, logger.TestLogger(t), 3, 4) // Here we have CR + nodes set up, but no CCIP contracts deployed. state, err := LoadOnchainState(e.Env, e.Ab) require.NoError(t, err) diff --git a/integration-tests/deployment/ccip/changeset/active_candidate.go b/integration-tests/deployment/ccip/changeset/active_candidate.go new file mode 100644 index 00000000000..708fb58ac90 --- /dev/null +++ b/integration-tests/deployment/ccip/changeset/active_candidate.go @@ -0,0 +1,212 @@ +package changeset + +import ( + "fmt" + "math/big" + + "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/mcms" + "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" + + "github.com/smartcontractkit/chainlink/integration-tests/deployment" + ccdeploy "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip" + cctypes "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_home" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry" +) + +// SetCandidateExecPluginOps calls setCandidate on CCIPHome contract through the UpdateDON call on CapReg contract +// This proposes to set up OCR3 config for the provided plugin for the DON +func SetCandidateOnExistingDon( + pluginConfig ccip_home.CCIPHomeOCR3Config, + capReg *capabilities_registry.CapabilitiesRegistry, + ccipHome *ccip_home.CCIPHome, + chainSelector uint64, + nodes deployment.Nodes, +) ([]mcms.Operation, error) { + // fetch DON ID for the chain + donID, err := ccdeploy.DonIDForChain(capReg, ccipHome, chainSelector) + if err != nil { + return nil, fmt.Errorf("fetch don id for chain: %w", err) + } + fmt.Printf("donID: %d", donID) + encodedSetCandidateCall, err := ccdeploy.CCIPHomeABI.Pack( + "setCandidate", + donID, + pluginConfig.PluginType, + pluginConfig, + [32]byte{}, + ) + if err != nil { + return nil, fmt.Errorf("pack set candidate call: %w", err) + } + + // set candidate call + updateDonTx, err := capReg.UpdateDON( + deployment.SimTransactOpts(), + donID, + nodes.PeerIDs(), + []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration{ + { + CapabilityId: ccdeploy.CCIPCapabilityID, + Config: encodedSetCandidateCall, + }, + }, + false, + nodes.DefaultF(), + ) + if err != nil { + return nil, fmt.Errorf("update don w/ exec config: %w", err) + } + + return []mcms.Operation{{ + To: capReg.Address(), + Data: updateDonTx.Data(), + Value: big.NewInt(0), + }}, nil +} + +// PromoteCandidateOp will create the MCMS Operation for `promoteCandidateAndRevokeActive` directed towards the capabilityRegistry +func PromoteCandidateOp(donID uint32, pluginType uint8, capReg *capabilities_registry.CapabilitiesRegistry, + ccipHome *ccip_home.CCIPHome, nodes deployment.Nodes) (mcms.Operation, error) { + + allConfigs, err := ccipHome.GetAllConfigs(nil, donID, pluginType) + if err != nil { + return mcms.Operation{}, err + } + + if allConfigs.CandidateConfig.ConfigDigest == [32]byte{} { + return mcms.Operation{}, fmt.Errorf("candidate digest is empty, expected nonempty") + } + fmt.Printf("commit candidate digest after setCandidate: %x\n", allConfigs.CandidateConfig.ConfigDigest) + + encodedPromotionCall, err := ccdeploy.CCIPHomeABI.Pack( + "promoteCandidateAndRevokeActive", + donID, + pluginType, + allConfigs.CandidateConfig.ConfigDigest, + allConfigs.ActiveConfig.ConfigDigest, + ) + if err != nil { + return mcms.Operation{}, fmt.Errorf("pack promotion call: %w", err) + } + + updateDonTx, err := capReg.UpdateDON( + deployment.SimTransactOpts(), + donID, + nodes.PeerIDs(), + []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration{ + { + CapabilityId: ccdeploy.CCIPCapabilityID, + Config: encodedPromotionCall, + }, + }, + false, + nodes.DefaultF(), + ) + if err != nil { + return mcms.Operation{}, fmt.Errorf("error creating updateDon op for donID(%d) and plugin type (%d): %w", donID, pluginType, err) + } + return mcms.Operation{ + To: capReg.Address(), + Data: updateDonTx.Data(), + Value: big.NewInt(0), + }, nil +} + +// PromoteAllCandidatesForChainOps promotes the candidate commit and exec configs to active by calling promoteCandidateAndRevokeActive on CCIPHome through the UpdateDON call on CapReg contract +func PromoteAllCandidatesForChainOps( + capReg *capabilities_registry.CapabilitiesRegistry, + ccipHome *ccip_home.CCIPHome, + chainSelector uint64, + nodes deployment.Nodes, +) ([]mcms.Operation, error) { + // fetch DON ID for the chain + donID, err := ccdeploy.DonIDForChain(capReg, ccipHome, chainSelector) + if err != nil { + return nil, fmt.Errorf("fetch don id for chain: %w", err) + } + + var mcmsOps []mcms.Operation + updateCommitOp, err := PromoteCandidateOp(donID, uint8(cctypes.PluginTypeCCIPCommit), capReg, ccipHome, nodes) + if err != nil { + return nil, fmt.Errorf("promote candidate op: %w", err) + } + mcmsOps = append(mcmsOps, updateCommitOp) + + updateExecOp, err := PromoteCandidateOp(donID, uint8(cctypes.PluginTypeCCIPExec), capReg, ccipHome, nodes) + if err != nil { + return nil, fmt.Errorf("promote candidate op: %w", err) + } + mcmsOps = append(mcmsOps, updateExecOp) + + return mcmsOps, nil +} + +// PromoteAllCandidatesProposal generates a proposal to call promoteCandidate on the CCIPHome through CapReg. +// This needs to be called after SetCandidateProposal is executed. +func PromoteAllCandidatesProposal( + state ccdeploy.CCIPOnChainState, + homeChainSel, newChainSel uint64, + nodes deployment.Nodes, +) (*timelock.MCMSWithTimelockProposal, error) { + promoteCandidateOps, err := PromoteAllCandidatesForChainOps( + state.Chains[homeChainSel].CapabilityRegistry, + state.Chains[homeChainSel].CCIPHome, + newChainSel, + nodes.NonBootstraps(), + ) + if err != nil { + return nil, err + } + + return ccdeploy.BuildProposalFromBatches(state, []timelock.BatchChainOperation{{ + ChainIdentifier: mcms.ChainIdentifier(homeChainSel), + Batch: promoteCandidateOps, + }}, "promoteCandidate for commit and execution", 0) +} + +// SetCandidateExecPluginProposal calls setCandidate on the CCIPHome for setting up OCR3 exec Plugin config for the new chain. +func SetCandidatePluginProposal( + state ccdeploy.CCIPOnChainState, + e deployment.Environment, + nodes deployment.Nodes, + ocrSecrets deployment.OCRSecrets, + homeChainSel, feedChainSel, newChainSel uint64, + tokenConfig ccdeploy.TokenConfig, + pluginType cctypes.PluginType, +) (*timelock.MCMSWithTimelockProposal, error) { + newDONArgs, err := ccdeploy.BuildOCR3ConfigForCCIPHome( + e.Logger, + ocrSecrets, + state.Chains[newChainSel].OffRamp, + e.Chains[newChainSel], + feedChainSel, + tokenConfig.GetTokenInfo(e.Logger, state.Chains[newChainSel].LinkToken, state.Chains[newChainSel].Weth9), + nodes.NonBootstraps(), + state.Chains[homeChainSel].RMNHome.Address(), + ) + if err != nil { + return nil, err + } + + execConfig, ok := newDONArgs[pluginType] + if !ok { + return nil, fmt.Errorf("missing exec plugin in ocr3Configs") + } + + setCandidateMCMSOps, err := SetCandidateOnExistingDon( + execConfig, + state.Chains[homeChainSel].CapabilityRegistry, + state.Chains[homeChainSel].CCIPHome, + newChainSel, + nodes.NonBootstraps(), + ) + if err != nil { + return nil, err + } + + return ccdeploy.BuildProposalFromBatches(state, []timelock.BatchChainOperation{{ + ChainIdentifier: mcms.ChainIdentifier(homeChainSel), + Batch: setCandidateMCMSOps, + }}, "SetCandidate for execution", 0) +} diff --git a/integration-tests/deployment/ccip/changeset/active_candidate_test.go b/integration-tests/deployment/ccip/changeset/active_candidate_test.go new file mode 100644 index 00000000000..d28f72cc5f5 --- /dev/null +++ b/integration-tests/deployment/ccip/changeset/active_candidate_test.go @@ -0,0 +1,253 @@ +package changeset + +import ( + "testing" + + "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/mcms" + "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" + + "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" + cctypes "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" + + cciptypes "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" + "github.com/smartcontractkit/chainlink-ccip/pluginconfig" + "github.com/smartcontractkit/chainlink/integration-tests/deployment" + + "github.com/stretchr/testify/require" + + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" + ccdeploy "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip" + + "github.com/smartcontractkit/chainlink/v2/core/logger" +) + +func TestActiveCandidate(t *testing.T) { + lggr := logger.TestLogger(t) + ctx := ccdeploy.Context(t) + tenv := ccdeploy.NewMemoryEnvironment(t, lggr, 3, 5) + e := tenv.Env + + state, err := ccdeploy.LoadOnchainState(tenv.Env, tenv.Ab) + require.NoError(t, err) + require.NotNil(t, state.Chains[tenv.HomeChainSel].LinkToken) + + feeds := state.Chains[tenv.FeedChainSel].USDFeeds + tokenConfig := ccdeploy.NewTokenConfig() + + tokenConfig.UpsertTokenInfo(ccdeploy.LinkSymbol, + pluginconfig.TokenInfo{ + AggregatorAddress: cciptypes.UnknownEncodedAddress(feeds[ccdeploy.LinkSymbol].Address().String()), + Decimals: ccdeploy.LinkDecimals, + DeviationPPB: cciptypes.NewBigIntFromInt64(1e9), + }, + ) + tokenConfig.UpsertTokenInfo(ccdeploy.WethSymbol, + pluginconfig.TokenInfo{ + AggregatorAddress: cciptypes.UnknownEncodedAddress(feeds[ccdeploy.WethSymbol].Address().String()), + Decimals: ccdeploy.WethDecimals, + DeviationPPB: cciptypes.NewBigIntFromInt64(4e9), + }, + ) + + output, err := InitialDeployChangeSet(tenv.Ab, tenv.Env, ccdeploy.DeployCCIPContractConfig{ + HomeChainSel: tenv.HomeChainSel, + FeedChainSel: tenv.FeedChainSel, + ChainsToDeploy: tenv.Env.AllChainSelectors(), + TokenConfig: tokenConfig, + MCMSConfig: ccdeploy.NewTestMCMSConfig(t, e), + FeeTokenContracts: tenv.FeeTokenContracts, + CapabilityRegistry: state.Chains[tenv.HomeChainSel].CapabilityRegistry.Address(), + OCRSecrets: deployment.XXXGenerateTestOCRSecrets(), + }) + require.NoError(t, err) + // Get new state after migration. + state, err = ccdeploy.LoadOnchainState(e, tenv.Ab) + require.NoError(t, err) + homeCS, destCS := tenv.HomeChainSel, tenv.FeedChainSel + + // Ensure capreg logs are up to date. + ccdeploy.ReplayLogs(t, e.Offchain, tenv.ReplayBlocks) + + // Apply the jobs. + for nodeID, jobs := range output.JobSpecs { + for _, job := range jobs { + // Note these auto-accept + _, err := e.Offchain.ProposeJob(ctx, + &jobv1.ProposeJobRequest{ + NodeId: nodeID, + Spec: job, + }) + require.NoError(t, err) + } + } + + // Add all lanes + require.NoError(t, ccdeploy.AddLanesForAll(e, state)) + // Need to keep track of the block number for each chain so that event subscription can be done from that block. + startBlocks := make(map[uint64]*uint64) + // Send a message from each chain to every other chain. + expectedSeqNum := make(map[uint64]uint64) + for src := range e.Chains { + for dest, destChain := range e.Chains { + if src == dest { + continue + } + latesthdr, err := destChain.Client.HeaderByNumber(testcontext.Get(t), nil) + require.NoError(t, err) + block := latesthdr.Number.Uint64() + startBlocks[dest] = &block + seqNum := ccdeploy.SendRequest(t, e, state, src, dest, false) + expectedSeqNum[dest] = seqNum + } + } + + // Wait for all commit reports to land. + ccdeploy.ConfirmCommitForAllWithExpectedSeqNums(t, e, state, expectedSeqNum, startBlocks) + + //After commit is reported on all chains, token prices should be updated in FeeQuoter. + for dest := range e.Chains { + linkAddress := state.Chains[dest].LinkToken.Address() + feeQuoter := state.Chains[dest].FeeQuoter + timestampedPrice, err := feeQuoter.GetTokenPrice(nil, linkAddress) + require.NoError(t, err) + require.Equal(t, ccdeploy.MockLinkPrice, timestampedPrice.Value) + } + + //Wait for all exec reports to land + ccdeploy.ConfirmExecWithSeqNrForAll(t, e, state, expectedSeqNum, startBlocks) + + // transfer ownership + ccdeploy.TransferAllOwnership(t, state, homeCS, e) + acceptOwnershipProposal, err := ccdeploy.GenerateAcceptOwnershipProposal(state, homeCS, e.AllChainSelectors()) + require.NoError(t, err) + acceptOwnershipExec := ccdeploy.SignProposal(t, e, acceptOwnershipProposal) + for _, sel := range e.AllChainSelectors() { + ccdeploy.ExecuteProposal(t, e, acceptOwnershipExec, state, sel) + } + // Apply the accept ownership proposal to all the chains. + + err = ccdeploy.ConfirmRequestOnSourceAndDest(t, e, state, homeCS, destCS, 2) + require.NoError(t, err) + + // [ACTIVE, CANDIDATE] setup by setting candidate through cap reg + capReg, ccipHome := state.Chains[homeCS].CapabilityRegistry, state.Chains[homeCS].CCIPHome + donID, err := ccdeploy.DonIDForChain(capReg, ccipHome, destCS) + require.NoError(t, err) + donInfo, err := state.Chains[homeCS].CapabilityRegistry.GetDON(nil, donID) + require.NoError(t, err) + require.Equal(t, 5, len(donInfo.NodeP2PIds)) + require.Equal(t, uint32(4), donInfo.ConfigCount) + + state, err = ccdeploy.LoadOnchainState(e, tenv.Ab) + require.NoError(t, err) + + // delete a non-bootstrap node + nodes, err := deployment.NodeInfo(e.NodeIDs, e.Offchain) + require.NoError(t, err) + var newNodeIDs []string + // make sure we delete a node that is NOT bootstrap. + // we will remove bootstrap later by calling nodes.NonBootstrap() + if nodes[0].IsBootstrap { + newNodeIDs = e.NodeIDs[:len(e.NodeIDs)-1] + } else { + newNodeIDs = e.NodeIDs[1:] + } + nodes, err = deployment.NodeInfo(newNodeIDs, e.Offchain) + require.NoError(t, err) + + // this will construct ocr3 configurations for the + // commit and exec plugin we will be using + rmnHomeAddress := state.Chains[homeCS].RMNHome.Address() + ocr3ConfigMap, err := ccdeploy.BuildOCR3ConfigForCCIPHome( + e.Logger, + deployment.XXXGenerateTestOCRSecrets(), + state.Chains[destCS].OffRamp, + e.Chains[destCS], + destCS, + tokenConfig.GetTokenInfo(e.Logger, state.Chains[destCS].LinkToken, state.Chains[destCS].Weth9), + nodes.NonBootstraps(), + rmnHomeAddress, + ) + require.NoError(t, err) + + setCommitCandidateOp, err := SetCandidateOnExistingDon( + ocr3ConfigMap[cctypes.PluginTypeCCIPCommit], + state.Chains[homeCS].CapabilityRegistry, + state.Chains[homeCS].CCIPHome, + destCS, + nodes.NonBootstraps(), + ) + require.NoError(t, err) + setCommitCandidateProposal, err := ccdeploy.BuildProposalFromBatches(state, []timelock.BatchChainOperation{{ + ChainIdentifier: mcms.ChainIdentifier(homeCS), + Batch: setCommitCandidateOp, + }}, "set new candidates on commit plugin", 0) + require.NoError(t, err) + setCommitCandidateSigned := ccdeploy.SignProposal(t, e, setCommitCandidateProposal) + ccdeploy.ExecuteProposal(t, e, setCommitCandidateSigned, state, homeCS) + + // create the op for the commit plugin as well + setExecCandidateOp, err := SetCandidateOnExistingDon( + ocr3ConfigMap[cctypes.PluginTypeCCIPExec], + state.Chains[homeCS].CapabilityRegistry, + state.Chains[homeCS].CCIPHome, + destCS, + nodes.NonBootstraps(), + ) + require.NoError(t, err) + + setExecCandidateProposal, err := ccdeploy.BuildProposalFromBatches(state, []timelock.BatchChainOperation{{ + ChainIdentifier: mcms.ChainIdentifier(homeCS), + Batch: setExecCandidateOp, + }}, "set new candidates on commit and exec plugins", 0) + require.NoError(t, err) + setExecCandidateSigned := ccdeploy.SignProposal(t, e, setExecCandidateProposal) + ccdeploy.ExecuteProposal(t, e, setExecCandidateSigned, state, homeCS) + + // check setup was successful by confirming number of nodes from cap reg + donInfo, err = state.Chains[homeCS].CapabilityRegistry.GetDON(nil, donID) + require.NoError(t, err) + require.Equal(t, 4, len(donInfo.NodeP2PIds)) + require.Equal(t, uint32(6), donInfo.ConfigCount) + // [ACTIVE, CANDIDATE] done setup + + // [ACTIVE, CANDIDATE] make sure we can still send successful transaction without updating job specs + err = ccdeploy.ConfirmRequestOnSourceAndDest(t, e, state, homeCS, destCS, 3) + require.NoError(t, err) + // [ACTIVE, CANDIDATE] done send successful transaction on active + + // [NEW ACTIVE, NO CANDIDATE] promote to active + // confirm by getting old candidate digest and making sure new active matches + oldCandidateDigest, err := state.Chains[homeCS].CCIPHome.GetCandidateDigest(nil, donID, uint8(cctypes.PluginTypeCCIPExec)) + require.NoError(t, err) + + promoteOps, err := PromoteAllCandidatesForChainOps(state.Chains[homeCS].CapabilityRegistry, state.Chains[homeCS].CCIPHome, destCS, nodes.NonBootstraps()) + require.NoError(t, err) + promoteProposal, err := ccdeploy.BuildProposalFromBatches(state, []timelock.BatchChainOperation{{ + ChainIdentifier: mcms.ChainIdentifier(homeCS), + Batch: promoteOps, + }}, "promote candidates and revoke actives", 0) + require.NoError(t, err) + promoteSigned := ccdeploy.SignProposal(t, e, promoteProposal) + ccdeploy.ExecuteProposal(t, e, promoteSigned, state, homeCS) + // [NEW ACTIVE, NO CANDIDATE] done promoting + + // [NEW ACTIVE, NO CANDIDATE] check onchain state + newActiveDigest, err := state.Chains[homeCS].CCIPHome.GetActiveDigest(nil, donID, uint8(cctypes.PluginTypeCCIPExec)) + require.NoError(t, err) + require.Equal(t, oldCandidateDigest, newActiveDigest) + + newCandidateDigest, err := state.Chains[homeCS].CCIPHome.GetCandidateDigest(nil, donID, uint8(cctypes.PluginTypeCCIPCommit)) + require.NoError(t, err) + require.Equal(t, newCandidateDigest, [32]byte{}) + // [NEW ACTIVE, NO CANDIDATE] done checking on chain state + + // [NEW ACTIVE, NO CANDIDATE] send successful request on new active + donInfo, err = state.Chains[homeCS].CapabilityRegistry.GetDON(nil, donID) + require.NoError(t, err) + require.Equal(t, uint32(8), donInfo.ConfigCount) + + err = ccdeploy.ConfirmRequestOnSourceAndDest(t, e, state, homeCS, destCS, 4) + require.NoError(t, err) + // [NEW ACTIVE, NO CANDIDATE] done sending successful request +} diff --git a/integration-tests/deployment/ccip/add_chain.go b/integration-tests/deployment/ccip/changeset/add_chain.go similarity index 61% rename from integration-tests/deployment/ccip/add_chain.go rename to integration-tests/deployment/ccip/changeset/add_chain.go index bc6ff67ba1c..123cf2a577b 100644 --- a/integration-tests/deployment/ccip/add_chain.go +++ b/integration-tests/deployment/ccip/changeset/add_chain.go @@ -1,16 +1,17 @@ -package ccipdeployment +package changeset import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/common" + ccipdeployment "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip" + + "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/mcms" "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" "github.com/smartcontractkit/chainlink/integration-tests/deployment" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/fee_quoter" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/onramp" ) @@ -19,14 +20,13 @@ import ( // to connect the new chain to the existing chains. func NewChainInboundProposal( e deployment.Environment, - state CCIPOnChainState, + state ccipdeployment.CCIPOnChainState, homeChainSel uint64, newChainSel uint64, sources []uint64, ) (*timelock.MCMSWithTimelockProposal, error) { // Generate proposal which enables new destination (from test router) on all source chains. var batches []timelock.BatchChainOperation - var chains []uint64 for _, source := range sources { enableOnRampDest, err := state.Chains[source].OnRamp.ApplyDestChainConfigUpdates(deployment.SimTransactOpts(), []onramp.OnRampDestChainConfigArgs{ { @@ -42,7 +42,7 @@ func NewChainInboundProposal( []fee_quoter.FeeQuoterDestChainConfigArgs{ { DestChainSelector: newChainSel, - DestChainConfig: defaultFeeQuoterDestChainConfig(), + DestChainConfig: ccipdeployment.DefaultFeeQuoterDestChainConfig(), }, }) if err != nil { @@ -64,49 +64,35 @@ func NewChainInboundProposal( }, }, }) - chains = append(chains, source) } - addChainOp, err := ApplyChainConfigUpdatesOp(e, state, homeChainSel, []uint64{newChainSel}) - if err != nil { - return nil, err - } - timelockAddresses, metaDataPerChain, err := BuildProposalMetadata(state, append(chains, homeChainSel)) + addChainOp, err := ccipdeployment.ApplyChainConfigUpdatesOp(e, state, homeChainSel, []uint64{newChainSel}) if err != nil { return nil, err } + batches = append(batches, timelock.BatchChainOperation{ ChainIdentifier: mcms.ChainIdentifier(homeChainSel), Batch: []mcms.Operation{ addChainOp, }, }) - return timelock.NewMCMSWithTimelockProposal( - "1", - 2004259681, // TODO: should be parameterized and based on current block timestamp. - []mcms.Signature{}, - false, - metaDataPerChain, - timelockAddresses, - "blah", // TODO - batches, - timelock.Schedule, - "0s", // TODO: Should be parameterized. - ) + + return ccipdeployment.BuildProposalFromBatches(state, batches, "proposal to set new chains", 0) } -// AddDonAndSetCandidateForCommitProposal adds new DON for destination to home chain +// AddDonAndSetCandidateProposal adds new DON for destination to home chain // and sets the commit plugin config as candidateConfig for the don. -func AddDonAndSetCandidateForCommitProposal( - state CCIPOnChainState, +func AddDonAndSetCandidateProposal( + state ccipdeployment.CCIPOnChainState, e deployment.Environment, nodes deployment.Nodes, ocrSecrets deployment.OCRSecrets, homeChainSel, feedChainSel, newChainSel uint64, - tokenConfig TokenConfig, - rmnHomeAddress common.Address, + tokenConfig ccipdeployment.TokenConfig, + pluginType types.PluginType, ) (*timelock.MCMSWithTimelockProposal, error) { - newDONArgs, err := BuildOCR3ConfigForCCIPHome( + newDONArgs, err := ccipdeployment.BuildOCR3ConfigForCCIPHome( e.Logger, ocrSecrets, state.Chains[newChainSel].OffRamp, @@ -114,21 +100,21 @@ func AddDonAndSetCandidateForCommitProposal( feedChainSel, tokenConfig.GetTokenInfo(e.Logger, state.Chains[newChainSel].LinkToken, state.Chains[newChainSel].Weth9), nodes.NonBootstraps(), - rmnHomeAddress, + state.Chains[homeChainSel].RMNHome.Address(), ) if err != nil { return nil, err } - latestDon, err := LatestCCIPDON(state.Chains[homeChainSel].CapabilityRegistry) + latestDon, err := ccipdeployment.LatestCCIPDON(state.Chains[homeChainSel].CapabilityRegistry) if err != nil { return nil, err } - commitConfig, ok := newDONArgs[types.PluginTypeCCIPCommit] + commitConfig, ok := newDONArgs[pluginType] if !ok { return nil, fmt.Errorf("missing commit plugin in ocr3Configs") } donID := latestDon.Id + 1 - addDonOp, err := SetCandidateCommitPluginWithAddDonOps( + addDonOp, err := ccipdeployment.NewDonWithCandidateOp( donID, commitConfig, state.Chains[homeChainSel].CapabilityRegistry, nodes.NonBootstraps(), @@ -136,23 +122,9 @@ func AddDonAndSetCandidateForCommitProposal( if err != nil { return nil, err } - timelockAddresses, metaDataPerChain, err := BuildProposalMetadata(state, []uint64{homeChainSel}) - if err != nil { - return nil, err - } - return timelock.NewMCMSWithTimelockProposal( - "1", - 2004259681, // TODO: should be parameterized and based on current block timestamp. - []mcms.Signature{}, - false, - metaDataPerChain, - timelockAddresses, - "SetCandidate for commit And AddDon for new chain", - []timelock.BatchChainOperation{{ - ChainIdentifier: mcms.ChainIdentifier(homeChainSel), - Batch: []mcms.Operation{addDonOp}, - }}, - timelock.Schedule, - "0s", // TODO: Should be parameterized. - ) + + return ccipdeployment.BuildProposalFromBatches(state, []timelock.BatchChainOperation{{ + ChainIdentifier: mcms.ChainIdentifier(homeChainSel), + Batch: []mcms.Operation{addDonOp}, + }}, "setCandidate for commit and AddDon on new Chain", 0) } diff --git a/integration-tests/deployment/ccip/add_chain_test.go b/integration-tests/deployment/ccip/changeset/add_chain_test.go similarity index 68% rename from integration-tests/deployment/ccip/add_chain_test.go rename to integration-tests/deployment/ccip/changeset/add_chain_test.go index 025e8aeaa45..3544e9cb9a4 100644 --- a/integration-tests/deployment/ccip/add_chain_test.go +++ b/integration-tests/deployment/ccip/changeset/add_chain_test.go @@ -1,9 +1,13 @@ -package ccipdeployment +package changeset import ( "testing" "time" + ccipdeployment "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip" + + "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" + "github.com/ethereum/go-ethereum/common" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_home" @@ -25,8 +29,8 @@ import ( func TestAddChainInbound(t *testing.T) { // 4 chains where the 4th is added after initial deployment. - e := NewMemoryEnvironmentWithJobs(t, logger.TestLogger(t), 4) - state, err := LoadOnchainState(e.Env, e.Ab) + e := ccipdeployment.NewMemoryEnvironmentWithJobs(t, logger.TestLogger(t), 4, 4) + state, err := ccipdeployment.LoadOnchainState(e.Env, e.Ab) require.NoError(t, err) // Take first non-home chain as the new chain. newChain := e.Env.AllChainSelectorsExcluding([]uint64{e.HomeChainSel})[0] @@ -34,54 +38,54 @@ func TestAddChainInbound(t *testing.T) { initialDeploy := e.Env.AllChainSelectorsExcluding([]uint64{newChain}) feeds := state.Chains[e.FeedChainSel].USDFeeds - tokenConfig := NewTokenConfig() - tokenConfig.UpsertTokenInfo(LinkSymbol, + tokenConfig := ccipdeployment.NewTokenConfig() + tokenConfig.UpsertTokenInfo(ccipdeployment.LinkSymbol, pluginconfig.TokenInfo{ - AggregatorAddress: cciptypes.UnknownEncodedAddress(feeds[LinkSymbol].Address().String()), - Decimals: LinkDecimals, + AggregatorAddress: cciptypes.UnknownEncodedAddress(feeds[ccipdeployment.LinkSymbol].Address().String()), + Decimals: ccipdeployment.LinkDecimals, DeviationPPB: cciptypes.NewBigIntFromInt64(1e9), }, ) - tokenConfig.UpsertTokenInfo(WethSymbol, + tokenConfig.UpsertTokenInfo(ccipdeployment.WethSymbol, pluginconfig.TokenInfo{ - AggregatorAddress: cciptypes.UnknownEncodedAddress(feeds[WethSymbol].Address().String()), - Decimals: WethDecimals, + AggregatorAddress: cciptypes.UnknownEncodedAddress(feeds[ccipdeployment.WethSymbol].Address().String()), + Decimals: ccipdeployment.WethDecimals, DeviationPPB: cciptypes.NewBigIntFromInt64(1e9), }, ) - err = DeployCCIPContracts(e.Env, e.Ab, DeployCCIPContractConfig{ + err = ccipdeployment.DeployCCIPContracts(e.Env, e.Ab, ccipdeployment.DeployCCIPContractConfig{ HomeChainSel: e.HomeChainSel, FeedChainSel: e.FeedChainSel, ChainsToDeploy: initialDeploy, TokenConfig: tokenConfig, - MCMSConfig: NewTestMCMSConfig(t, e.Env), + MCMSConfig: ccipdeployment.NewTestMCMSConfig(t, e.Env), FeeTokenContracts: e.FeeTokenContracts, CapabilityRegistry: state.Chains[e.HomeChainSel].CapabilityRegistry.Address(), OCRSecrets: deployment.XXXGenerateTestOCRSecrets(), }) require.NoError(t, err) - state, err = LoadOnchainState(e.Env, e.Ab) + state, err = ccipdeployment.LoadOnchainState(e.Env, e.Ab) require.NoError(t, err) // Connect all the existing lanes. for _, source := range initialDeploy { for _, dest := range initialDeploy { if source != dest { - require.NoError(t, AddLane(e.Env, state, source, dest)) + require.NoError(t, ccipdeployment.AddLane(e.Env, state, source, dest)) } } } - rmnHomeAddress, err := deployment.SearchAddressBook(e.Ab, e.HomeChainSel, RMNHome) + rmnHomeAddress, err := deployment.SearchAddressBook(e.Ab, e.HomeChainSel, ccipdeployment.RMNHome) require.NoError(t, err) require.True(t, common.IsHexAddress(rmnHomeAddress)) rmnHome, err := rmn_home.NewRMNHome(common.HexToAddress(rmnHomeAddress), e.Env.Chains[e.HomeChainSel].Client) require.NoError(t, err) // Deploy contracts to new chain - err = DeployChainContracts(e.Env, e.Env.Chains[newChain], e.Ab, e.FeeTokenContracts[newChain], NewTestMCMSConfig(t, e.Env), rmnHome) + err = ccipdeployment.DeployChainContracts(e.Env, e.Env.Chains[newChain], e.Ab, e.FeeTokenContracts[newChain], ccipdeployment.NewTestMCMSConfig(t, e.Env), rmnHome) require.NoError(t, err) - state, err = LoadOnchainState(e.Env, e.Ab) + state, err = ccipdeployment.LoadOnchainState(e.Env, e.Ab) require.NoError(t, err) // Transfer onramp/fq ownership to timelock. @@ -114,12 +118,12 @@ func TestAddChainInbound(t *testing.T) { _, err = deployment.ConfirmIfNoError(e.Env.Chains[e.HomeChainSel], tx, err) require.NoError(t, err) - acceptOwnershipProposal, err := GenerateAcceptOwnershipProposal(state, e.HomeChainSel, initialDeploy) + acceptOwnershipProposal, err := ccipdeployment.GenerateAcceptOwnershipProposal(state, e.HomeChainSel, initialDeploy) require.NoError(t, err) - acceptOwnershipExec := SignProposal(t, e.Env, acceptOwnershipProposal) + acceptOwnershipExec := ccipdeployment.SignProposal(t, e.Env, acceptOwnershipProposal) // Apply the accept ownership proposal to all the chains. for _, sel := range initialDeploy { - ExecuteProposal(t, e.Env, acceptOwnershipExec, state, sel) + ccipdeployment.ExecuteProposal(t, e.Env, acceptOwnershipExec, state, sel) } for _, chain := range initialDeploy { owner, err2 := state.Chains[chain].OnRamp.Owner(nil) @@ -139,40 +143,40 @@ func TestAddChainInbound(t *testing.T) { // Generate and sign inbound proposal to new 4th chain. chainInboundProposal, err := NewChainInboundProposal(e.Env, state, e.HomeChainSel, newChain, initialDeploy) require.NoError(t, err) - chainInboundExec := SignProposal(t, e.Env, chainInboundProposal) + chainInboundExec := ccipdeployment.SignProposal(t, e.Env, chainInboundProposal) for _, sel := range initialDeploy { - ExecuteProposal(t, e.Env, chainInboundExec, state, sel) + ccipdeployment.ExecuteProposal(t, e.Env, chainInboundExec, state, sel) } // TODO This currently is not working - Able to send the request here but request gets stuck in execution // Send a new message and expect that this is delivered once the chain is completely set up as inbound //SendRequest(t, e.Env, state, initialDeploy[0], newChain, true) t.Logf("Executing add don and set candidate proposal for commit plugin on chain %d", newChain) - addDonProp, err := AddDonAndSetCandidateForCommitProposal(state, e.Env, nodes, deployment.XXXGenerateTestOCRSecrets(), e.HomeChainSel, e.FeedChainSel, newChain, tokenConfig, common.HexToAddress(rmnHomeAddress)) + addDonProp, err := AddDonAndSetCandidateProposal(state, e.Env, nodes, deployment.XXXGenerateTestOCRSecrets(), e.HomeChainSel, e.FeedChainSel, newChain, tokenConfig, types.PluginTypeCCIPCommit) require.NoError(t, err) - addDonExec := SignProposal(t, e.Env, addDonProp) - ExecuteProposal(t, e.Env, addDonExec, state, e.HomeChainSel) + addDonExec := ccipdeployment.SignProposal(t, e.Env, addDonProp) + ccipdeployment.ExecuteProposal(t, e.Env, addDonExec, state, e.HomeChainSel) t.Logf("Executing promote candidate proposal for exec plugin on chain %d", newChain) - setCandidateForExecProposal, err := SetCandidateExecPluginProposal(state, e.Env, nodes, deployment.XXXGenerateTestOCRSecrets(), e.HomeChainSel, e.FeedChainSel, newChain, tokenConfig, common.HexToAddress(rmnHomeAddress)) + setCandidateForExecProposal, err := SetCandidatePluginProposal(state, e.Env, nodes, deployment.XXXGenerateTestOCRSecrets(), e.HomeChainSel, e.FeedChainSel, newChain, tokenConfig, types.PluginTypeCCIPExec) require.NoError(t, err) - setCandidateForExecExec := SignProposal(t, e.Env, setCandidateForExecProposal) - ExecuteProposal(t, e.Env, setCandidateForExecExec, state, e.HomeChainSel) + setCandidateForExecExec := ccipdeployment.SignProposal(t, e.Env, setCandidateForExecProposal) + ccipdeployment.ExecuteProposal(t, e.Env, setCandidateForExecExec, state, e.HomeChainSel) t.Logf("Executing promote candidate proposal for both commit and exec plugins on chain %d", newChain) - donPromoteProposal, err := PromoteCandidateProposal(state, e.HomeChainSel, newChain, nodes) + donPromoteProposal, err := PromoteAllCandidatesProposal(state, e.HomeChainSel, newChain, nodes) require.NoError(t, err) - donPromoteExec := SignProposal(t, e.Env, donPromoteProposal) - ExecuteProposal(t, e.Env, donPromoteExec, state, e.HomeChainSel) + donPromoteExec := ccipdeployment.SignProposal(t, e.Env, donPromoteProposal) + ccipdeployment.ExecuteProposal(t, e.Env, donPromoteExec, state, e.HomeChainSel) // verify if the configs are updated - require.NoError(t, ValidateCCIPHomeConfigSetUp( + require.NoError(t, ccipdeployment.ValidateCCIPHomeConfigSetUp( state.Chains[e.HomeChainSel].CapabilityRegistry, state.Chains[e.HomeChainSel].CCIPHome, newChain, )) - replayBlocks, err := LatestBlocksByChain(testcontext.Get(t), e.Env.Chains) + replayBlocks, err := ccipdeployment.LatestBlocksByChain(testcontext.Get(t), e.Env.Chains) require.NoError(t, err) // Now configure the new chain using deployer key (not transferred to timelock yet). @@ -190,9 +194,9 @@ func TestAddChainInbound(t *testing.T) { _, err = deployment.ConfirmIfNoError(e.Env.Chains[newChain], tx, err) require.NoError(t, err) // Set the OCR3 config on new 4th chain to enable the plugin. - latestDON, err := LatestCCIPDON(state.Chains[e.HomeChainSel].CapabilityRegistry) + latestDON, err := ccipdeployment.LatestCCIPDON(state.Chains[e.HomeChainSel].CapabilityRegistry) require.NoError(t, err) - ocrConfigs, err := BuildSetOCR3ConfigArgs(latestDON.Id, state.Chains[e.HomeChainSel].CCIPHome, newChain) + ocrConfigs, err := ccipdeployment.BuildSetOCR3ConfigArgs(latestDON.Id, state.Chains[e.HomeChainSel].CCIPHome, newChain) require.NoError(t, err) tx, err = state.Chains[newChain].OffRamp.SetOCR3Configs(e.Env.Chains[newChain].DeployerKey, ocrConfigs) require.NoError(t, err) @@ -200,7 +204,7 @@ func TestAddChainInbound(t *testing.T) { require.NoError(t, err) // Assert the inbound lanes to the new chain are wired correctly. - state, err = LoadOnchainState(e.Env, e.Ab) + state, err = ccipdeployment.LoadOnchainState(e.Env, e.Ab) require.NoError(t, err) for _, chain := range initialDeploy { cfg, err2 := state.Chains[chain].OnRamp.GetDestChainConfig(nil, newChain) @@ -215,25 +219,25 @@ func TestAddChainInbound(t *testing.T) { } // Ensure job related logs are up to date. time.Sleep(30 * time.Second) - ReplayLogs(t, e.Env.Offchain, replayBlocks) + ccipdeployment.ReplayLogs(t, e.Env.Offchain, replayBlocks) // TODO: Send via all inbound lanes and use parallel helper // Now that the proposal has been executed we expect to be able to send traffic to this new 4th chain. latesthdr, err := e.Env.Chains[newChain].Client.HeaderByNumber(testcontext.Get(t), nil) require.NoError(t, err) startBlock := latesthdr.Number.Uint64() - seqNr := SendRequest(t, e.Env, state, initialDeploy[0], newChain, true) + seqNr := ccipdeployment.SendRequest(t, e.Env, state, initialDeploy[0], newChain, true) require.NoError(t, - ConfirmCommitWithExpectedSeqNumRange(t, e.Env.Chains[initialDeploy[0]], e.Env.Chains[newChain], state.Chains[newChain].OffRamp, &startBlock, cciptypes.SeqNumRange{ + ccipdeployment.ConfirmCommitWithExpectedSeqNumRange(t, e.Env.Chains[initialDeploy[0]], e.Env.Chains[newChain], state.Chains[newChain].OffRamp, &startBlock, cciptypes.SeqNumRange{ cciptypes.SeqNum(1), cciptypes.SeqNum(seqNr), })) require.NoError(t, - ConfirmExecWithSeqNr(t, e.Env.Chains[initialDeploy[0]], e.Env.Chains[newChain], state.Chains[newChain].OffRamp, &startBlock, seqNr)) + ccipdeployment.ConfirmExecWithSeqNr(t, e.Env.Chains[initialDeploy[0]], e.Env.Chains[newChain], state.Chains[newChain].OffRamp, &startBlock, seqNr)) linkAddress := state.Chains[newChain].LinkToken.Address() feeQuoter := state.Chains[newChain].FeeQuoter timestampedPrice, err := feeQuoter.GetTokenPrice(nil, linkAddress) require.NoError(t, err) - require.Equal(t, MockLinkPrice, timestampedPrice.Value) + require.Equal(t, ccipdeployment.MockLinkPrice, timestampedPrice.Value) } diff --git a/integration-tests/deployment/ccip/changeset/initial_deploy_test.go b/integration-tests/deployment/ccip/changeset/initial_deploy_test.go index 280147f463c..844a3be715e 100644 --- a/integration-tests/deployment/ccip/changeset/initial_deploy_test.go +++ b/integration-tests/deployment/ccip/changeset/initial_deploy_test.go @@ -21,7 +21,7 @@ import ( func TestInitialDeploy(t *testing.T) { lggr := logger.TestLogger(t) ctx := ccdeploy.Context(t) - tenv := ccdeploy.NewMemoryEnvironment(t, lggr, 3) + tenv := ccdeploy.NewMemoryEnvironment(t, lggr, 3, 4) e := tenv.Env state, err := ccdeploy.LoadOnchainState(tenv.Env, tenv.Ab) @@ -99,7 +99,10 @@ func TestInitialDeploy(t *testing.T) { // Wait for all commit reports to land. ccdeploy.ConfirmCommitForAllWithExpectedSeqNums(t, e, state, expectedSeqNum, startBlocks) - // TODO: use proper assertions to check gas and token prices using events + + // Confirm token and gas prices are updated + ccdeploy.ConfirmTokenPriceUpdatedForAll(t, e, state, startBlocks) + ccdeploy.ConfirmGasPriceUpdatedForAll(t, e, state, startBlocks) // Wait for all exec reports to land ccdeploy.ConfirmExecWithSeqNrForAll(t, e, state, expectedSeqNum, startBlocks) diff --git a/integration-tests/deployment/ccip/deploy_home_chain.go b/integration-tests/deployment/ccip/deploy_home_chain.go index 24057863acc..f6332d49f91 100644 --- a/integration-tests/deployment/ccip/deploy_home_chain.go +++ b/integration-tests/deployment/ccip/deploy_home_chain.go @@ -417,6 +417,7 @@ func DonIDForChain(registry *capabilities_registry.CapabilitiesRegistry, ccipHom if err != nil { return 0, err } + // TODO: what happens if there are multiple dons for one chain (accidentally?) for _, don := range dons { if len(don.CapabilityConfigurations) == 1 && don.CapabilityConfigurations[0].CapabilityId == CCIPCapabilityID { @@ -645,70 +646,20 @@ func setupExecDON( return nil } -// SetCandidateExecPluginOps calls setCandidate on CCIPHome contract through the UpdateDON call on CapReg contract -// This proposes to set up OCR3 config for the exec plugin for the DON -func SetCandidateExecPluginOps( - execConfig ccip_home.CCIPHomeOCR3Config, - capReg *capabilities_registry.CapabilitiesRegistry, - ccipHome *ccip_home.CCIPHome, - chainSelector uint64, - nodes deployment.Nodes, -) ([]mcms.Operation, error) { - // fetch DON ID for the chain - donID, err := DonIDForChain(capReg, ccipHome, chainSelector) - if err != nil { - return nil, fmt.Errorf("fetch don id for chain: %w", err) - } - encodedSetCandidateCall, err := CCIPHomeABI.Pack( - "setCandidate", - donID, - execConfig.PluginType, - execConfig, - [32]byte{}, - ) - if err != nil { - return nil, fmt.Errorf("pack set candidate call: %w", err) - } - - // set candidate call - updateDonTx, err := capReg.UpdateDON( - deployment.SimTransactOpts(), - donID, - nodes.PeerIDs(), - []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration{ - { - CapabilityId: CCIPCapabilityID, - Config: encodedSetCandidateCall, - }, - }, - false, - nodes.DefaultF(), - ) - if err != nil { - return nil, fmt.Errorf("update don w/ exec config: %w", err) - } - - return []mcms.Operation{{ - To: capReg.Address(), - Data: updateDonTx.Data(), - Value: big.NewInt(0), - }}, nil -} - // SetCandidateCommitPluginWithAddDonOps sets the candidate commit config by calling setCandidate on CCIPHome contract through the AddDON call on CapReg contract // This should be done first before calling any other UpdateDON calls // This proposes to set up OCR3 config for the commit plugin for the DON -func SetCandidateCommitPluginWithAddDonOps( +func NewDonWithCandidateOp( donID uint32, - commitConfig ccip_home.CCIPHomeOCR3Config, + pluginConfig ccip_home.CCIPHomeOCR3Config, capReg *capabilities_registry.CapabilitiesRegistry, nodes deployment.Nodes, ) (mcms.Operation, error) { encodedSetCandidateCall, err := CCIPHomeABI.Pack( "setCandidate", donID, - commitConfig.PluginType, - commitConfig, + pluginConfig.PluginType, + pluginConfig, [32]byte{}, ) if err != nil { @@ -730,110 +681,6 @@ func SetCandidateCommitPluginWithAddDonOps( }, nil } -// PromoteCandidateOps promotes the candidate commit and exec configs to active by calling promoteCandidateAndRevokeActive on CCIPHome through the UpdateDON call on CapReg contract -func PromoteCandidateOps( - capReg *capabilities_registry.CapabilitiesRegistry, - ccipHome *ccip_home.CCIPHome, - chainSelector uint64, - nodes deployment.Nodes, -) ([]mcms.Operation, error) { - // fetch DON ID for the chain - donID, err := DonIDForChain(capReg, ccipHome, chainSelector) - if err != nil { - return nil, fmt.Errorf("fetch don id for chain: %w", err) - } - - mcmsOps := []mcms.Operation{} - - commitCandidateDigest, err := ccipHome.GetCandidateDigest(nil, donID, uint8(cctypes.PluginTypeCCIPCommit)) - if err != nil { - return nil, fmt.Errorf("get commit candidate digest: %w", err) - } - - if commitCandidateDigest == [32]byte{} { - return nil, fmt.Errorf("candidate digest is empty, expected nonempty") - } - fmt.Printf("commit candidate digest after setCandidate: %x\n", commitCandidateDigest) - - encodedPromotionCall, err := CCIPHomeABI.Pack( - "promoteCandidateAndRevokeActive", - donID, - uint8(cctypes.PluginTypeCCIPCommit), - commitCandidateDigest, - [32]byte{}, - ) - if err != nil { - return nil, fmt.Errorf("pack promotion call: %w", err) - } - - updateDonTx, err := capReg.UpdateDON( - deployment.SimTransactOpts(), - donID, - nodes.PeerIDs(), - []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration{ - { - CapabilityId: CCIPCapabilityID, - Config: encodedPromotionCall, - }, - }, - false, - nodes.DefaultF(), - ) - if err != nil { - return nil, fmt.Errorf("update don w/ commit config: %w", err) - } - mcmsOps = append(mcmsOps, mcms.Operation{ - To: capReg.Address(), - Data: updateDonTx.Data(), - Value: big.NewInt(0), - }) - - // check that candidate digest is empty. - execCandidateDigest, err := ccipHome.GetCandidateDigest(nil, donID, uint8(cctypes.PluginTypeCCIPExec)) - if err != nil { - return nil, fmt.Errorf("get exec candidate digest 1st time: %w", err) - } - - if execCandidateDigest == [32]byte{} { - return nil, fmt.Errorf("candidate digest is empty, expected nonempty") - } - - // promote candidate call - encodedPromotionCall, err = CCIPHomeABI.Pack( - "promoteCandidateAndRevokeActive", - donID, - uint8(cctypes.PluginTypeCCIPExec), - execCandidateDigest, - [32]byte{}, - ) - if err != nil { - return nil, fmt.Errorf("pack promotion call: %w", err) - } - - updateDonTx, err = capReg.UpdateDON( - deployment.SimTransactOpts(), - donID, - nodes.PeerIDs(), - []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration{ - { - CapabilityId: CCIPCapabilityID, - Config: encodedPromotionCall, - }, - }, - false, - nodes.DefaultF(), - ) - if err != nil { - return nil, fmt.Errorf("update don w/ exec config: %w", err) - } - mcmsOps = append(mcmsOps, mcms.Operation{ - To: capReg.Address(), - Data: updateDonTx.Data(), - Value: big.NewInt(0), - }) - return mcmsOps, nil -} - // ValidateCCIPHomeConfigSetUp checks that the commit and exec active and candidate configs are set up correctly func ValidateCCIPHomeConfigSetUp( capReg *capabilities_registry.CapabilitiesRegistry, diff --git a/integration-tests/deployment/ccip/ownership.go b/integration-tests/deployment/ccip/ownership.go new file mode 100644 index 00000000000..75007c04ccf --- /dev/null +++ b/integration-tests/deployment/ccip/ownership.go @@ -0,0 +1,37 @@ +package ccipdeployment + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/smartcontractkit/chainlink/integration-tests/deployment" +) + +func TransferAllOwnership(t *testing.T, state CCIPOnChainState, homeCS uint64, e deployment.Environment) { + for _, source := range e.AllChainSelectors() { + if state.Chains[source].OnRamp != nil { + tx, err := state.Chains[source].OnRamp.TransferOwnership(e.Chains[source].DeployerKey, state.Chains[source].Timelock.Address()) + require.NoError(t, err) + _, err = deployment.ConfirmIfNoError(e.Chains[source], tx, err) + require.NoError(t, err) + } + if state.Chains[source].FeeQuoter != nil { + tx, err := state.Chains[source].FeeQuoter.TransferOwnership(e.Chains[source].DeployerKey, state.Chains[source].Timelock.Address()) + require.NoError(t, err) + _, err = deployment.ConfirmIfNoError(e.Chains[source], tx, err) + require.NoError(t, err) + } + // TODO: add offramp and commit stores + + } + // Transfer CR contract ownership + tx, err := state.Chains[homeCS].CapabilityRegistry.TransferOwnership(e.Chains[homeCS].DeployerKey, state.Chains[homeCS].Timelock.Address()) + require.NoError(t, err) + _, err = deployment.ConfirmIfNoError(e.Chains[homeCS], tx, err) + require.NoError(t, err) + tx, err = state.Chains[homeCS].CCIPHome.TransferOwnership(e.Chains[homeCS].DeployerKey, state.Chains[homeCS].Timelock.Address()) + require.NoError(t, err) + _, err = deployment.ConfirmIfNoError(e.Chains[homeCS], tx, err) + require.NoError(t, err) +} diff --git a/integration-tests/deployment/ccip/propose.go b/integration-tests/deployment/ccip/propose.go index 33d073c5e67..ee7487569ad 100644 --- a/integration-tests/deployment/ccip/propose.go +++ b/integration-tests/deployment/ccip/propose.go @@ -4,8 +4,10 @@ import ( "bytes" "context" "crypto/ecdsa" + "fmt" "math/big" "testing" + "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -17,6 +19,8 @@ import ( chainsel "github.com/smartcontractkit/chain-selectors" "github.com/stretchr/testify/require" + mapset "github.com/deckarep/golang-set/v2" + "github.com/smartcontractkit/chainlink/integration-tests/deployment" ) @@ -84,7 +88,9 @@ func ExecuteProposal(t *testing.T, env deployment.Environment, executor *mcms.Ex t.Log("Executing proposal on chain", sel) // Set the root. tx, err2 := executor.SetRootOnChain(env.Chains[sel].Client, env.Chains[sel].DeployerKey, mcms.ChainIdentifier(sel)) - require.NoError(t, err2) + if err2 != nil { + require.NoError(t, deployment.MaybeDataErr(err2)) + } _, err2 = env.Chains[sel].Confirm(tx) require.NoError(t, err2) @@ -134,8 +140,6 @@ func GenerateAcceptOwnershipProposal( ) (*timelock.MCMSWithTimelockProposal, error) { // TODO: Accept rest of contracts var batches []timelock.BatchChainOperation - metaDataPerChain := make(map[mcms.ChainIdentifier]mcms.ChainMetadata) - timelockAddresses := make(map[mcms.ChainIdentifier]common.Address) for _, sel := range chains { chain, _ := chainsel.ChainBySelector(sel) acceptOnRamp, err := state.Chains[sel].OnRamp.AcceptOwnership(deployment.SimTransactOpts()) @@ -147,15 +151,6 @@ func GenerateAcceptOwnershipProposal( return nil, err } chainSel := mcms.ChainIdentifier(chain.Selector) - opCount, err := state.Chains[sel].ProposerMcm.GetOpCount(nil) - if err != nil { - return nil, err - } - metaDataPerChain[chainSel] = mcms.ChainMetadata{ - MCMAddress: state.Chains[sel].ProposerMcm.Address(), - StartingOpCount: opCount.Uint64(), - } - timelockAddresses[chainSel] = state.Chains[sel].Timelock.Address() batches = append(batches, timelock.BatchChainOperation{ ChainIdentifier: chainSel, Batch: []mcms.Operation{ @@ -182,15 +177,6 @@ func GenerateAcceptOwnershipProposal( return nil, err } homeChainID := mcms.ChainIdentifier(homeChain) - opCount, err := state.Chains[homeChain].ProposerMcm.GetOpCount(nil) - if err != nil { - return nil, err - } - metaDataPerChain[homeChainID] = mcms.ChainMetadata{ - StartingOpCount: opCount.Uint64(), - MCMAddress: state.Chains[homeChain].ProposerMcm.Address(), - } - timelockAddresses[homeChainID] = state.Chains[homeChain].Timelock.Address() batches = append(batches, timelock.BatchChainOperation{ ChainIdentifier: homeChainID, Batch: []mcms.Operation{ @@ -207,16 +193,7 @@ func GenerateAcceptOwnershipProposal( }, }) - return timelock.NewMCMSWithTimelockProposal( - "1", - 2004259681, // TODO - []mcms.Signature{}, - false, - metaDataPerChain, - timelockAddresses, - "blah", // TODO - batches, - timelock.Schedule, "0s") + return BuildProposalFromBatches(state, batches, "accept ownership operations", 0) } func BuildProposalMetadata(state CCIPOnChainState, chains []uint64) (map[mcms.ChainIdentifier]common.Address, map[mcms.ChainIdentifier]mcms.ChainMetadata, error) { @@ -237,3 +214,34 @@ func BuildProposalMetadata(state CCIPOnChainState, chains []uint64) (map[mcms.Ch } return tlAddressMap, metaDataPerChain, nil } + +// Given batches of operations, we build the metadata and timelock addresses of those opartions +// We then return a proposal that can be executed and signed +func BuildProposalFromBatches(state CCIPOnChainState, batches []timelock.BatchChainOperation, description string, minDelay time.Duration) (*timelock.MCMSWithTimelockProposal, error) { + if len(batches) == 0 { + return nil, fmt.Errorf("no operations in batch") + } + + chains := mapset.NewSet[uint64]() + for _, op := range batches { + chains.Add(uint64(op.ChainIdentifier)) + } + + tls, mcmsMd, err := BuildProposalMetadata(state, chains.ToSlice()) + if err != nil { + return nil, err + } + + return timelock.NewMCMSWithTimelockProposal( + "1", + 2004259681, // TODO: should be parameterized and based on current block timestamp. + []mcms.Signature{}, + false, + mcmsMd, + tls, + description, + batches, + timelock.Schedule, + minDelay.String(), + ) +} diff --git a/integration-tests/deployment/ccip/propose_home_chain.go b/integration-tests/deployment/ccip/propose_home_chain.go deleted file mode 100644 index 8ad3e9cfffd..00000000000 --- a/integration-tests/deployment/ccip/propose_home_chain.go +++ /dev/null @@ -1,111 +0,0 @@ -package ccipdeployment - -import ( - "fmt" - - "github.com/ethereum/go-ethereum/common" - "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/mcms" - "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" - - "github.com/smartcontractkit/chainlink/integration-tests/deployment" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" -) - -// SetCandidateExecPluginProposal calls setCandidate on the CCIPHome for setting up OCR3 exec Plugin config for the new chain. -func SetCandidateExecPluginProposal( - state CCIPOnChainState, - e deployment.Environment, - nodes deployment.Nodes, - ocrSecrets deployment.OCRSecrets, - homeChainSel, feedChainSel, newChainSel uint64, - tokenConfig TokenConfig, - rmnHomeAddress common.Address, -) (*timelock.MCMSWithTimelockProposal, error) { - newDONArgs, err := BuildOCR3ConfigForCCIPHome( - e.Logger, - ocrSecrets, - state.Chains[newChainSel].OffRamp, - e.Chains[newChainSel], - feedChainSel, - tokenConfig.GetTokenInfo(e.Logger, state.Chains[newChainSel].LinkToken, state.Chains[newChainSel].Weth9), - nodes.NonBootstraps(), - rmnHomeAddress, - ) - if err != nil { - return nil, err - } - - execConfig, ok := newDONArgs[types.PluginTypeCCIPExec] - if !ok { - return nil, fmt.Errorf("missing exec plugin in ocr3Configs") - } - - setCandidateMCMSOps, err := SetCandidateExecPluginOps( - execConfig, - state.Chains[homeChainSel].CapabilityRegistry, - state.Chains[homeChainSel].CCIPHome, - newChainSel, - nodes.NonBootstraps(), - ) - - if err != nil { - return nil, err - } - timelockAddresses, metaDataPerChain, err := BuildProposalMetadata(state, []uint64{homeChainSel}) - if err != nil { - return nil, err - } - return timelock.NewMCMSWithTimelockProposal( - "1", - 2004259681, // TODO: should be parameterized and based on current block timestamp. - []mcms.Signature{}, - false, - metaDataPerChain, - timelockAddresses, - "SetCandidate for execution", - []timelock.BatchChainOperation{{ - ChainIdentifier: mcms.ChainIdentifier(homeChainSel), - Batch: setCandidateMCMSOps, - }}, - timelock.Schedule, - "0s", // TODO: Should be parameterized. - ) -} - -// PromoteCandidateProposal generates a proposal to call promoteCandidate on the CCIPHome through CapReg. -// This needs to be called after SetCandidateProposal is executed. -func PromoteCandidateProposal( - state CCIPOnChainState, - homeChainSel, newChainSel uint64, - nodes deployment.Nodes, -) (*timelock.MCMSWithTimelockProposal, error) { - promoteCandidateOps, err := PromoteCandidateOps( - state.Chains[homeChainSel].CapabilityRegistry, - state.Chains[homeChainSel].CCIPHome, - newChainSel, - nodes.NonBootstraps(), - ) - if err != nil { - return nil, err - } - - timelockAddresses, metaDataPerChain, err := BuildProposalMetadata(state, []uint64{homeChainSel}) - if err != nil { - return nil, err - } - return timelock.NewMCMSWithTimelockProposal( - "1", - 2004259681, // TODO: should be parameterized and based on current block timestamp. - []mcms.Signature{}, - false, - metaDataPerChain, - timelockAddresses, - "promoteCandidate for commit and execution", - []timelock.BatchChainOperation{{ - ChainIdentifier: mcms.ChainIdentifier(homeChainSel), - Batch: promoteCandidateOps, - }}, - timelock.Schedule, - "0s", // TODO: Should be parameterized. - ) -} diff --git a/integration-tests/deployment/ccip/test_assertions.go b/integration-tests/deployment/ccip/test_assertions.go index 91bd0550545..1f805cbd209 100644 --- a/integration-tests/deployment/ccip/test_assertions.go +++ b/integration-tests/deployment/ccip/test_assertions.go @@ -2,10 +2,14 @@ package ccipdeployment import ( "context" + "fmt" + "math/big" "testing" "time" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/stretchr/testify/require" @@ -14,9 +18,128 @@ import ( "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" "github.com/smartcontractkit/chainlink/integration-tests/deployment" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/fee_quoter" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp" ) +func ConfirmGasPriceUpdatedForAll( + t *testing.T, + e deployment.Environment, + state CCIPOnChainState, + startBlocks map[uint64]*uint64, +) { + var wg errgroup.Group + for src, srcChain := range e.Chains { + for dest, dstChain := range e.Chains { + if src == dest { + continue + } + srcChain := srcChain + dstChain := dstChain + wg.Go(func() error { + var startBlock *uint64 + if startBlocks != nil { + startBlock = startBlocks[srcChain.Selector] + } + return ConfirmGasPriceUpdated( + t, + dstChain, + state.Chains[srcChain.Selector].FeeQuoter, + *startBlock, + ) + }) + } + } + require.NoError(t, wg.Wait()) +} + +func ConfirmGasPriceUpdated( + t *testing.T, + dest deployment.Chain, + srcFeeQuoter *fee_quoter.FeeQuoter, + startBlock uint64, +) error { + it, err := srcFeeQuoter.FilterUsdPerUnitGasUpdated(&bind.FilterOpts{ + Context: context.Background(), + Start: startBlock, + }, []uint64{dest.Selector}) + + require.NoError(t, err) + require.True(t, it.Next()) + require.NotEqual(t, InitialGasPrice, it.Event.Value) + return nil +} + +func ConfirmTokenPriceUpdatedForAll( + t *testing.T, + e deployment.Environment, + state CCIPOnChainState, + startBlocks map[uint64]*uint64, +) { + var wg errgroup.Group + for _, chain := range e.Chains { + chain := chain + wg.Go(func() error { + var startBlock *uint64 + if startBlocks != nil { + startBlock = startBlocks[chain.Selector] + } + linkAddress := state.Chains[chain.Selector].LinkToken.Address() + wethAddress := state.Chains[chain.Selector].Weth9.Address() + tokenToPrice := make(map[common.Address]*big.Int) + tokenToPrice[linkAddress] = InitialLinkPrice + tokenToPrice[wethAddress] = InitialWethPrice + return ConfirmTokenPriceUpdated( + t, + chain, + state.Chains[chain.Selector].FeeQuoter, + *startBlock, + tokenToPrice, + ) + }) + } + require.NoError(t, wg.Wait()) +} + +func ConfirmTokenPriceUpdated( + t *testing.T, + chain deployment.Chain, + feeQuoter *fee_quoter.FeeQuoter, + startBlock uint64, + tokenToInitialPrice map[common.Address]*big.Int, +) error { + tokens := make([]common.Address, 0, len(tokenToInitialPrice)) + for token := range tokenToInitialPrice { + tokens = append(tokens, token) + } + it, err := feeQuoter.FilterUsdPerTokenUpdated(&bind.FilterOpts{ + Context: context.Background(), + Start: startBlock, + }, tokens) + require.NoError(t, err) + for it.Next() { + token := it.Event.Token + initialValue, ok := tokenToInitialPrice[token] + if ok { + require.Contains(t, tokens, token) + // Initial Value should be changed + require.NotEqual(t, initialValue, it.Event.Value) + } + + // Remove the token from the map until we assert all tokens are updated + delete(tokenToInitialPrice, token) + if len(tokenToInitialPrice) == 0 { + return nil + } + } + + if len(tokenToInitialPrice) > 0 { + return fmt.Errorf("Not all tokens updated on chain %d", chain.Selector) + } + + return nil +} + // ConfirmCommitForAllWithExpectedSeqNums waits for all chains in the environment to commit the given expectedSeqNums. // expectedSeqNums is a map of destinationchain selector to expected sequence number // startBlocks is a map of destination chain selector to start block number to start watching from. diff --git a/integration-tests/deployment/ccip/test_helpers.go b/integration-tests/deployment/ccip/test_helpers.go index 58a7c64a551..3e34b3af1f5 100644 --- a/integration-tests/deployment/ccip/test_helpers.go +++ b/integration-tests/deployment/ccip/test_helpers.go @@ -159,8 +159,9 @@ func allocateCCIPChainSelectors(chains map[uint64]deployment.Chain) (homeChainSe // NewMemoryEnvironment creates a new CCIP environment // with capreg, fee tokens, feeds and nodes set up. -func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, numChains int) DeployedEnv { +func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, numChains int, numNodes int) DeployedEnv { require.GreaterOrEqual(t, numChains, 2, "numChains must be at least 2 for home and feed chains") + require.GreaterOrEqual(t, numNodes, 4, "numNodes must be at least 4") ctx := testcontext.Get(t) chains := memory.NewMemoryChains(t, numChains) homeChainSel, feedSel := allocateCCIPChainSelectors(chains) @@ -169,7 +170,7 @@ func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, numChains int) Deplo ab := deployment.NewMemoryAddressBook() feeTokenContracts, crConfig := DeployTestContracts(t, lggr, ab, homeChainSel, feedSel, chains) - nodes := memory.NewNodes(t, zapcore.InfoLevel, chains, 4, 1, crConfig) + nodes := memory.NewNodes(t, zapcore.InfoLevel, chains, numNodes, 1, crConfig) for _, node := range nodes { require.NoError(t, node.App.Start(ctx)) t.Cleanup(func() { @@ -188,8 +189,8 @@ func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, numChains int) Deplo } } -func NewMemoryEnvironmentWithJobs(t *testing.T, lggr logger.Logger, numChains int) DeployedEnv { - e := NewMemoryEnvironment(t, lggr, numChains) +func NewMemoryEnvironmentWithJobs(t *testing.T, lggr logger.Logger, numChains int, numNodes int) DeployedEnv { + e := NewMemoryEnvironment(t, lggr, numChains, numNodes) e.SetupJobs(t) return e } @@ -559,3 +560,25 @@ func deploySingleFeed( return mockTokenFeed.Address, desc, nil } + +func ConfirmRequestOnSourceAndDest(t *testing.T, env deployment.Environment, state CCIPOnChainState, sourceCS, destCS, expectedSeqNr uint64) error { + latesthdr, err := env.Chains[destCS].Client.HeaderByNumber(testcontext.Get(t), nil) + require.NoError(t, err) + startBlock := latesthdr.Number.Uint64() + fmt.Printf("startblock %d", startBlock) + seqNum := SendRequest(t, env, state, sourceCS, destCS, false) + require.Equal(t, expectedSeqNr, seqNum) + + fmt.Printf("Request sent for seqnr %d", seqNum) + require.NoError(t, + ConfirmCommitWithExpectedSeqNumRange(t, env.Chains[sourceCS], env.Chains[destCS], state.Chains[destCS].OffRamp, &startBlock, cciptypes.SeqNumRange{ + cciptypes.SeqNum(seqNum), + cciptypes.SeqNum(seqNum), + })) + + fmt.Printf("Commit confirmed for seqnr %d", seqNum) + require.NoError(t, + ConfirmExecWithSeqNr(t, env.Chains[sourceCS], env.Chains[destCS], state.Chains[destCS].OffRamp, &startBlock, seqNum)) + + return nil +} diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 4eae80919bd..28dca457e45 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -15,6 +15,7 @@ require ( github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240821051457-da69c6d9617a github.com/cli/go-gh/v2 v2.0.0 + github.com/deckarep/golang-set/v2 v2.6.0 github.com/ethereum/go-ethereum v1.13.8 github.com/fxamacker/cbor/v2 v2.7.0 github.com/go-resty/resty/v2 v2.13.1 @@ -40,7 +41,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.27 github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837-8c05ee9b97d5 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47 - github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 + github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.12 @@ -170,12 +171,11 @@ require ( github.com/cosmos/ibc-go/v7 v7.5.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect - github.com/cpuguy83/dockercfg v0.3.1 // indirect + github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/dennwc/varint v1.0.0 // indirect github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 // indirect @@ -354,8 +354,8 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/spdystream v0.4.0 // indirect - github.com/moby/sys/sequential v0.5.0 // indirect - github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.3.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -412,7 +412,7 @@ require ( github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect @@ -465,20 +465,23 @@ require ( go.opentelemetry.io/collector/semconv v0.105.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 // indirect - go.opentelemetry.io/otel/log v0.4.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.4.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/otel/log v0.6.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.6.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/goleak v1.3.0 // indirect @@ -496,8 +499,8 @@ require ( gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index cda1230764f..25c8e3e4b96 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -399,8 +399,8 @@ github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5s github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= -github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E= -github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -1152,10 +1152,10 @@ github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkV github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= -github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= -github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= -github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= -github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -1404,8 +1404,8 @@ github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837 github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837-8c05ee9b97d5/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47 h1:kyOANlbz29uaevkjRaXlO1750A43xAvwAOKXiVNWpFQ= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47/go.mod h1:4adKaHNaxFsRvV/lYfqtbsWyyvIPUMLR0FdOJN/ljis= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 h1:qx5p01fqee86cj6EUOCzFc2zILw56v1Q3c5DUuEQWLs= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286/go.mod h1:tsGgeEJc5SUSlfVGSX0wR0EkRU3pM58D6SKF97V68ko= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d h1:34F6OuNyPwCwBXBG8I+s6BbngHlVNOtDKWMOZ9iXOpY= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d/go.mod h1:TQ9/KKXZ9vr8QAlUquqGpSvDCpR+DtABKPXZY4CiRns= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f h1:BwrIaQIx5Iy6eT+DfLhFfK2XqjxRm74mVdlX8gbu4dw= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f/go.mod h1:wHtwSR3F1CQSJJZDQKuqaqFYnvkT+kMyget7dl8Clvo= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e h1:JiETqdNM0bktAUGMc62COwXIaw3rR3M77Me6bBLG0Fg= @@ -1416,8 +1416,8 @@ github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 h1:1xTm8UGeD github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 h1:ZUihu/AMiFkZgO5XkVcpFayhIUibdovHzpbHnMPZUr0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4/go.mod h1:iZugccCLpPWtcGiR/8gurre2j3RtyKnqd1FcVR0NzQw= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 h1:mgjBQIEy+3V3G6K8e+6by3xndgsXdYYsdy+7kzQZwSk= @@ -1636,36 +1636,40 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 h1:UiRNKd1OgqsLbFwE+wkAWTdiAxXtCBqKIHeBIse4FUA= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9/go.mod h1:eqZlW3pJWhjyexnDPrdQxix1pn0wwhI4AO4GKpP/bMI= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 h1:QSKmLBzbFULSyHzOdO9JsN9lpE4zkrz1byYGmJecdVE= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0/go.mod h1:sTQ/NH8Yrirf0sJ5rWqVu+oT82i4zL9FaF6rWcqnptM= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 h1:U2guen0GhqH8o/G2un8f/aG/y++OuW6MyCo6hT9prXk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0/go.mod h1:yeGZANgEcpdx/WK0IvvRFC+2oLiMS2u4L/0Rj2M2Qr0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 h1:VrMAbeJz4gnVDg2zEzjHG4dEH86j4jO6VYB+NgtGD8s= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0/go.mod h1:qqN/uFdpeitTvm+JDqqnjm517pmQRYxTORbETHq5tOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 h1:lsInsfvhVIfOI6qHVyysXMNDnjO9Npvl7tlDPJFBVd4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0/go.mod h1:KQsVNh4OjgjTG0G6EiNi1jVpnaeeKsKMRwbLN+f1+8M= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 h1:umZgi92IyxfXd/l4kaDhnKgY8rnN/cZcF1LKc6I8OQ8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0/go.mod h1:4lVs6obhSVRb1EW5FhOuBTyiQhtRtAnnva9vD3yRfq8= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 h1:0MH3f8lZrflbUWXVxyBg/zviDFdGE062uKh5+fu8Vv0= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0/go.mod h1:Vh68vYiHY5mPdekTr0ox0sALsqjoVy0w3Os278yX5SQ= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 h1:BJee2iLkfRfl9lc7aFmBwkWxY/RI1RDdXepSF6y8TPE= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0/go.mod h1:DIzlHs3DRscCIBU3Y9YSzPfScwnYnzfnCd4g8zA7bZc= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bEkIYOVMw4q1WJxIAGoFTrtYOzWuRQ= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= -go.opentelemetry.io/otel/log v0.4.0 h1:/vZ+3Utqh18e8TPjuc3ecg284078KWrR8BRz+PQAj3o= -go.opentelemetry.io/otel/log v0.4.0/go.mod h1:DhGnQvky7pHy82MIRV43iXh3FlKN8UUKftn0KbLOq6I= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/sdk/log v0.4.0 h1:1mMI22L82zLqf6KtkjrRy5BbagOTWdJsqMY/HSqILAA= -go.opentelemetry.io/otel/sdk/log v0.4.0/go.mod h1:AYJ9FVF0hNOgAVzUG/ybg/QttnXhUePWAupmCqtdESo= -go.opentelemetry.io/otel/sdk/metric v1.28.0 h1:OkuaKgKrgAbYrrY0t92c+cC+2F6hsFNnCQArXCKlg08= -go.opentelemetry.io/otel/sdk/metric v1.28.0/go.mod h1:cWPjykihLAPvXKi4iZc1dpER3Jdq2Z0YLse3moQUCpg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/log v0.6.0 h1:nH66tr+dmEgW5y+F9LanGJUBYPrRgP4g2EkmPE3LeK8= +go.opentelemetry.io/otel/log v0.6.0/go.mod h1:KdySypjQHhP069JX0z/t26VHwa8vSwzgaKmXtIB3fJM= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk/log v0.6.0 h1:4J8BwXY4EeDE9Mowg+CyhWVBhTSLXVXodiXxS/+PGqI= +go.opentelemetry.io/otel/sdk/log v0.6.0/go.mod h1:L1DN8RMAduKkrwRAFDEX3E3TLOq46+XMGSbUfHU/+vE= +go.opentelemetry.io/otel/sdk/metric v1.30.0 h1:QJLT8Pe11jyHBHfSAgYH7kEmT24eX792jZO1bo4BXkM= +go.opentelemetry.io/otel/sdk/metric v1.30.0/go.mod h1:waS6P3YqFNzeP01kuo/MBBYqaoBJl7efRQHOaydhy1Y= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= @@ -2114,10 +2118,10 @@ google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d h1:/hmn0Ku5kWij/kjGsrcJeC1T/MrJi2iNWwgAqrihFwc= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd h1:BBOTEWLuuEGQy9n1y9MhVJ9Qt0BDu21X8qZs71/uPZo= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd h1:6TEm2ZxXoQmFWFlt1vNxvVOa1Q0dXFQD1m/rYjXmS0E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index fdd2550486b..05de2f83b77 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -15,7 +15,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.33.0 github.com/slack-go/slack v0.15.0 - github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 + github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.12 github.com/smartcontractkit/chainlink-testing-framework/seth v1.50.1 github.com/smartcontractkit/chainlink-testing-framework/wasp v1.50.0 @@ -63,13 +63,16 @@ require ( github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/sourcegraph/conc v0.3.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 // indirect - go.opentelemetry.io/otel/log v0.4.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.4.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect + go.opentelemetry.io/otel/log v0.6.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.6.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect k8s.io/apimachinery v0.31.1 // indirect ) @@ -159,7 +162,7 @@ require ( github.com/cosmos/ibc-go/v7 v7.5.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect - github.com/cpuguy83/dockercfg v0.3.1 // indirect + github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -348,8 +351,8 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/spdystream v0.4.0 // indirect - github.com/moby/sys/sequential v0.5.0 // indirect - github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.3.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -410,7 +413,7 @@ require ( github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 // indirect github.com/smartcontractkit/libocr v0.0.0-20241007185508-adbe57025f12 // indirect @@ -467,12 +470,12 @@ require ( go.opentelemetry.io/collector/semconv v0.105.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/atomic v1.11.0 // indirect @@ -496,8 +499,8 @@ require ( gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/grpc v1.66.2 // indirect google.golang.org/protobuf v1.35.1 // indirect gopkg.in/guregu/null.v4 v4.0.0 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 02cf6954ef2..22e168f8531 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -383,8 +383,8 @@ github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5s github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= -github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E= -github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -1134,10 +1134,10 @@ github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkV github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= -github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= -github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= -github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= -github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -1381,8 +1381,8 @@ github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837 github.com/smartcontractkit/chainlink-automation v1.0.0-alpha.0.0.20241023165837-8c05ee9b97d5/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47 h1:kyOANlbz29uaevkjRaXlO1750A43xAvwAOKXiVNWpFQ= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241022184834-e8564a286a47/go.mod h1:4adKaHNaxFsRvV/lYfqtbsWyyvIPUMLR0FdOJN/ljis= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286 h1:qx5p01fqee86cj6EUOCzFc2zILw56v1Q3c5DUuEQWLs= -github.com/smartcontractkit/chainlink-common v0.3.1-0.20241021103500-39a6e78c0286/go.mod h1:tsGgeEJc5SUSlfVGSX0wR0EkRU3pM58D6SKF97V68ko= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d h1:34F6OuNyPwCwBXBG8I+s6BbngHlVNOtDKWMOZ9iXOpY= +github.com/smartcontractkit/chainlink-common v0.3.1-0.20241023204219-86c89e29937d/go.mod h1:TQ9/KKXZ9vr8QAlUquqGpSvDCpR+DtABKPXZY4CiRns= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f h1:BwrIaQIx5Iy6eT+DfLhFfK2XqjxRm74mVdlX8gbu4dw= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f/go.mod h1:wHtwSR3F1CQSJJZDQKuqaqFYnvkT+kMyget7dl8Clvo= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e h1:JiETqdNM0bktAUGMc62COwXIaw3rR3M77Me6bBLG0Fg= @@ -1391,8 +1391,8 @@ github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6An github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4 h1:ZUihu/AMiFkZgO5XkVcpFayhIUibdovHzpbHnMPZUr0= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241024132041-a3eb2e31b4c4/go.mod h1:iZugccCLpPWtcGiR/8gurre2j3RtyKnqd1FcVR0NzQw= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 h1:mgjBQIEy+3V3G6K8e+6by3xndgsXdYYsdy+7kzQZwSk= @@ -1611,36 +1611,40 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9 h1:UiRNKd1OgqsLbFwE+wkAWTdiAxXtCBqKIHeBIse4FUA= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240823153156-2a54df7bffb9/go.mod h1:eqZlW3pJWhjyexnDPrdQxix1pn0wwhI4AO4GKpP/bMI= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0 h1:QSKmLBzbFULSyHzOdO9JsN9lpE4zkrz1byYGmJecdVE= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.6.0/go.mod h1:sTQ/NH8Yrirf0sJ5rWqVu+oT82i4zL9FaF6rWcqnptM= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 h1:U2guen0GhqH8o/G2un8f/aG/y++OuW6MyCo6hT9prXk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0/go.mod h1:yeGZANgEcpdx/WK0IvvRFC+2oLiMS2u4L/0Rj2M2Qr0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0 h1:VrMAbeJz4gnVDg2zEzjHG4dEH86j4jO6VYB+NgtGD8s= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.30.0/go.mod h1:qqN/uFdpeitTvm+JDqqnjm517pmQRYxTORbETHq5tOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 h1:lsInsfvhVIfOI6qHVyysXMNDnjO9Npvl7tlDPJFBVd4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0/go.mod h1:KQsVNh4OjgjTG0G6EiNi1jVpnaeeKsKMRwbLN+f1+8M= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 h1:umZgi92IyxfXd/l4kaDhnKgY8rnN/cZcF1LKc6I8OQ8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0/go.mod h1:4lVs6obhSVRb1EW5FhOuBTyiQhtRtAnnva9vD3yRfq8= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0 h1:0MH3f8lZrflbUWXVxyBg/zviDFdGE062uKh5+fu8Vv0= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.4.0/go.mod h1:Vh68vYiHY5mPdekTr0ox0sALsqjoVy0w3Os278yX5SQ= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 h1:BJee2iLkfRfl9lc7aFmBwkWxY/RI1RDdXepSF6y8TPE= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0/go.mod h1:DIzlHs3DRscCIBU3Y9YSzPfScwnYnzfnCd4g8zA7bZc= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bEkIYOVMw4q1WJxIAGoFTrtYOzWuRQ= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= -go.opentelemetry.io/otel/log v0.4.0 h1:/vZ+3Utqh18e8TPjuc3ecg284078KWrR8BRz+PQAj3o= -go.opentelemetry.io/otel/log v0.4.0/go.mod h1:DhGnQvky7pHy82MIRV43iXh3FlKN8UUKftn0KbLOq6I= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/sdk/log v0.4.0 h1:1mMI22L82zLqf6KtkjrRy5BbagOTWdJsqMY/HSqILAA= -go.opentelemetry.io/otel/sdk/log v0.4.0/go.mod h1:AYJ9FVF0hNOgAVzUG/ybg/QttnXhUePWAupmCqtdESo= -go.opentelemetry.io/otel/sdk/metric v1.28.0 h1:OkuaKgKrgAbYrrY0t92c+cC+2F6hsFNnCQArXCKlg08= -go.opentelemetry.io/otel/sdk/metric v1.28.0/go.mod h1:cWPjykihLAPvXKi4iZc1dpER3Jdq2Z0YLse3moQUCpg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/log v0.6.0 h1:nH66tr+dmEgW5y+F9LanGJUBYPrRgP4g2EkmPE3LeK8= +go.opentelemetry.io/otel/log v0.6.0/go.mod h1:KdySypjQHhP069JX0z/t26VHwa8vSwzgaKmXtIB3fJM= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk/log v0.6.0 h1:4J8BwXY4EeDE9Mowg+CyhWVBhTSLXVXodiXxS/+PGqI= +go.opentelemetry.io/otel/sdk/log v0.6.0/go.mod h1:L1DN8RMAduKkrwRAFDEX3E3TLOq46+XMGSbUfHU/+vE= +go.opentelemetry.io/otel/sdk/metric v1.30.0 h1:QJLT8Pe11jyHBHfSAgYH7kEmT24eX792jZO1bo4BXkM= +go.opentelemetry.io/otel/sdk/metric v1.30.0/go.mod h1:waS6P3YqFNzeP01kuo/MBBYqaoBJl7efRQHOaydhy1Y= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= @@ -2087,10 +2091,10 @@ google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d h1:/hmn0Ku5kWij/kjGsrcJeC1T/MrJi2iNWwgAqrihFwc= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd h1:BBOTEWLuuEGQy9n1y9MhVJ9Qt0BDu21X8qZs71/uPZo= -google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd h1:6TEm2ZxXoQmFWFlt1vNxvVOa1Q0dXFQD1m/rYjXmS0E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= diff --git a/package.json b/package.json index 0382ca4e5cb..1da5d63f6d8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chainlink", - "version": "2.17.0", + "version": "2.18.0", "description": "node of the decentralized oracle network, bridging on and off-chain computation", "main": "index.js", "scripts": { diff --git a/tools/bin/modgraph b/tools/bin/modgraph index 4080e53abe9..e52baf77dda 100755 --- a/tools/bin/modgraph +++ b/tools/bin/modgraph @@ -5,6 +5,7 @@ set -e echo "# smartcontractkit Go modules +## Main module \`\`\`mermaid flowchart LR subgraph chains @@ -28,8 +29,13 @@ flowchart LR tdh2/go/ocr2/decryptionplugin end + subgraph chainlink-protos + chainlink-protos/orchestrator + chainlink-protos/job-distributor + end + classDef outline stroke-dasharray:6,fill:none; - class chains,products,tdh2 outline + class chains,products,tdh2,chainlink-protos outline " go mod graph | \ # org only @@ -48,4 +54,71 @@ go mod graph | \ awk '!x[$0]++' | \ # indent sed 's/^/ /' +echo "\`\`\`" + +echo "## All modules +\`\`\`mermaid +flowchart LR + subgraph chainlink + chainlink/v2 + chainlink/integration-tests + chainlink/load-tests + chainlink/core/scripts + end + + subgraph chains + chainlink-cosmos + chainlink-solana + chainlink-starknet/relayer + chainlink-evm + end + + subgraph products + chainlink-automation + chainlink-ccip + chainlink-data-streams + chainlink-feeds + chainlink-functions + chainlink-vrf + end + + subgraph tdh2 + tdh2/go/tdh2 + tdh2/go/ocr2/decryptionplugin + end + + subgraph chainlink-testing-framework + chainlink-testing-framework/grafana + chainlink-testing-framework/havoc + chainlink-testing-framework/lib + chainlink-testing-framework/lib/grafana + chainlink-testing-framework/seth + chainlink-testing-framework/wasp + end + + subgraph chainlink-protos + chainlink-protos/orchestrator + chainlink-protos/job-distributor + end + + classDef outline stroke-dasharray:6,fill:none; + class chainlink,chains,products,tdh2,chainlink-protos,chainlink-testing-framework outline +" +gomods graph | \ + # org only + grep smartcontractkit.*smartcontractkit | \ + # drop prefix + sed s/"github\.com\/smartcontractkit\/"/""/g | \ + # insert edges + sed s/" "/" --> "/ | \ + # drop versions + sed s/"@[^ ]*"/""/g | \ + # insert links + sed s/"\([^ ]*\)$"/"\1\nclick \1 href \"https:\/\/github.com\/smartcontractkit\/\1\""/ | \ + # truncate links to repo + sed s/"\"https:\/\/github.com\/smartcontractkit\/\([^\"\/]*\)\/.*\""/"\"https:\/\/github.com\/smartcontractkit\/\1\""/ | \ + # dedupe lines + awk '!x[$0]++' | \ + # indent + sed 's/^/ /' echo "\`\`\`" \ No newline at end of file