From 73a608ab8eec04e0cf9246d8f08ca55abe67bc70 Mon Sep 17 00:00:00 2001 From: Kashif Date: Fri, 12 Jul 2024 02:31:12 +0900 Subject: [PATCH 01/10] (SHIP-1481) Increase default LimitDefault for CCIP (#664) LimitDefault of 8M is the most common value used in chains so setting this as the default --------- Co-authored-by: amaechiokolobi <168412367+amaechiokolobi@users.noreply.github.com> Co-authored-by: skudasov Co-authored-by: Simson --- .changeset/README.md | 8 - .changeset/afraid-cameras-laugh.md | 5 - .changeset/beige-tables-visit.md | 5 - .changeset/brown-rings-allow.md | 5 - .changeset/calm-roses-bathe.md | 5 - .changeset/cold-seals-listen.md | 5 - .changeset/config.json | 20 -- .changeset/cool-squids-repair.md | 5 - .changeset/curly-rocks-fold.md | 5 - .changeset/cyan-walls-joke.md | 5 - .changeset/dry-eels-change.md | 5 - .changeset/dry-turtles-sleep.md | 5 - .changeset/eight-crews-dance.md | 5 - .changeset/eleven-planets-smash.md | 5 - .changeset/eleven-singers-march.md | 5 - .changeset/fast-hounds-build.md | 5 - .changeset/few-spies-march.md | 5 - .changeset/few-zoos-hope.md | 5 - .changeset/fifty-ducks-beg.md | 5 - .changeset/flat-eyes-exercise.md | 5 - .changeset/fluffy-geese-act.md | 5 - .changeset/friendly-parents-wonder.md | 5 - .changeset/funny-bananas-vanish.md | 5 - .changeset/funny-walls-yawn.md | 5 - .changeset/gentle-jobs-flow.md | 5 - .changeset/giant-otters-matter.md | 5 - .changeset/giant-wolves-count.md | 5 - .changeset/good-countries-remain.md | 5 - .changeset/gorgeous-meals-kneel.md | 5 - .changeset/green-fishes-fix.md | 5 - .changeset/grumpy-bees-bathe.md | 5 - .changeset/grumpy-guests-joke.md | 5 - .changeset/happy-jokes-reply.md | 5 - .changeset/healthy-years-wave.md | 5 - .changeset/heavy-oranges-smell.md | 5 - .changeset/hip-dingos-shout.md | 5 - .changeset/honest-clouds-march.md | 5 - .changeset/honest-foxes-reflect.md | 5 - .changeset/honest-pens-flash.md | 5 - .changeset/hungry-cougars-float.md | 5 - .changeset/hungry-hounds-search.md | 5 - .changeset/hungry-spiders-beg.md | 5 - .changeset/itchy-cheetahs-return.md | 5 - .changeset/kind-mangos-check.md | 5 - .changeset/kind-months-brush.md | 5 - .changeset/large-bottles-dress.md | 5 - .changeset/large-keys-sniff.md | 5 - .changeset/light-suns-build.md | 5 - .changeset/lovely-feet-share.md | 5 - .changeset/many-pigs-brake.md | 5 - .changeset/mean-jobs-bathe.md | 5 - .changeset/moody-masks-perform.md | 5 - .changeset/neat-birds-smash.md | 5 - .changeset/neat-pandas-glow.md | 5 - .changeset/nice-donuts-yell.md | 5 - .changeset/nice-falcons-sniff.md | 5 - .changeset/nice-pumpkins-itch.md | 5 - .changeset/ninety-rabbits-hear.md | 5 - .changeset/olive-masks-bow.md | 5 - .changeset/perfect-swans-tie.md | 5 - .changeset/pink-fans-run.md | 5 - .changeset/poor-trains-develop.md | 5 - .changeset/pretty-clocks-rhyme.md | 5 - .changeset/proud-glasses-give.md | 5 - .changeset/rotten-colts-speak.md | 5 - .changeset/rotten-dogs-clean.md | 5 - .changeset/rude-jokes-move.md | 5 - .changeset/serious-hounds-hear.md | 5 - .changeset/seven-hats-help.md | 5 - .changeset/sharp-bikes-hunt.md | 5 - .changeset/shiny-peas-look.md | 5 - .changeset/shiny-tips-mate.md | 5 - .changeset/short-cows-study.md | 5 - .changeset/short-tigers-report.md | 5 - .changeset/silly-eels-hunt.md | 5 - .changeset/six-berries-hammer.md | 5 - .changeset/six-tools-laugh.md | 5 - .changeset/six-wolves-relax.md | 5 - .changeset/sixty-spiders-end.md | 5 - .changeset/smooth-turtles-visit.md | 5 - .changeset/soft-numbers-invent.md | 5 - .changeset/sour-owls-brush.md | 5 - .changeset/spicy-comics-listen.md | 5 - .changeset/spotty-ants-bake.md | 5 - .changeset/spotty-timers-play.md | 5 - .changeset/strange-experts-fold.md | 5 - .changeset/swift-crabs-sing.md | 5 - .changeset/tasty-rice-hope.md | 5 - .changeset/ten-adults-try.md | 5 - .changeset/ten-spiders-reflect.md | 5 - .changeset/tender-pants-trade.md | 5 - .changeset/thick-moles-behave.md | 5 - .changeset/thin-elephants-rush.md | 5 - .changeset/thin-needles-grow.md | 5 - .changeset/thin-rats-smash.md | 5 - .changeset/thirty-rockets-nail.md | 5 - .changeset/tidy-hairs-pull.md | 5 - .changeset/tiny-gorillas-destroy.md | 5 - .changeset/twelve-donuts-sell.md | 5 - .changeset/twelve-grapes-hammer.md | 5 - .changeset/violet-pumas-appear.md | 5 - .changeset/warm-doors-march.md | 5 - .changeset/weak-brooms-sing.md | 5 - .changeset/weak-moles-clean.md | 5 - .changeset/weak-months-turn.md | 5 - .changeset/wet-forks-pretend.md | 5 - .changeset/wild-falcons-speak.md | 5 - .changeset/young-camels-return.md | 6 - .changeset/young-hounds-wave.md | 5 - .github/workflows/integration-tests.yml | 1 + core/chains/evm/config/config_test.go | 38 +-- .../evm/config/toml/defaults/fallback.toml | 4 +- core/config/docs/chains-evm.toml | 4 +- core/internal/features/features_test.go | 12 +- .../config-multi-chain-effective.toml | 12 +- .../config-multi-chain-effective.toml | 12 +- docs/CONFIG.md | 244 +++++++++--------- integration-tests/testconfig/default.toml | 2 +- testdata/scripts/keys/eth/help.txtar | 2 +- .../disk-based-logging-disabled.txtar | 4 +- .../validate/disk-based-logging-no-dir.txtar | 4 +- .../node/validate/disk-based-logging.txtar | 4 +- testdata/scripts/node/validate/invalid.txtar | 4 +- testdata/scripts/node/validate/valid.txtar | 4 +- 124 files changed, 176 insertions(+), 739 deletions(-) delete mode 100644 .changeset/README.md delete mode 100644 .changeset/afraid-cameras-laugh.md delete mode 100644 .changeset/beige-tables-visit.md delete mode 100644 .changeset/brown-rings-allow.md delete mode 100644 .changeset/calm-roses-bathe.md delete mode 100644 .changeset/cold-seals-listen.md delete mode 100644 .changeset/config.json delete mode 100644 .changeset/cool-squids-repair.md delete mode 100644 .changeset/curly-rocks-fold.md delete mode 100644 .changeset/cyan-walls-joke.md delete mode 100644 .changeset/dry-eels-change.md delete mode 100644 .changeset/dry-turtles-sleep.md delete mode 100644 .changeset/eight-crews-dance.md delete mode 100644 .changeset/eleven-planets-smash.md delete mode 100644 .changeset/eleven-singers-march.md delete mode 100644 .changeset/fast-hounds-build.md delete mode 100644 .changeset/few-spies-march.md delete mode 100644 .changeset/few-zoos-hope.md delete mode 100644 .changeset/fifty-ducks-beg.md delete mode 100644 .changeset/flat-eyes-exercise.md delete mode 100644 .changeset/fluffy-geese-act.md delete mode 100644 .changeset/friendly-parents-wonder.md delete mode 100644 .changeset/funny-bananas-vanish.md delete mode 100644 .changeset/funny-walls-yawn.md delete mode 100644 .changeset/gentle-jobs-flow.md delete mode 100644 .changeset/giant-otters-matter.md delete mode 100644 .changeset/giant-wolves-count.md delete mode 100644 .changeset/good-countries-remain.md delete mode 100644 .changeset/gorgeous-meals-kneel.md delete mode 100644 .changeset/green-fishes-fix.md delete mode 100644 .changeset/grumpy-bees-bathe.md delete mode 100644 .changeset/grumpy-guests-joke.md delete mode 100644 .changeset/happy-jokes-reply.md delete mode 100644 .changeset/healthy-years-wave.md delete mode 100644 .changeset/heavy-oranges-smell.md delete mode 100644 .changeset/hip-dingos-shout.md delete mode 100644 .changeset/honest-clouds-march.md delete mode 100644 .changeset/honest-foxes-reflect.md delete mode 100644 .changeset/honest-pens-flash.md delete mode 100644 .changeset/hungry-cougars-float.md delete mode 100644 .changeset/hungry-hounds-search.md delete mode 100644 .changeset/hungry-spiders-beg.md delete mode 100644 .changeset/itchy-cheetahs-return.md delete mode 100644 .changeset/kind-mangos-check.md delete mode 100644 .changeset/kind-months-brush.md delete mode 100644 .changeset/large-bottles-dress.md delete mode 100644 .changeset/large-keys-sniff.md delete mode 100644 .changeset/light-suns-build.md delete mode 100644 .changeset/lovely-feet-share.md delete mode 100644 .changeset/many-pigs-brake.md delete mode 100644 .changeset/mean-jobs-bathe.md delete mode 100644 .changeset/moody-masks-perform.md delete mode 100644 .changeset/neat-birds-smash.md delete mode 100644 .changeset/neat-pandas-glow.md delete mode 100644 .changeset/nice-donuts-yell.md delete mode 100644 .changeset/nice-falcons-sniff.md delete mode 100644 .changeset/nice-pumpkins-itch.md delete mode 100644 .changeset/ninety-rabbits-hear.md delete mode 100644 .changeset/olive-masks-bow.md delete mode 100644 .changeset/perfect-swans-tie.md delete mode 100644 .changeset/pink-fans-run.md delete mode 100644 .changeset/poor-trains-develop.md delete mode 100644 .changeset/pretty-clocks-rhyme.md delete mode 100644 .changeset/proud-glasses-give.md delete mode 100644 .changeset/rotten-colts-speak.md delete mode 100644 .changeset/rotten-dogs-clean.md delete mode 100644 .changeset/rude-jokes-move.md delete mode 100644 .changeset/serious-hounds-hear.md delete mode 100644 .changeset/seven-hats-help.md delete mode 100644 .changeset/sharp-bikes-hunt.md delete mode 100644 .changeset/shiny-peas-look.md delete mode 100644 .changeset/shiny-tips-mate.md delete mode 100644 .changeset/short-cows-study.md delete mode 100644 .changeset/short-tigers-report.md delete mode 100644 .changeset/silly-eels-hunt.md delete mode 100644 .changeset/six-berries-hammer.md delete mode 100644 .changeset/six-tools-laugh.md delete mode 100644 .changeset/six-wolves-relax.md delete mode 100644 .changeset/sixty-spiders-end.md delete mode 100644 .changeset/smooth-turtles-visit.md delete mode 100644 .changeset/soft-numbers-invent.md delete mode 100644 .changeset/sour-owls-brush.md delete mode 100644 .changeset/spicy-comics-listen.md delete mode 100644 .changeset/spotty-ants-bake.md delete mode 100644 .changeset/spotty-timers-play.md delete mode 100644 .changeset/strange-experts-fold.md delete mode 100644 .changeset/swift-crabs-sing.md delete mode 100644 .changeset/tasty-rice-hope.md delete mode 100644 .changeset/ten-adults-try.md delete mode 100644 .changeset/ten-spiders-reflect.md delete mode 100644 .changeset/tender-pants-trade.md delete mode 100644 .changeset/thick-moles-behave.md delete mode 100644 .changeset/thin-elephants-rush.md delete mode 100644 .changeset/thin-needles-grow.md delete mode 100644 .changeset/thin-rats-smash.md delete mode 100644 .changeset/thirty-rockets-nail.md delete mode 100644 .changeset/tidy-hairs-pull.md delete mode 100644 .changeset/tiny-gorillas-destroy.md delete mode 100644 .changeset/twelve-donuts-sell.md delete mode 100644 .changeset/twelve-grapes-hammer.md delete mode 100644 .changeset/violet-pumas-appear.md delete mode 100644 .changeset/warm-doors-march.md delete mode 100644 .changeset/weak-brooms-sing.md delete mode 100644 .changeset/weak-moles-clean.md delete mode 100644 .changeset/weak-months-turn.md delete mode 100644 .changeset/wet-forks-pretend.md delete mode 100644 .changeset/wild-falcons-speak.md delete mode 100644 .changeset/young-camels-return.md delete mode 100644 .changeset/young-hounds-wave.md diff --git a/.changeset/README.md b/.changeset/README.md deleted file mode 100644 index e5b6d8d6a67..00000000000 --- a/.changeset/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Changesets - -Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works -with multi-package repos, or single-package repos to help you version and publish your code. You can -find the full documentation for it [in our repository](https://github.com/changesets/changesets) - -We have a quick list of common questions to get you started engaging with this project in -[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/afraid-cameras-laugh.md b/.changeset/afraid-cameras-laugh.md deleted file mode 100644 index f727936fffd..00000000000 --- a/.changeset/afraid-cameras-laugh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -This effectively reverts the multi-offramp feature previously added to Commit DON diff --git a/.changeset/beige-tables-visit.md b/.changeset/beige-tables-visit.md deleted file mode 100644 index b778b635cd5..00000000000 --- a/.changeset/beige-tables-visit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Validate bft (f+1) for observed liquidity per chain diff --git a/.changeset/brown-rings-allow.md b/.changeset/brown-rings-allow.md deleted file mode 100644 index 8c1f9ba6ecf..00000000000 --- a/.changeset/brown-rings-allow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -remove checking for token pool rate limits diff --git a/.changeset/calm-roses-bathe.md b/.changeset/calm-roses-bathe.md deleted file mode 100644 index 56b10176319..00000000000 --- a/.changeset/calm-roses-bathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Batched report execution for multi-offramp diff --git a/.changeset/cold-seals-listen.md b/.changeset/cold-seals-listen.md deleted file mode 100644 index efc52933f2d..00000000000 --- a/.changeset/cold-seals-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Fetching nonces from chain instead of relying on inflight cache values diff --git a/.changeset/config.json b/.changeset/config.json deleted file mode 100644 index 67c9559cd1f..00000000000 --- a/.changeset/config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", - "changelog": [ - "@changesets/changelog-github", - { - "repo": "smartcontractkit/ccip" - } - ], - "commit": false, - "fixed": [], - "linked": [], - "privatePackages": { - "version": true, - "tag": true - }, - "access": "restricted", - "baseBranch": "ccip-develop", - "updateInternalDependencies": "patch", - "ignore": [] -} diff --git a/.changeset/cool-squids-repair.md b/.changeset/cool-squids-repair.md deleted file mode 100644 index 573672e175d..00000000000 --- a/.changeset/cool-squids-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Passing destChainSelector when checking if source RMN is cursed for OnRamp 1.5 diff --git a/.changeset/curly-rocks-fold.md b/.changeset/curly-rocks-fold.md deleted file mode 100644 index f30989dd56d..00000000000 --- a/.changeset/curly-rocks-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Parallelize the procedure of liquidity discovery/syncing diff --git a/.changeset/cyan-walls-joke.md b/.changeset/cyan-walls-joke.md deleted file mode 100644 index 6d1acb7fc88..00000000000 --- a/.changeset/cyan-walls-joke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -implement multi onramp static configs diff --git a/.changeset/dry-eels-change.md b/.changeset/dry-eels-change.md deleted file mode 100644 index 5063aa73883..00000000000 --- a/.changeset/dry-eels-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Converts script for decoding transaction revert reasons to a CLI method diff --git a/.changeset/dry-turtles-sleep.md b/.changeset/dry-turtles-sleep.md deleted file mode 100644 index d2b74f21d1d..00000000000 --- a/.changeset/dry-turtles-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#updated token price reporting observation threshold to improve safety duringphased rollout diff --git a/.changeset/eight-crews-dance.md b/.changeset/eight-crews-dance.md deleted file mode 100644 index 81fedc236d1..00000000000 --- a/.changeset/eight-crews-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#added liquidity manager jobspec generation utils diff --git a/.changeset/eleven-planets-smash.md b/.changeset/eleven-planets-smash.md deleted file mode 100644 index 9e9d54acacd..00000000000 --- a/.changeset/eleven-planets-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -(fix): Log line in CCIP commit plugin observePriceUpdates needs key/value diff --git a/.changeset/eleven-singers-march.md b/.changeset/eleven-singers-march.md deleted file mode 100644 index 9953a5ad99e..00000000000 --- a/.changeset/eleven-singers-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -support parallel execution of batched rpc calls diff --git a/.changeset/fast-hounds-build.md b/.changeset/fast-hounds-build.md deleted file mode 100644 index d982179aacb..00000000000 --- a/.changeset/fast-hounds-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#bugfix Use decimals to normalize aggregator prices diff --git a/.changeset/few-spies-march.md b/.changeset/few-spies-march.md deleted file mode 100644 index 0bf059fcfbb..00000000000 --- a/.changeset/few-spies-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#changed Implement hook-based multi-aggregate rate limiter diff --git a/.changeset/few-zoos-hope.md b/.changeset/few-zoos-hope.md deleted file mode 100644 index 29d9c68aae4..00000000000 --- a/.changeset/few-zoos-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Add multi commit store get wrappers diff --git a/.changeset/fifty-ducks-beg.md b/.changeset/fifty-ducks-beg.md deleted file mode 100644 index cac80f60d2e..00000000000 --- a/.changeset/fifty-ducks-beg.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -use deterministic sorting in LM plugin diff --git a/.changeset/flat-eyes-exercise.md b/.changeset/flat-eyes-exercise.md deleted file mode 100644 index 237285085e7..00000000000 --- a/.changeset/flat-eyes-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -ccip: support out of order execution diff --git a/.changeset/fluffy-geese-act.md b/.changeset/fluffy-geese-act.md deleted file mode 100644 index e941d600fd4..00000000000 --- a/.changeset/fluffy-geese-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Add comment about USDC attestations endpoint. diff --git a/.changeset/friendly-parents-wonder.md b/.changeset/friendly-parents-wonder.md deleted file mode 100644 index 5f96f492ad1..00000000000 --- a/.changeset/friendly-parents-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Bumping chain-selectors to include most recent changes diff --git a/.changeset/funny-bananas-vanish.md b/.changeset/funny-bananas-vanish.md deleted file mode 100644 index dee23b85368..00000000000 --- a/.changeset/funny-bananas-vanish.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#added implement multi onramp fee token configs diff --git a/.changeset/funny-walls-yawn.md b/.changeset/funny-walls-yawn.md deleted file mode 100644 index dbebdb7ee9d..00000000000 --- a/.changeset/funny-walls-yawn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Extend observation validation to check nil values where we use pointers (e.g. \*ubig.Int) diff --git a/.changeset/gentle-jobs-flow.md b/.changeset/gentle-jobs-flow.md deleted file mode 100644 index 8740d01fff1..00000000000 --- a/.changeset/gentle-jobs-flow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Renaming package and internal structs from 'rebalancer' to 'liquidity manager' diff --git a/.changeset/giant-otters-matter.md b/.changeset/giant-otters-matter.md deleted file mode 100644 index b0f79aeb74d..00000000000 --- a/.changeset/giant-otters-matter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -add registry module & fill out token admin registry functions diff --git a/.changeset/giant-wolves-count.md b/.changeset/giant-wolves-count.md deleted file mode 100644 index 88ffd9a8961..00000000000 --- a/.changeset/giant-wolves-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -use forge fmt in precommit and remove unused import diff --git a/.changeset/good-countries-remain.md b/.changeset/good-countries-remain.md deleted file mode 100644 index 456520d00aa..00000000000 --- a/.changeset/good-countries-remain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#added A factory to provide access to the internal HashLeaf functions. diff --git a/.changeset/gorgeous-meals-kneel.md b/.changeset/gorgeous-meals-kneel.md deleted file mode 100644 index 710d706297d..00000000000 --- a/.changeset/gorgeous-meals-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#updated golangci-lint with custom rules diff --git a/.changeset/green-fishes-fix.md b/.changeset/green-fishes-fix.md deleted file mode 100644 index 1b85e801749..00000000000 --- a/.changeset/green-fishes-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -remove inflight cache from commit plugin diff --git a/.changeset/grumpy-bees-bathe.md b/.changeset/grumpy-bees-bathe.md deleted file mode 100644 index 2a975f3eea2..00000000000 --- a/.changeset/grumpy-bees-bathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#added mode chain config diff --git a/.changeset/grumpy-guests-joke.md b/.changeset/grumpy-guests-joke.md deleted file mode 100644 index 8d2af43ab66..00000000000 --- a/.changeset/grumpy-guests-joke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -add target balances based rebalancing algorithm diff --git a/.changeset/happy-jokes-reply.md b/.changeset/happy-jokes-reply.md deleted file mode 100644 index 28384f18aec..00000000000 --- a/.changeset/happy-jokes-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Improved fetching CommitRoots that skips already executed ones from the database query diff --git a/.changeset/healthy-years-wave.md b/.changeset/healthy-years-wave.md deleted file mode 100644 index 28921956415..00000000000 --- a/.changeset/healthy-years-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Support self serve token pools diff --git a/.changeset/heavy-oranges-smell.md b/.changeset/heavy-oranges-smell.md deleted file mode 100644 index e633364e032..00000000000 --- a/.changeset/heavy-oranges-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Convert off-ramp execution states to be per-chain diff --git a/.changeset/hip-dingos-shout.md b/.changeset/hip-dingos-shout.md deleted file mode 100644 index 6eee17c5cb3..00000000000 --- a/.changeset/hip-dingos-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -initialize ccip ocr3 execute plugin diff --git a/.changeset/honest-clouds-march.md b/.changeset/honest-clouds-march.md deleted file mode 100644 index f4f20db3e38..00000000000 --- a/.changeset/honest-clouds-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Allow hashlib and merklemulti to be used by other repositories. diff --git a/.changeset/honest-foxes-reflect.md b/.changeset/honest-foxes-reflect.md deleted file mode 100644 index 0020c0a0ac1..00000000000 --- a/.changeset/honest-foxes-reflect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -add non-Geth revert msg check to v1.0 PriceRegistry and TokenPool diff --git a/.changeset/honest-pens-flash.md b/.changeset/honest-pens-flash.md deleted file mode 100644 index f1adea4f20d..00000000000 --- a/.changeset/honest-pens-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#bugfix Exec NewReportingPlugin retries until it succeeds diff --git a/.changeset/hungry-cougars-float.md b/.changeset/hungry-cougars-float.md deleted file mode 100644 index 622e1348ffc..00000000000 --- a/.changeset/hungry-cougars-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -initialize ccip ocr3 commit plugin diff --git a/.changeset/hungry-hounds-search.md b/.changeset/hungry-hounds-search.md deleted file mode 100644 index 3b25f3e800b..00000000000 --- a/.changeset/hungry-hounds-search.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#internal fix goimport lint diff --git a/.changeset/hungry-spiders-beg.md b/.changeset/hungry-spiders-beg.md deleted file mode 100644 index 5c15fdc6bea..00000000000 --- a/.changeset/hungry-spiders-beg.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -golf compile times of tests diff --git a/.changeset/itchy-cheetahs-return.md b/.changeset/itchy-cheetahs-return.md deleted file mode 100644 index e81bebd6fbb..00000000000 --- a/.changeset/itchy-cheetahs-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Add pre-commit and pre-push hooks diff --git a/.changeset/kind-mangos-check.md b/.changeset/kind-mangos-check.md deleted file mode 100644 index 91d617ac081..00000000000 --- a/.changeset/kind-mangos-check.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -migrating chainlink-common types diff --git a/.changeset/kind-months-brush.md b/.changeset/kind-months-brush.md deleted file mode 100644 index 3cbbf8bac42..00000000000 --- a/.changeset/kind-months-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Support multi-stage finalization in the rebalancer contracts diff --git a/.changeset/large-bottles-dress.md b/.changeset/large-bottles-dress.md deleted file mode 100644 index cb182969632..00000000000 --- a/.changeset/large-bottles-dress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -make pools backwards compatible proxies diff --git a/.changeset/large-keys-sniff.md b/.changeset/large-keys-sniff.md deleted file mode 100644 index d62d5041318..00000000000 --- a/.changeset/large-keys-sniff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Add ability for leader lane to report all token prices for the lane diff --git a/.changeset/light-suns-build.md b/.changeset/light-suns-build.md deleted file mode 100644 index 4adbc370fc2..00000000000 --- a/.changeset/light-suns-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Do not read res if http errors diff --git a/.changeset/lovely-feet-share.md b/.changeset/lovely-feet-share.md deleted file mode 100644 index 17a0ec257b7..00000000000 --- a/.changeset/lovely-feet-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -consensus on follower config state diff --git a/.changeset/many-pigs-brake.md b/.changeset/many-pigs-brake.md deleted file mode 100644 index af471afa65b..00000000000 --- a/.changeset/many-pigs-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -fix rebalancing algorithm determinism diff --git a/.changeset/mean-jobs-bathe.md b/.changeset/mean-jobs-bathe.md deleted file mode 100644 index f4dd932f3db..00000000000 --- a/.changeset/mean-jobs-bathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -LM comments and OP dispute game factory diff --git a/.changeset/moody-masks-perform.md b/.changeset/moody-masks-perform.md deleted file mode 100644 index c9edd2e8262..00000000000 --- a/.changeset/moody-masks-perform.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Fix changeset checker for ccip #bugfix diff --git a/.changeset/neat-birds-smash.md b/.changeset/neat-birds-smash.md deleted file mode 100644 index b881e8a0b10..00000000000 --- a/.changeset/neat-birds-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Sync liquidity graph only once on startup and cache the liquidity graphs in the plugin, upon Observation call discoverer to update balances. \ No newline at end of file diff --git a/.changeset/neat-pandas-glow.md b/.changeset/neat-pandas-glow.md deleted file mode 100644 index 446b61e9c94..00000000000 --- a/.changeset/neat-pandas-glow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#added Add ccip ocr3 offchain workflow for building, linting and testing the code. diff --git a/.changeset/nice-donuts-yell.md b/.changeset/nice-donuts-yell.md deleted file mode 100644 index 84756ebf8cd..00000000000 --- a/.changeset/nice-donuts-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Polish liquidity graph, mitigate existing issues and prepare for token multiplexing. diff --git a/.changeset/nice-falcons-sniff.md b/.changeset/nice-falcons-sniff.md deleted file mode 100644 index 17b0c673bfc..00000000000 --- a/.changeset/nice-falcons-sniff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Fix reports count calculation method diff --git a/.changeset/nice-pumpkins-itch.md b/.changeset/nice-pumpkins-itch.md deleted file mode 100644 index ce30b1d37e2..00000000000 --- a/.changeset/nice-pumpkins-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Detailed tracking of sequence number processed by Commit/Exec plugins diff --git a/.changeset/ninety-rabbits-hear.md b/.changeset/ninety-rabbits-hear.md deleted file mode 100644 index 81d43d05d6d..00000000000 --- a/.changeset/ninety-rabbits-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Ramps check RMN curse status by lane diff --git a/.changeset/olive-masks-bow.md b/.changeset/olive-masks-bow.md deleted file mode 100644 index 17ca4fbaf8c..00000000000 --- a/.changeset/olive-masks-bow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Adding more debug details to exec batch building diff --git a/.changeset/perfect-swans-tie.md b/.changeset/perfect-swans-tie.md deleted file mode 100644 index 63609316b02..00000000000 --- a/.changeset/perfect-swans-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Get liquidity managers token in bridge constructor and save for reuse, upon calls to GetTransfer() use the address to compare with remoteToken and localToken. diff --git a/.changeset/pink-fans-run.md b/.changeset/pink-fans-run.md deleted file mode 100644 index d299e55b591..00000000000 --- a/.changeset/pink-fans-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#added Integrate multi-commitstore to multi-offramp diff --git a/.changeset/poor-trains-develop.md b/.changeset/poor-trains-develop.md deleted file mode 100644 index 3395521a6f7..00000000000 --- a/.changeset/poor-trains-develop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Per-chain configs for MultiOffRamp diff --git a/.changeset/pretty-clocks-rhyme.md b/.changeset/pretty-clocks-rhyme.md deleted file mode 100644 index a653e0b9468..00000000000 --- a/.changeset/pretty-clocks-rhyme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#added a new info log for inspecting onchain commit store seq num diff --git a/.changeset/proud-glasses-give.md b/.changeset/proud-glasses-give.md deleted file mode 100644 index 87012bb63ff..00000000000 --- a/.changeset/proud-glasses-give.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#changed add maxTokenTransferGas to offRamp dynamic config diff --git a/.changeset/rotten-colts-speak.md b/.changeset/rotten-colts-speak.md deleted file mode 100644 index 014094ededc..00000000000 --- a/.changeset/rotten-colts-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#updated types to be imported from chainlink-common repository diff --git a/.changeset/rotten-dogs-clean.md b/.changeset/rotten-dogs-clean.md deleted file mode 100644 index 4a09d7294ee..00000000000 --- a/.changeset/rotten-dogs-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#added Multi-plugin OCR3 Base contract diff --git a/.changeset/rude-jokes-move.md b/.changeset/rude-jokes-move.md deleted file mode 100644 index b4a51b04ebc..00000000000 --- a/.changeset/rude-jokes-move.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Alignment of the deduplication logic that is being done as part of Observation validation in Liquidity Manager. diff --git a/.changeset/serious-hounds-hear.md b/.changeset/serious-hounds-hear.md deleted file mode 100644 index 39568d6cd27..00000000000 --- a/.changeset/serious-hounds-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#updated dependencies to their latest version diff --git a/.changeset/seven-hats-help.md b/.changeset/seven-hats-help.md deleted file mode 100644 index 88225921859..00000000000 --- a/.changeset/seven-hats-help.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#internal Remove unnecessary marshall/unmarshall of CommitObservation diff --git a/.changeset/sharp-bikes-hunt.md b/.changeset/sharp-bikes-hunt.md deleted file mode 100644 index 3701c11eb02..00000000000 --- a/.changeset/sharp-bikes-hunt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -bump solidity to 0.8.24 diff --git a/.changeset/shiny-peas-look.md b/.changeset/shiny-peas-look.md deleted file mode 100644 index 47fc1853329..00000000000 --- a/.changeset/shiny-peas-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Price data feed fallback usage for PriceRegistry diff --git a/.changeset/shiny-tips-mate.md b/.changeset/shiny-tips-mate.md deleted file mode 100644 index ef9aa2144d5..00000000000 --- a/.changeset/shiny-tips-mate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Handle multi-offramp upgradability diff --git a/.changeset/short-cows-study.md b/.changeset/short-cows-study.md deleted file mode 100644 index 32c2e41b521..00000000000 --- a/.changeset/short-cows-study.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -generic token pool io diff --git a/.changeset/short-tigers-report.md b/.changeset/short-tigers-report.md deleted file mode 100644 index b2c949ed4db..00000000000 --- a/.changeset/short-tigers-report.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#internal minor checks fixed in pools and token registry diff --git a/.changeset/silly-eels-hunt.md b/.changeset/silly-eels-hunt.md deleted file mode 100644 index 671ee5bcdac..00000000000 --- a/.changeset/silly-eels-hunt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -return destination denominated token amounts from pool diff --git a/.changeset/six-berries-hammer.md b/.changeset/six-berries-hammer.md deleted file mode 100644 index c3732b9a084..00000000000 --- a/.changeset/six-berries-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#bugfix #updated Optimize OnRamp.IsSourceCursed by caching RMN contract and StaticConfig - 30x faster diff --git a/.changeset/six-tools-laugh.md b/.changeset/six-tools-laugh.md deleted file mode 100644 index 7f2e8549f4a..00000000000 --- a/.changeset/six-tools-laugh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Modify OCR3 config tracker of liquidity manager to replay multiple chains concurrently. diff --git a/.changeset/six-wolves-relax.md b/.changeset/six-wolves-relax.md deleted file mode 100644 index b4e841e31c1..00000000000 --- a/.changeset/six-wolves-relax.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Queue CCIP transactions per destination chain instead of per lane diff --git a/.changeset/sixty-spiders-end.md b/.changeset/sixty-spiders-end.md deleted file mode 100644 index 743ff9d7458..00000000000 --- a/.changeset/sixty-spiders-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#updated Optimizing ABIEncode and ABIDecode by caching abiStr diff --git a/.changeset/smooth-turtles-visit.md b/.changeset/smooth-turtles-visit.md deleted file mode 100644 index f369713916c..00000000000 --- a/.changeset/smooth-turtles-visit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Support optional AggregateRateLimiter diff --git a/.changeset/soft-numbers-invent.md b/.changeset/soft-numbers-invent.md deleted file mode 100644 index 7ba88a6a306..00000000000 --- a/.changeset/soft-numbers-invent.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -implement multi onramp dynamic configs diff --git a/.changeset/sour-owls-brush.md b/.changeset/sour-owls-brush.md deleted file mode 100644 index f7a3945eda2..00000000000 --- a/.changeset/sour-owls-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#removed PriceReportingDisabled flag use in plugin diff --git a/.changeset/spicy-comics-listen.md b/.changeset/spicy-comics-listen.md deleted file mode 100644 index afde78b63cd..00000000000 --- a/.changeset/spicy-comics-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Update chain-selectors to v1.0.16 diff --git a/.changeset/spotty-ants-bake.md b/.changeset/spotty-ants-bake.md deleted file mode 100644 index 00328eaa67b..00000000000 --- a/.changeset/spotty-ants-bake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -support more than one usdc token transfer in a single msg diff --git a/.changeset/spotty-timers-play.md b/.changeset/spotty-timers-play.md deleted file mode 100644 index 328784c8364..00000000000 --- a/.changeset/spotty-timers-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -#added gas prices to commit plugin diff --git a/.changeset/strange-experts-fold.md b/.changeset/strange-experts-fold.md deleted file mode 100644 index 941a974c527..00000000000 --- a/.changeset/strange-experts-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -don't call receivers when no gas and no data is supplied diff --git a/.changeset/swift-crabs-sing.md b/.changeset/swift-crabs-sing.md deleted file mode 100644 index 5e6679ae96b..00000000000 --- a/.changeset/swift-crabs-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#added GetAllGasPriceUpdatesCreatedAfter to PriceRegistry diff --git a/.changeset/tasty-rice-hope.md b/.changeset/tasty-rice-hope.md deleted file mode 100644 index 7258394f728..00000000000 --- a/.changeset/tasty-rice-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#updated CommitDON Report to not reject entire observation if observed token prices do not match expected chain tokens diff --git a/.changeset/ten-adults-try.md b/.changeset/ten-adults-try.md deleted file mode 100644 index 290a31ed041..00000000000 --- a/.changeset/ten-adults-try.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Extending observation validation to include deduplication validation, in order to avoid from observation manipulation diff --git a/.changeset/ten-spiders-reflect.md b/.changeset/ten-spiders-reflect.md deleted file mode 100644 index 514d383c4fc..00000000000 --- a/.changeset/ten-spiders-reflect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#internal Fix unit tests in ocr3 exec plugin diff --git a/.changeset/tender-pants-trade.md b/.changeset/tender-pants-trade.md deleted file mode 100644 index e56928f9181..00000000000 --- a/.changeset/tender-pants-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Fix merge issue raised from #855 #856 diff --git a/.changeset/thick-moles-behave.md b/.changeset/thick-moles-behave.md deleted file mode 100644 index eac79ddb9e1..00000000000 --- a/.changeset/thick-moles-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -chore: bump chain-selectors package to v1.0.12 diff --git a/.changeset/thin-elephants-rush.md b/.changeset/thin-elephants-rush.md deleted file mode 100644 index b526bea7a1d..00000000000 --- a/.changeset/thin-elephants-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -set default allowed pool return data to 1 slot diff --git a/.changeset/thin-needles-grow.md b/.changeset/thin-needles-grow.md deleted file mode 100644 index 451b8b0cb2e..00000000000 --- a/.changeset/thin-needles-grow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -add default pricing for unpriced tokens diff --git a/.changeset/thin-rats-smash.md b/.changeset/thin-rats-smash.md deleted file mode 100644 index c5b1751701c..00000000000 --- a/.changeset/thin-rats-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Remove calls to panic in multiple locations. diff --git a/.changeset/thirty-rockets-nail.md b/.changeset/thirty-rockets-nail.md deleted file mode 100644 index 424e1fb76af..00000000000 --- a/.changeset/thirty-rockets-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#added E2E commit plugin unit tests using ocr3runner diff --git a/.changeset/tidy-hairs-pull.md b/.changeset/tidy-hairs-pull.md deleted file mode 100644 index 20d1ad35d19..00000000000 --- a/.changeset/tidy-hairs-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -skip on success state in offramp diff --git a/.changeset/tiny-gorillas-destroy.md b/.changeset/tiny-gorillas-destroy.md deleted file mode 100644 index 0f39b3c6b95..00000000000 --- a/.changeset/tiny-gorillas-destroy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -remove need to populate source to dest mapping from offramp. Exec won't error on empty mapping diff --git a/.changeset/twelve-donuts-sell.md b/.changeset/twelve-donuts-sell.md deleted file mode 100644 index cf332260dc2..00000000000 --- a/.changeset/twelve-donuts-sell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Proactive rate limiting for USDC attestation API. diff --git a/.changeset/twelve-grapes-hammer.md b/.changeset/twelve-grapes-hammer.md deleted file mode 100644 index 06f77407854..00000000000 --- a/.changeset/twelve-grapes-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#internal Add metrics registerer to CCIP OracleArgs diff --git a/.changeset/violet-pumas-appear.md b/.changeset/violet-pumas-appear.md deleted file mode 100644 index c996f0e18f8..00000000000 --- a/.changeset/violet-pumas-appear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#changed added extra token pool validation diff --git a/.changeset/warm-doors-march.md b/.changeset/warm-doors-march.md deleted file mode 100644 index 3956999fe36..00000000000 --- a/.changeset/warm-doors-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -new CI step that checks compatibility with latest stable versions of EVM nodes diff --git a/.changeset/weak-brooms-sing.md b/.changeset/weak-brooms-sing.md deleted file mode 100644 index 367580bbf63..00000000000 --- a/.changeset/weak-brooms-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -#internal observation logic for ccip ocr3 execute plugin diff --git a/.changeset/weak-moles-clean.md b/.changeset/weak-moles-clean.md deleted file mode 100644 index 00e868e0972..00000000000 --- a/.changeset/weak-moles-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -updated chain-selector to v1.0.15 diff --git a/.changeset/weak-months-turn.md b/.changeset/weak-months-turn.md deleted file mode 100644 index 9d10b9d9c98..00000000000 --- a/.changeset/weak-months-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": minor ---- - -Filter out destination chain bridgeable tokens that are not configured on pricegetter diff --git a/.changeset/wet-forks-pretend.md b/.changeset/wet-forks-pretend.md deleted file mode 100644 index f2dccf3a185..00000000000 --- a/.changeset/wet-forks-pretend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -minor log change diff --git a/.changeset/wild-falcons-speak.md b/.changeset/wild-falcons-speak.md deleted file mode 100644 index c11556fc850..00000000000 --- a/.changeset/wild-falcons-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -add isChainSupported to admin registry, reduce permissions of admin diff --git a/.changeset/young-camels-return.md b/.changeset/young-camels-return.md deleted file mode 100644 index 602265902c4..00000000000 --- a/.changeset/young-camels-return.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"ccip": patch ---- - -#added logs to track graph building process -#added support for test network 2337 diff --git a/.changeset/young-hounds-wave.md b/.changeset/young-hounds-wave.md deleted file mode 100644 index db05b08f8bd..00000000000 --- a/.changeset/young-hounds-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"ccip": patch ---- - -Add OffRamp address log during Commit plugin init diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 15d75126270..b8bd49fa53d 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -589,6 +589,7 @@ jobs: env: BASE64_CCIP_CONFIG_OVERRIDE: ${{ steps.set_override_config.outputs.base_64_override }} TEST_BASE64_CCIP_CONFIG_OVERRIDE: ${{ steps.set_override_config.outputs.base_64_override }} + DEBUG_RESTY: false with: test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=${{ matrix.product.nodes }} ${{ steps.build-go-test-command.outputs.run_command }} 2>&1 | tee /tmp/gotest.log | gotestloghelper -ci -singlepackage -hidepassingtests=false -hidepassinglogs test_download_vendor_packages_command: cd ./integration-tests && go mod download diff --git a/core/chains/evm/config/config_test.go b/core/chains/evm/config/config_test.go index ba362bda981..617a1605d85 100644 --- a/core/chains/evm/config/config_test.go +++ b/core/chains/evm/config/config_test.go @@ -232,8 +232,8 @@ func TestChainScopedConfig_GasEstimator(t *testing.T) { assert.Equal(t, assets.GWei(20), ge.PriceDefault()) assert.Equal(t, assets.GWei(500), ge.PriceMax()) assert.Equal(t, assets.GWei(1), ge.PriceMin()) - assert.Equal(t, uint64(500000), ge.LimitDefault()) - assert.Equal(t, uint64(500000), ge.LimitMax()) + assert.Equal(t, uint64(8_000_000), ge.LimitDefault()) + assert.Equal(t, uint64(8_000_000), ge.LimitMax()) assert.Equal(t, float32(1), ge.LimitMultiplier()) assert.Equal(t, uint64(21000), ge.LimitTransfer()) assert.Equal(t, assets.GWei(5), ge.BumpMin()) @@ -267,23 +267,23 @@ func TestChainScopedConfig_Profiles(t *testing.T) { expectedGasLimitDefault uint64 expectedMinimumContractPayment string }{ - {"default", 0, 500000, "0.00001"}, - {"mainnet", 1, 500000, "0.1"}, - {"kovan", 42, 500000, "0.1"}, - - {"optimism", 10, 500000, "0.00001"}, - {"optimism", 69, 500000, "0.00001"}, - {"optimism", 420, 500000, "0.00001"}, - - {"bscMainnet", 56, 500000, "0.00001"}, - {"hecoMainnet", 128, 500000, "0.00001"}, - {"fantomMainnet", 250, 500000, "0.00001"}, - {"fantomTestnet", 4002, 500000, "0.00001"}, - {"polygonMatic", 800001, 500000, "0.00001"}, - {"harmonyMainnet", 1666600000, 500000, "0.00001"}, - {"harmonyTestnet", 1666700000, 500000, "0.00001"}, - - {"gnosisMainnet", 100, 500000, "0.00001"}, + {"default", 0, 8_000_000, "0.00001"}, + {"mainnet", 1, 8_000_000, "0.1"}, + {"kovan", 42, 8_000_000, "0.1"}, + + {"optimism", 10, 8_000_000, "0.00001"}, + {"optimism", 69, 8_000_000, "0.00001"}, + {"optimism", 420, 8_000_000, "0.00001"}, + + {"bscMainnet", 56, 8_000_000, "0.00001"}, + {"hecoMainnet", 128, 8_000_000, "0.00001"}, + {"fantomMainnet", 250, 8_000_000, "0.00001"}, + {"fantomTestnet", 4002, 8_000_000, "0.00001"}, + {"polygonMatic", 800001, 8_000_000, "0.00001"}, + {"harmonyMainnet", 1666600000, 8_000_000, "0.00001"}, + {"harmonyTestnet", 1666700000, 8_000_000, "0.00001"}, + + {"gnosisMainnet", 100, 8_000_000, "0.00001"}, } for _, test := range tests { tt := test diff --git a/core/chains/evm/config/toml/defaults/fallback.toml b/core/chains/evm/config/toml/defaults/fallback.toml index 2fe6edd54c1..8bf3392210f 100644 --- a/core/chains/evm/config/toml/defaults/fallback.toml +++ b/core/chains/evm/config/toml/defaults/fallback.toml @@ -36,8 +36,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500_000 -LimitMax = 500_000 +LimitDefault = 8_000_000 +LimitMax = 8_000_000 LimitMultiplier = '1' LimitTransfer = 21_000 BumpMin = '5 gwei' diff --git a/core/config/docs/chains-evm.toml b/core/config/docs/chains-evm.toml index acd1cf3d312..f053be9fa62 100644 --- a/core/config/docs/chains-evm.toml +++ b/core/config/docs/chains-evm.toml @@ -180,9 +180,9 @@ PriceMax = '115792089237316195423570985008687907853269984665.6405640394575840079 PriceMin = '1 gwei' # Default # LimitDefault sets default gas limit for outgoing transactions. This should not need to be changed in most cases. # Some job types, such as Keeper jobs, might set their own gas limit unrelated to this value. -LimitDefault = 500_000 # Default +LimitDefault = 8_000_000 # Default # LimitMax sets a maximum for _estimated_ gas limits. This currently only applies to `Arbitrum` `GasEstimatorMode`. -LimitMax = 500_000 # Default +LimitMax = 8_000_000 # Default # LimitMultiplier is the factor by which a transaction's GasLimit is multiplied before transmission. So if the value is 1.1, and the GasLimit for a transaction is 10, 10% will be added before transmission. # # This factor is always applied, so includes L2 transactions which uses a default gas limit of 1 and is also applied to `LimitDefault`. diff --git a/core/internal/features/features_test.go b/core/internal/features/features_test.go index 046f21b7f7d..1135c5a4eb8 100644 --- a/core/internal/features/features_test.go +++ b/core/internal/features/features_test.go @@ -300,7 +300,7 @@ type OperatorContracts struct { func setupOperatorContracts(t *testing.T) OperatorContracts { user := testutils.MustNewSimTransactor(t) genesisData := core.GenesisAlloc{ - user.From: {Balance: assets.Ether(1000).ToInt()}, + user.From: {Balance: assets.Ether(10000).ToInt()}, } gasLimit := uint32(ethconfig.Defaults.Miner.GasCeil * 2) b := cltest.NewSimulatedBackend(t, genesisData, gasLimit) @@ -385,7 +385,7 @@ func TestIntegration_DirectRequest(t *testing.T) { // Fund node account with ETH. n, err := b.NonceAt(testutils.Context(t), operatorContracts.user.From, nil) require.NoError(t, err) - tx = cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil) + tx = cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(1000).ToInt(), 21000, big.NewInt(1000000000), nil) signedTx, err := operatorContracts.user.Signer(operatorContracts.user.From, tx) require.NoError(t, err) err = b.SendTransaction(testutils.Context(t), signedTx) @@ -484,7 +484,7 @@ func setupAppForEthTx(t *testing.T, operatorContracts OperatorContracts) (app *c // Fund node account with ETH. n, err := b.NonceAt(testutils.Context(t), operatorContracts.user.From, nil) require.NoError(t, err) - tx := cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil) + tx := cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(1000).ToInt(), 21000, big.NewInt(1000000000), nil) signedTx, err := operatorContracts.user.Signer(operatorContracts.user.From, tx) require.NoError(t, err) err = b.SendTransaction(testutils.Context(t), signedTx) @@ -631,7 +631,7 @@ observationSource = """ output := outputs[0] receipt := output.(map[string]interface{}) assert.Equal(t, "0x11", receipt["blockNumber"]) - assert.Equal(t, "0x7a120", receipt["gasUsed"]) + assert.Equal(t, "0x7a1200", receipt["gasUsed"]) assert.Equal(t, "0x0", receipt["status"]) }) } @@ -715,7 +715,7 @@ func setupNode(t *testing.T, owner *bind.TransactOpts, portV2 int, n, err := b.NonceAt(testutils.Context(t), owner.From, nil) require.NoError(t, err) - tx := cltest.NewLegacyTransaction(n, transmitter, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil) + tx := cltest.NewLegacyTransaction(n, transmitter, assets.Ether(1000).ToInt(), 21000, big.NewInt(1000000000), nil) signedTx, err := owner.Signer(owner.From, tx) require.NoError(t, err) err = b.SendTransaction(testutils.Context(t), signedTx) @@ -758,7 +758,7 @@ func setupForwarderEnabledNode(t *testing.T, owner *bind.TransactOpts, portV2 in n, err := b.NonceAt(testutils.Context(t), owner.From, nil) require.NoError(t, err) - tx := cltest.NewLegacyTransaction(n, transmitter, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil) + tx := cltest.NewLegacyTransaction(n, transmitter, assets.Ether(1000).ToInt(), 21000, big.NewInt(1000000000), nil) signedTx, err := owner.Signer(owner.From, tx) require.NoError(t, err) err = b.SendTransaction(testutils.Context(t), signedTx) diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index 0990aa50273..ba3c3c04d25 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -296,8 +296,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -395,8 +395,8 @@ Mode = 'BlockHistory' PriceDefault = '9.223372036854775807 ether' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -488,8 +488,8 @@ Mode = 'FixedPrice' PriceDefault = '30 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '30 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 gwei' diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index 5d783fb23ad..aca7a966614 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -296,8 +296,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -395,8 +395,8 @@ Mode = 'BlockHistory' PriceDefault = '9.223372036854775807 ether' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -488,8 +488,8 @@ Mode = 'FixedPrice' PriceDefault = '30 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '30 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 gwei' diff --git a/docs/CONFIG.md b/docs/CONFIG.md index e38fbdd6def..03af3e44e67 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -1804,8 +1804,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -1897,8 +1897,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -1990,8 +1990,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2083,8 +2083,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2177,8 +2177,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -2270,8 +2270,8 @@ Mode = 'BlockHistory' PriceDefault = '50 mwei' PriceMax = '50 gwei' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2363,8 +2363,8 @@ Mode = 'BlockHistory' PriceDefault = '50 mwei' PriceMax = '50 gwei' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2457,8 +2457,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2550,8 +2550,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2642,8 +2642,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2734,8 +2734,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2827,8 +2827,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -2921,8 +2921,8 @@ Mode = 'BlockHistory' PriceDefault = '1 gwei' PriceMax = '500 gwei' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -3014,8 +3014,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -3107,8 +3107,8 @@ Mode = 'BlockHistory' PriceDefault = '30 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '30 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 gwei' @@ -3200,8 +3200,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 mwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 mwei' @@ -3293,8 +3293,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '100 mwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 mwei' @@ -3386,8 +3386,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -3479,8 +3479,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -3573,7 +3573,7 @@ PriceDefault = '20 gwei' PriceMax = '18.446744073709551615 ether' PriceMin = '0' LimitDefault = 100000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -3666,7 +3666,7 @@ PriceDefault = '20 gwei' PriceMax = '18.446744073709551615 ether' PriceMin = '0' LimitDefault = 100000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -3759,7 +3759,7 @@ PriceDefault = '20 gwei' PriceMax = '18.446744073709551615 ether' PriceMin = '0' LimitDefault = 100000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -3852,8 +3852,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -3945,8 +3945,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -4039,7 +4039,7 @@ PriceDefault = '20 gwei' PriceMax = '120 gwei' PriceMin = '1 gwei' LimitDefault = 8000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -4131,8 +4131,8 @@ Mode = 'SuggestedPrice' PriceDefault = '750 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -4224,8 +4224,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -4317,8 +4317,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '100 mwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 mwei' @@ -4410,8 +4410,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -4503,8 +4503,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -4595,8 +4595,8 @@ Mode = 'FixedPrice' PriceDefault = '20 gwei' PriceMax = '100 micro' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -4688,8 +4688,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '50 mwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 mwei' @@ -4781,8 +4781,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -4874,8 +4874,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 mwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 mwei' @@ -4967,8 +4967,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -5061,7 +5061,7 @@ PriceDefault = '20 gwei' PriceMax = '200 gwei' PriceMin = '1 gwei' LimitDefault = 100000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -5153,8 +5153,8 @@ Mode = 'SuggestedPrice' PriceDefault = '750 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -5246,8 +5246,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -5339,8 +5339,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '500 gwei' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -5433,7 +5433,7 @@ PriceDefault = '20 gwei' PriceMax = '120 gwei' PriceMin = '1 gwei' LimitDefault = 8000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -5527,7 +5527,7 @@ Mode = 'Arbitrum' PriceDefault = '100 mwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 +LimitDefault = 8000000 LimitMax = 1000000000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -5620,8 +5620,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '500 gwei' PriceMin = '5 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '2 gwei' @@ -5713,8 +5713,8 @@ Mode = 'BlockHistory' PriceDefault = '25 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '25 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -5806,8 +5806,8 @@ Mode = 'BlockHistory' PriceDefault = '25 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '25 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -5899,8 +5899,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '500 gwei' PriceMin = '5 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '2 gwei' @@ -5991,8 +5991,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -6083,8 +6083,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -6175,8 +6175,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '400 mwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -6268,8 +6268,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -6361,8 +6361,8 @@ Mode = 'BlockHistory' PriceDefault = '25 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '25 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -6454,8 +6454,8 @@ Mode = 'BlockHistory' PriceDefault = '1 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 gwei' @@ -6546,8 +6546,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '20 gwei' @@ -6640,7 +6640,7 @@ PriceDefault = '20 gwei' PriceMax = '120 gwei' PriceMin = '1 gwei' LimitDefault = 8000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -6733,8 +6733,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -6827,8 +6827,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -6921,7 +6921,7 @@ Mode = 'Arbitrum' PriceDefault = '100 mwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 +LimitDefault = 8000000 LimitMax = 1000000000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -7015,7 +7015,7 @@ Mode = 'Arbitrum' PriceDefault = '100 mwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 +LimitDefault = 8000000 LimitMax = 1000000000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -7109,7 +7109,7 @@ Mode = 'Arbitrum' PriceDefault = '100 mwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 +LimitDefault = 8000000 LimitMax = 1000000000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -7202,8 +7202,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -7295,8 +7295,8 @@ Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -7388,8 +7388,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -7481,8 +7481,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 wei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -7575,7 +7575,7 @@ PriceDefault = '20 gwei' PriceMax = '120 gwei' PriceMin = '1 gwei' LimitDefault = 8000000 -LimitMax = 500000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '100 wei' @@ -7668,8 +7668,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -7761,8 +7761,8 @@ Mode = 'BlockHistory' PriceDefault = '5 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' @@ -8114,8 +8114,8 @@ Mode = 'BlockHistory' # Default PriceDefault = '20 gwei' # Default PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' # Default PriceMin = '1 gwei' # Default -LimitDefault = 500_000 # Default -LimitMax = 500_000 # Default +LimitDefault = 8_000_000 # Default +LimitMax = 8_000_000 # Default LimitMultiplier = '1.0' # Default LimitTransfer = 21_000 # Default BumpMin = '5 gwei' # Default @@ -8187,14 +8187,14 @@ Mode = 'FixedPrice' ### LimitDefault ```toml -LimitDefault = 500_000 # Default +LimitDefault = 8_000_000 # Default ``` LimitDefault sets default gas limit for outgoing transactions. This should not need to be changed in most cases. Some job types, such as Keeper jobs, might set their own gas limit unrelated to this value. ### LimitMax ```toml -LimitMax = 500_000 # Default +LimitMax = 8_000_000 # Default ``` LimitMax sets a maximum for _estimated_ gas limits. This currently only applies to `Arbitrum` `GasEstimatorMode`. diff --git a/integration-tests/testconfig/default.toml b/integration-tests/testconfig/default.toml index f75304b5e17..e1c30802553 100644 --- a/integration-tests/testconfig/default.toml +++ b/integration-tests/testconfig/default.toml @@ -12,7 +12,7 @@ image = "public.ecr.aws/chainlink/chainlink" version = "2.12.0" [Common] -chainlink_node_funding = 0.5 +chainlink_node_funding = 4 [Network] selected_networks = ["simulated"] diff --git a/testdata/scripts/keys/eth/help.txtar b/testdata/scripts/keys/eth/help.txtar index 76db7cd5ae3..19d7f13d05e 100644 --- a/testdata/scripts/keys/eth/help.txtar +++ b/testdata/scripts/keys/eth/help.txtar @@ -18,4 +18,4 @@ COMMANDS: OPTIONS: --help, -h show help - + \ No newline at end of file diff --git a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar index 295ffdb1830..a5a50415caf 100644 --- a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar @@ -352,8 +352,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' diff --git a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar index 4fce8e5a68c..133e04e4fe3 100644 --- a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar @@ -352,8 +352,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' diff --git a/testdata/scripts/node/validate/disk-based-logging.txtar b/testdata/scripts/node/validate/disk-based-logging.txtar index e25573c88cf..d26e793f305 100644 --- a/testdata/scripts/node/validate/disk-based-logging.txtar +++ b/testdata/scripts/node/validate/disk-based-logging.txtar @@ -352,8 +352,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' diff --git a/testdata/scripts/node/validate/invalid.txtar b/testdata/scripts/node/validate/invalid.txtar index 641d81a1153..8756936a627 100644 --- a/testdata/scripts/node/validate/invalid.txtar +++ b/testdata/scripts/node/validate/invalid.txtar @@ -342,8 +342,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' diff --git a/testdata/scripts/node/validate/valid.txtar b/testdata/scripts/node/validate/valid.txtar index 5d8b3446e41..96d9a8a6e91 100644 --- a/testdata/scripts/node/validate/valid.txtar +++ b/testdata/scripts/node/validate/valid.txtar @@ -349,8 +349,8 @@ Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' -LimitDefault = 500000 -LimitMax = 500000 +LimitDefault = 8000000 +LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' From 78531daeee375dff1a187c03eba117d3ebbed92e Mon Sep 17 00:00:00 2001 From: "Abdelrahman Soliman (Boda)" <2677789+asoliman92@users.noreply.github.com> Date: Thu, 11 Jul 2024 21:46:36 +0400 Subject: [PATCH 02/10] CCIP Integration tests - wiring contracts [CCIP-2698] (#1148) This is first phase of setting up full integration tests for the new setup. Test is setting up 3 chains (let's call them A, B, C), each chain deploys and starts 2 ping pong contracts for the other 2. A ---deploy+start---> (pingPongB, pingPongC) B ---deploy+start---> (pingPongA, pingPongC) C ---deploy+start---> (pingPongA, pingPongB) and then checks that each ping pong contract emitted `CCIPSendRequested` event from the expected source to destination. Test fails if any wiring between contracts is not correct. Note: This setup is missing token pools to simplify it a little bit. It will be added in future PR when we start testing sending tokens. https://smartcontract-it.atlassian.net/browse/CCIP-2698 --------- Co-authored-by: Will Winder --- .../scripts/native_solc_compile_all_ccip | 1 + .../generated/nonce_manager/nonce_manager.go | 264 +++++++-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- core/gethwrappers/ccip/go_generate.go | 1 + .../plugins/ccip_integration_tests/helpers.go | 518 ++++++++++++++++++ .../ccip_integration_tests/ping_pong_test.go | 95 ++++ 6 files changed, 833 insertions(+), 48 deletions(-) create mode 100644 core/services/ocr3/plugins/ccip_integration_tests/helpers.go create mode 100644 core/services/ocr3/plugins/ccip_integration_tests/ping_pong_test.go diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip index 3cfecbc056a..51102b33a1a 100755 --- a/contracts/scripts/native_solc_compile_all_ccip +++ b/contracts/scripts/native_solc_compile_all_ccip @@ -77,6 +77,7 @@ compileContract ccip/tokenAdminRegistry/TokenAdminRegistry.sol compileContract ccip/tokenAdminRegistry/RegistryModuleOwnerCustom.sol compileContract ccip/capability/CCIPConfig.sol compileContract ccip/capability/interfaces/IOCR3ConfigEncoder.sol +compileContract ccip/NonceManager.sol # Test helpers compileContract ccip/test/helpers/BurnMintERC677Helper.sol diff --git a/core/gethwrappers/ccip/generated/nonce_manager/nonce_manager.go b/core/gethwrappers/ccip/generated/nonce_manager/nonce_manager.go index 717aeb336d5..14979b4fe30 100644 --- a/core/gethwrappers/ccip/generated/nonce_manager/nonce_manager.go +++ b/core/gethwrappers/ccip/generated/nonce_manager/nonce_manager.go @@ -36,17 +36,18 @@ type AuthorizedCallersAuthorizedCallerArgs struct { } type NonceManagerPreviousRamps struct { - PrevOnRamp common.Address + PrevOnRamp common.Address + PrevOffRamp common.Address } type NonceManagerPreviousRampsArgs struct { - RemotChainSelector uint64 - PrevRamps NonceManagerPreviousRamps + RemoteChainSelector uint64 + PrevRamps NonceManagerPreviousRamps } var NonceManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"authorizedCallers\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"PreviousRampAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"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\":\"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\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"}],\"name\":\"PreviousOnRampUpdated\",\"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\":\"remotChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"}],\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"prevRamps\",\"type\":\"tuple\"}],\"internalType\":\"structNonceManager.PreviousRampsArgs[]\",\"name\":\"previousRampsArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPreviousRampsUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getIncrementedOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getPreviousRamps\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"}],\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001659380380620016598339810160408190526200003491620004b0565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620000f6565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620001a1565b5050620005d0565b336001600160a01b03821603620001505760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000231576000828281518110620001ca57620001ca62000582565b60209081029190910101519050620001e4600282620002f0565b1562000227576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620001a9565b50815160005b8151811015620002ea57600082828151811062000258576200025862000582565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000296576040516342bcdf7f60e11b815260040160405180910390fd5b620002a360028262000310565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000237565b50505050565b600062000307836001600160a01b03841662000327565b90505b92915050565b600062000307836001600160a01b0384166200042b565b60008181526001830160205260408120548015620004205760006200034e60018362000598565b8554909150600090620003649060019062000598565b9050818114620003d057600086600001828154811062000388576200038862000582565b9060005260206000200154905080876000018481548110620003ae57620003ae62000582565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620003e457620003e4620005ba565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200030a565b60009150506200030a565b600081815260018301602052604081205462000474575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030a565b5060006200030a565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620004ab57600080fd5b919050565b60006020808385031215620004c457600080fd5b82516001600160401b0380821115620004dc57600080fd5b818501915085601f830112620004f157600080fd5b8151818111156200050657620005066200047d565b8060051b604051601f19603f830116810181811085821117156200052e576200052e6200047d565b6040529182528482019250838101850191888311156200054d57600080fd5b938501935b828510156200057657620005668562000493565b8452938501939285019262000552565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b818103818111156200030a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b61107980620005e06000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806379ba50971161007657806391a2749a1161005b57806391a2749a146101b5578063d18be31b146101c8578063f2fde38b146101db57600080fd5b806379ba5097146101855780638da5cb5b1461018d57600080fd5b80631ce2b142146100a85780632451a627146100bd578063294b5630146100db57806331b89ff314610159575b600080fd5b6100bb6100b6366004610c1d565b6101ee565b005b6100c5610363565b6040516100d29190610c92565b60405180910390f35b6101346100e9366004610d02565b604080516020808201835260009182905267ffffffffffffffff9390931681526004835281902081519283019091525473ffffffffffffffffffffffffffffffffffffffff16815290565b604051905173ffffffffffffffffffffffffffffffffffffffff1681526020016100d2565b61016c610167366004610d1f565b610374565b60405167ffffffffffffffff90911681526020016100d2565b6100bb61038b565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b6100bb6101c3366004610eba565b61048d565b61016c6101d6366004610d1f565b6104a1565b6100bb6101e9366004610f61565b610543565b6101f6610554565b60005b8181101561035e573683838381811061021457610214610f7e565b604002919091019150600090506004816102316020850185610d02565b67ffffffffffffffff1681526020810191909152604001600020805490915073ffffffffffffffffffffffffffffffffffffffff161561029d576040517fc6117ae200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ad6040830160208401610f61565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff919091161781556102fa6020830183610d02565b815460405173ffffffffffffffffffffffffffffffffffffffff909116815267ffffffffffffffff91909116907f89d2355e2829b1e15855fec87fb400638aebc9f03728949d702d3b5d4ea999549060200160405180910390a250506001016101f9565b505050565b606061036f60026105d7565b905090565b60006103818484846105e4565b90505b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610495610554565b61049e81610732565b50565b60006104ab6108c4565b60006104b88585856105e4565b6104c3906001610fdc565b67ffffffffffffffff861660009081526005602052604090819020905191925082916104f29087908790610ffd565b908152604051908190036020019020805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905590509392505050565b61054b610554565b61049e81610907565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610408565b565b60606000610384836109fc565b67ffffffffffffffff831660009081526005602052604080822090518291906106109086908690610ffd565b9081526040519081900360200190205467ffffffffffffffff16905060008190036103815767ffffffffffffffff851660009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1680156107295773ffffffffffffffffffffffffffffffffffffffff811663856c824761069386880188610f61565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610720919061100d565b92505050610384565b50949350505050565b602081015160005b81518110156107cd57600082828151811061075757610757610f7e565b60200260200101519050610775816002610a5890919063ffffffff16565b156107c45760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010161073a565b50815160005b81518110156108be5760008282815181106107f0576107f0610f7e565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610860576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086b600282610a83565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a1506001016107d3565b50505050565b6108cf600233610aa5565b6105d5576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610408565b3373ffffffffffffffffffffffffffffffffffffffff821603610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610408565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606081600001805480602002602001604051908101604052809291908181526020018280548015610a4c57602002820191906000526020600020905b815481526020019060010190808311610a38575b50505050509050919050565b6000610a7a8373ffffffffffffffffffffffffffffffffffffffff8416610ad4565b90505b92915050565b6000610a7a8373ffffffffffffffffffffffffffffffffffffffff8416610bce565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610a7a565b60008181526001830160205260408120548015610bbd576000610af860018361102a565b8554909150600090610b0c9060019061102a565b9050818114610b71576000866000018281548110610b2c57610b2c610f7e565b9060005260206000200154905080876000018481548110610b4f57610b4f610f7e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610b8257610b8261103d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a7d565b6000915050610a7d565b5092915050565b6000818152600183016020526040812054610c1557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a7d565b506000610a7d565b60008060208385031215610c3057600080fd5b823567ffffffffffffffff80821115610c4857600080fd5b818501915085601f830112610c5c57600080fd5b813581811115610c6b57600080fd5b8660208260061b8501011115610c8057600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610ce057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610cae565b50909695505050505050565b67ffffffffffffffff8116811461049e57600080fd5b600060208284031215610d1457600080fd5b813561038481610cec565b600080600060408486031215610d3457600080fd5b8335610d3f81610cec565b9250602084013567ffffffffffffffff80821115610d5c57600080fd5b818601915086601f830112610d7057600080fd5b813581811115610d7f57600080fd5b876020828501011115610d9157600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461049e57600080fd5b600082601f830112610e0657600080fd5b8135602067ffffffffffffffff80831115610e2357610e23610da4565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715610e6657610e66610da4565b6040529384526020818701810194908101925087851115610e8657600080fd5b6020870191505b84821015610eaf578135610ea081610dd3565b83529183019190830190610e8d565b979650505050505050565b600060208284031215610ecc57600080fd5b813567ffffffffffffffff80821115610ee457600080fd5b9083019060408286031215610ef857600080fd5b604051604081018181108382111715610f1357610f13610da4565b604052823582811115610f2557600080fd5b610f3187828601610df5565b825250602083013582811115610f4657600080fd5b610f5287828601610df5565b60208301525095945050505050565b600060208284031215610f7357600080fd5b813561038481610dd3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115610bc757610bc7610fad565b8183823760009101908152919050565b60006020828403121561101f57600080fd5b815161038481610cec565b81810381811115610a7d57610a7d610fad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"authorizedCallers\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"PreviousRampAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"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\":\"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\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"prevRamp\",\"type\":\"tuple\"}],\"name\":\"PreviousRampsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"SkippedIncorrectNonce\",\"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\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"}],\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"prevRamps\",\"type\":\"tuple\"}],\"internalType\":\"structNonceManager.PreviousRampsArgs[]\",\"name\":\"previousRampsArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPreviousRampsUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getIncrementedOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getPreviousRamps\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"}],\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expectedNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"incrementInboundNonce\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001ad538038062001ad58339810160408190526200003491620004b0565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620000f6565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620001a1565b5050620005d0565b336001600160a01b03821603620001505760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000231576000828281518110620001ca57620001ca62000582565b60209081029190910101519050620001e4600282620002f0565b1562000227576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620001a9565b50815160005b8151811015620002ea57600082828151811062000258576200025862000582565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000296576040516342bcdf7f60e11b815260040160405180910390fd5b620002a360028262000310565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000237565b50505050565b600062000307836001600160a01b03841662000327565b90505b92915050565b600062000307836001600160a01b0384166200042b565b60008181526001830160205260408120548015620004205760006200034e60018362000598565b8554909150600090620003649060019062000598565b9050818114620003d057600086600001828154811062000388576200038862000582565b9060005260206000200154905080876000018481548110620003ae57620003ae62000582565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620003e457620003e4620005ba565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200030a565b60009150506200030a565b600081815260018301602052604081205462000474575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030a565b5060006200030a565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620004ab57600080fd5b919050565b60006020808385031215620004c457600080fd5b82516001600160401b0380821115620004dc57600080fd5b818501915085601f830112620004f157600080fd5b8151818111156200050657620005066200047d565b8060051b604051601f19603f830116810181811085821117156200052e576200052e6200047d565b6040529182528482019250838101850191888311156200054d57600080fd5b938501935b828510156200057657620005668562000493565b8452938501939285019262000552565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b818103818111156200030a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6114f580620005e06000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806391a2749a11610081578063e0e03cae1161005b578063e0e03cae14610228578063ea458c0c1461024b578063f2fde38b1461025e57600080fd5b806391a2749a146101d6578063bf18402a146101e9578063c92236251461021557600080fd5b806379ba5097116100b257806379ba50971461019157806384d8acf71461019b5780638da5cb5b146101ae57600080fd5b80632451a627146100ce578063294b5630146100ec575b600080fd5b6100d6610271565b6040516100e39190610f2e565b60405180910390f35b61015d6100fa366004610f9e565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600460209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff9081168452600190910154169082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff90811682526020938401511692810192909252016100e3565b610199610282565b005b6101996101a9366004610fbb565b610384565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b6101996101e4366004611146565b610560565b6101fc6101f73660046111ed565b610574565b60405167ffffffffffffffff90911681526020016100e3565b6101fc61022336600461126f565b610589565b61023b6102363660046112c4565b6105a0565b60405190151581526020016100e3565b6101fc6102593660046111ed565b6106a9565b61019961026c366004611329565b61073d565b606061027d600261074e565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff163314610308576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61038c61075b565b60005b8181101561055b57368383838181106103aa576103aa611346565b606002919091019150600090506004816103c76020850185610f9e565b67ffffffffffffffff1681526020810191909152604001600020805490915073ffffffffffffffffffffffffffffffffffffffff161515806104225750600181015473ffffffffffffffffffffffffffffffffffffffff1615155b15610459576040517fc6117ae200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104696040830160208401611329565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff919091161781556104b96060830160408401611329565b6001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561050d6020830183610f9e565b67ffffffffffffffff167fa2e43edcbc4fd175ae4bebbe3fd6139871ed1f1783cd4a1ace59b90d302c3319836020016040516105499190611375565b60405180910390a2505060010161038f565b505050565b61056861075b565b610571816107de565b50565b60006105808383610970565b90505b92915050565b6000610596848484610a8d565b90505b9392505050565b60006105aa610bde565b60006105b7868585610a8d565b6105c29060016113ec565b90508467ffffffffffffffff168167ffffffffffffffff1614610626577f606ff8179e5e3c059b82df931acc496b7b6053e8879042f8267f930e0595f69f86868686604051610614949392919061140d565b60405180910390a160009150506106a1565b67ffffffffffffffff86166000908152600660205260409081902090518291906106539087908790611479565b908152604051908190036020019020805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905550600190505b949350505050565b60006106b3610bde565b60006106bf8484610970565b6106ca9060016113ec565b67ffffffffffffffff808616600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152902080549183167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905591505092915050565b61074561075b565b61057181610c21565b6060600061059983610d16565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102ff565b565b602081015160005b815181101561087957600082828151811061080357610803611346565b60200260200101519050610821816002610d7290919063ffffffff16565b156108705760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b506001016107e6565b50815160005b815181101561096a57600082828151811061089c5761089c611346565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361090c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610917600282610d94565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010161087f565b50505050565b67ffffffffffffffff808316600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120549091168082036105805767ffffffffffffffff841660009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610a85576040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015282169063856c824790602401602060405180830381865afa158015610a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7c9190611489565b92505050610583565b509392505050565b67ffffffffffffffff83166000908152600660205260408082209051829190610ab99086908690611479565b9081526040519081900360200190205467ffffffffffffffff16905060008190036105965767ffffffffffffffff851660009081526004602052604090206001015473ffffffffffffffffffffffffffffffffffffffff168015610bd55773ffffffffffffffffffffffffffffffffffffffff811663856c8247610b3f86880188611329565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcc9190611489565b92505050610599565b50949350505050565b610be9600233610db6565b6107dc576040517fd86ad9cf0000000000000000000000000000000000000000000000000000000081523360048201526024016102ff565b3373ffffffffffffffffffffffffffffffffffffffff821603610ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102ff565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606081600001805480602002602001604051908101604052809291908181526020018280548015610d6657602002820191906000526020600020905b815481526020019060010190808311610d52575b50505050509050919050565b60006105808373ffffffffffffffffffffffffffffffffffffffff8416610de5565b60006105808373ffffffffffffffffffffffffffffffffffffffff8416610edf565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610580565b60008181526001830160205260408120548015610ece576000610e096001836114a6565b8554909150600090610e1d906001906114a6565b9050818114610e82576000866000018281548110610e3d57610e3d611346565b9060005260206000200154905080876000018481548110610e6057610e60611346565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610e9357610e936114b9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610583565b6000915050610583565b5092915050565b6000818152600183016020526040812054610f2657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610583565b506000610583565b6020808252825182820181905260009190848201906040850190845b81811015610f7c57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610f4a565b50909695505050505050565b67ffffffffffffffff8116811461057157600080fd5b600060208284031215610fb057600080fd5b813561058081610f88565b60008060208385031215610fce57600080fd5b823567ffffffffffffffff80821115610fe657600080fd5b818501915085601f830112610ffa57600080fd5b81358181111561100957600080fd5b86602060608302850101111561101e57600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461057157600080fd5b600082601f83011261109257600080fd5b8135602067ffffffffffffffff808311156110af576110af611030565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156110f2576110f2611030565b604052938452602081870181019490810192508785111561111257600080fd5b6020870191505b8482101561113b57813561112c8161105f565b83529183019190830190611119565b979650505050505050565b60006020828403121561115857600080fd5b813567ffffffffffffffff8082111561117057600080fd5b908301906040828603121561118457600080fd5b60405160408101818110838211171561119f5761119f611030565b6040528235828111156111b157600080fd5b6111bd87828601611081565b8252506020830135828111156111d257600080fd5b6111de87828601611081565b60208301525095945050505050565b6000806040838503121561120057600080fd5b823561120b81610f88565b9150602083013561121b8161105f565b809150509250929050565b60008083601f84011261123857600080fd5b50813567ffffffffffffffff81111561125057600080fd5b60208301915083602082850101111561126857600080fd5b9250929050565b60008060006040848603121561128457600080fd5b833561128f81610f88565b9250602084013567ffffffffffffffff8111156112ab57600080fd5b6112b786828701611226565b9497909650939450505050565b600080600080606085870312156112da57600080fd5b84356112e581610f88565b935060208501356112f581610f88565b9250604085013567ffffffffffffffff81111561131157600080fd5b61131d87828801611226565b95989497509550505050565b60006020828403121561133b57600080fd5b81356105808161105f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040810182356113848161105f565b73ffffffffffffffffffffffffffffffffffffffff90811683526020840135906113ad8261105f565b8082166020850152505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115610ed857610ed86113bd565b600067ffffffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b8183823760009101908152919050565b60006020828403121561149b57600080fd5b815161058081610f88565b81810381811115610583576105836113bd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var NonceManagerABI = NonceManagerMetaData.ABI @@ -207,7 +208,29 @@ func (_NonceManager *NonceManagerCallerSession) GetAllAuthorizedCallers() ([]com return _NonceManager.Contract.GetAllAuthorizedCallers(&_NonceManager.CallOpts) } -func (_NonceManager *NonceManagerCaller) GetOutboundNonce(opts *bind.CallOpts, destChainSelector uint64, sender []byte) (uint64, error) { +func (_NonceManager *NonceManagerCaller) GetInboundNonce(opts *bind.CallOpts, sourceChainSelector uint64, sender []byte) (uint64, error) { + var out []interface{} + err := _NonceManager.contract.Call(opts, &out, "getInboundNonce", sourceChainSelector, sender) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_NonceManager *NonceManagerSession) GetInboundNonce(sourceChainSelector uint64, sender []byte) (uint64, error) { + return _NonceManager.Contract.GetInboundNonce(&_NonceManager.CallOpts, sourceChainSelector, sender) +} + +func (_NonceManager *NonceManagerCallerSession) GetInboundNonce(sourceChainSelector uint64, sender []byte) (uint64, error) { + return _NonceManager.Contract.GetInboundNonce(&_NonceManager.CallOpts, sourceChainSelector, sender) +} + +func (_NonceManager *NonceManagerCaller) GetOutboundNonce(opts *bind.CallOpts, destChainSelector uint64, sender common.Address) (uint64, error) { var out []interface{} err := _NonceManager.contract.Call(opts, &out, "getOutboundNonce", destChainSelector, sender) @@ -221,11 +244,11 @@ func (_NonceManager *NonceManagerCaller) GetOutboundNonce(opts *bind.CallOpts, d } -func (_NonceManager *NonceManagerSession) GetOutboundNonce(destChainSelector uint64, sender []byte) (uint64, error) { +func (_NonceManager *NonceManagerSession) GetOutboundNonce(destChainSelector uint64, sender common.Address) (uint64, error) { return _NonceManager.Contract.GetOutboundNonce(&_NonceManager.CallOpts, destChainSelector, sender) } -func (_NonceManager *NonceManagerCallerSession) GetOutboundNonce(destChainSelector uint64, sender []byte) (uint64, error) { +func (_NonceManager *NonceManagerCallerSession) GetOutboundNonce(destChainSelector uint64, sender common.Address) (uint64, error) { return _NonceManager.Contract.GetOutboundNonce(&_NonceManager.CallOpts, destChainSelector, sender) } @@ -309,18 +332,30 @@ func (_NonceManager *NonceManagerTransactorSession) ApplyPreviousRampsUpdates(pr return _NonceManager.Contract.ApplyPreviousRampsUpdates(&_NonceManager.TransactOpts, previousRampsArgs) } -func (_NonceManager *NonceManagerTransactor) GetIncrementedOutboundNonce(opts *bind.TransactOpts, destChainSelector uint64, sender []byte) (*types.Transaction, error) { +func (_NonceManager *NonceManagerTransactor) GetIncrementedOutboundNonce(opts *bind.TransactOpts, destChainSelector uint64, sender common.Address) (*types.Transaction, error) { return _NonceManager.contract.Transact(opts, "getIncrementedOutboundNonce", destChainSelector, sender) } -func (_NonceManager *NonceManagerSession) GetIncrementedOutboundNonce(destChainSelector uint64, sender []byte) (*types.Transaction, error) { +func (_NonceManager *NonceManagerSession) GetIncrementedOutboundNonce(destChainSelector uint64, sender common.Address) (*types.Transaction, error) { return _NonceManager.Contract.GetIncrementedOutboundNonce(&_NonceManager.TransactOpts, destChainSelector, sender) } -func (_NonceManager *NonceManagerTransactorSession) GetIncrementedOutboundNonce(destChainSelector uint64, sender []byte) (*types.Transaction, error) { +func (_NonceManager *NonceManagerTransactorSession) GetIncrementedOutboundNonce(destChainSelector uint64, sender common.Address) (*types.Transaction, error) { return _NonceManager.Contract.GetIncrementedOutboundNonce(&_NonceManager.TransactOpts, destChainSelector, sender) } +func (_NonceManager *NonceManagerTransactor) IncrementInboundNonce(opts *bind.TransactOpts, sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "incrementInboundNonce", sourceChainSelector, expectedNonce, sender) +} + +func (_NonceManager *NonceManagerSession) IncrementInboundNonce(sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) { + return _NonceManager.Contract.IncrementInboundNonce(&_NonceManager.TransactOpts, sourceChainSelector, expectedNonce, sender) +} + +func (_NonceManager *NonceManagerTransactorSession) IncrementInboundNonce(sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) { + return _NonceManager.Contract.IncrementInboundNonce(&_NonceManager.TransactOpts, sourceChainSelector, expectedNonce, sender) +} + func (_NonceManager *NonceManagerTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { return _NonceManager.contract.Transact(opts, "transferOwnership", to) } @@ -839,8 +874,8 @@ func (_NonceManager *NonceManagerFilterer) ParseOwnershipTransferred(log types.L return event, nil } -type NonceManagerPreviousOnRampUpdatedIterator struct { - Event *NonceManagerPreviousOnRampUpdated +type NonceManagerPreviousRampsUpdatedIterator struct { + Event *NonceManagerPreviousRampsUpdated contract *bind.BoundContract event string @@ -851,7 +886,7 @@ type NonceManagerPreviousOnRampUpdatedIterator struct { fail error } -func (it *NonceManagerPreviousOnRampUpdatedIterator) Next() bool { +func (it *NonceManagerPreviousRampsUpdatedIterator) Next() bool { if it.fail != nil { return false @@ -860,7 +895,7 @@ func (it *NonceManagerPreviousOnRampUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NonceManagerPreviousOnRampUpdated) + it.Event = new(NonceManagerPreviousRampsUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -875,7 +910,7 @@ func (it *NonceManagerPreviousOnRampUpdatedIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(NonceManagerPreviousOnRampUpdated) + it.Event = new(NonceManagerPreviousRampsUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -890,43 +925,162 @@ func (it *NonceManagerPreviousOnRampUpdatedIterator) Next() bool { } } -func (it *NonceManagerPreviousOnRampUpdatedIterator) Error() error { +func (it *NonceManagerPreviousRampsUpdatedIterator) Error() error { return it.fail } -func (it *NonceManagerPreviousOnRampUpdatedIterator) Close() error { +func (it *NonceManagerPreviousRampsUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -type NonceManagerPreviousOnRampUpdated struct { - DestChainSelector uint64 - PrevOnRamp common.Address - Raw types.Log +type NonceManagerPreviousRampsUpdated struct { + RemoteChainSelector uint64 + PrevRamp NonceManagerPreviousRamps + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterPreviousRampsUpdated(opts *bind.FilterOpts, remoteChainSelector []uint64) (*NonceManagerPreviousRampsUpdatedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "PreviousRampsUpdated", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &NonceManagerPreviousRampsUpdatedIterator{contract: _NonceManager.contract, event: "PreviousRampsUpdated", logs: logs, sub: sub}, nil } -func (_NonceManager *NonceManagerFilterer) FilterPreviousOnRampUpdated(opts *bind.FilterOpts, destChainSelector []uint64) (*NonceManagerPreviousOnRampUpdatedIterator, error) { +func (_NonceManager *NonceManagerFilterer) WatchPreviousRampsUpdated(opts *bind.WatchOpts, sink chan<- *NonceManagerPreviousRampsUpdated, remoteChainSelector []uint64) (event.Subscription, error) { - var destChainSelectorRule []interface{} - for _, destChainSelectorItem := range destChainSelector { - destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) } - logs, sub, err := _NonceManager.contract.FilterLogs(opts, "PreviousOnRampUpdated", destChainSelectorRule) + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "PreviousRampsUpdated", remoteChainSelectorRule) if err != nil { return nil, err } - return &NonceManagerPreviousOnRampUpdatedIterator{contract: _NonceManager.contract, event: "PreviousOnRampUpdated", logs: logs, sub: sub}, nil + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerPreviousRampsUpdated) + if err := _NonceManager.contract.UnpackLog(event, "PreviousRampsUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_NonceManager *NonceManagerFilterer) ParsePreviousRampsUpdated(log types.Log) (*NonceManagerPreviousRampsUpdated, error) { + event := new(NonceManagerPreviousRampsUpdated) + if err := _NonceManager.contract.UnpackLog(event, "PreviousRampsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type NonceManagerSkippedIncorrectNonceIterator struct { + Event *NonceManagerSkippedIncorrectNonce + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerSkippedIncorrectNonceIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerSkippedIncorrectNonce) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerSkippedIncorrectNonce) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -func (_NonceManager *NonceManagerFilterer) WatchPreviousOnRampUpdated(opts *bind.WatchOpts, sink chan<- *NonceManagerPreviousOnRampUpdated, destChainSelector []uint64) (event.Subscription, error) { +func (it *NonceManagerSkippedIncorrectNonceIterator) Error() error { + return it.fail +} - var destChainSelectorRule []interface{} - for _, destChainSelectorItem := range destChainSelector { - destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) +func (it *NonceManagerSkippedIncorrectNonceIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerSkippedIncorrectNonce struct { + SourceChainSelector uint64 + Nonce uint64 + Sender []byte + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterSkippedIncorrectNonce(opts *bind.FilterOpts) (*NonceManagerSkippedIncorrectNonceIterator, error) { + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "SkippedIncorrectNonce") + if err != nil { + return nil, err } + return &NonceManagerSkippedIncorrectNonceIterator{contract: _NonceManager.contract, event: "SkippedIncorrectNonce", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchSkippedIncorrectNonce(opts *bind.WatchOpts, sink chan<- *NonceManagerSkippedIncorrectNonce) (event.Subscription, error) { - logs, sub, err := _NonceManager.contract.WatchLogs(opts, "PreviousOnRampUpdated", destChainSelectorRule) + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "SkippedIncorrectNonce") if err != nil { return nil, err } @@ -936,8 +1090,8 @@ func (_NonceManager *NonceManagerFilterer) WatchPreviousOnRampUpdated(opts *bind select { case log := <-logs: - event := new(NonceManagerPreviousOnRampUpdated) - if err := _NonceManager.contract.UnpackLog(event, "PreviousOnRampUpdated", log); err != nil { + event := new(NonceManagerSkippedIncorrectNonce) + if err := _NonceManager.contract.UnpackLog(event, "SkippedIncorrectNonce", log); err != nil { return err } event.Raw = log @@ -958,9 +1112,9 @@ func (_NonceManager *NonceManagerFilterer) WatchPreviousOnRampUpdated(opts *bind }), nil } -func (_NonceManager *NonceManagerFilterer) ParsePreviousOnRampUpdated(log types.Log) (*NonceManagerPreviousOnRampUpdated, error) { - event := new(NonceManagerPreviousOnRampUpdated) - if err := _NonceManager.contract.UnpackLog(event, "PreviousOnRampUpdated", log); err != nil { +func (_NonceManager *NonceManagerFilterer) ParseSkippedIncorrectNonce(log types.Log) (*NonceManagerSkippedIncorrectNonce, error) { + event := new(NonceManagerSkippedIncorrectNonce) + if err := _NonceManager.contract.UnpackLog(event, "SkippedIncorrectNonce", log); err != nil { return nil, err } event.Raw = log @@ -977,8 +1131,10 @@ func (_NonceManager *NonceManager) ParseLog(log types.Log) (generated.AbigenLog, return _NonceManager.ParseOwnershipTransferRequested(log) case _NonceManager.abi.Events["OwnershipTransferred"].ID: return _NonceManager.ParseOwnershipTransferred(log) - case _NonceManager.abi.Events["PreviousOnRampUpdated"].ID: - return _NonceManager.ParsePreviousOnRampUpdated(log) + case _NonceManager.abi.Events["PreviousRampsUpdated"].ID: + return _NonceManager.ParsePreviousRampsUpdated(log) + case _NonceManager.abi.Events["SkippedIncorrectNonce"].ID: + return _NonceManager.ParseSkippedIncorrectNonce(log) default: return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) @@ -1001,8 +1157,12 @@ func (NonceManagerOwnershipTransferred) Topic() common.Hash { return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") } -func (NonceManagerPreviousOnRampUpdated) Topic() common.Hash { - return common.HexToHash("0x89d2355e2829b1e15855fec87fb400638aebc9f03728949d702d3b5d4ea99954") +func (NonceManagerPreviousRampsUpdated) Topic() common.Hash { + return common.HexToHash("0xa2e43edcbc4fd175ae4bebbe3fd6139871ed1f1783cd4a1ace59b90d302c3319") +} + +func (NonceManagerSkippedIncorrectNonce) Topic() common.Hash { + return common.HexToHash("0x606ff8179e5e3c059b82df931acc496b7b6053e8879042f8267f930e0595f69f") } func (_NonceManager *NonceManager) Address() common.Address { @@ -1012,7 +1172,9 @@ func (_NonceManager *NonceManager) Address() common.Address { type NonceManagerInterface interface { GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) - GetOutboundNonce(opts *bind.CallOpts, destChainSelector uint64, sender []byte) (uint64, error) + GetInboundNonce(opts *bind.CallOpts, sourceChainSelector uint64, sender []byte) (uint64, error) + + GetOutboundNonce(opts *bind.CallOpts, destChainSelector uint64, sender common.Address) (uint64, error) GetPreviousRamps(opts *bind.CallOpts, chainSelector uint64) (NonceManagerPreviousRamps, error) @@ -1024,7 +1186,9 @@ type NonceManagerInterface interface { ApplyPreviousRampsUpdates(opts *bind.TransactOpts, previousRampsArgs []NonceManagerPreviousRampsArgs) (*types.Transaction, error) - GetIncrementedOutboundNonce(opts *bind.TransactOpts, destChainSelector uint64, sender []byte) (*types.Transaction, error) + GetIncrementedOutboundNonce(opts *bind.TransactOpts, destChainSelector uint64, sender common.Address) (*types.Transaction, error) + + IncrementInboundNonce(opts *bind.TransactOpts, sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) @@ -1052,11 +1216,17 @@ type NonceManagerInterface interface { ParseOwnershipTransferred(log types.Log) (*NonceManagerOwnershipTransferred, error) - FilterPreviousOnRampUpdated(opts *bind.FilterOpts, destChainSelector []uint64) (*NonceManagerPreviousOnRampUpdatedIterator, error) + FilterPreviousRampsUpdated(opts *bind.FilterOpts, remoteChainSelector []uint64) (*NonceManagerPreviousRampsUpdatedIterator, error) + + WatchPreviousRampsUpdated(opts *bind.WatchOpts, sink chan<- *NonceManagerPreviousRampsUpdated, remoteChainSelector []uint64) (event.Subscription, error) + + ParsePreviousRampsUpdated(log types.Log) (*NonceManagerPreviousRampsUpdated, error) + + FilterSkippedIncorrectNonce(opts *bind.FilterOpts) (*NonceManagerSkippedIncorrectNonceIterator, error) - WatchPreviousOnRampUpdated(opts *bind.WatchOpts, sink chan<- *NonceManagerPreviousOnRampUpdated, destChainSelector []uint64) (event.Subscription, error) + WatchSkippedIncorrectNonce(opts *bind.WatchOpts, sink chan<- *NonceManagerSkippedIncorrectNonce) (event.Subscription, error) - ParsePreviousOnRampUpdated(log types.Log) (*NonceManagerPreviousOnRampUpdated, error) + ParseSkippedIncorrectNonce(log types.Log) (*NonceManagerSkippedIncorrectNonce, error) ParseLog(log types.Log) (generated.AbigenLog, error) 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 26c576c9c99..aa162a70ecb 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 @@ -22,7 +22,7 @@ mock_usdc_token_messenger: ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMesse mock_usdc_token_transmitter: ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.bin 33bdad70822e889de7c720ed20085cf9cd3f8eba8b68f26bd6535197749595fe 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 abb0ecb1ed8621f26e43b39f5fa25f3d0b6d6c184fa37c404c4389605ecb74e7 -nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin cdc11c1ab4c1c3fd77f30215e9c579404a6e60eb9adc213d73ca0773c3bb5784 +nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 78b58f4f192db7496e2b6de805d6a2c918b98d4fa62f3c7ed145ef3b5657a40d ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 1588313bb5e781d181a825247d30828f59007700f36b4b9b00391592b06ff4b4 price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin 0b3e253684d7085aa11f9179b71453b9db9d11cabea41605d5b4ac4128f85bfb diff --git a/core/gethwrappers/ccip/go_generate.go b/core/gethwrappers/ccip/go_generate.go index a5eaa375238..948fb7a5f7e 100644 --- a/core/gethwrappers/ccip/go_generate.go +++ b/core/gethwrappers/ccip/go_generate.go @@ -30,6 +30,7 @@ package ccip //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin PriceRegistry price_registry //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin CCIPConfig ccip_config //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin IOCR3ConfigEncoder ocr3_config_encoder +//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin NonceManager nonce_manager //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin MaybeRevertMessageReceiver maybe_revert_message_receiver //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin PingPongDemo ping_pong_demo diff --git a/core/services/ocr3/plugins/ccip_integration_tests/helpers.go b/core/services/ocr3/plugins/ccip_integration_tests/helpers.go new file mode 100644 index 00000000000..2a4e85560c9 --- /dev/null +++ b/core/services/ocr3/plugins/ccip_integration_tests/helpers.go @@ -0,0 +1,518 @@ +package ccip_integration_tests + +import ( + "encoding/hex" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + + "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_config" + + chainsel "github.com/smartcontractkit/chain-selectors" + + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/nonce_manager" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9" + kcr "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/shared/generated/link_token" + "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + + "github.com/stretchr/testify/require" +) + +var ( + homeChainID = chainsel.GETH_TESTNET.EvmChainID +) + +const ( + CapabilityLabelledName = "ccip" + CapabilityVersion = "v1.0.0" +) + +func e18Mult(amount uint64) *big.Int { + return new(big.Int).Mul(uintBigInt(amount), uintBigInt(1e18)) +} + +func uintBigInt(i uint64) *big.Int { + return new(big.Int).SetUint64(i) +} + +type homeChain struct { + backend *backends.SimulatedBackend + owner *bind.TransactOpts + chainID uint64 + capabilityRegistry *kcr.CapabilitiesRegistry + ccipConfigContract common.Address +} + +type onchainUniverse struct { + backend *backends.SimulatedBackend + owner *bind.TransactOpts + chainID uint64 + linkToken *link_token.LinkToken + weth *weth9.WETH9 + router *router.Router + rmnProxy *arm_proxy_contract.ARMProxyContract + rmn *mock_arm_contract.MockARMContract + onramp *evm_2_evm_multi_onramp.EVM2EVMMultiOnRamp + offramp *evm_2_evm_multi_offramp.EVM2EVMMultiOffRamp + priceRegistry *price_registry.PriceRegistry + tokenAdminRegistry *token_admin_registry.TokenAdminRegistry + nonceManager *nonce_manager.NonceManager +} + +type chainBase struct { + backend *backends.SimulatedBackend + owner *bind.TransactOpts +} + +// createUniverses does the following: +// 1. Creates 1 home chain and `numChains`-1 non-home chains +// 2. Sets up home chain with the capability registry and the CCIP config contract +// 2. Deploys the CCIP contracts to all chains. +// 3. Sets up the initial configurations for the contracts on all chains. +// 4. Wires the chains together. +func createUniverses( + t *testing.T, + numUniverses int, +) (homeChainUni homeChain, universes map[uint64]onchainUniverse) { + chains := createChains(t, numUniverses) + + homeChainBase, ok := chains[homeChainID] + require.True(t, ok, "home chain backend not available") + // Set up home chain first + homeChainUniverse := setupHomeChain(t, homeChainBase.owner, homeChainBase.backend) + + // deploy the ccip contracts on all chains + universes = make(map[uint64]onchainUniverse) + for chainID, base := range chains { + owner := base.owner + backend := base.backend + // deploy the CCIP contracts + linkToken := deployLinkToken(t, owner, backend, chainID) + rmn := deployMockARMContract(t, owner, backend, chainID) + rmnProxy := deployARMProxyContract(t, owner, backend, rmn.Address(), chainID) + weth := deployWETHContract(t, owner, backend, chainID) + rout := deployRouter(t, owner, backend, weth.Address(), rmnProxy.Address(), chainID) + priceRegistry := deployPriceRegistry(t, owner, backend, linkToken.Address(), weth.Address(), chainID) + tokenAdminRegistry := deployTokenAdminRegistry(t, owner, backend, chainID) + nonceManager := deployNonceManager(t, owner, backend, chainID) + + //====================================================================== + // OnRamp + //====================================================================== + onRampAddr, _, _, err := evm_2_evm_multi_onramp.DeployEVM2EVMMultiOnRamp( + owner, + backend, + evm_2_evm_multi_onramp.EVM2EVMMultiOnRampStaticConfig{ + LinkToken: linkToken.Address(), + ChainSelector: chainID, + RmnProxy: rmnProxy.Address(), + MaxFeeJuelsPerMsg: big.NewInt(1e18), + NonceManager: nonceManager.Address(), + TokenAdminRegistry: tokenAdminRegistry.Address(), + }, + evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDynamicConfig{ + Router: rout.Address(), + PriceRegistry: priceRegistry.Address(), + //`withdrawFeeTokens` onRamp function is not part of the message flow + // so we can set this to any address + FeeAggregator: testutils.NewAddress(), + }, + // Destination chain configs will be set up later once we have all chains + []evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainConfigArgs{}, + // PremiumMultiplier is always needed if the onramp is enabled + []evm_2_evm_multi_onramp.EVM2EVMMultiOnRampPremiumMultiplierWeiPerEthArgs{ + { + PremiumMultiplierWeiPerEth: 9e17, //0.9 ETH + Token: linkToken.Address(), + }, + { + PremiumMultiplierWeiPerEth: 1e18, + Token: weth.Address(), + }, + }, + //TODO: We'll need to have TransferFeeConfigArgs when we start testing with sending tokens + []evm_2_evm_multi_onramp.EVM2EVMMultiOnRampTokenTransferFeeConfigArgs{}, + ) + require.NoErrorf(t, err, "failed to deploy onramp on chain id %d", chainID) + backend.Commit() + onramp, err := evm_2_evm_multi_onramp.NewEVM2EVMMultiOnRamp(onRampAddr, backend) + require.NoError(t, err) + + //====================================================================== + // OffRamp + //====================================================================== + offrampAddr, _, _, err := evm_2_evm_multi_offramp.DeployEVM2EVMMultiOffRamp( + owner, + backend, + evm_2_evm_multi_offramp.EVM2EVMMultiOffRampStaticConfig{ + ChainSelector: chainID, + RmnProxy: rmnProxy.Address(), + TokenAdminRegistry: tokenAdminRegistry.Address(), + NonceManager: nonceManager.Address(), + }, + // Source chain configs will be set up later once we have all chains + []evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs{}, + ) + require.NoErrorf(t, err, "failed to deploy offramp on chain id %d", chainID) + backend.Commit() + offramp, err := evm_2_evm_multi_offramp.NewEVM2EVMMultiOffRamp(offrampAddr, backend) + require.NoError(t, err) + + universe := onchainUniverse{ + backend: backend, + owner: owner, + chainID: chainID, + linkToken: linkToken, + weth: weth, + router: rout, + rmnProxy: rmnProxy, + rmn: rmn, + onramp: onramp, + offramp: offramp, + priceRegistry: priceRegistry, + tokenAdminRegistry: tokenAdminRegistry, + nonceManager: nonceManager, + } + // Set up the initial configurations for the contracts + setupUniverseBasics(t, universe) + + universes[chainID] = universe + } + + // Once we have all chains created and contracts deployed, we can set up the initial configurations and wire chains together + connectUniverses(t, universes) + + return homeChainUniverse, universes +} + +// Creates 1 home chain and `numChains`-1 non-home chains +func createChains(t *testing.T, numChains int) map[uint64]chainBase { + chains := make(map[uint64]chainBase) + + homeChainOwner := testutils.MustNewSimTransactor(t) + chains[homeChainID] = chainBase{ + owner: homeChainOwner, + backend: backends.NewSimulatedBackend(core.GenesisAlloc{ + homeChainOwner.From: core.GenesisAccount{ + Balance: assets.Ether(10_000).ToInt(), + }, + }, 30e6), + } + + for chainID := chainsel.TEST_90000001.EvmChainID; len(chains) < numChains && chainID < chainsel.TEST_90000020.EvmChainID; chainID++ { + owner := testutils.MustNewSimTransactor(t) + chains[chainID] = chainBase{ + owner: owner, + backend: backends.NewSimulatedBackend(core.GenesisAlloc{ + owner.From: core.GenesisAccount{ + Balance: assets.Ether(10_000).ToInt(), + }, + }, 30e6), + } + } + + return chains +} + +func setupHomeChain(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend) homeChain { + // deploy the capability registry on the home chain + crAddress, _, _, err := kcr.DeployCapabilitiesRegistry(owner, backend) + require.NoError(t, err, "failed to deploy capability registry on home chain") + backend.Commit() + + capabilityRegistry, err := kcr.NewCapabilitiesRegistry(crAddress, backend) + require.NoError(t, err) + + ccAddress, _, _, err := ccip_config.DeployCCIPConfig(owner, backend, crAddress) + require.NoError(t, err) + backend.Commit() + + capabilityConfig, err := ccip_config.NewCCIPConfig(ccAddress, backend) + require.NoError(t, err) + + _, err = capabilityRegistry.AddCapabilities(owner, []kcr.CapabilitiesRegistryCapability{ + { + LabelledName: CapabilityLabelledName, + Version: CapabilityVersion, + CapabilityType: 2, // consensus. not used (?) + ResponseType: 0, // report. not used (?) + ConfigurationContract: ccAddress, + }, + }) + require.NoError(t, err, "failed to add capabilities to the capability registry") + backend.Commit() + + return homeChain{ + backend: backend, + owner: owner, + chainID: homeChainID, + capabilityRegistry: capabilityRegistry, + ccipConfigContract: capabilityConfig.Address(), + } +} + +func connectUniverses( + t *testing.T, + universes map[uint64]onchainUniverse, +) { + for _, uni := range universes { + wireRouter(t, uni, universes) + wireOnRamp(t, uni, universes) + wireOffRamp(t, uni, universes) + initRemoteChainsGasPrices(t, uni, universes) + } +} + +// setupUniverseBasics sets up the initial configurations for the CCIP contracts on a single chain. +// 1. Mint 1000 LINK to the owner +// 2. Set the price registry with local token prices +// 3. Authorize the onRamp and offRamp on the nonce manager +func setupUniverseBasics(t *testing.T, uni onchainUniverse) { + //============================================================================= + // Universe specific updates/configs + // These updates are specific to each universe and are set up here + // These updates don't depend on other chains + //============================================================================= + owner := uni.owner + //============================================================================= + // Mint 1000 LINK to owner + //============================================================================= + _, err := uni.linkToken.GrantMintRole(owner, owner.From) + require.NoError(t, err) + _, err = uni.linkToken.Mint(owner, owner.From, e18Mult(1000)) + require.NoError(t, err) + uni.backend.Commit() + + //============================================================================= + // Price updates for tokens + // These are the prices of the fee tokens of local chain in USD + //============================================================================= + tokenPriceUpdates := []price_registry.InternalTokenPriceUpdate{ + { + SourceToken: uni.linkToken.Address(), + UsdPerToken: e18Mult(20), + }, + { + SourceToken: uni.weth.Address(), + UsdPerToken: e18Mult(4000), + }, + } + _, err = uni.priceRegistry.UpdatePrices(owner, price_registry.InternalPriceUpdates{ + TokenPriceUpdates: tokenPriceUpdates, + }) + require.NoErrorf(t, err, "failed to apply price registry updates on chain id %d", uni.chainID) + uni.backend.Commit() + + //============================================================================= + // Authorize OnRamp & OffRamp on NonceManager + // Otherwise the onramp will not be able to call the nonceManager to get next Nonce + //============================================================================= + authorizedCallersAuthorizedCallerArgs := nonce_manager.AuthorizedCallersAuthorizedCallerArgs{ + AddedCallers: []common.Address{ + uni.onramp.Address(), + uni.offramp.Address(), + }, + } + _, err = uni.nonceManager.ApplyAuthorizedCallerUpdates(owner, authorizedCallersAuthorizedCallerArgs) + require.NoError(t, err) + uni.backend.Commit() +} + +// As we can't change router contract. The contract was expecting onRamp and offRamp per lane and not per chain +// In the new architecture we have only one onRamp and one offRamp per chain. +// hence we add the mapping for all remote chains to the onRamp/offRamp contract of the local chain +func wireRouter(t *testing.T, uni onchainUniverse, universes map[uint64]onchainUniverse) { + owner := uni.owner + var ( + routerOnrampUpdates []router.RouterOnRamp + routerOfframpUpdates []router.RouterOffRamp + ) + for remoteChainID := range universes { + if remoteChainID == uni.chainID { + continue + } + routerOnrampUpdates = append(routerOnrampUpdates, router.RouterOnRamp{ + DestChainSelector: remoteChainID, + OnRamp: uni.onramp.Address(), + }) + routerOfframpUpdates = append(routerOfframpUpdates, router.RouterOffRamp{ + SourceChainSelector: remoteChainID, + OffRamp: uni.offramp.Address(), + }) + } + _, err := uni.router.ApplyRampUpdates(owner, routerOnrampUpdates, []router.RouterOffRamp{}, routerOfframpUpdates) + require.NoErrorf(t, err, "failed to apply ramp updates on router on chain id %d", uni.chainID) + uni.backend.Commit() +} + +// Setting OnRampDestChainConfigs +func wireOnRamp(t *testing.T, uni onchainUniverse, universes map[uint64]onchainUniverse) { + owner := uni.owner + var onrampDestChainConfigArgs []evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainConfigArgs + for remoteChainID := range universes { + if remoteChainID == uni.chainID { + continue + } + onrampDestChainConfigArgs = append(onrampDestChainConfigArgs, evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainConfigArgs{ + DestChainSelector: remoteChainID, + DynamicConfig: defaultOnRampDynamicConfig(t), + }) + } + _, err := uni.onramp.ApplyDestChainConfigUpdates(owner, onrampDestChainConfigArgs) + require.NoErrorf(t, err, "failed to apply dest chain config updates on onramp on chain id %d", uni.chainID) + uni.backend.Commit() +} + +// Setting OffRampSourceChainConfigs +func wireOffRamp(t *testing.T, uni onchainUniverse, universes map[uint64]onchainUniverse) { + owner := uni.owner + var offrampSourceChainConfigArgs []evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs + for remoteChainID, remoteUniverse := range universes { + if remoteChainID == uni.chainID { + continue + } + offrampSourceChainConfigArgs = append(offrampSourceChainConfigArgs, evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs{ + SourceChainSelector: remoteChainID, // for each destination chain, add a source chain config + IsEnabled: true, + OnRamp: remoteUniverse.onramp.Address().Bytes(), + }) + } + _, err := uni.offramp.ApplySourceChainConfigUpdates(owner, offrampSourceChainConfigArgs) + require.NoErrorf(t, err, "failed to apply source chain config updates on offramp on chain id %d", uni.chainID) + uni.backend.Commit() +} + +// initRemoteChainsGasPrices sets the gas prices for all chains except the local chain in the local price registry +func initRemoteChainsGasPrices(t *testing.T, uni onchainUniverse, universes map[uint64]onchainUniverse) { + var gasPriceUpdates []price_registry.InternalGasPriceUpdate + for remoteChainID := range universes { + if remoteChainID == uni.chainID { + continue + } + gasPriceUpdates = append(gasPriceUpdates, + price_registry.InternalGasPriceUpdate{ + DestChainSelector: remoteChainID, + UsdPerUnitGas: big.NewInt(2e12), + }, + ) + } + _, err := uni.priceRegistry.UpdatePrices(uni.owner, price_registry.InternalPriceUpdates{ + GasPriceUpdates: gasPriceUpdates, + }) + require.NoError(t, err) +} + +func defaultOnRampDynamicConfig(t *testing.T) evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainDynamicConfig { + // https://github.com/smartcontractkit/ccip/blob/c4856b64bd766f1ddbaf5d13b42d3c4b12efde3a/contracts/src/v0.8/ccip/libraries/Internal.sol#L337-L337 + /* + ```Solidity + // bytes4(keccak256("CCIP ChainFamilySelector EVM")) + bytes4 public constant CHAIN_FAMILY_SELECTOR_EVM = 0x2812d52c; + ``` + */ + evmFamilySelector, err := hex.DecodeString("2812d52c") + require.NoError(t, err) + return evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainDynamicConfig{ + IsEnabled: true, + MaxNumberOfTokensPerMsg: 10, + MaxDataBytes: 256, + MaxPerMsgGasLimit: 3_000_000, + DestGasOverhead: 50_000, + DefaultTokenFeeUSDCents: 1, + DestGasPerPayloadByte: 10, + DestDataAvailabilityOverheadGas: 0, + DestGasPerDataAvailabilityByte: 100, + DestDataAvailabilityMultiplierBps: 1, + DefaultTokenDestGasOverhead: 50_000, + DefaultTokenDestBytesOverhead: 32, + DefaultTxGasLimit: 200_000, + GasMultiplierWeiPerEth: 1, + NetworkFeeUSDCents: 1, + ChainFamilySelector: [4]byte(evmFamilySelector), + } +} + +func deployLinkToken(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *link_token.LinkToken { + linkAddr, _, _, err := link_token.DeployLinkToken(owner, backend) + require.NoErrorf(t, err, "failed to deploy link token on chain id %d", chainID) + backend.Commit() + linkToken, err := link_token.NewLinkToken(linkAddr, backend) + require.NoError(t, err) + return linkToken +} + +func deployMockARMContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *mock_arm_contract.MockARMContract { + rmnAddr, _, _, err := mock_arm_contract.DeployMockARMContract(owner, backend) + require.NoErrorf(t, err, "failed to deploy mock arm on chain id %d", chainID) + backend.Commit() + rmn, err := mock_arm_contract.NewMockARMContract(rmnAddr, backend) + require.NoError(t, err) + return rmn +} + +func deployARMProxyContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, rmnAddr common.Address, chainID uint64) *arm_proxy_contract.ARMProxyContract { + rmnProxyAddr, _, _, err := arm_proxy_contract.DeployARMProxyContract(owner, backend, rmnAddr) + require.NoErrorf(t, err, "failed to deploy arm proxy on chain id %d", chainID) + backend.Commit() + rmnProxy, err := arm_proxy_contract.NewARMProxyContract(rmnProxyAddr, backend) + require.NoError(t, err) + return rmnProxy +} + +func deployWETHContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *weth9.WETH9 { + wethAddr, _, _, err := weth9.DeployWETH9(owner, backend) + require.NoErrorf(t, err, "failed to deploy weth contract on chain id %d", chainID) + backend.Commit() + weth, err := weth9.NewWETH9(wethAddr, backend) + require.NoError(t, err) + return weth +} + +func deployRouter(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, wethAddr, rmnProxyAddr common.Address, chainID uint64) *router.Router { + routerAddr, _, _, err := router.DeployRouter(owner, backend, wethAddr, rmnProxyAddr) + require.NoErrorf(t, err, "failed to deploy router on chain id %d", chainID) + backend.Commit() + rout, err := router.NewRouter(routerAddr, backend) + require.NoError(t, err) + return rout +} + +func deployPriceRegistry(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, linkAddr, wethAddr common.Address, chainID uint64) *price_registry.PriceRegistry { + priceRegistryAddr, _, _, err := price_registry.DeployPriceRegistry(owner, backend, []common.Address{}, []common.Address{linkAddr, wethAddr}, 24*60*60, []price_registry.PriceRegistryTokenPriceFeedUpdate{}) + require.NoErrorf(t, err, "failed to deploy price registry on chain id %d", chainID) + backend.Commit() + priceRegistry, err := price_registry.NewPriceRegistry(priceRegistryAddr, backend) + require.NoError(t, err) + return priceRegistry +} + +func deployTokenAdminRegistry(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *token_admin_registry.TokenAdminRegistry { + tarAddr, _, _, err := token_admin_registry.DeployTokenAdminRegistry(owner, backend) + require.NoErrorf(t, err, "failed to deploy token admin registry on chain id %d", chainID) + backend.Commit() + tokenAdminRegistry, err := token_admin_registry.NewTokenAdminRegistry(tarAddr, backend) + require.NoError(t, err) + return tokenAdminRegistry +} + +func deployNonceManager(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *nonce_manager.NonceManager { + nonceManagerAddr, _, _, err := nonce_manager.DeployNonceManager(owner, backend, []common.Address{owner.From}) + require.NoErrorf(t, err, "failed to deploy nonce_manager on chain id %d", chainID) + backend.Commit() + nonceManager, err := nonce_manager.NewNonceManager(nonceManagerAddr, backend) + require.NoError(t, err) + return nonceManager +} diff --git a/core/services/ocr3/plugins/ccip_integration_tests/ping_pong_test.go b/core/services/ocr3/plugins/ccip_integration_tests/ping_pong_test.go new file mode 100644 index 00000000000..1b1e96693ac --- /dev/null +++ b/core/services/ocr3/plugins/ccip_integration_tests/ping_pong_test.go @@ -0,0 +1,95 @@ +package ccip_integration_tests + +import ( + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + gethcommon "github.com/ethereum/go-ethereum/common" + + "github.com/stretchr/testify/require" + + "golang.org/x/exp/maps" + + pp "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ping_pong_demo" +) + +/* +* Test is setting up 3 chains (let's call them A, B, C), each chain deploys and starts 2 ping pong contracts for the other 2. +* A ---deploy+start---> (pingPongB, pingPongC) +* B ---deploy+start---> (pingPongA, pingPongC) +* C ---deploy+start---> (pingPongA, pingPongB) +* and then checks that each ping pong contract emitted `CCIPSendRequested` event from the expected source to destination. +* Test fails if any wiring between contracts is not correct. + */ +func TestPingPong(t *testing.T) { + _, universes := createUniverses(t, 3) + pingPongs := initializePingPongContracts(t, universes) + for chainID, universe := range universes { + for otherChain, pingPong := range pingPongs[chainID] { + t.Log("PingPong From: ", chainID, " To: ", otherChain) + _, err := pingPong.StartPingPong(universe.owner) + require.NoError(t, err) + universe.backend.Commit() + + logIter, err := universe.onramp.FilterCCIPSendRequested(&bind.FilterOpts{Start: 0}, nil) + require.NoError(t, err) + // Iterate until latest event + for logIter.Next() { + } + log := logIter.Event + require.Equal(t, otherChain, log.DestChainSelector) + require.Equal(t, pingPong.Address(), log.Message.Sender) + chainPingPongAddr := pingPongs[otherChain][chainID].Address().Bytes() + // With chain agnostic addresses we need to pad the address to the correct length if the receiver is zero prefixed + paddedAddr := gethcommon.LeftPadBytes(chainPingPongAddr, len(log.Message.Receiver)) + require.Equal(t, paddedAddr, log.Message.Receiver) + } + } +} + +// InitializeContracts initializes ping pong contracts on all chains and +// connects them all to each other. +func initializePingPongContracts( + t *testing.T, + chainUniverses map[uint64]onchainUniverse, +) map[uint64]map[uint64]*pp.PingPongDemo { + pingPongs := make(map[uint64]map[uint64]*pp.PingPongDemo) + chainIDs := maps.Keys(chainUniverses) + // For each chain initialize N ping pong contracts, where N is the (number of chains - 1) + for chainID, universe := range chainUniverses { + pingPongs[chainID] = make(map[uint64]*pp.PingPongDemo) + for _, chainToConnect := range chainIDs { + if chainToConnect == chainID { + continue // don't connect chain to itself + } + backend := universe.backend + owner := universe.owner + pingPongAddr, _, _, err := pp.DeployPingPongDemo(owner, backend, universe.router.Address(), universe.linkToken.Address()) + require.NoError(t, err) + backend.Commit() + pingPong, err := pp.NewPingPongDemo(pingPongAddr, backend) + require.NoError(t, err) + backend.Commit() + // Fund the ping pong contract with LINK + _, err = universe.linkToken.Transfer(owner, pingPong.Address(), e18Mult(10)) + backend.Commit() + require.NoError(t, err) + pingPongs[chainID][chainToConnect] = pingPong + } + } + + // Set up each ping pong contract to its counterpart on the other chain + for chainID, universe := range chainUniverses { + for chainToConnect, pingPong := range pingPongs[chainID] { + _, err := pingPong.SetCounterpart( + universe.owner, + chainUniverses[chainToConnect].chainID, + // This is the address of the ping pong contract on the other chain + pingPongs[chainToConnect][chainID].Address(), + ) + require.NoError(t, err) + universe.backend.Commit() + } + } + return pingPongs +} From e0e18c56e03cd94f3f4362e5e94ac1fd113e1837 Mon Sep 17 00:00:00 2001 From: dimitris Date: Fri, 12 Jul 2024 10:05:44 +0300 Subject: [PATCH 03/10] Fix chainReader test (#1185) - fix chainReader test (init headtracker) - test event block number parsing --- .../chainreader/chainreader_test.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/services/ocr3/plugins/ccip_integration_tests/chainreader/chainreader_test.go b/core/services/ocr3/plugins/ccip_integration_tests/chainreader/chainreader_test.go index d0bedf48a94..52a3de0dae9 100644 --- a/core/services/ocr3/plugins/ccip_integration_tests/chainreader/chainreader_test.go +++ b/core/services/ocr3/plugins/ccip_integration_tests/chainreader/chainreader_test.go @@ -7,6 +7,7 @@ import ( "context" _ "embed" "math/big" + "strconv" "sync" "testing" "time" @@ -24,6 +25,7 @@ import ( types2 "github.com/smartcontractkit/chainlink-common/pkg/types" query2 "github.com/smartcontractkit/chainlink-common/pkg/types/query" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client" + "github.com/smartcontractkit/chainlink/v2/core/chains/evm/headtracker" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest" @@ -55,7 +57,13 @@ func TestChainReader(t *testing.T) { KeepFinalizedBlocksDepth: 100000, } cl := client.NewSimulatedBackendClient(t, d.sb, big.NewInt(chainID)) - lp := logpoller.NewLogPoller(logpoller.NewORM(big.NewInt(chainID), db, lggr), cl, lggr, lpOpts) + headTracker := headtracker.NewSimulatedHeadTracker(cl, lpOpts.UseFinalityTag, lpOpts.FinalityDepth) + lp := logpoller.NewLogPoller(logpoller.NewORM(big.NewInt(chainID), db, lggr), + cl, + lggr, + headTracker, + lpOpts, + ) assert.NoError(t, lp.Start(ctx)) const ( @@ -178,6 +186,9 @@ func TestChainReader(t *testing.T) { assert.Equal(t, 10, len(seq), "expected 10 events from chain reader") for _, v := range seq { // TODO: for some reason log poller does not populate event data + blockNum, err := strconv.ParseUint(v.Identifier, 10, 64) + assert.NoError(t, err) + assert.Positive(t, blockNum) t.Logf("(chain reader) got event: (data=%v) (hash=%x)", v.Data, v.Hash) } }) From 87138ca4d2c7443675a317d8d19e7921093b56e1 Mon Sep 17 00:00:00 2001 From: dimitris Date: Fri, 12 Jul 2024 11:49:30 +0300 Subject: [PATCH 04/10] execute plugin report codec (#1179) Implementation of execution plugin evm codec. Some information marked with `todo` is lost on encoding but not required at the moment. We will revisit this later by adding some generic data field or with a different approach. --- .../scripts/native_solc_compile_all_ccip | 1 + .../v0.8/ccip/test/helpers/ReportCodec.sol | 18 + .../generated/report_codec/report_codec.go | 559 ++++++++++++++++++ ...rapper-dependency-versions-do-not-edit.txt | 1 + core/gethwrappers/ccip/go_generate.go | 1 + .../ocr3/plugins/ccipevm/commitcodec_test.go | 14 +- .../ocr3/plugins/ccipevm/executecodec.go | 181 ++++++ .../ocr3/plugins/ccipevm/executecodec_test.go | 174 ++++++ core/services/ocr3/plugins/ccipevm/helpers.go | 29 + .../ocr3/plugins/ccipevm/helpers_test.go | 41 ++ .../ocr3/plugins/ccipevm/msghasher.go | 26 +- .../ocr3/plugins/ccipevm/msghasher_test.go | 30 - 12 files changed, 1013 insertions(+), 62 deletions(-) create mode 100644 contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol create mode 100644 core/gethwrappers/ccip/generated/report_codec/report_codec.go create mode 100644 core/services/ocr3/plugins/ccipevm/executecodec.go create mode 100644 core/services/ocr3/plugins/ccipevm/executecodec_test.go create mode 100644 core/services/ocr3/plugins/ccipevm/helpers.go create mode 100644 core/services/ocr3/plugins/ccipevm/helpers_test.go diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip index 51102b33a1a..2a9b16167ec 100755 --- a/contracts/scripts/native_solc_compile_all_ccip +++ b/contracts/scripts/native_solc_compile_all_ccip @@ -83,6 +83,7 @@ compileContract ccip/NonceManager.sol compileContract ccip/test/helpers/BurnMintERC677Helper.sol compileContract ccip/test/helpers/CommitStoreHelper.sol compileContract ccip/test/helpers/MessageHasher.sol +compileContract ccip/test/helpers/ReportCodec.sol compileContract ccip/test/helpers/receivers/MaybeRevertMessageReceiver.sol compileContract ccip/test/mocks/MockRMN1_0.sol compileContract ccip/test/mocks/MockE2EUSDCTokenMessenger.sol diff --git a/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol b/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol new file mode 100644 index 00000000000..ca53d512c0d --- /dev/null +++ b/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Internal} from "../../libraries/Internal.sol"; +import {EVM2EVMMultiOffRamp} from "../../offRamp/EVM2EVMMultiOffRamp.sol"; + +contract ReportCodec { + event ExecuteReportDecoded(Internal.ExecutionReportSingleChain[] report); + event CommitReportDecoded(EVM2EVMMultiOffRamp.CommitReport report); + + function decodeExecuteReport(bytes memory report) public pure returns (Internal.ExecutionReportSingleChain[] memory) { + return abi.decode(report, (Internal.ExecutionReportSingleChain[])); + } + + function decodeCommitReport(bytes memory report) public pure returns (EVM2EVMMultiOffRamp.CommitReport memory) { + return abi.decode(report, (EVM2EVMMultiOffRamp.CommitReport)); + } +} diff --git a/core/gethwrappers/ccip/generated/report_codec/report_codec.go b/core/gethwrappers/ccip/generated/report_codec/report_codec.go new file mode 100644 index 00000000000..1648ea9ba51 --- /dev/null +++ b/core/gethwrappers/ccip/generated/report_codec/report_codec.go @@ -0,0 +1,559 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package report_codec + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type EVM2EVMMultiOffRampCommitReport struct { + PriceUpdates InternalPriceUpdates + MerkleRoots []EVM2EVMMultiOffRampMerkleRoot +} + +type EVM2EVMMultiOffRampInterval struct { + Min uint64 + Max uint64 +} + +type EVM2EVMMultiOffRampMerkleRoot struct { + SourceChainSelector uint64 + Interval EVM2EVMMultiOffRampInterval + MerkleRoot [32]byte +} + +type InternalAny2EVMRampMessage struct { + Header InternalRampMessageHeader + Sender []byte + Data []byte + Receiver common.Address + GasLimit *big.Int + TokenAmounts []InternalRampTokenAmount +} + +type InternalExecutionReportSingleChain struct { + SourceChainSelector uint64 + Messages []InternalAny2EVMRampMessage + OffchainTokenData [][][]byte + Proofs [][32]byte + ProofFlagBits *big.Int +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type InternalRampTokenAmount struct { + SourcePoolAddress []byte + DestTokenAddress []byte + ExtraData []byte + Amount *big.Int +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +var ReportCodecMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061124f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e61004936600461024f565b610084565b60405161005b91906104f5565b60405180910390f35b61007761007236600461024f565b6100a0565b60405161005b91906107ae565b60608180602001905181019061009a9190610dc3565b92915050565b604080516080810182526060918101828152828201839052815260208101919091528180602001905181019061009a91906110d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610128576101286100d6565b60405290565b6040516080810167ffffffffffffffff81118282101715610128576101286100d6565b60405160c0810167ffffffffffffffff81118282101715610128576101286100d6565b6040805190810167ffffffffffffffff81118282101715610128576101286100d6565b6040516060810167ffffffffffffffff81118282101715610128576101286100d6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610201576102016100d6565b604052919050565b600067ffffffffffffffff821115610223576102236100d6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561026157600080fd5b813567ffffffffffffffff81111561027857600080fd5b8201601f8101841361028957600080fd5b803561029c61029782610209565b6101ba565b8181528560208385010111156102b157600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102ea5781810151838201526020016102d2565b50506000910152565b6000815180845261030b8160208601602086016102cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301895281516080815181865261039e828701826102f3565b91505085820151858203878701526103b682826102f3565b915050604080830151868303828801526103d083826102f3565b606094850151979094019690965250509884019892509083019060010161035a565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104aa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561049357858a83030184526104818286516102f3565b948c0194938c01939150600101610467565b509e8a019e9750505093870193505060010161041f565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104ea578151875295820195908201906001016104ce565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b81811015610686577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a08901526106096101408901826102f3565b9050604082015188820360c08a015261062282826102f3565b915050606082015161064c60e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a08201519150878103610120890152610672818361033d565b97505050928c0192918c0191600101610589565b5050505050604082015187820360408901526106a282826103ff565b915050606082015187820360608901526106bc82826104b9565b6080938401519890930197909752509450928501929085019060010161051c565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104ea578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1683880152604090960195908201906001016106ff565b600081518084526020808501945080840160005b838110156104ea578151805167ffffffffffffffff90811689528482015180518216868b0152850151166040808a01919091520151606088015260809096019590820190600101610762565b6000602080835283516040808386015260a0850182516040606088015281815180845260c0890191508683019350600092505b8083101561083e578351805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16878301529286019260019290920191908401906107e1565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160808901529361087881866106ea565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526108b8818361074e565b95945050505050565b600067ffffffffffffffff8211156108db576108db6100d6565b5060051b60200190565b805167ffffffffffffffff811681146108fd57600080fd5b919050565b600060a0828403121561091457600080fd5b61091c610105565b90508151815261092e602083016108e5565b602082015261093f604083016108e5565b6040820152610950606083016108e5565b6060820152610961608083016108e5565b608082015292915050565b600082601f83011261097d57600080fd5b815161098b61029782610209565b8181528460208386010111156109a057600080fd5b6109b18260208301602087016102cf565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff811681146108fd57600080fd5b600082601f8301126109ee57600080fd5b815160206109fe610297836108c1565b82815260059290921b84018101918181019086841115610a1d57600080fd5b8286015b84811015610b1157805167ffffffffffffffff80821115610a425760008081fd5b81890191506080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610a7b5760008081fd5b610a8361012e565b8784015183811115610a955760008081fd5b610aa38d8a8388010161096c565b82525060408085015184811115610aba5760008081fd5b610ac88e8b8389010161096c565b8a8401525060608086015185811115610ae15760008081fd5b610aef8f8c838a010161096c565b9284019290925294909201519381019390935250508352918301918301610a21565b509695505050505050565b600082601f830112610b2d57600080fd5b81516020610b3d610297836108c1565b82815260059290921b84018101918181019086841115610b5c57600080fd5b8286015b84811015610b1157805167ffffffffffffffff80821115610b815760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610bbb5760008081fd5b610bc3610151565b610bcf8c898601610902565b815260c084015183811115610be45760008081fd5b610bf28d8a8388010161096c565b898301525060e084015183811115610c0a5760008081fd5b610c188d8a8388010161096c565b604083015250610c2b61010085016109b9565b60608201526101208401516080820152908301519082821115610c4e5760008081fd5b610c5c8c89848701016109dd565b60a08201528652505050918301918301610b60565b600082601f830112610c8257600080fd5b81516020610c92610297836108c1565b82815260059290921b84018101918181019086841115610cb157600080fd5b8286015b84811015610b1157805167ffffffffffffffff80821115610cd557600080fd5b818901915089603f830112610ce957600080fd5b85820151610cf9610297826108c1565b81815260059190911b830160400190878101908c831115610d1957600080fd5b604085015b83811015610d5257805185811115610d3557600080fd5b610d448f6040838a010161096c565b845250918901918901610d1e565b50875250505092840192508301610cb5565b600082601f830112610d7557600080fd5b81516020610d85610297836108c1565b8083825260208201915060208460051b870101935086841115610da757600080fd5b602086015b84811015610b115780518352918301918301610dac565b60006020808385031215610dd657600080fd5b825167ffffffffffffffff80821115610dee57600080fd5b818501915085601f830112610e0257600080fd5b8151610e10610297826108c1565b81815260059190911b83018401908481019088831115610e2f57600080fd5b8585015b83811015610f2957805185811115610e4a57600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610e7f5760008081fd5b610e87610105565b610e928983016108e5565b815260408083015188811115610ea85760008081fd5b610eb68e8c83870101610b1c565b8b8401525060608084015189811115610ecf5760008081fd5b610edd8f8d83880101610c71565b8385015250608091508184015189811115610ef85760008081fd5b610f068f8d83880101610d64565b918401919091525060a09290920151918101919091528352918601918601610e33565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146108fd57600080fd5b600082601f830112610f7357600080fd5b81516020610f83610297836108c1565b82815260069290921b84018101918181019086841115610fa257600080fd5b8286015b84811015610b115760408189031215610fbf5760008081fd5b610fc7610174565b610fd0826108e5565b8152610fdd858301610f36565b81860152835291830191604001610fa6565b600082601f83011261100057600080fd5b81516020611010610297836108c1565b82815260079290921b8401810191818101908684111561102f57600080fd5b8286015b84811015610b1157808803608081121561104d5760008081fd5b611055610197565b61105e836108e5565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840112156110925760008081fd5b61109a610174565b92506110a78785016108e5565b83526110b48185016108e5565b8388015281870192909252606083015191810191909152835291830191608001611033565b600060208083850312156110ec57600080fd5b825167ffffffffffffffff8082111561110457600080fd5b8185019150604080838803121561111a57600080fd5b611122610174565b83518381111561113157600080fd5b84016040818a03121561114357600080fd5b61114b610174565b81518581111561115a57600080fd5b8201601f81018b1361116b57600080fd5b8051611179610297826108c1565b81815260069190911b8201890190898101908d83111561119857600080fd5b928a01925b828410156111e65787848f0312156111b55760008081fd5b6111bd610174565b6111c6856109b9565b81526111d38c8601610f36565b818d0152825292870192908a019061119d565b8452505050818701519350848411156111fe57600080fd5b61120a8a858401610f62565b818801528252508385015191508282111561122457600080fd5b61123088838601610fef565b8582015280955050505050509291505056fea164736f6c6343000818000a", +} + +var ReportCodecABI = ReportCodecMetaData.ABI + +var ReportCodecBin = ReportCodecMetaData.Bin + +func DeployReportCodec(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ReportCodec, error) { + parsed, err := ReportCodecMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReportCodecBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ReportCodec{address: address, abi: *parsed, ReportCodecCaller: ReportCodecCaller{contract: contract}, ReportCodecTransactor: ReportCodecTransactor{contract: contract}, ReportCodecFilterer: ReportCodecFilterer{contract: contract}}, nil +} + +type ReportCodec struct { + address common.Address + abi abi.ABI + ReportCodecCaller + ReportCodecTransactor + ReportCodecFilterer +} + +type ReportCodecCaller struct { + contract *bind.BoundContract +} + +type ReportCodecTransactor struct { + contract *bind.BoundContract +} + +type ReportCodecFilterer struct { + contract *bind.BoundContract +} + +type ReportCodecSession struct { + Contract *ReportCodec + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ReportCodecCallerSession struct { + Contract *ReportCodecCaller + CallOpts bind.CallOpts +} + +type ReportCodecTransactorSession struct { + Contract *ReportCodecTransactor + TransactOpts bind.TransactOpts +} + +type ReportCodecRaw struct { + Contract *ReportCodec +} + +type ReportCodecCallerRaw struct { + Contract *ReportCodecCaller +} + +type ReportCodecTransactorRaw struct { + Contract *ReportCodecTransactor +} + +func NewReportCodec(address common.Address, backend bind.ContractBackend) (*ReportCodec, error) { + abi, err := abi.JSON(strings.NewReader(ReportCodecABI)) + if err != nil { + return nil, err + } + contract, err := bindReportCodec(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ReportCodec{address: address, abi: abi, ReportCodecCaller: ReportCodecCaller{contract: contract}, ReportCodecTransactor: ReportCodecTransactor{contract: contract}, ReportCodecFilterer: ReportCodecFilterer{contract: contract}}, nil +} + +func NewReportCodecCaller(address common.Address, caller bind.ContractCaller) (*ReportCodecCaller, error) { + contract, err := bindReportCodec(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ReportCodecCaller{contract: contract}, nil +} + +func NewReportCodecTransactor(address common.Address, transactor bind.ContractTransactor) (*ReportCodecTransactor, error) { + contract, err := bindReportCodec(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ReportCodecTransactor{contract: contract}, nil +} + +func NewReportCodecFilterer(address common.Address, filterer bind.ContractFilterer) (*ReportCodecFilterer, error) { + contract, err := bindReportCodec(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ReportCodecFilterer{contract: contract}, nil +} + +func bindReportCodec(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ReportCodecMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ReportCodec *ReportCodecRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReportCodec.Contract.ReportCodecCaller.contract.Call(opts, result, method, params...) +} + +func (_ReportCodec *ReportCodecRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReportCodec.Contract.ReportCodecTransactor.contract.Transfer(opts) +} + +func (_ReportCodec *ReportCodecRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReportCodec.Contract.ReportCodecTransactor.contract.Transact(opts, method, params...) +} + +func (_ReportCodec *ReportCodecCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReportCodec.Contract.contract.Call(opts, result, method, params...) +} + +func (_ReportCodec *ReportCodecTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReportCodec.Contract.contract.Transfer(opts) +} + +func (_ReportCodec *ReportCodecTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReportCodec.Contract.contract.Transact(opts, method, params...) +} + +func (_ReportCodec *ReportCodecCaller) DecodeCommitReport(opts *bind.CallOpts, report []byte) (EVM2EVMMultiOffRampCommitReport, error) { + var out []interface{} + err := _ReportCodec.contract.Call(opts, &out, "decodeCommitReport", report) + + if err != nil { + return *new(EVM2EVMMultiOffRampCommitReport), err + } + + out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOffRampCommitReport)).(*EVM2EVMMultiOffRampCommitReport) + + return out0, err + +} + +func (_ReportCodec *ReportCodecSession) DecodeCommitReport(report []byte) (EVM2EVMMultiOffRampCommitReport, error) { + return _ReportCodec.Contract.DecodeCommitReport(&_ReportCodec.CallOpts, report) +} + +func (_ReportCodec *ReportCodecCallerSession) DecodeCommitReport(report []byte) (EVM2EVMMultiOffRampCommitReport, error) { + return _ReportCodec.Contract.DecodeCommitReport(&_ReportCodec.CallOpts, report) +} + +func (_ReportCodec *ReportCodecCaller) DecodeExecuteReport(opts *bind.CallOpts, report []byte) ([]InternalExecutionReportSingleChain, error) { + var out []interface{} + err := _ReportCodec.contract.Call(opts, &out, "decodeExecuteReport", report) + + if err != nil { + return *new([]InternalExecutionReportSingleChain), err + } + + out0 := *abi.ConvertType(out[0], new([]InternalExecutionReportSingleChain)).(*[]InternalExecutionReportSingleChain) + + return out0, err + +} + +func (_ReportCodec *ReportCodecSession) DecodeExecuteReport(report []byte) ([]InternalExecutionReportSingleChain, error) { + return _ReportCodec.Contract.DecodeExecuteReport(&_ReportCodec.CallOpts, report) +} + +func (_ReportCodec *ReportCodecCallerSession) DecodeExecuteReport(report []byte) ([]InternalExecutionReportSingleChain, error) { + return _ReportCodec.Contract.DecodeExecuteReport(&_ReportCodec.CallOpts, report) +} + +type ReportCodecCommitReportDecodedIterator struct { + Event *ReportCodecCommitReportDecoded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ReportCodecCommitReportDecodedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReportCodecCommitReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ReportCodecCommitReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ReportCodecCommitReportDecodedIterator) Error() error { + return it.fail +} + +func (it *ReportCodecCommitReportDecodedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ReportCodecCommitReportDecoded struct { + Report EVM2EVMMultiOffRampCommitReport + Raw types.Log +} + +func (_ReportCodec *ReportCodecFilterer) FilterCommitReportDecoded(opts *bind.FilterOpts) (*ReportCodecCommitReportDecodedIterator, error) { + + logs, sub, err := _ReportCodec.contract.FilterLogs(opts, "CommitReportDecoded") + if err != nil { + return nil, err + } + return &ReportCodecCommitReportDecodedIterator{contract: _ReportCodec.contract, event: "CommitReportDecoded", logs: logs, sub: sub}, nil +} + +func (_ReportCodec *ReportCodecFilterer) WatchCommitReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecCommitReportDecoded) (event.Subscription, error) { + + logs, sub, err := _ReportCodec.contract.WatchLogs(opts, "CommitReportDecoded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ReportCodecCommitReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "CommitReportDecoded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ReportCodec *ReportCodecFilterer) ParseCommitReportDecoded(log types.Log) (*ReportCodecCommitReportDecoded, error) { + event := new(ReportCodecCommitReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "CommitReportDecoded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ReportCodecExecuteReportDecodedIterator struct { + Event *ReportCodecExecuteReportDecoded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ReportCodecExecuteReportDecodedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReportCodecExecuteReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ReportCodecExecuteReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ReportCodecExecuteReportDecodedIterator) Error() error { + return it.fail +} + +func (it *ReportCodecExecuteReportDecodedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ReportCodecExecuteReportDecoded struct { + Report []InternalExecutionReportSingleChain + Raw types.Log +} + +func (_ReportCodec *ReportCodecFilterer) FilterExecuteReportDecoded(opts *bind.FilterOpts) (*ReportCodecExecuteReportDecodedIterator, error) { + + logs, sub, err := _ReportCodec.contract.FilterLogs(opts, "ExecuteReportDecoded") + if err != nil { + return nil, err + } + return &ReportCodecExecuteReportDecodedIterator{contract: _ReportCodec.contract, event: "ExecuteReportDecoded", logs: logs, sub: sub}, nil +} + +func (_ReportCodec *ReportCodecFilterer) WatchExecuteReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecExecuteReportDecoded) (event.Subscription, error) { + + logs, sub, err := _ReportCodec.contract.WatchLogs(opts, "ExecuteReportDecoded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ReportCodecExecuteReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "ExecuteReportDecoded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ReportCodec *ReportCodecFilterer) ParseExecuteReportDecoded(log types.Log) (*ReportCodecExecuteReportDecoded, error) { + event := new(ReportCodecExecuteReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "ExecuteReportDecoded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_ReportCodec *ReportCodec) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _ReportCodec.abi.Events["CommitReportDecoded"].ID: + return _ReportCodec.ParseCommitReportDecoded(log) + case _ReportCodec.abi.Events["ExecuteReportDecoded"].ID: + return _ReportCodec.ParseExecuteReportDecoded(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (ReportCodecCommitReportDecoded) Topic() common.Hash { + return common.HexToHash("0x1b2cb5e9d31bdaabb2ae07532436ae669406f84003ca27179b4dfb72f127f7dc") +} + +func (ReportCodecExecuteReportDecoded) Topic() common.Hash { + return common.HexToHash("0x7f4f1032eaaa1f5c3fc02d56071d69a09a2595d9a5fa4704f0eb298792908abb") +} + +func (_ReportCodec *ReportCodec) Address() common.Address { + return _ReportCodec.address +} + +type ReportCodecInterface interface { + DecodeCommitReport(opts *bind.CallOpts, report []byte) (EVM2EVMMultiOffRampCommitReport, error) + + DecodeExecuteReport(opts *bind.CallOpts, report []byte) ([]InternalExecutionReportSingleChain, error) + + FilterCommitReportDecoded(opts *bind.FilterOpts) (*ReportCodecCommitReportDecodedIterator, error) + + WatchCommitReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecCommitReportDecoded) (event.Subscription, error) + + ParseCommitReportDecoded(log types.Log) (*ReportCodecCommitReportDecoded, error) + + FilterExecuteReportDecoded(opts *bind.FilterOpts) (*ReportCodecExecuteReportDecodedIterator, error) + + WatchExecuteReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecExecuteReportDecoded) (event.Subscription, error) + + ParseExecuteReportDecoded(log types.Log) (*ReportCodecExecuteReportDecoded, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index aa162a70ecb..b30bace8ea6 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 @@ -27,6 +27,7 @@ ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3Con ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 1588313bb5e781d181a825247d30828f59007700f36b4b9b00391592b06ff4b4 price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin 0b3e253684d7085aa11f9179b71453b9db9d11cabea41605d5b4ac4128f85bfb registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin cbe7698bfd811b485ac3856daf073a7bdebeefdf2583403ca4a19d5b7e2d4ae8 +report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin c07af8433bf8dbc7981725b18922a9c4e2dea068dd204bc62adc0e926cb499c3 router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 42576577e81beea9a069bd9229caaa9a71227fbaef3871a1a2e69fd218216290 self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 86e169636e5633854ed0b709c804066b615040bceba25aa5137450fbe6f76fa3 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin fb06d2cf5f7476e512c6fb7aab8eab43545efd7f0f6ca133c64ff4e3963902c4 diff --git a/core/gethwrappers/ccip/go_generate.go b/core/gethwrappers/ccip/go_generate.go index 948fb7a5f7e..50b212dfe4f 100644 --- a/core/gethwrappers/ccip/go_generate.go +++ b/core/gethwrappers/ccip/go_generate.go @@ -36,6 +36,7 @@ package ccip //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin PingPongDemo ping_pong_demo //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin SelfFundedPingPong self_funded_ping_pong //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.abi ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.bin MessageHasher message_hasher +//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin ReportCodec report_codec //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin EtherSenderReceiver ether_sender_receiver //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/WETH9/WETH9.abi ../../../contracts/solc/v0.8.24/WETH9/WETH9.bin WETH9 weth9 diff --git a/core/services/ocr3/plugins/ccipevm/commitcodec_test.go b/core/services/ocr3/plugins/ccipevm/commitcodec_test.go index dffc9ff55e7..737f7be1d6e 100644 --- a/core/services/ocr3/plugins/ccipevm/commitcodec_test.go +++ b/core/services/ocr3/plugins/ccipevm/commitcodec_test.go @@ -14,7 +14,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" ) -var randomReport = func() cciptypes.CommitPluginReport { +var randomCommitReport = func() cciptypes.CommitPluginReport { return cciptypes.CommitPluginReport{ MerkleRoots: []cciptypes.MerkleRootChain{ { @@ -50,7 +50,7 @@ var randomReport = func() cciptypes.CommitPluginReport { } } -func TestCommitPluginCodec(t *testing.T) { +func TestCommitPluginCodecV1(t *testing.T) { testCases := []struct { name string report func(report cciptypes.CommitPluginReport) cciptypes.CommitPluginReport @@ -95,7 +95,7 @@ func TestCommitPluginCodec(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - report := tc.report(randomReport()) + report := tc.report(randomCommitReport()) commitCodec := NewCommitPluginCodecV1() ctx := testutils.Context(t) encodedReport, err := commitCodec.Encode(ctx, report) @@ -111,21 +111,21 @@ func TestCommitPluginCodec(t *testing.T) { } } -func BenchmarkCommitPluginCodec_Encode(b *testing.B) { +func BenchmarkCommitPluginCodecV1_Encode(b *testing.B) { commitCodec := NewCommitPluginCodecV1() ctx := testutils.Context(b) - rep := randomReport() + rep := randomCommitReport() for i := 0; i < b.N; i++ { _, err := commitCodec.Encode(ctx, rep) require.NoError(b, err) } } -func BenchmarkCommitPluginCodec_Decode(b *testing.B) { +func BenchmarkCommitPluginCodecV1_Decode(b *testing.B) { commitCodec := NewCommitPluginCodecV1() ctx := testutils.Context(b) - encodedReport, err := commitCodec.Encode(ctx, randomReport()) + encodedReport, err := commitCodec.Encode(ctx, randomCommitReport()) require.NoError(b, err) for i := 0; i < b.N; i++ { diff --git a/core/services/ocr3/plugins/ccipevm/executecodec.go b/core/services/ocr3/plugins/ccipevm/executecodec.go new file mode 100644 index 00000000000..a64c775112c --- /dev/null +++ b/core/services/ocr3/plugins/ccipevm/executecodec.go @@ -0,0 +1,181 @@ +package ccipevm + +import ( + "context" + "fmt" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + + cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" + + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp" + "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers" +) + +// ExecutePluginCodecV1 is a codec for encoding and decoding execute plugin reports. +// Compatible with: +// - "EVM2EVMMultiOffRamp 1.6.0-dev" +type ExecutePluginCodecV1 struct { + executeReportMethodInputs abi.Arguments +} + +func NewExecutePluginCodecV1() *ExecutePluginCodecV1 { + abiParsed, err := abi.JSON(strings.NewReader(evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI)) + if err != nil { + panic(fmt.Errorf("parse multi offramp abi: %s", err)) + } + methodInputs := abihelpers.MustGetMethodInputs("manuallyExecute", abiParsed) + if len(methodInputs) == 0 { + panic("no inputs found for method: manuallyExecute") + } + + return &ExecutePluginCodecV1{ + executeReportMethodInputs: methodInputs[:1], + } +} + +func (e *ExecutePluginCodecV1) Encode(ctx context.Context, report cciptypes.ExecutePluginReport) ([]byte, error) { + evmReport := make([]evm_2_evm_multi_offramp.InternalExecutionReportSingleChain, 0, len(report.ChainReports)) + + for _, chainReport := range report.ChainReports { + if chainReport.ProofFlagBits.IsEmpty() { + return nil, fmt.Errorf("proof flag bits are empty") + } + + evmProofs := make([][32]byte, 0, len(chainReport.Proofs)) + for _, proof := range chainReport.Proofs { + evmProofs = append(evmProofs, proof) + } + + evmMessages := make([]evm_2_evm_multi_offramp.InternalAny2EVMRampMessage, 0, len(chainReport.Messages)) + for _, message := range chainReport.Messages { + receiver := common.BytesToAddress(message.Receiver) + + tokenAmounts := make([]evm_2_evm_multi_offramp.InternalRampTokenAmount, 0, len(message.TokenAmounts)) + for _, tokenAmount := range message.TokenAmounts { + if tokenAmount.Amount.IsEmpty() { + return nil, fmt.Errorf("empty amount for token: %s", tokenAmount.DestTokenAddress) + } + + tokenAmounts = append(tokenAmounts, evm_2_evm_multi_offramp.InternalRampTokenAmount{ + SourcePoolAddress: tokenAmount.SourcePoolAddress, + DestTokenAddress: tokenAmount.DestTokenAddress, + ExtraData: tokenAmount.ExtraData, + Amount: tokenAmount.Amount.Int, + }) + } + + gasLimit, err := decodeExtraArgsV1V2(message.ExtraArgs) + if err != nil { + return nil, fmt.Errorf("decode extra args to get gas limit: %w", err) + } + + evmMessages = append(evmMessages, evm_2_evm_multi_offramp.InternalAny2EVMRampMessage{ + Header: evm_2_evm_multi_offramp.InternalRampMessageHeader{ + MessageId: message.Header.MessageID, + SourceChainSelector: uint64(message.Header.SourceChainSelector), + DestChainSelector: uint64(message.Header.DestChainSelector), + SequenceNumber: uint64(message.Header.SequenceNumber), + Nonce: message.Header.Nonce, + }, + Sender: message.Sender, + Data: message.Data, + Receiver: receiver, + GasLimit: gasLimit, + TokenAmounts: tokenAmounts, + }) + } + + evmChainReport := evm_2_evm_multi_offramp.InternalExecutionReportSingleChain{ + SourceChainSelector: uint64(chainReport.SourceChainSelector), + Messages: evmMessages, + OffchainTokenData: chainReport.OffchainTokenData, + Proofs: evmProofs, + ProofFlagBits: chainReport.ProofFlagBits.Int, + } + evmReport = append(evmReport, evmChainReport) + } + + return e.executeReportMethodInputs.PackValues([]interface{}{&evmReport}) +} + +func (e *ExecutePluginCodecV1) Decode(ctx context.Context, encodedReport []byte) (cciptypes.ExecutePluginReport, error) { + unpacked, err := e.executeReportMethodInputs.Unpack(encodedReport) + if err != nil { + return cciptypes.ExecutePluginReport{}, fmt.Errorf("unpack encoded report: %w", err) + } + if len(unpacked) != 1 { + return cciptypes.ExecutePluginReport{}, fmt.Errorf("unpacked report is empty") + } + + evmReportRaw := abi.ConvertType(unpacked[0], new([]evm_2_evm_multi_offramp.InternalExecutionReportSingleChain)) + evmReportPtr, is := evmReportRaw.(*[]evm_2_evm_multi_offramp.InternalExecutionReportSingleChain) + if !is { + return cciptypes.ExecutePluginReport{}, fmt.Errorf("got an unexpected report type %T", unpacked[0]) + } + if evmReportPtr == nil { + return cciptypes.ExecutePluginReport{}, fmt.Errorf("evm report is nil") + } + + evmReport := *evmReportPtr + executeReport := cciptypes.ExecutePluginReport{ + ChainReports: make([]cciptypes.ExecutePluginReportSingleChain, 0, len(evmReport)), + } + + for _, evmChainReport := range evmReport { + proofs := make([]cciptypes.Bytes32, 0, len(evmChainReport.Proofs)) + for _, proof := range evmChainReport.Proofs { + proofs = append(proofs, proof) + } + + messages := make([]cciptypes.Message, 0, len(evmChainReport.Messages)) + for _, evmMessage := range evmChainReport.Messages { + tokenAmounts := make([]cciptypes.RampTokenAmount, 0, len(evmMessage.TokenAmounts)) + for _, tokenAmount := range evmMessage.TokenAmounts { + tokenAmounts = append(tokenAmounts, cciptypes.RampTokenAmount{ + SourcePoolAddress: tokenAmount.SourcePoolAddress, + DestTokenAddress: tokenAmount.DestTokenAddress, + ExtraData: tokenAmount.ExtraData, + Amount: cciptypes.NewBigInt(tokenAmount.Amount), + }) + } + + message := cciptypes.Message{ + Header: cciptypes.RampMessageHeader{ + MessageID: evmMessage.Header.MessageId, + SourceChainSelector: cciptypes.ChainSelector(evmMessage.Header.SourceChainSelector), + DestChainSelector: cciptypes.ChainSelector(evmMessage.Header.DestChainSelector), + SequenceNumber: cciptypes.SeqNum(evmMessage.Header.SequenceNumber), + Nonce: evmMessage.Header.Nonce, + MsgHash: cciptypes.Bytes32{}, // <-- todo: info not available, but not required atm + OnRamp: cciptypes.Bytes{}, // <-- todo: info not available, but not required atm + }, + Sender: evmMessage.Sender, + Data: evmMessage.Data, + Receiver: evmMessage.Receiver.Bytes(), + ExtraArgs: cciptypes.Bytes{}, // <-- todo: info not available, but not required atm + FeeToken: cciptypes.Bytes{}, // <-- todo: info not available, but not required atm + FeeTokenAmount: cciptypes.BigInt{}, // <-- todo: info not available, but not required atm + TokenAmounts: tokenAmounts, + } + messages = append(messages, message) + } + + chainReport := cciptypes.ExecutePluginReportSingleChain{ + SourceChainSelector: cciptypes.ChainSelector(evmChainReport.SourceChainSelector), + Messages: messages, + OffchainTokenData: evmChainReport.OffchainTokenData, + Proofs: proofs, + ProofFlagBits: cciptypes.NewBigInt(evmChainReport.ProofFlagBits), + } + + executeReport.ChainReports = append(executeReport.ChainReports, chainReport) + } + + return executeReport, nil +} + +// Ensure ExecutePluginCodec implements the ExecutePluginCodec interface +var _ cciptypes.ExecutePluginCodec = (*ExecutePluginCodecV1)(nil) diff --git a/core/services/ocr3/plugins/ccipevm/executecodec_test.go b/core/services/ocr3/plugins/ccipevm/executecodec_test.go new file mode 100644 index 00000000000..4f207fdb0e2 --- /dev/null +++ b/core/services/ocr3/plugins/ccipevm/executecodec_test.go @@ -0,0 +1,174 @@ +package ccipevm + +import ( + "math/rand" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/core" + + cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" + + "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" + "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/message_hasher" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/report_codec" + "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var randomExecuteReport = func(t *testing.T, d *testSetupData) cciptypes.ExecutePluginReport { + const numChainReports = 10 + const msgsPerReport = 10 + const numTokensPerMsg = 3 + + chainReports := make([]cciptypes.ExecutePluginReportSingleChain, numChainReports) + for i := 0; i < numChainReports; i++ { + reportMessages := make([]cciptypes.Message, msgsPerReport) + for j := 0; j < msgsPerReport; j++ { + data, err := cciptypes.NewBytesFromString(utils.RandomAddress().String()) + assert.NoError(t, err) + + tokenAmounts := make([]cciptypes.RampTokenAmount, numTokensPerMsg) + for z := 0; z < numTokensPerMsg; z++ { + tokenAmounts[z] = cciptypes.RampTokenAmount{ + SourcePoolAddress: utils.RandomAddress().Bytes(), + DestTokenAddress: utils.RandomAddress().Bytes(), + ExtraData: data, + Amount: cciptypes.NewBigInt(utils.RandUint256()), + } + } + + extraArgs, err := d.contract.EncodeEVMExtraArgsV1(nil, message_hasher.ClientEVMExtraArgsV1{ + GasLimit: utils.RandUint256(), + }) + assert.NoError(t, err) + + reportMessages[j] = cciptypes.Message{ + Header: cciptypes.RampMessageHeader{ + MessageID: utils.RandomBytes32(), + SourceChainSelector: cciptypes.ChainSelector(rand.Uint64()), + DestChainSelector: cciptypes.ChainSelector(rand.Uint64()), + SequenceNumber: cciptypes.SeqNum(rand.Uint64()), + Nonce: rand.Uint64(), + MsgHash: utils.RandomBytes32(), + OnRamp: utils.RandomAddress().Bytes(), + }, + Sender: utils.RandomAddress().Bytes(), + Data: data, + Receiver: utils.RandomAddress().Bytes(), + ExtraArgs: extraArgs, + FeeToken: utils.RandomAddress().Bytes(), + FeeTokenAmount: cciptypes.NewBigInt(utils.RandUint256()), + TokenAmounts: tokenAmounts, + } + } + + tokenData := make([][][]byte, numTokensPerMsg) + for j := 0; j < numTokensPerMsg; j++ { + tokenData[j] = [][]byte{{0x1}, {0x2, 0x3}} + } + + chainReports[i] = cciptypes.ExecutePluginReportSingleChain{ + SourceChainSelector: cciptypes.ChainSelector(rand.Uint64()), + Messages: reportMessages, + OffchainTokenData: tokenData, + Proofs: []cciptypes.Bytes32{utils.RandomBytes32(), utils.RandomBytes32()}, + ProofFlagBits: cciptypes.NewBigInt(utils.RandUint256()), + } + } + + return cciptypes.ExecutePluginReport{ChainReports: chainReports} +} + +func TestExecutePluginCodecV1(t *testing.T) { + d := testSetup(t) + + testCases := []struct { + name string + report func(report cciptypes.ExecutePluginReport) cciptypes.ExecutePluginReport + expErr bool + }{ + { + name: "base report", + report: func(report cciptypes.ExecutePluginReport) cciptypes.ExecutePluginReport { return report }, + expErr: false, + }, + { + name: "reports have empty msgs", + report: func(report cciptypes.ExecutePluginReport) cciptypes.ExecutePluginReport { + report.ChainReports[0].Messages = []cciptypes.Message{} + report.ChainReports[4].Messages = []cciptypes.Message{} + return report + }, + expErr: false, + }, + { + name: "reports have empty offchain token data", + report: func(report cciptypes.ExecutePluginReport) cciptypes.ExecutePluginReport { + report.ChainReports[0].OffchainTokenData = [][][]byte{} + report.ChainReports[4].OffchainTokenData[1] = [][]byte{} + return report + }, + expErr: false, + }, + } + + ctx := testutils.Context(t) + + // Deploy the contract + transactor := testutils.MustNewSimTransactor(t) + simulatedBackend := backends.NewSimulatedBackend(core.GenesisAlloc{ + transactor.From: {Balance: assets.Ether(1000).ToInt()}, + }, 30e6) + address, _, _, err := report_codec.DeployReportCodec(transactor, simulatedBackend) + require.NoError(t, err) + simulatedBackend.Commit() + contract, err := report_codec.NewReportCodec(address, simulatedBackend) + require.NoError(t, err) + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + codec := NewExecutePluginCodecV1() + report := tc.report(randomExecuteReport(t, d)) + bytes, err := codec.Encode(ctx, report) + if tc.expErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + + testSetup(t) + + // ignore msg hash in comparison + for i := range report.ChainReports { + for j := range report.ChainReports[i].Messages { + report.ChainReports[i].Messages[j].Header.MsgHash = cciptypes.Bytes32{} + report.ChainReports[i].Messages[j].Header.OnRamp = cciptypes.Bytes{} + report.ChainReports[i].Messages[j].FeeToken = cciptypes.Bytes{} + report.ChainReports[i].Messages[j].ExtraArgs = cciptypes.Bytes{} + report.ChainReports[i].Messages[j].FeeTokenAmount = cciptypes.BigInt{} + } + } + + // decode using the contract + contractDecodedReport, err := contract.DecodeExecuteReport(&bind.CallOpts{Context: ctx}, bytes) + assert.NoError(t, err) + assert.Equal(t, len(report.ChainReports), len(contractDecodedReport)) + for i, expReport := range report.ChainReports { + actReport := contractDecodedReport[i] + assert.Equal(t, expReport.OffchainTokenData, actReport.OffchainTokenData) + assert.Equal(t, len(expReport.Messages), len(actReport.Messages)) + assert.Equal(t, uint64(expReport.SourceChainSelector), actReport.SourceChainSelector) + } + + // decode using the codec + codecDecoded, err := codec.Decode(ctx, bytes) + assert.NoError(t, err) + assert.Equal(t, report, codecDecoded) + }) + } +} diff --git a/core/services/ocr3/plugins/ccipevm/helpers.go b/core/services/ocr3/plugins/ccipevm/helpers.go new file mode 100644 index 00000000000..bd9605bc342 --- /dev/null +++ b/core/services/ocr3/plugins/ccipevm/helpers.go @@ -0,0 +1,29 @@ +package ccipevm + +import ( + "bytes" + "fmt" + "math/big" +) + +func decodeExtraArgsV1V2(extraArgs []byte) (gasLimit *big.Int, err error) { + var method string + if bytes.Equal(extraArgs[:4], evmExtraArgsV1Tag) { + method = "decodeEVMExtraArgsV1" + } else if bytes.Equal(extraArgs[:4], evmExtraArgsV2Tag) { + method = "decodeEVMExtraArgsV2" + } else { + return nil, fmt.Errorf("unknown extra args tag: %x", extraArgs) + } + ifaces, err := messageHasherABI.Methods[method].Inputs.UnpackValues(extraArgs[4:]) + if err != nil { + return nil, fmt.Errorf("abi decode extra args v1: %w", err) + } + // gas limit is always the first argument, and allow OOO isn't set explicitly + // on the message. + _, ok := ifaces[0].(*big.Int) + if !ok { + return nil, fmt.Errorf("expected *big.Int, got %T", ifaces[0]) + } + return ifaces[0].(*big.Int), nil +} diff --git a/core/services/ocr3/plugins/ccipevm/helpers_test.go b/core/services/ocr3/plugins/ccipevm/helpers_test.go new file mode 100644 index 00000000000..95a5d4439bb --- /dev/null +++ b/core/services/ocr3/plugins/ccipevm/helpers_test.go @@ -0,0 +1,41 @@ +package ccipevm + +import ( + "math/big" + "math/rand" + "testing" + + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/message_hasher" + + "github.com/stretchr/testify/require" +) + +func Test_decodeExtraArgs(t *testing.T) { + d := testSetup(t) + gasLimit := big.NewInt(rand.Int63()) + + t.Run("v1", func(t *testing.T) { + encoded, err := d.contract.EncodeEVMExtraArgsV1(nil, message_hasher.ClientEVMExtraArgsV1{ + GasLimit: gasLimit, + }) + require.NoError(t, err) + + decodedGasLimit, err := decodeExtraArgsV1V2(encoded) + require.NoError(t, err) + + require.Equal(t, gasLimit, decodedGasLimit) + }) + + t.Run("v2", func(t *testing.T) { + encoded, err := d.contract.EncodeEVMExtraArgsV2(nil, message_hasher.ClientEVMExtraArgsV2{ + GasLimit: gasLimit, + AllowOutOfOrderExecution: true, + }) + require.NoError(t, err) + + decodedGasLimit, err := decodeExtraArgsV1V2(encoded) + require.NoError(t, err) + + require.Equal(t, gasLimit, decodedGasLimit) + }) +} diff --git a/core/services/ocr3/plugins/ccipevm/msghasher.go b/core/services/ocr3/plugins/ccipevm/msghasher.go index 15483c822e5..0df0a8254ac 100644 --- a/core/services/ocr3/plugins/ccipevm/msghasher.go +++ b/core/services/ocr3/plugins/ccipevm/msghasher.go @@ -1,10 +1,8 @@ package ccipevm import ( - "bytes" "context" "fmt" - "math/big" cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" @@ -83,7 +81,7 @@ func (h *MessageHasherV1) Hash(_ context.Context, msg cciptypes.Message) (ccipty // TODO: we assume that extra args is always abi-encoded for now, but we need // to decode according to source chain selector family. We should add a family // lookup API to the chain-selectors library. - gasLimit, err := decodeExtraArgs(msg.ExtraArgs) + gasLimit, err := decodeExtraArgsV1V2(msg.ExtraArgs) if err != nil { return [32]byte{}, fmt.Errorf("decode extra args: %w", err) } @@ -125,27 +123,5 @@ func abiEncode(method string, values ...interface{}) ([]byte, error) { return res[4:], nil } -func decodeExtraArgs(extraArgs []byte) (gasLimit *big.Int, err error) { - var method string - if bytes.Equal(extraArgs[:4], evmExtraArgsV1Tag) { - method = "decodeEVMExtraArgsV1" - } else if bytes.Equal(extraArgs[:4], evmExtraArgsV2Tag) { - method = "decodeEVMExtraArgsV2" - } else { - return nil, fmt.Errorf("unknown extra args tag: %x", extraArgs) - } - ifaces, err := messageHasherABI.Methods[method].Inputs.UnpackValues(extraArgs[4:]) - if err != nil { - return nil, fmt.Errorf("abi decode extra args v1: %w", err) - } - // gas limit is always the first argument, and allow OOO isn't set explicitly - // on the message. - _, ok := ifaces[0].(*big.Int) - if !ok { - return nil, fmt.Errorf("expected *big.Int, got %T", ifaces[0]) - } - return ifaces[0].(*big.Int), nil -} - // Interface compliance check var _ cciptypes.MessageHasher = (*MessageHasherV1)(nil) diff --git a/core/services/ocr3/plugins/ccipevm/msghasher_test.go b/core/services/ocr3/plugins/ccipevm/msghasher_test.go index ec856b4e9e3..911a10b26a5 100644 --- a/core/services/ocr3/plugins/ccipevm/msghasher_test.go +++ b/core/services/ocr3/plugins/ccipevm/msghasher_test.go @@ -187,33 +187,3 @@ func testSetup(t *testing.T) *testSetupData { auth: transactor, } } - -func Test_decodeExtraArgs(t *testing.T) { - d := testSetup(t) - gasLimit := big.NewInt(rand.Int63()) - - t.Run("v1", func(t *testing.T) { - encoded, err := d.contract.EncodeEVMExtraArgsV1(nil, message_hasher.ClientEVMExtraArgsV1{ - GasLimit: gasLimit, - }) - require.NoError(t, err) - - decodedGasLimit, err := decodeExtraArgs(encoded) - require.NoError(t, err) - - require.Equal(t, gasLimit, decodedGasLimit) - }) - - t.Run("v2", func(t *testing.T) { - encoded, err := d.contract.EncodeEVMExtraArgsV2(nil, message_hasher.ClientEVMExtraArgsV2{ - GasLimit: gasLimit, - AllowOutOfOrderExecution: true, - }) - require.NoError(t, err) - - decodedGasLimit, err := decodeExtraArgs(encoded) - require.NoError(t, err) - - require.Equal(t, gasLimit, decodedGasLimit) - }) -} From 3e29ce9252e280ea42153e03642ab9d386e9500b Mon Sep 17 00:00:00 2001 From: Anirudh Warrier <12178754+anirudhwarrier@users.noreply.github.com> Date: Fri, 12 Jul 2024 17:49:37 +0530 Subject: [PATCH 05/10] fix load test - anvil pods eviction (#1176) ## Motivation CCIP Load tests were running into failures due to eviction of anvil pods which was due to cache file outgrowing the ephemeral storage on the pod. ## Solution Update anvil helm chart (https://github.com/smartcontractkit/chainlink-testing-framework/pull/1026) to use a volume for cache storage and use this chart in load tests. --- integration-tests/ccip-tests/testsetups/test_env.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/integration-tests/ccip-tests/testsetups/test_env.go b/integration-tests/ccip-tests/testsetups/test_env.go index 87ca1c8c9e9..e0a9c84482f 100644 --- a/integration-tests/ccip-tests/testsetups/test_env.go +++ b/integration-tests/ccip-tests/testsetups/test_env.go @@ -483,7 +483,7 @@ func DeployEnvironments( anvilConfig.BlockGaslimit = pointer.ToInt64(100000000) } testEnvironment. - AddHelm(foundry.NewVersioned("0.1.9", &foundry.Props{ + AddHelm(foundry.NewVersioned("0.2.1", &foundry.Props{ NetworkName: network.Name, Values: map[string]interface{}{ "fullnameOverride": actions.NetworkName(network.Name), @@ -506,6 +506,9 @@ func DeployEnvironments( "baseFee": fmt.Sprintf("%d", pointer.GetInt64(anvilConfig.BaseFee)), }, "resources": GethResourceProfile, + "cache": map[string]interface{}{ + "capacity": "150Gi", + }, }, })) selectedNetworks[i].Simulated = true From 50fae99efe07061bf5c2c986711cb5ca241c8391 Mon Sep 17 00:00:00 2001 From: Suryansh <39276431+0xsuryansh@users.noreply.github.com> Date: Fri, 12 Jul 2024 21:54:45 +0530 Subject: [PATCH 06/10] feat: Enable dynamic config setup on EVM2EVMMultiOffRamp contract creation (#1175) ## Motivation For setting dynamic config in EVM2EVMMultiOffRamp, a separate transaction has to be sent for calling `setDynamicConfig`. As these parameters are known prior to contract deployment we can set these using the constructor [CCIP-2712](https://smartcontract-it.atlassian.net/browse/CCIP-2712) ## Solution - added DynamicConfig as a constructor parameter [CCIP-2712]: https://smartcontract-it.atlassian.net/browse/CCIP-2712?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ --------- Signed-off-by: 0xsuryansh Co-authored-by: app-token-issuer-infra-releng[bot] <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> --- contracts/gas-snapshots/ccip.gas-snapshot | 60 +++++++++---------- .../v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol | 14 ++++- .../helpers/EVM2EVMMultiOffRampHelper.sol | 3 +- .../test/offRamp/EVM2EVMMultiOffRamp.t.sol | 12 +++- .../offRamp/EVM2EVMMultiOffRampSetup.t.sol | 3 +- .../evm_2_evm_multi_offramp.go | 8 +-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- .../plugins/ccip_integration_tests/helpers.go | 4 ++ 8 files changed, 66 insertions(+), 40 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index ef8cca5a528..6750995ddf6 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -124,7 +124,7 @@ E2E:test_E2E_3MessagesSuccess_gas() (gas: 1104821) EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 38220) EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 108400) EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_revert_Revert() (gas: 116868) -EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 460557) +EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 460512) EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 95536) EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12460) EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Revert() (gas: 90379) @@ -142,8 +142,8 @@ EVM2EVMMultiOffRamp_ccipReceive:test_Reverts() (gas: 15659) EVM2EVMMultiOffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67189) EVM2EVMMultiOffRamp_commit:test_InvalidInterval_Revert() (gas: 59695) EVM2EVMMultiOffRamp_commit:test_InvalidRootRevert() (gas: 58775) -EVM2EVMMultiOffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6544263) -EVM2EVMMultiOffRamp_commit:test_NoConfig_Revert() (gas: 6127493) +EVM2EVMMultiOffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6545701) +EVM2EVMMultiOffRamp_commit:test_NoConfig_Revert() (gas: 6128931) EVM2EVMMultiOffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 108372) EVM2EVMMultiOffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 118374) EVM2EVMMultiOffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 108415) @@ -156,25 +156,25 @@ EVM2EVMMultiOffRamp_commit:test_StaleReportWithRoot_Success() (gas: 227655) EVM2EVMMultiOffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 119676) EVM2EVMMultiOffRamp_commit:test_Unhealthy_Revert() (gas: 77602) EVM2EVMMultiOffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 209115) -EVM2EVMMultiOffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6538652) +EVM2EVMMultiOffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6540090) EVM2EVMMultiOffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 47782) -EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 6127677) -EVM2EVMMultiOffRamp_constructor:test_SourceChainSelector_Revert() (gas: 104335) -EVM2EVMMultiOffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 100260) -EVM2EVMMultiOffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 98131) -EVM2EVMMultiOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 106841) -EVM2EVMMultiOffRamp_constructor:test_ZeroRMNProxy_Revert() (gas: 98030) -EVM2EVMMultiOffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 98097) +EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 6131977) +EVM2EVMMultiOffRamp_constructor:test_SourceChainSelector_Revert() (gas: 157553) +EVM2EVMMultiOffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 104040) +EVM2EVMMultiOffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101920) +EVM2EVMMultiOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 160058) +EVM2EVMMultiOffRamp_constructor:test_ZeroRMNProxy_Revert() (gas: 101810) +EVM2EVMMultiOffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101877) EVM2EVMMultiOffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17277) EVM2EVMMultiOffRamp_execute:test_LargeBatch_Success() (gas: 1563033) -EVM2EVMMultiOffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 343670) +EVM2EVMMultiOffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 343778) EVM2EVMMultiOffRamp_execute:test_MultipleReports_Success() (gas: 260538) -EVM2EVMMultiOffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6594735) -EVM2EVMMultiOffRamp_execute:test_NoConfig_Revert() (gas: 6177684) +EVM2EVMMultiOffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6596173) +EVM2EVMMultiOffRamp_execute:test_NoConfig_Revert() (gas: 6179122) EVM2EVMMultiOffRamp_execute:test_NonArray_Revert() (gas: 27678) EVM2EVMMultiOffRamp_execute:test_SingleReport_Success() (gas: 165299) EVM2EVMMultiOffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 149255) -EVM2EVMMultiOffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6956810) +EVM2EVMMultiOffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6958248) EVM2EVMMultiOffRamp_execute:test_ZeroReports_Revert() (gas: 17151) EVM2EVMMultiOffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18413) EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 249488) @@ -182,10 +182,10 @@ EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20672) EVM2EVMMultiOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 201787) EVM2EVMMultiOffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48860) EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48381) -EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 232668) -EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 89262) +EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 232765) +EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 89359) EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 278263) -EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithValidation_Success() (gas: 93485) +EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithValidation_Success() (gas: 93582) EVM2EVMMultiOffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 35083) EVM2EVMMultiOffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 23910) EVM2EVMMultiOffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 451951) @@ -236,19 +236,19 @@ EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupp EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 179068) EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 278906) EVM2EVMMultiOffRamp_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11376) -EVM2EVMMultiOffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 215403) -EVM2EVMMultiOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14289) -EVM2EVMMultiOffRamp_setDynamicConfig:test_PriceRegistryZeroAddress_Revert() (gas: 11795) -EVM2EVMMultiOffRamp_setDynamicConfig:test_RouterZeroAddress_Revert() (gas: 13951) -EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfigWithValidator_Success() (gas: 55630) -EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 33640) -EVM2EVMMultiOffRamp_trialExecute:test_RateLimitError_Success() (gas: 238383) -EVM2EVMMultiOffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 247046) -EVM2EVMMultiOffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 300337) +EVM2EVMMultiOffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 215388) +EVM2EVMMultiOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14371) +EVM2EVMMultiOffRamp_setDynamicConfig:test_PriceRegistryZeroAddress_Revert() (gas: 11895) +EVM2EVMMultiOffRamp_setDynamicConfig:test_RouterZeroAddress_Revert() (gas: 14051) +EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfigWithValidator_Success() (gas: 55768) +EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 33778) +EVM2EVMMultiOffRamp_trialExecute:test_RateLimitError_Success() (gas: 238368) +EVM2EVMMultiOffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 247031) +EVM2EVMMultiOffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 300322) EVM2EVMMultiOffRamp_trialExecute:test_trialExecute_Success() (gas: 280699) -EVM2EVMMultiOffRamp_verify:test_Blessed_Success() (gas: 176601) -EVM2EVMMultiOffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178672) -EVM2EVMMultiOffRamp_verify:test_NotBlessed_Success() (gas: 141533) +EVM2EVMMultiOffRamp_verify:test_Blessed_Success() (gas: 176586) +EVM2EVMMultiOffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178657) +EVM2EVMMultiOffRamp_verify:test_NotBlessed_Success() (gas: 141518) EVM2EVMMultiOffRamp_verify:test_TooManyLeaves_Revert() (gas: 51505) EVM2EVMMultiOnRamp_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16764) EVM2EVMMultiOnRamp_applyDestChainConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 33948) diff --git a/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol b/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol index 9d1664cd66a..2d3c34dd13f 100644 --- a/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol @@ -169,7 +169,11 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base { /// @dev The sequence number of the last price update uint64 private s_latestPriceSequenceNumber; - constructor(StaticConfig memory staticConfig, SourceChainConfigArgs[] memory sourceChainConfigs) MultiOCR3Base() { + constructor( + StaticConfig memory staticConfig, + DynamicConfig memory dynamicConfig, + SourceChainConfigArgs[] memory sourceChainConfigs + ) MultiOCR3Base() { if ( staticConfig.rmnProxy == address(0) || staticConfig.tokenAdminRegistry == address(0) || staticConfig.nonceManager == address(0) @@ -187,6 +191,7 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base { i_nonceManager = staticConfig.nonceManager; emit StaticConfigSet(staticConfig); + _setDynamicConfig(dynamicConfig); _applySourceChainConfigUpdates(sourceChainConfigs); } @@ -750,7 +755,14 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base { } /// @notice Sets the dynamic config. + /// @param dynamicConfig The new dynamic config. function setDynamicConfig(DynamicConfig memory dynamicConfig) external onlyOwner { + _setDynamicConfig(dynamicConfig); + } + + /// @notice Sets the dynamic config. + /// @param dynamicConfig The dynamic config. + function _setDynamicConfig(DynamicConfig memory dynamicConfig) internal { if (dynamicConfig.priceRegistry == address(0) || dynamicConfig.router == address(0)) { revert ZeroAddressNotAllowed(); } diff --git a/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol index 4ee4144bc93..581d9bd7051 100644 --- a/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol +++ b/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol @@ -11,8 +11,9 @@ contract EVM2EVMMultiOffRampHelper is EVM2EVMMultiOffRamp, IgnoreContractSize { constructor( StaticConfig memory staticConfig, + DynamicConfig memory dynamicConfig, SourceChainConfigArgs[] memory sourceChainConfigs - ) EVM2EVMMultiOffRamp(staticConfig, sourceChainConfigs) {} + ) EVM2EVMMultiOffRamp(staticConfig, dynamicConfig, sourceChainConfigs) {} function setExecutionStateHelper( uint64 sourceChainSelector, diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol index 4ab5acf3748..2942ba97eb8 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol @@ -67,6 +67,9 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { vm.expectEmit(); emit EVM2EVMMultiOffRamp.StaticConfigSet(staticConfig); + vm.expectEmit(); + emit EVM2EVMMultiOffRamp.DynamicConfigSet(dynamicConfig); + vm.expectEmit(); emit EVM2EVMMultiOffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1); @@ -79,7 +82,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { vm.expectEmit(); emit EVM2EVMMultiOffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1 + 1, expectedSourceChainConfig2); - s_offRamp = new EVM2EVMMultiOffRampHelper(staticConfig, sourceChainConfigs); + s_offRamp = new EVM2EVMMultiOffRampHelper(staticConfig, dynamicConfig, sourceChainConfigs); MultiOCR3Base.OCRConfigArgs[] memory ocrConfigs = new MultiOCR3Base.OCRConfigArgs[](1); ocrConfigs[0] = MultiOCR3Base.OCRConfigArgs({ @@ -91,7 +94,6 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { transmitters: s_validTransmitters }); - s_offRamp.setDynamicConfig(dynamicConfig); s_offRamp.setOCR3Configs(ocrConfigs); // Static config @@ -153,6 +155,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: address(s_inboundNonceManager) }), + _generateDynamicMultiOffRampConfig(USER_3, address(s_priceRegistry)), sourceChainConfigs ); } @@ -175,6 +178,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: address(s_inboundNonceManager) }), + _generateDynamicMultiOffRampConfig(USER_3, address(s_priceRegistry)), sourceChainConfigs ); } @@ -195,6 +199,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: address(s_inboundNonceManager) }), + _generateDynamicMultiOffRampConfig(USER_3, address(s_priceRegistry)), sourceChainConfigs ); } @@ -215,6 +220,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: address(s_inboundNonceManager) }), + _generateDynamicMultiOffRampConfig(USER_3, address(s_priceRegistry)), sourceChainConfigs ); } @@ -235,6 +241,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { tokenAdminRegistry: ZERO_ADDRESS, nonceManager: address(s_inboundNonceManager) }), + _generateDynamicMultiOffRampConfig(USER_3, address(s_priceRegistry)), sourceChainConfigs ); } @@ -255,6 +262,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup { tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: ZERO_ADDRESS }), + _generateDynamicMultiOffRampConfig(USER_3, address(s_priceRegistry)), sourceChainConfigs ); } diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol index fcaa6139e85..507e966a70a 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol @@ -87,6 +87,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: address(nonceManager) }), + _generateDynamicMultiOffRampConfig(address(router), address(s_priceRegistry)), sourceChainConfigs ); @@ -445,10 +446,10 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba tokenAdminRegistry: address(s_tokenAdminRegistry), nonceManager: address(s_inboundNonceManager) }), + _generateDynamicMultiOffRampConfig(address(s_destRouter), address(s_priceRegistry)), new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0) ); - s_offRamp.setDynamicConfig(_generateDynamicMultiOffRampConfig(address(s_destRouter), address(s_priceRegistry))); address[] memory authorizedCallers = new address[](1); authorizedCallers[0] = address(s_offRamp); s_inboundNonceManager.applyAuthorizedCallerUpdates( diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go b/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go index edd06bf867a..5b565e3d616 100644 --- a/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go +++ b/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go @@ -162,15 +162,15 @@ type MultiOCR3BaseOCRConfigArgs struct { } var EVM2EVMMultiOffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b506040516200690e3803806200690e8339810160408190526200003591620005bd565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001ee565b5050466080525060208201516001600160a01b03161580620000ec575060408201516001600160a01b0316155b8062000103575060608201516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b81516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b81516001600160401b0390811660a052602080840180516001600160a01b0390811660c05260408087018051831660e0526060808901805185166101005283518a519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e68162000299565b505062000a03565b336001600160a01b03821603620002485760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60005b8151811015620004eb576000828281518110620002bd57620002bd620007cc565b60200260200101519050600081600001519050806001600160401b0316600003620002fb5760405163c656089560e01b815260040160405180910390fd5b6001600160401b03811660009081526007602052604081206001810180549192916200032790620007e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200035590620007e2565b8015620003a65780601f106200037a57610100808354040283529160200191620003a6565b820191906000526020600020905b8154815290600101906020018083116200038857829003601f168201915b50505050509050600084604001519050815160000362000449578051600003620003e3576040516342bcdf7f60e11b815260040160405180910390fd5b60018301620003f3828262000873565b508254610100600160481b0319166101001783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a162000484565b8080519060200120828051906020012014620004845760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b6020850151835460ff19169015151783556040516001600160401b038516907f4f49973170c548fddd4a48341b75e131818913f38f44d47af57e8735eee588ba90620004d29086906200093f565b60405180910390a250505050508060010190506200029c565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200052a576200052a620004ef565b60405290565b604051606081016001600160401b03811182821017156200052a576200052a620004ef565b604051601f8201601f191681016001600160401b0381118282101715620005805762000580620004ef565b604052919050565b80516001600160401b0381168114620005a057600080fd5b919050565b80516001600160a01b0381168114620005a057600080fd5b60008082840360a0811215620005d257600080fd5b6080811215620005e157600080fd5b50620005ec62000505565b620005f78462000588565b8152602062000608818601620005a5565b818301526200061a60408601620005a5565b60408301526200062d60608601620005a5565b606083015260808501519193506001600160401b03808311156200065057600080fd5b828601925086601f8401126200066557600080fd5b8251818111156200067a576200067a620004ef565b8060051b6200068b84820162000555565b918252848101840191848101908a841115620006a657600080fd5b85870192505b83831015620007bb57825185811115620006c557600080fd5b8701601f196060828e0382011215620006dd57600080fd5b620006e762000530565b620006f489840162000588565b8152604083015180151581146200070a57600080fd5b818a01526060830151888111156200072157600080fd5b8084019350508d603f8401126200073757600080fd5b88830151888111156200074e576200074e620004ef565b620007608a84601f8401160162000555565b92508083528e60408286010111156200077857600080fd5b60005b818110156200079957848101604001518482018c01528a016200077b565b5060009083018a015260408101919091528352509185019190850190620006ac565b809750505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620007f757607f821691505b6020821081036200081857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200086e576000816000526020600020601f850160051c81016020861015620008495750805b601f850160051c820191505b818110156200086a5782815560010162000855565b5050505b505050565b81516001600160401b038111156200088f576200088f620004ef565b620008a781620008a08454620007e2565b846200081e565b602080601f831160018114620008df5760008415620008c65750858301515b600019600386901b1c1916600185901b1785556200086a565b600085815260208120601f198616915b828110156200091057888601518255948401946001909101908401620008ef565b50858210156200092f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252825460ff811615158383015260081c6001600160401b031660408301526060808301526001808401805460009392919084906200098181620007e2565b80608089015260a06001831660008114620009a55760018114620009c257620009f4565b60ff19841660a08b015260a083151560051b8b01019450620009f4565b85600052602060002060005b84811015620009eb5781548c8201850152908801908901620009ce565b8b0160a0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615e9c62000a726000396000818161023e0152612c0d01526000818161020f0152612ef70152600081816101e0015281816115c5015261167c0152600081816101b00152612781015260008181611c5f0152611cab0152615e9c6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063d2a15d351161008c578063f2fde38b11610066578063f2fde38b146105b1578063f716f99f146105c4578063ff888fb1146105d757600080fd5b8063d2a15d351461056b578063e9d68a8e1461057e578063ece670b61461059e57600080fd5b8063a12a9870116100bd578063a12a9870146104f3578063c673e58414610506578063ccd37ba31461052657600080fd5b806385572ffb146104ca5780638da5cb5b146104d857600080fd5b8063403b2d631161012f5780637437ff9f116101145780637437ff9f1461038557806379ba5097146104af5780637d4eef60146104b757600080fd5b8063403b2d63146103525780635e36480c1461036557600080fd5b80632d04ab76116101605780632d04ab761461030e578063311cd513146103235780633f4b04aa1461033657600080fd5b806306285c691461017c578063181f5a77146102c5575b600080fd5b61026e60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102bc9190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103016040518060400160405280601d81526020017f45564d3245564d4d756c74694f666652616d7020312e362e302d64657600000081525081565b6040516102bc9190613f10565b61032161031c366004613fbb565b6105fa565b005b61032161033136600461406e565b6109c0565b600a5460405167ffffffffffffffff90911681526020016102bc565b6103216103603660046141f7565b610a29565b610378610373366004614296565b610bfb565b6040516102bc91906142f3565b6104466040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526004546001600160a01b03808216835263ffffffff7401000000000000000000000000000000000000000083048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b90910490921660608201526005548216608082015260065490911660a082015290565b6040516102bc9190600060c0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401528060a08501511660a08401525092915050565b610321610c51565b6103216104c53660046148f7565b610d0f565b610321610177366004614a22565b6000546040516001600160a01b0390911681526020016102bc565b610321610501366004614a76565b610eb4565b610519610514366004614b90565b610ec8565b6040516102bc9190614bf0565b61055d610534366004614c65565b67ffffffffffffffff919091166000908152600960209081526040808320938352929052205490565b6040519081526020016102bc565b610321610579366004614c8f565b611026565b61059161058c366004614d04565b6110e0565b6040516102bc9190614d1f565b6103216105ac366004614d5a565b6111c9565b6103216105bf366004614dbe565b61151c565b6103216105d2366004614e43565b61152d565b6105ea6105e5366004614f81565b61156f565b60405190151581526020016102bc565b60006106088789018961510a565b8051515190915015158061062157508051602001515115155b1561072157600a5460208a01359067ffffffffffffffff808316911610156106e057600a805467ffffffffffffffff191667ffffffffffffffff831617905560065482516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633937306f916106a991600401615348565b600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b5050505061071f565b81602001515160000361071f576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b8160200151518110156109095760008260200151828151811061074957610749615275565b6020026020010151905060008160000151905061076581611630565b600061077082611732565b602084015151815491925067ffffffffffffffff908116610100909204161415806107b2575060208084015190810151905167ffffffffffffffff9182169116115b156107fb57825160208401516040517feefb0cac0000000000000000000000000000000000000000000000000000000081526107f292919060040161535b565b60405180910390fd5b604083015180610837576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff166000908152600960209081526040808320848452909152902054156108aa5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602481018290526044016107f2565b60208085015101516108bd9060016153a6565b825468ffffffffffffffff00191661010067ffffffffffffffff928316021790925592511660009081526009602090815260408083209483529390529190912042905550600101610724565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d8160405161093991906153ce565b60405180910390a16109b560008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611792915050565b505050505050505050565b610a006109cf8284018461546b565b60408051600080825260208201909252906109fa565b60608152602001906001900390816109e55790505b50611b09565b604080516000808252602082019092529050610a23600185858585866000611792565b50505050565b610a31611bb9565b60a08101516001600160a01b03161580610a53575080516001600160a01b0316155b15610a8a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a177401000000000000000000000000000000000000000063ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff19908116928e1692909217905560a0808e01805160068054909416908f161790925586519a8b5297518716988a0198909852925185169388019390935251909216958501959095525185169383019390935251909216908201527f0da37fd00459f4f5f0b8210d31525e4910ae674b8bab34b561d146bb45773a4c9060c00160405180910390a150565b6000610c09600160046154a0565b6002610c166080856154c9565b67ffffffffffffffff16610c2a91906154f0565b610c348585611c15565b901c166003811115610c4857610c486142c9565b90505b92915050565b6001546001600160a01b03163314610cab5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107f2565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d17611c5c565b815181518114610d53576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ea4576000848281518110610d7257610d72615275565b60200260200101519050600081602001515190506000858481518110610d9a57610d9a615275565b6020026020010151905080518214610dde576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82811015610e95576000828281518110610dfd57610dfd615275565b6020026020010151905080600014158015610e38575084602001518281518110610e2957610e29615275565b60200260200101516080015181105b15610e8c5784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064016107f2565b50600101610de1565b50505050806001019050610d56565b50610eaf8383611b09565b505050565b610ebc611bb9565b610ec581611cdd565b50565b610f0b6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610fb457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f96575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561101657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff8575b5050505050815250509050919050565b61102e611bb9565b60005b81811015610eaf57600083838381811061104d5761104d615275565b9050604002018036038101906110639190615507565b9050611072816020015161156f565b6110d757805167ffffffffffffffff1660009081526009602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b50600101611031565b60408051606080820183526000808352602080840182905283850183905267ffffffffffffffff8681168352600782529185902085519384018652805460ff81161515855261010090049092169083015260018101805493949293919284019161114990615540565b80601f016020809104026020016040519081016040528092919081815260200182805461117590615540565b80156110165780601f1061119757610100808354040283529160200191611016565b820191906000526020600020905b8154815290600101906020018083116111a557505050919092525091949350505050565b333014611202576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516000808252602082019092528161123f565b60408051808201909152600080825260208201528152602001906001900390816112185790505b5060a084015151909150156112725761126f8360a001518460200151856060015186600001516020015186611f69565b90505b6040805160a0810182528451518152845160209081015167ffffffffffffffff16818301528086015183516000948401926112ae929101613f10565b60408051601f19818403018152918152908252868101516020830152018390526005549091506001600160a01b031680156113bb576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a19061132890859060040161561c565b600060405180830381600087803b15801561134257600080fd5b505af1925050508015611353575060015b6113bb573d808015611381576040519150601f19603f3d011682016040523d82523d6000602084013e611386565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107f29190613f10565b6040850151511580156113d057506080850151155b806113e7575060608501516001600160a01b03163b155b8061142757506060850151611425906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000612047565b155b15611433575050505050565b60048054608087015160608801516040517f3cf9798300000000000000000000000000000000000000000000000000000000815260009485946001600160a01b031693633cf979839361148e938a936113889392910161562f565b6000604051808303816000875af11580156114ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114d5919081019061566b565b50915091508161151357806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107f29190613f10565b50505050505050565b611524611bb9565b610ec581612063565b611535611bb9565b60005b815181101561156b5761156382828151811061155657611556615275565b6020026020010151612119565b600101611538565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b9190615701565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156116cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ef9190615701565b15610ec5576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016107f2565b67ffffffffffffffff81166000908152600760205260408120805460ff16610c4b576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016107f2565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906117f18760a461571e565b905082606001511561183957845161180a9060206154f0565b86516118179060206154f0565b6118229060a061571e565b61182c919061571e565b611836908261571e565b90505b36811461187b576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016107f2565b50815181146118c35781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016107f2565b6118cb611c5c565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611919576119196142c9565b600281111561192a5761192a6142c9565b9052509050600281602001516002811115611947576119476142c9565b14801561199b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff168154811061198357611983615275565b6000918252602090912001546001600160a01b031633145b6119d1576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611ab35760208201516119ec906001615731565b60ff16855114611a28576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611a63576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611a7592919061574a565b604051908190038120611a8c918b9060200161575a565b604051602081830303815290604052805190602001209050611ab18a8288888861245d565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611b43576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611bb257611baa858281518110611b7857611b78615275565b602002602001015184611ba457858381518110611b9757611b97615275565b6020026020010151612674565b83612674565b600101611b5a565b5050505050565b6000546001600160a01b03163314611c135760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107f2565b565b67ffffffffffffffff8216600090815260086020526040812081611c3a60808561576e565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b467f000000000000000000000000000000000000000000000000000000000000000014611c13576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107f2565b60005b815181101561156b576000828281518110611cfd57611cfd615275565b602002602001015190506000816000015190508067ffffffffffffffff16600003611d54576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600760205260408120600181018054919291611d7f90615540565b80601f0160208091040260200160405190810160405280929190818152602001828054611dab90615540565b8015611df85780601f10611dcd57610100808354040283529160200191611df8565b820191906000526020600020905b815481529060010190602001808311611ddb57829003601f168201915b505050505090506000846040015190508151600003611eb1578051600003611e4c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301611e5a82826157dd565b50825468ffffffffffffffff00191661010017835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611f04565b8080519060200120828051906020012014611f04576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016107f2565b6020850151835460ff191690151517835560405167ffffffffffffffff8516907f4f49973170c548fddd4a48341b75e131818913f38f44d47af57e8735eee588ba90611f5190869061589d565b60405180910390a25050505050806001019050611ce0565b6060855167ffffffffffffffff811115611f8557611f856140c2565b604051908082528060200260200182016040528015611fca57816020015b6040805180820190915260008082526020820152815260200190600190039081611fa35790505b50905060005b865181101561203d57612018878281518110611fee57611fee615275565b602002602001015187878787868151811061200b5761200b615275565b6020026020010151612e96565b82828151811061202a5761202a615275565b6020908102919091010152600101611fd0565b5095945050505050565b600061205283613227565b8015610c485750610c488383613273565b336001600160a01b038216036120bb5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107f2565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612144576000604051631b3fab5160e11b81526004016107f29190615959565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b157606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612206565b6060840151600182015460ff6201000090910416151590151514612206576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016107f2565b60a08401518051601f60ff82161115612235576001604051631b3fab5160e11b81526004016107f29190615959565b61229b858560030180548060200260200160405190810160405280929190818152602001828054801561229157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612273575b5050505050613315565b8560600151156123ca576123098585600201805480602002602001604051908101604052809291908181526020018280548015612291576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612273575050505050613315565b608086015180516123239060028701906020840190613e1e565b5080516001850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f1015612383576002604051631b3fab5160e11b81526004016107f29190615959565b6040880151612393906003615973565b60ff168160ff16116123bb576003604051631b3fab5160e11b81526004016107f29190615959565b6123c78783600161337e565b50505b6123d68583600261337e565b81516123eb9060038601906020850190613e1e565b5060408681015160018501805460ff191660ff8316179055875180865560a089015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54793612444938a939260028b0192919061598f565b60405180910390a1612455856134fe565b505050505050565b612465613e8c565b835160005b8181101561266a57600060018886846020811061248957612489615275565b61249691901a601b615731565b8985815181106124a8576124a8615275565b60200260200101518986815181106124c2576124c2615275565b602002602001015160405160008152602001604052604051612500949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612522573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b03851683528152858220858701909652855480841686529397509095509293928401916101009004166002811115612583576125836142c9565b6002811115612594576125946142c9565b90525090506001816020015160028111156125b1576125b16142c9565b146125e8576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051859060ff16601f81106125ff576125ff615275565b60200201511561263b576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600185826000015160ff16601f811061265657612656615275565b91151560209092020152505060010161246a565b5050505050505050565b815161267f81611630565b600061268a82611732565b60208501515190915060008190036126cd576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015151811461270b576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115612726576127266140c2565b60405190808252806020026020018201604052801561274f578160200160208202803683370190505b50905060005b828110156128c45760008760200151828151811061277557612775615275565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461280857805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107f2565b61289e8186600101805461281b90615540565b80601f016020809104026020016040519081016040528092919081815260200182805461284790615540565b80156128945780601f1061286957610100808354040283529160200191612894565b820191906000526020600020905b81548152906001019060200180831161287757829003601f168201915b505050505061351a565b8383815181106128b0576128b0615275565b602090810291909101015250600101612755565b5060006128db858389606001518a6080015161363c565b905080600003612923576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016107f2565b8551151560005b848110156109b55760008960200151828151811061294a5761294a615275565b60200260200101519050600061296889836000015160600151610bfb565b9050600281600381111561297e5761297e6142c9565b036129d5578151606001516040805167ffffffffffffffff808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a15050612e8e565b60008160038111156129e9576129e96142c9565b1480612a0657506003816003811115612a0457612a046142c9565b145b612a57578151606001516040517f25507e7f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808c16600483015290911660248201526044016107f2565b8315612b385760045460009074010000000000000000000000000000000000000000900463ffffffff16612a8b87426154a0565b1190508080612aab57506003826003811115612aa957612aa96142c9565b145b612aed576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b1660048201526024016107f2565b8a8481518110612aff57612aff615275565b6020026020010151600014612b32578a8481518110612b2057612b20615275565b60200260200101518360800181815250505b50612b9e565b6000816003811115612b4c57612b4c6142c9565b14612b9e578151606001516040517f3ef2a99c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808c16600483015290911660248201526044016107f2565b81516080015167ffffffffffffffff1615801590612bcd57506000816003811115612bcb57612bcb6142c9565b145b15612c925781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612c44928e929190600401615a15565b6020604051808303816000875af1158015612c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c879190615701565b612c92575050612e8e565b60008b604001518481518110612caa57612caa615275565b6020026020010151905080518360a001515114612d0e578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808d16600483015290911660248201526044016107f2565b612d228a8460000151606001516001613692565b600080612d2f858461373a565b91509150612d468c86600001516060015184613692565b868015612d6457506003826003811115612d6257612d626142c9565b145b8015612d8257506000846003811115612d7f57612d7f6142c9565b14155b15612dbf578451516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526107f291908390600401615a42565b6003826003811115612dd357612dd36142c9565b14158015612df357506002826003811115612df057612df06142c9565b14155b15612e34578451606001516040517f926c5a3e0000000000000000000000000000000000000000000000000000000081526107f2918e918590600401615a5b565b8451805160609091015160405167ffffffffffffffff918216918f16907f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df290612e809087908790615a81565b60405180910390a450505050505b60010161292a565b60408051808201909152600080825260208201526000612eb98760200151613982565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f629190615aa1565b90506001600160a01b0381161580612faa5750612fa86001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000612047565b155b15612fec576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016107f2565b6000806130bb633907753760e01b6040518061010001604052808c81526020018a67ffffffffffffffff1681526020018b6001600160a01b031681526020018d606001518152602001876001600160a01b031681526020018d6000015181526020018d6040015181526020018981525060405160240161306c9190615abe565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600454859063ffffffff600160e01b9091041661138860846139c4565b5091509150816130e0578060405163e1cd550960e01b81526004016107f29190613f10565b80516020146131285780516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016107f2565b60008180602001905181019061313e9190615b95565b604080516001600160a01b038c16602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167fa9059cbb000000000000000000000000000000000000000000000000000000001790526004549192506131d69187907801000000000000000000000000000000000000000000000000900463ffffffff1661138860846139c4565b509093509150826131fc578160405163e1cd550960e01b81526004016107f29190613f10565b604080518082019091526001600160a01b039095168552602085015250919250505095945050505050565b6000613253827f01ffc9a700000000000000000000000000000000000000000000000000000000613273565b8015610c4b575061326c826001600160e01b0319613273565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156132fe575060208210155b801561330a5750600081115b979650505050505050565b60005b8151811015610eaf5760ff83166000908152600360205260408120835190919084908490811061334a5761334a615275565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613318565b60005b82518160ff161015610a23576000838260ff16815181106133a4576133a4615275565b60200260200101519050600060028111156133c1576133c16142c9565b60ff80871660009081526003602090815260408083206001600160a01b03871684529091529020546101009004166002811115613400576134006142c9565b14613421576004604051631b3fab5160e11b81526004016107f29190615959565b6001600160a01b038116613461576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff168152602001846002811115613487576134876142c9565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134e4576134e46142c9565b021790555090505050806134f790615bae565b9050613381565b60ff8116610ec557600a805467ffffffffffffffff1916905550565b815160208082015160409283015192516000938493613560937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615bcd565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135a99794969395929491939101615c00565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016135e09190615cf7565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b60008061364a858585613aea565b90506136558161156f565b61366357600091505061368a565b67ffffffffffffffff86166000908152600960209081526040808320938352929052205490505b949350505050565b600060026136a16080856154c9565b67ffffffffffffffff166136b591906154f0565b905060006136c38585611c15565b9050816136d2600160046154a0565b901b1916818360038111156136e9576136e96142c9565b67ffffffffffffffff871660009081526008602052604081209190921b9290921791829161371860808861576e565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fece670b6000000000000000000000000000000000000000000000000000000008152600090606090309063ece670b69061377e9087908790600401615d57565b600060405180830381600087803b15801561379857600080fd5b505af19250505080156137a9575060015b613966573d8080156137d7576040519150601f19603f3d011682016040523d82523d6000602084013e6137dc565b606091505b5060006137e882615e57565b90507f0a8d6e8c000000000000000000000000000000000000000000000000000000006001600160e01b031982161480613832575063e1cd550960e01b6001600160e01b03198216145b8061384d575063046b337b60e51b6001600160e01b03198216145b8061388157507f78ef8024000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b806138b557507f0c3b563c000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b806138e957507fae9b4ce9000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b8061391d57507f09c25325000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b1561392e575060039250905061397b565b8551516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526107f291908490600401615a42565b50506040805160208101909152600081526002905b9250929050565b600081516020146139a8578160405163046b337b60e51b81526004016107f29190613f10565b610c4b828060200190518101906139bf9190615b95565b613d89565b6000606060008361ffff1667ffffffffffffffff8111156139e7576139e76140c2565b6040519080825280601f01601f191660200182016040528015613a11576020820181803683370190505b509150863b613a44577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613a77577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613ab0577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613ad35750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b2b576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b3f57506101018111155b613b5c576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613b86576040516309bde33960e01b815260040160405180910390fd5b80600003613bb35786600081518110613ba157613ba1615275565b60200260200101519350505050613d82565b60008167ffffffffffffffff811115613bce57613bce6140c2565b604051908082528060200260200182016040528015613bf7578160200160208202803683370190505b50905060008080805b85811015613d215760006001821b8b811603613c5b5788851015613c44578c5160018601958e918110613c3557613c35615275565b60200260200101519050613c7d565b8551600185019487918110613c3557613c35615275565b8b5160018401938d918110613c7257613c72615275565b602002602001015190505b600089861015613cad578d5160018701968f918110613c9e57613c9e615275565b60200260200101519050613ccf565b8651600186019588918110613cc457613cc4615275565b602002602001015190505b82851115613cf0576040516309bde33960e01b815260040160405180910390fd5b613cfa8282613ddd565b878481518110613d0c57613d0c615275565b60209081029190910101525050600101613c00565b506001850382148015613d3357508683145b8015613d3e57508581145b613d5b576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613d7057613d70615275565b60200260200101519750505050505050505b9392505050565b60006001600160a01b03821180613da1575061040082105b15613dd95760408051602081018490520160408051601f198184030181529082905263046b337b60e51b82526107f291600401613f10565b5090565b6000818310613df557613df08284613dfb565b610c48565b610c4883835b60408051600160208201529081018390526060810182905260009060800161361e565b828054828255906000526020600020908101928215613e80579160200282015b82811115613e80578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e3e565b50613dd9929150613eab565b604051806103e00160405280601f906020820280368337509192915050565b5b80821115613dd95760008155600101613eac565b60005b83811015613edb578181015183820152602001613ec3565b50506000910152565b60008151808452613efc816020860160208601613ec0565b601f01601f19169290920160200192915050565b602081526000610c486020830184613ee4565b8060608101831015610c4b57600080fd5b60008083601f840112613f4657600080fd5b50813567ffffffffffffffff811115613f5e57600080fd5b60208301915083602082850101111561397b57600080fd5b60008083601f840112613f8857600080fd5b50813567ffffffffffffffff811115613fa057600080fd5b6020830191508360208260051b850101111561397b57600080fd5b60008060008060008060008060e0898b031215613fd757600080fd5b613fe18a8a613f23565b9750606089013567ffffffffffffffff80821115613ffe57600080fd5b61400a8c838d01613f34565b909950975060808b013591508082111561402357600080fd5b61402f8c838d01613f76565b909750955060a08b013591508082111561404857600080fd5b506140558b828c01613f76565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561408357600080fd5b61408d8585613f23565b9250606084013567ffffffffffffffff8111156140a957600080fd5b6140b586828701613f34565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156140fb576140fb6140c2565b60405290565b60405160a0810167ffffffffffffffff811182821017156140fb576140fb6140c2565b6040516080810167ffffffffffffffff811182821017156140fb576140fb6140c2565b6040516060810167ffffffffffffffff811182821017156140fb576140fb6140c2565b6040805190810167ffffffffffffffff811182821017156140fb576140fb6140c2565b604051601f8201601f1916810167ffffffffffffffff811182821017156141b6576141b66140c2565b604052919050565b6001600160a01b0381168114610ec557600080fd5b80356141de816141be565b919050565b803563ffffffff811681146141de57600080fd5b600060c0828403121561420957600080fd5b6142116140d8565b823561421c816141be565b815261422a602084016141e3565b602082015261423b604084016141e3565b604082015261424c606084016141e3565b6060820152608083013561425f816141be565b608082015260a0830135614272816141be565b60a08201529392505050565b803567ffffffffffffffff811681146141de57600080fd5b600080604083850312156142a957600080fd5b6142b28361427e565b91506142c06020840161427e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106142ef576142ef6142c9565b9052565b60208101610c4b82846142df565b600067ffffffffffffffff82111561431b5761431b6140c2565b5060051b60200190565b600060a0828403121561433757600080fd5b61433f614101565b9050813581526143516020830161427e565b60208201526143626040830161427e565b60408201526143736060830161427e565b60608201526143846080830161427e565b608082015292915050565b600067ffffffffffffffff8211156143a9576143a96140c2565b50601f01601f191660200190565b600082601f8301126143c857600080fd5b81356143db6143d68261438f565b61418d565b8181528460208386010111156143f057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261441e57600080fd5b8135602061442e6143d683614301565b82815260059290921b8401810191818101908684111561444d57600080fd5b8286015b8481101561452357803567ffffffffffffffff808211156144725760008081fd5b8189019150608080601f19848d0301121561448d5760008081fd5b614495614124565b87840135838111156144a75760008081fd5b6144b58d8a838801016143b7565b825250604080850135848111156144cc5760008081fd5b6144da8e8b838901016143b7565b8a84015250606080860135858111156144f35760008081fd5b6145018f8c838a01016143b7565b9284019290925294909201359381019390935250508352918301918301614451565b509695505050505050565b6000610140828403121561454157600080fd5b6145496140d8565b90506145558383614325565b815260a082013567ffffffffffffffff8082111561457257600080fd5b61457e858386016143b7565b602084015260c084013591508082111561459757600080fd5b6145a3858386016143b7565b60408401526145b460e085016141d3565b606084015261010084013560808401526101208401359150808211156145d957600080fd5b506145e68482850161440d565b60a08301525092915050565b600082601f83011261460357600080fd5b813560206146136143d683614301565b82815260059290921b8401810191818101908684111561463257600080fd5b8286015b8481101561452357803567ffffffffffffffff8111156146565760008081fd5b6146648986838b010161452e565b845250918301918301614636565b600082601f83011261468357600080fd5b813560206146936143d683614301565b82815260059290921b840181019181810190868411156146b257600080fd5b8286015b8481101561452357803567ffffffffffffffff8111156146d65760008081fd5b6146e48986838b01016143b7565b8452509183019183016146b6565b600082601f83011261470357600080fd5b813560206147136143d683614301565b82815260059290921b8401810191818101908684111561473257600080fd5b8286015b8481101561452357803567ffffffffffffffff8111156147565760008081fd5b6147648986838b0101614672565b845250918301918301614736565b600082601f83011261478357600080fd5b813560206147936143d683614301565b8083825260208201915060208460051b8701019350868411156147b557600080fd5b602086015b8481101561452357803583529183019183016147ba565b600082601f8301126147e257600080fd5b813560206147f26143d683614301565b82815260059290921b8401810191818101908684111561481157600080fd5b8286015b8481101561452357803567ffffffffffffffff808211156148365760008081fd5b818901915060a080601f19848d030112156148515760008081fd5b614859614101565b61486488850161427e565b81526040808501358481111561487a5760008081fd5b6148888e8b838901016145f2565b8a84015250606080860135858111156148a15760008081fd5b6148af8f8c838a01016146f2565b83850152506080915081860135858111156148ca5760008081fd5b6148d88f8c838a0101614772565b9184019190915250919093013590830152508352918301918301614815565b600080604080848603121561490b57600080fd5b833567ffffffffffffffff8082111561492357600080fd5b61492f878388016147d1565b945060209150818601358181111561494657600080fd5b8601601f8101881361495757600080fd5b80356149656143d682614301565b81815260059190911b8201840190848101908a83111561498457600080fd5b8584015b83811015614a10578035868111156149a05760008081fd5b8501603f81018d136149b25760008081fd5b878101356149c26143d682614301565b81815260059190911b82018a0190898101908f8311156149e25760008081fd5b928b01925b82841015614a005783358252928a0192908a01906149e7565b8652505050918601918601614988565b50809750505050505050509250929050565b600060208284031215614a3457600080fd5b813567ffffffffffffffff811115614a4b57600080fd5b820160a08185031215613d8257600080fd5b8015158114610ec557600080fd5b80356141de81614a5d565b60006020808385031215614a8957600080fd5b823567ffffffffffffffff80821115614aa157600080fd5b818501915085601f830112614ab557600080fd5b8135614ac36143d682614301565b81815260059190911b83018401908481019088831115614ae257600080fd5b8585015b83811015614b7257803585811115614afe5760008081fd5b86016060818c03601f1901811315614b165760008081fd5b614b1e614147565b614b298a840161427e565b8152604080840135614b3a81614a5d565b828c0152918301359188831115614b515760008081fd5b614b5f8e8c858701016143b7565b9082015285525050918601918601614ae6565b5098975050505050505050565b803560ff811681146141de57600080fd5b600060208284031215614ba257600080fd5b610c4882614b7f565b60008151808452602080850194506020840160005b83811015614be55781516001600160a01b031687529582019590820190600101614bc0565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c3f60e0840182614bab565b90506040840151601f198483030160c0850152614c5c8282614bab565b95945050505050565b60008060408385031215614c7857600080fd5b614c818361427e565b946020939093013593505050565b60008060208385031215614ca257600080fd5b823567ffffffffffffffff80821115614cba57600080fd5b818501915085601f830112614cce57600080fd5b813581811115614cdd57600080fd5b8660208260061b8501011115614cf257600080fd5b60209290920196919550909350505050565b600060208284031215614d1657600080fd5b610c488261427e565b6020815281511515602082015267ffffffffffffffff60208301511660408201526000604083015160608084015261368a6080840182613ee4565b60008060408385031215614d6d57600080fd5b823567ffffffffffffffff80821115614d8557600080fd5b614d918683870161452e565b93506020850135915080821115614da757600080fd5b50614db485828601614672565b9150509250929050565b600060208284031215614dd057600080fd5b8135613d82816141be565b600082601f830112614dec57600080fd5b81356020614dfc6143d683614301565b8083825260208201915060208460051b870101935086841115614e1e57600080fd5b602086015b84811015614523578035614e36816141be565b8352918301918301614e23565b60006020808385031215614e5657600080fd5b823567ffffffffffffffff80821115614e6e57600080fd5b818501915085601f830112614e8257600080fd5b8135614e906143d682614301565b81815260059190911b83018401908481019088831115614eaf57600080fd5b8585015b83811015614b7257803585811115614eca57600080fd5b860160c0818c03601f19011215614ee15760008081fd5b614ee96140d8565b8882013581526040614efc818401614b7f565b8a8301526060614f0d818501614b7f565b8284015260809150614f20828501614a6b565b9083015260a08381013589811115614f385760008081fd5b614f468f8d83880101614ddb565b838501525060c0840135915088821115614f605760008081fd5b614f6e8e8c84870101614ddb565b9083015250845250918601918601614eb3565b600060208284031215614f9357600080fd5b5035919050565b80356001600160e01b03811681146141de57600080fd5b600082601f830112614fc257600080fd5b81356020614fd26143d683614301565b82815260069290921b84018101918181019086841115614ff157600080fd5b8286015b84811015614523576040818903121561500e5760008081fd5b61501661416a565b61501f8261427e565b815261502c858301614f9a565b81860152835291830191604001614ff5565b600082601f83011261504f57600080fd5b8135602061505f6143d683614301565b82815260079290921b8401810191818101908684111561507e57600080fd5b8286015b8481101561452357808803608081121561509c5760008081fd5b6150a4614147565b6150ad8361427e565b8152604080601f19840112156150c35760008081fd5b6150cb61416a565b92506150d887850161427e565b83526150e581850161427e565b8388015281870192909252606083013591810191909152835291830191608001615082565b6000602080838503121561511d57600080fd5b823567ffffffffffffffff8082111561513557600080fd5b8185019150604080838803121561514b57600080fd5b61515361416a565b83358381111561516257600080fd5b84016040818a03121561517457600080fd5b61517c61416a565b81358581111561518b57600080fd5b8201601f81018b1361519c57600080fd5b80356151aa6143d682614301565b81815260069190911b8201890190898101908d8311156151c957600080fd5b928a01925b828410156152195787848f0312156151e65760008081fd5b6151ee61416a565b84356151f9816141be565b8152615206858d01614f9a565b818d0152825292870192908a01906151ce565b84525050508187013593508484111561523157600080fd5b61523d8a858401614fb1565b818801528252508385013591508282111561525757600080fd5b6152638883860161503e565b85820152809550505050505092915050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b818110156152e257835180516001600160a01b031684528501516001600160e01b03168584015292840192918501916001016152ab565b50508583015187820388850152805180835290840192506000918401905b8083101561533c578351805167ffffffffffffffff1683528501516001600160e01b031685830152928401926001929092019190850190615300565b50979650505050505050565b602081526000610c48602083018461528b565b67ffffffffffffffff8316815260608101613d826020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153c7576153c7615390565b5092915050565b6000602080835260608451604080848701526153ed606087018361528b565b87850151878203601f19016040890152805180835290860193506000918601905b80831015614b7257845167ffffffffffffffff81511683528781015161544d89850182805167ffffffffffffffff908116835260209182015116910152565b5084015182870152938601936001929092019160809091019061540e565b60006020828403121561547d57600080fd5b813567ffffffffffffffff81111561549457600080fd5b61368a848285016147d1565b81810381811115610c4b57610c4b615390565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154e4576154e46154b3565b92169190910692915050565b8082028115828204841417610c4b57610c4b615390565b60006040828403121561551957600080fd5b61552161416a565b61552a8361427e565b8152602083013560208201528091505092915050565b600181811c9082168061555457607f821691505b60208210810361557457634e487b7160e01b600052602260045260246000fd5b50919050565b805182526000602067ffffffffffffffff81840151168185015260408084015160a060408701526155ae60a0870182613ee4565b9050606085015186820360608801526155c78282613ee4565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561533c57835180516001600160a01b03168352860151868301529285019260019290920191908401906155ea565b602081526000610c48602083018461557a565b608081526000615642608083018761557a565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561568057600080fd5b835161568b81614a5d565b602085015190935067ffffffffffffffff8111156156a857600080fd5b8401601f810186136156b957600080fd5b80516156c76143d68261438f565b8181528760208385010111156156dc57600080fd5b6156ed826020830160208601613ec0565b809450505050604084015190509250925092565b60006020828403121561571357600080fd5b8151613d8281614a5d565b80820180821115610c4b57610c4b615390565b60ff8181168382160190811115610c4b57610c4b615390565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff80841680615789576157896154b3565b92169190910492915050565b601f821115610eaf576000816000526020600020601f850160051c810160208610156157be5750805b601f850160051c820191505b81811015612455578281556001016157ca565b815167ffffffffffffffff8111156157f7576157f76140c2565b61580b816158058454615540565b84615795565b602080601f83116001811461584057600084156158285750858301515b600019600386901b1c1916600185901b178555612455565b600085815260208120601f198616915b8281101561586f57888601518255948401946001909101908401615850565b508582101561588d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835460ff81161515602085015267ffffffffffffffff8160081c166040850152506001808501606080860152600081546158dd81615540565b80608089015260a060018316600081146158fe576001811461591a5761594a565b60ff19841660a08b015260a083151560051b8b0101945061594a565b85600052602060002060005b848110156159415781548c8201850152908801908901615926565b8b0160a0019550505b50929998505050505050505050565b602081016005831061596d5761596d6142c9565b91905290565b60ff81811683821602908116908181146153c7576153c7615390565b600060a0820160ff88168352602087602085015260a0604085015281875480845260c086019150886000526020600020935060005b818110156159e95784546001600160a01b0316835260019485019492840192016159c4565b505084810360608601526159fd8188614bab565b935050505060ff831660808301529695505050505050565b600067ffffffffffffffff808616835280851660208401525060606040830152614c5c6060830184613ee4565b82815260406020820152600061368a6040830184613ee4565b67ffffffffffffffff8481168252831660208201526060810161368a60408301846142df565b615a8b81846142df565b60406020820152600061368a6040830184613ee4565b600060208284031215615ab357600080fd5b8151613d82816141be565b6020815260008251610100806020850152615add610120850183613ee4565b91506020850151615afa604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615b3460a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615b518483613ee4565b935060c08701519150808685030160e0870152615b6e8483613ee4565b935060e0870151915080868503018387015250615b8b8382613ee4565b9695505050505050565b600060208284031215615ba757600080fd5b5051919050565b600060ff821660ff8103615bc457615bc4615390565b60010192915050565b848152600067ffffffffffffffff808616602084015280851660408401525060806060830152615b8b6080830184613ee4565b86815260c060208201526000615c1960c0830188613ee4565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615cea57601f19868403018952815160808151818652615c9682870182613ee4565b9150508582015185820387870152615cae8282613ee4565b91505060408083015186830382880152615cc88382613ee4565b6060948501519790940196909652505098840198925090830190600101615c70565b5090979650505050505050565b602081526000610c486020830184615c53565b60008282518085526020808601955060208260051b8401016020860160005b84811015615cea57601f19868403018952615d45838351613ee4565b98840198925090830190600101615d29565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615dbf610180850183613ee4565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615dfc8483613ee4565b935060608801519150615e1b6101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615e428282615c53565b9150508281036020840152614c5c8185615d0a565b6000815160208301516001600160e01b031980821693506004831015615e875780818460040360031b1b83161693505b50505091905056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006b6b38038062006b6b8339810160408190526200003591620008e2565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003fc565b50505062000c57565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60a08101516001600160a01b03161580620002c8575080516001600160a01b0316155b15620002e7576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b0319908116928e1692909217905560a0808e01805160068054909416908f161790925586519a8b5297518716988a0198909852925185169388019390935251909216958501959095525185169383019390935251909216908201527f0da37fd00459f4f5f0b8210d31525e4910ae674b8bab34b561d146bb45773a4c9060c00160405180910390a150565b60005b81518110156200064e57600082828151811062000420576200042062000a20565b60200260200101519050600081600001519050806001600160401b03166000036200045e5760405163c656089560e01b815260040160405180910390fd5b6001600160401b03811660009081526007602052604081206001810180549192916200048a9062000a36565b80601f0160208091040260200160405190810160405280929190818152602001828054620004b89062000a36565b8015620005095780601f10620004dd5761010080835404028352916020019162000509565b820191906000526020600020905b815481529060010190602001808311620004eb57829003601f168201915b505050505090506000846040015190508151600003620005ac57805160000362000546576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000556828262000ac7565b508254610100600160481b0319166101001783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005e7565b8080519060200120828051906020012014620005e75760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b6020850151835460ff19169015151783556040516001600160401b038516907f4f49973170c548fddd4a48341b75e131818913f38f44d47af57e8735eee588ba906200063590869062000b93565b60405180910390a25050505050806001019050620003ff565b5050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156200068d576200068d62000652565b60405290565b604051608081016001600160401b03811182821017156200068d576200068d62000652565b60405160c081016001600160401b03811182821017156200068d576200068d62000652565b604051601f8201601f191681016001600160401b038111828210171562000708576200070862000652565b604052919050565b80516001600160401b03811681146200072857600080fd5b919050565b80516001600160a01b03811681146200072857600080fd5b805163ffffffff811681146200072857600080fd5b6000601f83601f8401126200076e57600080fd5b825160206001600160401b03808311156200078d576200078d62000652565b8260051b6200079e838201620006dd565b9384528681018301938381019089861115620007b957600080fd5b84890192505b85831015620008d557825184811115620007d95760008081fd5b89016060601f19828d038101821315620007f35760008081fd5b620007fd62000668565b6200080a89850162000710565b81526040808501518015158114620008225760008081fd5b828b01529284015192888411156200083a5760008081fd5b83850194508e603f8601126200085257600093508384fd5b898501519350888411156200086b576200086b62000652565b6200087c8a848e87011601620006dd565b92508383528e81858701011115620008945760008081fd5b60005b84811015620008b4578581018201518482018c01528a0162000897565b5060009383018a0193909352918201528352509184019190840190620007bf565b9998505050505050505050565b6000806000838503610160811215620008fa57600080fd5b60808112156200090957600080fd5b6200091362000693565b6200091e8662000710565b81526200092e602087016200072d565b602082015262000941604087016200072d565b604082015262000954606087016200072d565b6060820152935060c0607f19820112156200096e57600080fd5b5062000979620006b8565b62000987608086016200072d565b81526200099760a0860162000745565b6020820152620009aa60c0860162000745565b6040820152620009bd60e0860162000745565b6060820152620009d161010086016200072d565b6080820152620009e561012086016200072d565b60a08201526101408501519092506001600160401b0381111562000a0857600080fd5b62000a16868287016200075a565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4b57607f821691505b60208210810362000a6c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ac2576000816000526020600020601f850160051c8101602086101562000a9d5750805b601f850160051c820191505b8181101562000abe5782815560010162000aa9565b5050505b505050565b81516001600160401b0381111562000ae35762000ae362000652565b62000afb8162000af4845462000a36565b8462000a72565b602080601f83116001811462000b33576000841562000b1a5750858301515b600019600386901b1c1916600185901b17855562000abe565b600085815260208120601f198616915b8281101562000b645788860151825594840194600190910190840162000b43565b508582101562000b835787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252825460ff811615158383015260081c6001600160401b0316604083015260608083015260018084018054600093929190849062000bd58162000a36565b80608089015260a0600183166000811462000bf9576001811462000c165762000c48565b60ff19841660a08b015260a083151560051b8b0101945062000c48565b85600052602060002060005b8481101562000c3f5781548c820185015290880190890162000c22565b8b0160a0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ea562000cc66000396000818161023e0152612c1601526000818161020f0152612f000152600081816101e00152818161140401526114bb0152600081816101b0015261278a015260008181611c680152611cb40152615ea56000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063d2a15d351161008c578063f2fde38b11610066578063f2fde38b146105b1578063f716f99f146105c4578063ff888fb1146105d757600080fd5b8063d2a15d351461056b578063e9d68a8e1461057e578063ece670b61461059e57600080fd5b8063a12a9870116100bd578063a12a9870146104f3578063c673e58414610506578063ccd37ba31461052657600080fd5b806385572ffb146104ca5780638da5cb5b146104d857600080fd5b8063403b2d631161012f5780637437ff9f116101145780637437ff9f1461038557806379ba5097146104af5780637d4eef60146104b757600080fd5b8063403b2d63146103525780635e36480c1461036557600080fd5b80632d04ab76116101605780632d04ab761461030e578063311cd513146103235780633f4b04aa1461033657600080fd5b806306285c691461017c578063181f5a77146102c5575b600080fd5b61026e60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102bc9190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103016040518060400160405280601d81526020017f45564d3245564d4d756c74694f666652616d7020312e362e302d64657600000081525081565b6040516102bc9190613f19565b61032161031c366004613fc4565b6105fa565b005b610321610331366004614077565b6109c0565b600a5460405167ffffffffffffffff90911681526020016102bc565b610321610360366004614200565b610a29565b61037861037336600461429f565b610a3d565b6040516102bc91906142fc565b6104466040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526004546001600160a01b03808216835263ffffffff7401000000000000000000000000000000000000000083048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b90910490921660608201526005548216608082015260065490911660a082015290565b6040516102bc9190600060c0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401528060a08501511660a08401525092915050565b610321610a93565b6103216104c5366004614900565b610b51565b610321610177366004614a2b565b6000546040516001600160a01b0390911681526020016102bc565b610321610501366004614a7f565b610cf6565b610519610514366004614b99565b610d07565b6040516102bc9190614bf9565b61055d610534366004614c6e565b67ffffffffffffffff919091166000908152600960209081526040808320938352929052205490565b6040519081526020016102bc565b610321610579366004614c98565b610e65565b61059161058c366004614d0d565b610f1f565b6040516102bc9190614d28565b6103216105ac366004614d63565b611008565b6103216105bf366004614dc7565b61135b565b6103216105d2366004614e4c565b61136c565b6105ea6105e5366004614f8a565b6113ae565b60405190151581526020016102bc565b600061060887890189615113565b8051515190915015158061062157508051602001515115155b1561072157600a5460208a01359067ffffffffffffffff808316911610156106e057600a805467ffffffffffffffff191667ffffffffffffffff831617905560065482516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633937306f916106a991600401615351565b600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b5050505061071f565b81602001515160000361071f576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610909576000826020015182815181106107495761074961527e565b602002602001015190506000816000015190506107658161146f565b600061077082611571565b602084015151815491925067ffffffffffffffff908116610100909204161415806107b2575060208084015190810151905167ffffffffffffffff9182169116115b156107fb57825160208401516040517feefb0cac0000000000000000000000000000000000000000000000000000000081526107f2929190600401615364565b60405180910390fd5b604083015180610837576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff166000908152600960209081526040808320848452909152902054156108aa5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602481018290526044016107f2565b60208085015101516108bd9060016153af565b825468ffffffffffffffff00191661010067ffffffffffffffff928316021790925592511660009081526009602090815260408083209483529390529190912042905550600101610724565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d8160405161093991906153d7565b60405180910390a16109b560008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506115d1915050565b505050505050505050565b610a006109cf82840184615474565b60408051600080825260208201909252906109fa565b60608152602001906001900390816109e55790505b50611948565b604080516000808252602082019092529050610a236001858585858660006115d1565b50505050565b610a316119f8565b610a3a81611a54565b50565b6000610a4b600160046154a9565b6002610a586080856154d2565b67ffffffffffffffff16610a6c91906154f9565b610a768585611c1e565b901c166003811115610a8a57610a8a6142d2565b90505b92915050565b6001546001600160a01b03163314610aed5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107f2565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b59611c65565b815181518114610b95576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ce6576000848281518110610bb457610bb461527e565b60200260200101519050600081602001515190506000858481518110610bdc57610bdc61527e565b6020026020010151905080518214610c20576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82811015610cd7576000828281518110610c3f57610c3f61527e565b6020026020010151905080600014158015610c7a575084602001518281518110610c6b57610c6b61527e565b60200260200101516080015181105b15610cce5784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064016107f2565b50600101610c23565b50505050806001019050610b98565b50610cf18383611948565b505050565b610cfe6119f8565b610a3a81611ce6565b610d4a6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610df357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dd5575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e5557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e37575b5050505050815250509050919050565b610e6d6119f8565b60005b81811015610cf1576000838383818110610e8c57610e8c61527e565b905060400201803603810190610ea29190615510565b9050610eb181602001516113ae565b610f1657805167ffffffffffffffff1660009081526009602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b50600101610e70565b60408051606080820183526000808352602080840182905283850183905267ffffffffffffffff8681168352600782529185902085519384018652805460ff811615158552610100900490921690830152600181018054939492939192840191610f8890615549565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb490615549565b8015610e555780601f10610fd657610100808354040283529160200191610e55565b820191906000526020600020905b815481529060010190602001808311610fe457505050919092525091949350505050565b333014611041576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516000808252602082019092528161107e565b60408051808201909152600080825260208201528152602001906001900390816110575790505b5060a084015151909150156110b1576110ae8360a001518460200151856060015186600001516020015186611f72565b90505b6040805160a0810182528451518152845160209081015167ffffffffffffffff16818301528086015183516000948401926110ed929101613f19565b60408051601f19818403018152918152908252868101516020830152018390526005549091506001600160a01b031680156111fa576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a190611167908590600401615625565b600060405180830381600087803b15801561118157600080fd5b505af1925050508015611192575060015b6111fa573d8080156111c0576040519150601f19603f3d011682016040523d82523d6000602084013e6111c5565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107f29190613f19565b60408501515115801561120f57506080850151155b80611226575060608501516001600160a01b03163b155b8061126657506060850151611264906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000612050565b155b15611272575050505050565b60048054608087015160608801516040517f3cf9798300000000000000000000000000000000000000000000000000000000815260009485946001600160a01b031693633cf97983936112cd938a9361138893929101615638565b6000604051808303816000875af11580156112ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113149190810190615674565b50915091508161135257806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107f29190613f19565b50505050505050565b6113636119f8565b610a3a8161206c565b6113746119f8565b60005b81518110156113aa576113a28282815181106113955761139561527e565b6020026020010151612122565b600101611377565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d919061570a565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152e919061570a565b15610a3a576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016107f2565b67ffffffffffffffff81166000908152600760205260408120805460ff16610a8d576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016107f2565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906116308760a4615727565b90508260600151156116785784516116499060206154f9565b86516116569060206154f9565b6116619060a0615727565b61166b9190615727565b6116759082615727565b90505b3681146116ba576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016107f2565b50815181146117025781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016107f2565b61170a611c65565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611758576117586142d2565b6002811115611769576117696142d2565b9052509050600281602001516002811115611786576117866142d2565b1480156117da5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff16815481106117c2576117c261527e565b6000918252602090912001546001600160a01b031633145b611810576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508160600151156118f257602082015161182b90600161573a565b60ff16855114611867576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83518551146118a2576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600087876040516118b4929190615753565b6040519081900381206118cb918b90602001615763565b6040516020818303038152906040528051906020012090506118f08a82888888612466565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611982576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b84518110156119f1576119e98582815181106119b7576119b761527e565b6020026020010151846119e3578583815181106119d6576119d661527e565b602002602001015161267d565b8361267d565b600101611999565b5050505050565b6000546001600160a01b03163314611a525760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107f2565b565b60a08101516001600160a01b03161580611a76575080516001600160a01b0316155b15611aad576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a177401000000000000000000000000000000000000000063ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff19908116928e1692909217905560a0808e01805160068054909416908f161790925586519a8b5297518716988a0198909852925185169388019390935251909216958501959095525185169383019390935251909216908201527f0da37fd00459f4f5f0b8210d31525e4910ae674b8bab34b561d146bb45773a4c9060c00160405180910390a150565b67ffffffffffffffff8216600090815260086020526040812081611c43608085615777565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b467f000000000000000000000000000000000000000000000000000000000000000014611a52576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107f2565b60005b81518110156113aa576000828281518110611d0657611d0661527e565b602002602001015190506000816000015190508067ffffffffffffffff16600003611d5d576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600760205260408120600181018054919291611d8890615549565b80601f0160208091040260200160405190810160405280929190818152602001828054611db490615549565b8015611e015780601f10611dd657610100808354040283529160200191611e01565b820191906000526020600020905b815481529060010190602001808311611de457829003601f168201915b505050505090506000846040015190508151600003611eba578051600003611e55576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301611e6382826157e6565b50825468ffffffffffffffff00191661010017835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611f0d565b8080519060200120828051906020012014611f0d576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016107f2565b6020850151835460ff191690151517835560405167ffffffffffffffff8516907f4f49973170c548fddd4a48341b75e131818913f38f44d47af57e8735eee588ba90611f5a9086906158a6565b60405180910390a25050505050806001019050611ce9565b6060855167ffffffffffffffff811115611f8e57611f8e6140cb565b604051908082528060200260200182016040528015611fd357816020015b6040805180820190915260008082526020820152815260200190600190039081611fac5790505b50905060005b865181101561204657612021878281518110611ff757611ff761527e565b60200260200101518787878786815181106120145761201461527e565b6020026020010151612e9f565b8282815181106120335761203361527e565b6020908102919091010152600101611fd9565b5095945050505050565b600061205b83613230565b8015610a8a5750610a8a838361327c565b336001600160a01b038216036120c45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107f2565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361214d576000604051631b3fab5160e11b81526004016107f29190615962565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121ba57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff90921691909117905561220f565b6060840151600182015460ff620100009091041615159015151461220f576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016107f2565b60a08401518051601f60ff8216111561223e576001604051631b3fab5160e11b81526004016107f29190615962565b6122a4858560030180548060200260200160405190810160405280929190818152602001828054801561229a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227c575b505050505061331e565b8560600151156123d357612312858560020180548060200260200160405190810160405280929190818152602001828054801561229a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227c57505050505061331e565b6080860151805161232c9060028701906020840190613e27565b5080516001850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f101561238c576002604051631b3fab5160e11b81526004016107f29190615962565b604088015161239c90600361597c565b60ff168160ff16116123c4576003604051631b3fab5160e11b81526004016107f29190615962565b6123d087836001613387565b50505b6123df85836002613387565b81516123f49060038601906020850190613e27565b5060408681015160018501805460ff191660ff8316179055875180865560a089015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361244d938a939260028b01929190615998565b60405180910390a161245e85613507565b505050505050565b61246e613e95565b835160005b818110156126735760006001888684602081106124925761249261527e565b61249f91901a601b61573a565b8985815181106124b1576124b161527e565b60200260200101518986815181106124cb576124cb61527e565b602002602001015160405160008152602001604052604051612509949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561252b573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561258c5761258c6142d2565b600281111561259d5761259d6142d2565b90525090506001816020015160028111156125ba576125ba6142d2565b146125f1576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051859060ff16601f81106126085761260861527e565b602002015115612644576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600185826000015160ff16601f811061265f5761265f61527e565b911515602090920201525050600101612473565b5050505050505050565b81516126888161146f565b600061269382611571565b60208501515190915060008190036126d6576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460400151518114612714576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561272f5761272f6140cb565b604051908082528060200260200182016040528015612758578160200160208202803683370190505b50905060005b828110156128cd5760008760200151828151811061277e5761277e61527e565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461281157805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107f2565b6128a78186600101805461282490615549565b80601f016020809104026020016040519081016040528092919081815260200182805461285090615549565b801561289d5780601f106128725761010080835404028352916020019161289d565b820191906000526020600020905b81548152906001019060200180831161288057829003601f168201915b5050505050613523565b8383815181106128b9576128b961527e565b60209081029190910101525060010161275e565b5060006128e4858389606001518a60800151613645565b90508060000361292c576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016107f2565b8551151560005b848110156109b5576000896020015182815181106129535761295361527e565b60200260200101519050600061297189836000015160600151610a3d565b90506002816003811115612987576129876142d2565b036129de578151606001516040805167ffffffffffffffff808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a15050612e97565b60008160038111156129f2576129f26142d2565b1480612a0f57506003816003811115612a0d57612a0d6142d2565b145b612a60578151606001516040517f25507e7f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808c16600483015290911660248201526044016107f2565b8315612b415760045460009074010000000000000000000000000000000000000000900463ffffffff16612a9487426154a9565b1190508080612ab457506003826003811115612ab257612ab26142d2565b145b612af6576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b1660048201526024016107f2565b8a8481518110612b0857612b0861527e565b6020026020010151600014612b3b578a8481518110612b2957612b2961527e565b60200260200101518360800181815250505b50612ba7565b6000816003811115612b5557612b556142d2565b14612ba7578151606001516040517f3ef2a99c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808c16600483015290911660248201526044016107f2565b81516080015167ffffffffffffffff1615801590612bd657506000816003811115612bd457612bd46142d2565b145b15612c9b5781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612c4d928e929190600401615a1e565b6020604051808303816000875af1158015612c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c90919061570a565b612c9b575050612e97565b60008b604001518481518110612cb357612cb361527e565b6020026020010151905080518360a001515114612d17578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808d16600483015290911660248201526044016107f2565b612d2b8a846000015160600151600161369b565b600080612d388584613743565b91509150612d4f8c8660000151606001518461369b565b868015612d6d57506003826003811115612d6b57612d6b6142d2565b145b8015612d8b57506000846003811115612d8857612d886142d2565b14155b15612dc8578451516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526107f291908390600401615a4b565b6003826003811115612ddc57612ddc6142d2565b14158015612dfc57506002826003811115612df957612df96142d2565b14155b15612e3d578451606001516040517f926c5a3e0000000000000000000000000000000000000000000000000000000081526107f2918e918590600401615a64565b8451805160609091015160405167ffffffffffffffff918216918f16907f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df290612e899087908790615a8a565b60405180910390a450505050505b600101612933565b60408051808201909152600080825260208201526000612ec2876020015161398b565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b9190615aaa565b90506001600160a01b0381161580612fb35750612fb16001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000612050565b155b15612ff5576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016107f2565b6000806130c4633907753760e01b6040518061010001604052808c81526020018a67ffffffffffffffff1681526020018b6001600160a01b031681526020018d606001518152602001876001600160a01b031681526020018d6000015181526020018d604001518152602001898152506040516024016130759190615ac7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600454859063ffffffff600160e01b9091041661138860846139cd565b5091509150816130e9578060405163e1cd550960e01b81526004016107f29190613f19565b80516020146131315780516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016107f2565b6000818060200190518101906131479190615b9e565b604080516001600160a01b038c16602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167fa9059cbb000000000000000000000000000000000000000000000000000000001790526004549192506131df9187907801000000000000000000000000000000000000000000000000900463ffffffff1661138860846139cd565b50909350915082613205578160405163e1cd550960e01b81526004016107f29190613f19565b604080518082019091526001600160a01b039095168552602085015250919250505095945050505050565b600061325c827f01ffc9a70000000000000000000000000000000000000000000000000000000061327c565b8015610a8d5750613275826001600160e01b031961327c565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613307575060208210155b80156133135750600081115b979650505050505050565b60005b8151811015610cf15760ff8316600090815260036020526040812083519091908490849081106133535761335361527e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613321565b60005b82518160ff161015610a23576000838260ff16815181106133ad576133ad61527e565b60200260200101519050600060028111156133ca576133ca6142d2565b60ff80871660009081526003602090815260408083206001600160a01b03871684529091529020546101009004166002811115613409576134096142d2565b1461342a576004604051631b3fab5160e11b81526004016107f29190615962565b6001600160a01b03811661346a576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff168152602001846002811115613490576134906142d2565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134ed576134ed6142d2565b0217905550905050508061350090615bb7565b905061338a565b60ff8116610a3a57600a805467ffffffffffffffff1916905550565b815160208082015160409283015192516000938493613569937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615bd6565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135b29794969395929491939101615c09565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016135e99190615d00565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b600080613653858585613af3565b905061365e816113ae565b61366c576000915050613693565b67ffffffffffffffff86166000908152600960209081526040808320938352929052205490505b949350505050565b600060026136aa6080856154d2565b67ffffffffffffffff166136be91906154f9565b905060006136cc8585611c1e565b9050816136db600160046154a9565b901b1916818360038111156136f2576136f26142d2565b67ffffffffffffffff871660009081526008602052604081209190921b92909217918291613721608088615777565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fece670b6000000000000000000000000000000000000000000000000000000008152600090606090309063ece670b6906137879087908790600401615d60565b600060405180830381600087803b1580156137a157600080fd5b505af19250505080156137b2575060015b61396f573d8080156137e0576040519150601f19603f3d011682016040523d82523d6000602084013e6137e5565b606091505b5060006137f182615e60565b90507f0a8d6e8c000000000000000000000000000000000000000000000000000000006001600160e01b03198216148061383b575063e1cd550960e01b6001600160e01b03198216145b80613856575063046b337b60e51b6001600160e01b03198216145b8061388a57507f78ef8024000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b806138be57507f0c3b563c000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b806138f257507fae9b4ce9000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b8061392657507f09c25325000000000000000000000000000000000000000000000000000000006001600160e01b03198216145b156139375750600392509050613984565b8551516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526107f291908490600401615a4b565b50506040805160208101909152600081526002905b9250929050565b600081516020146139b1578160405163046b337b60e51b81526004016107f29190613f19565b610a8d828060200190518101906139c89190615b9e565b613d92565b6000606060008361ffff1667ffffffffffffffff8111156139f0576139f06140cb565b6040519080825280601f01601f191660200182016040528015613a1a576020820181803683370190505b509150863b613a4d577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613a80577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613ab9577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613adc5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b34576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b4857506101018111155b613b65576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613b8f576040516309bde33960e01b815260040160405180910390fd5b80600003613bbc5786600081518110613baa57613baa61527e565b60200260200101519350505050613d8b565b60008167ffffffffffffffff811115613bd757613bd76140cb565b604051908082528060200260200182016040528015613c00578160200160208202803683370190505b50905060008080805b85811015613d2a5760006001821b8b811603613c645788851015613c4d578c5160018601958e918110613c3e57613c3e61527e565b60200260200101519050613c86565b8551600185019487918110613c3e57613c3e61527e565b8b5160018401938d918110613c7b57613c7b61527e565b602002602001015190505b600089861015613cb6578d5160018701968f918110613ca757613ca761527e565b60200260200101519050613cd8565b8651600186019588918110613ccd57613ccd61527e565b602002602001015190505b82851115613cf9576040516309bde33960e01b815260040160405180910390fd5b613d038282613de6565b878481518110613d1557613d1561527e565b60209081029190910101525050600101613c09565b506001850382148015613d3c57508683145b8015613d4757508581145b613d64576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613d7957613d7961527e565b60200260200101519750505050505050505b9392505050565b60006001600160a01b03821180613daa575061040082105b15613de25760408051602081018490520160408051601f198184030181529082905263046b337b60e51b82526107f291600401613f19565b5090565b6000818310613dfe57613df98284613e04565b610a8a565b610a8a83835b604080516001602082015290810183905260608101829052600090608001613627565b828054828255906000526020600020908101928215613e89579160200282015b82811115613e89578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e47565b50613de2929150613eb4565b604051806103e00160405280601f906020820280368337509192915050565b5b80821115613de25760008155600101613eb5565b60005b83811015613ee4578181015183820152602001613ecc565b50506000910152565b60008151808452613f05816020860160208601613ec9565b601f01601f19169290920160200192915050565b602081526000610a8a6020830184613eed565b8060608101831015610a8d57600080fd5b60008083601f840112613f4f57600080fd5b50813567ffffffffffffffff811115613f6757600080fd5b60208301915083602082850101111561398457600080fd5b60008083601f840112613f9157600080fd5b50813567ffffffffffffffff811115613fa957600080fd5b6020830191508360208260051b850101111561398457600080fd5b60008060008060008060008060e0898b031215613fe057600080fd5b613fea8a8a613f2c565b9750606089013567ffffffffffffffff8082111561400757600080fd5b6140138c838d01613f3d565b909950975060808b013591508082111561402c57600080fd5b6140388c838d01613f7f565b909750955060a08b013591508082111561405157600080fd5b5061405e8b828c01613f7f565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561408c57600080fd5b6140968585613f2c565b9250606084013567ffffffffffffffff8111156140b257600080fd5b6140be86828701613f3d565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715614104576141046140cb565b60405290565b60405160a0810167ffffffffffffffff81118282101715614104576141046140cb565b6040516080810167ffffffffffffffff81118282101715614104576141046140cb565b6040516060810167ffffffffffffffff81118282101715614104576141046140cb565b6040805190810167ffffffffffffffff81118282101715614104576141046140cb565b604051601f8201601f1916810167ffffffffffffffff811182821017156141bf576141bf6140cb565b604052919050565b6001600160a01b0381168114610a3a57600080fd5b80356141e7816141c7565b919050565b803563ffffffff811681146141e757600080fd5b600060c0828403121561421257600080fd5b61421a6140e1565b8235614225816141c7565b8152614233602084016141ec565b6020820152614244604084016141ec565b6040820152614255606084016141ec565b60608201526080830135614268816141c7565b608082015260a083013561427b816141c7565b60a08201529392505050565b803567ffffffffffffffff811681146141e757600080fd5b600080604083850312156142b257600080fd5b6142bb83614287565b91506142c960208401614287565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106142f8576142f86142d2565b9052565b60208101610a8d82846142e8565b600067ffffffffffffffff821115614324576143246140cb565b5060051b60200190565b600060a0828403121561434057600080fd5b61434861410a565b90508135815261435a60208301614287565b602082015261436b60408301614287565b604082015261437c60608301614287565b606082015261438d60808301614287565b608082015292915050565b600067ffffffffffffffff8211156143b2576143b26140cb565b50601f01601f191660200190565b600082601f8301126143d157600080fd5b81356143e46143df82614398565b614196565b8181528460208386010111156143f957600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261442757600080fd5b813560206144376143df8361430a565b82815260059290921b8401810191818101908684111561445657600080fd5b8286015b8481101561452c57803567ffffffffffffffff8082111561447b5760008081fd5b8189019150608080601f19848d030112156144965760008081fd5b61449e61412d565b87840135838111156144b05760008081fd5b6144be8d8a838801016143c0565b825250604080850135848111156144d55760008081fd5b6144e38e8b838901016143c0565b8a84015250606080860135858111156144fc5760008081fd5b61450a8f8c838a01016143c0565b928401929092529490920135938101939093525050835291830191830161445a565b509695505050505050565b6000610140828403121561454a57600080fd5b6145526140e1565b905061455e838361432e565b815260a082013567ffffffffffffffff8082111561457b57600080fd5b614587858386016143c0565b602084015260c08401359150808211156145a057600080fd5b6145ac858386016143c0565b60408401526145bd60e085016141dc565b606084015261010084013560808401526101208401359150808211156145e257600080fd5b506145ef84828501614416565b60a08301525092915050565b600082601f83011261460c57600080fd5b8135602061461c6143df8361430a565b82815260059290921b8401810191818101908684111561463b57600080fd5b8286015b8481101561452c57803567ffffffffffffffff81111561465f5760008081fd5b61466d8986838b0101614537565b84525091830191830161463f565b600082601f83011261468c57600080fd5b8135602061469c6143df8361430a565b82815260059290921b840181019181810190868411156146bb57600080fd5b8286015b8481101561452c57803567ffffffffffffffff8111156146df5760008081fd5b6146ed8986838b01016143c0565b8452509183019183016146bf565b600082601f83011261470c57600080fd5b8135602061471c6143df8361430a565b82815260059290921b8401810191818101908684111561473b57600080fd5b8286015b8481101561452c57803567ffffffffffffffff81111561475f5760008081fd5b61476d8986838b010161467b565b84525091830191830161473f565b600082601f83011261478c57600080fd5b8135602061479c6143df8361430a565b8083825260208201915060208460051b8701019350868411156147be57600080fd5b602086015b8481101561452c57803583529183019183016147c3565b600082601f8301126147eb57600080fd5b813560206147fb6143df8361430a565b82815260059290921b8401810191818101908684111561481a57600080fd5b8286015b8481101561452c57803567ffffffffffffffff8082111561483f5760008081fd5b818901915060a080601f19848d0301121561485a5760008081fd5b61486261410a565b61486d888501614287565b8152604080850135848111156148835760008081fd5b6148918e8b838901016145fb565b8a84015250606080860135858111156148aa5760008081fd5b6148b88f8c838a01016146fb565b83850152506080915081860135858111156148d35760008081fd5b6148e18f8c838a010161477b565b918401919091525091909301359083015250835291830191830161481e565b600080604080848603121561491457600080fd5b833567ffffffffffffffff8082111561492c57600080fd5b614938878388016147da565b945060209150818601358181111561494f57600080fd5b8601601f8101881361496057600080fd5b803561496e6143df8261430a565b81815260059190911b8201840190848101908a83111561498d57600080fd5b8584015b83811015614a19578035868111156149a95760008081fd5b8501603f81018d136149bb5760008081fd5b878101356149cb6143df8261430a565b81815260059190911b82018a0190898101908f8311156149eb5760008081fd5b928b01925b82841015614a095783358252928a0192908a01906149f0565b8652505050918601918601614991565b50809750505050505050509250929050565b600060208284031215614a3d57600080fd5b813567ffffffffffffffff811115614a5457600080fd5b820160a08185031215613d8b57600080fd5b8015158114610a3a57600080fd5b80356141e781614a66565b60006020808385031215614a9257600080fd5b823567ffffffffffffffff80821115614aaa57600080fd5b818501915085601f830112614abe57600080fd5b8135614acc6143df8261430a565b81815260059190911b83018401908481019088831115614aeb57600080fd5b8585015b83811015614b7b57803585811115614b075760008081fd5b86016060818c03601f1901811315614b1f5760008081fd5b614b27614150565b614b328a8401614287565b8152604080840135614b4381614a66565b828c0152918301359188831115614b5a5760008081fd5b614b688e8c858701016143c0565b9082015285525050918601918601614aef565b5098975050505050505050565b803560ff811681146141e757600080fd5b600060208284031215614bab57600080fd5b610a8a82614b88565b60008151808452602080850194506020840160005b83811015614bee5781516001600160a01b031687529582019590820190600101614bc9565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c4860e0840182614bb4565b90506040840151601f198483030160c0850152614c658282614bb4565b95945050505050565b60008060408385031215614c8157600080fd5b614c8a83614287565b946020939093013593505050565b60008060208385031215614cab57600080fd5b823567ffffffffffffffff80821115614cc357600080fd5b818501915085601f830112614cd757600080fd5b813581811115614ce657600080fd5b8660208260061b8501011115614cfb57600080fd5b60209290920196919550909350505050565b600060208284031215614d1f57600080fd5b610a8a82614287565b6020815281511515602082015267ffffffffffffffff6020830151166040820152600060408301516060808401526136936080840182613eed565b60008060408385031215614d7657600080fd5b823567ffffffffffffffff80821115614d8e57600080fd5b614d9a86838701614537565b93506020850135915080821115614db057600080fd5b50614dbd8582860161467b565b9150509250929050565b600060208284031215614dd957600080fd5b8135613d8b816141c7565b600082601f830112614df557600080fd5b81356020614e056143df8361430a565b8083825260208201915060208460051b870101935086841115614e2757600080fd5b602086015b8481101561452c578035614e3f816141c7565b8352918301918301614e2c565b60006020808385031215614e5f57600080fd5b823567ffffffffffffffff80821115614e7757600080fd5b818501915085601f830112614e8b57600080fd5b8135614e996143df8261430a565b81815260059190911b83018401908481019088831115614eb857600080fd5b8585015b83811015614b7b57803585811115614ed357600080fd5b860160c0818c03601f19011215614eea5760008081fd5b614ef26140e1565b8882013581526040614f05818401614b88565b8a8301526060614f16818501614b88565b8284015260809150614f29828501614a74565b9083015260a08381013589811115614f415760008081fd5b614f4f8f8d83880101614de4565b838501525060c0840135915088821115614f695760008081fd5b614f778e8c84870101614de4565b9083015250845250918601918601614ebc565b600060208284031215614f9c57600080fd5b5035919050565b80356001600160e01b03811681146141e757600080fd5b600082601f830112614fcb57600080fd5b81356020614fdb6143df8361430a565b82815260069290921b84018101918181019086841115614ffa57600080fd5b8286015b8481101561452c57604081890312156150175760008081fd5b61501f614173565b61502882614287565b8152615035858301614fa3565b81860152835291830191604001614ffe565b600082601f83011261505857600080fd5b813560206150686143df8361430a565b82815260079290921b8401810191818101908684111561508757600080fd5b8286015b8481101561452c5780880360808112156150a55760008081fd5b6150ad614150565b6150b683614287565b8152604080601f19840112156150cc5760008081fd5b6150d4614173565b92506150e1878501614287565b83526150ee818501614287565b838801528187019290925260608301359181019190915283529183019160800161508b565b6000602080838503121561512657600080fd5b823567ffffffffffffffff8082111561513e57600080fd5b8185019150604080838803121561515457600080fd5b61515c614173565b83358381111561516b57600080fd5b84016040818a03121561517d57600080fd5b615185614173565b81358581111561519457600080fd5b8201601f81018b136151a557600080fd5b80356151b36143df8261430a565b81815260069190911b8201890190898101908d8311156151d257600080fd5b928a01925b828410156152225787848f0312156151ef5760008081fd5b6151f7614173565b8435615202816141c7565b815261520f858d01614fa3565b818d0152825292870192908a01906151d7565b84525050508187013593508484111561523a57600080fd5b6152468a858401614fba565b818801528252508385013591508282111561526057600080fd5b61526c88838601615047565b85820152809550505050505092915050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b818110156152eb57835180516001600160a01b031684528501516001600160e01b03168584015292840192918501916001016152b4565b50508583015187820388850152805180835290840192506000918401905b80831015615345578351805167ffffffffffffffff1683528501516001600160e01b031685830152928401926001929092019190850190615309565b50979650505050505050565b602081526000610a8a6020830184615294565b67ffffffffffffffff8316815260608101613d8b6020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153d0576153d0615399565b5092915050565b6000602080835260608451604080848701526153f66060870183615294565b87850151878203601f19016040890152805180835290860193506000918601905b80831015614b7b57845167ffffffffffffffff81511683528781015161545689850182805167ffffffffffffffff908116835260209182015116910152565b50840151828701529386019360019290920191608090910190615417565b60006020828403121561548657600080fd5b813567ffffffffffffffff81111561549d57600080fd5b613693848285016147da565b81810381811115610a8d57610a8d615399565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154ed576154ed6154bc565b92169190910692915050565b8082028115828204841417610a8d57610a8d615399565b60006040828403121561552257600080fd5b61552a614173565b61553383614287565b8152602083013560208201528091505092915050565b600181811c9082168061555d57607f821691505b60208210810361557d57634e487b7160e01b600052602260045260246000fd5b50919050565b805182526000602067ffffffffffffffff81840151168185015260408084015160a060408701526155b760a0870182613eed565b9050606085015186820360608801526155d08282613eed565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561534557835180516001600160a01b03168352860151868301529285019260019290920191908401906155f3565b602081526000610a8a6020830184615583565b60808152600061564b6080830187615583565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561568957600080fd5b835161569481614a66565b602085015190935067ffffffffffffffff8111156156b157600080fd5b8401601f810186136156c257600080fd5b80516156d06143df82614398565b8181528760208385010111156156e557600080fd5b6156f6826020830160208601613ec9565b809450505050604084015190509250925092565b60006020828403121561571c57600080fd5b8151613d8b81614a66565b80820180821115610a8d57610a8d615399565b60ff8181168382160190811115610a8d57610a8d615399565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff80841680615792576157926154bc565b92169190910492915050565b601f821115610cf1576000816000526020600020601f850160051c810160208610156157c75750805b601f850160051c820191505b8181101561245e578281556001016157d3565b815167ffffffffffffffff811115615800576158006140cb565b6158148161580e8454615549565b8461579e565b602080601f83116001811461584957600084156158315750858301515b600019600386901b1c1916600185901b17855561245e565b600085815260208120601f198616915b8281101561587857888601518255948401946001909101908401615859565b50858210156158965787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835460ff81161515602085015267ffffffffffffffff8160081c166040850152506001808501606080860152600081546158e681615549565b80608089015260a06001831660008114615907576001811461592357615953565b60ff19841660a08b015260a083151560051b8b01019450615953565b85600052602060002060005b8481101561594a5781548c820185015290880190890161592f565b8b0160a0019550505b50929998505050505050505050565b6020810160058310615976576159766142d2565b91905290565b60ff81811683821602908116908181146153d0576153d0615399565b600060a0820160ff88168352602087602085015260a0604085015281875480845260c086019150886000526020600020935060005b818110156159f25784546001600160a01b0316835260019485019492840192016159cd565b50508481036060860152615a068188614bb4565b935050505060ff831660808301529695505050505050565b600067ffffffffffffffff808616835280851660208401525060606040830152614c656060830184613eed565b8281526040602082015260006136936040830184613eed565b67ffffffffffffffff8481168252831660208201526060810161369360408301846142e8565b615a9481846142e8565b6040602082015260006136936040830184613eed565b600060208284031215615abc57600080fd5b8151613d8b816141c7565b6020815260008251610100806020850152615ae6610120850183613eed565b91506020850151615b03604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615b3d60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615b5a8483613eed565b935060c08701519150808685030160e0870152615b778483613eed565b935060e0870151915080868503018387015250615b948382613eed565b9695505050505050565b600060208284031215615bb057600080fd5b5051919050565b600060ff821660ff8103615bcd57615bcd615399565b60010192915050565b848152600067ffffffffffffffff808616602084015280851660408401525060806060830152615b946080830184613eed565b86815260c060208201526000615c2260c0830188613eed565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615cf357601f19868403018952815160808151818652615c9f82870182613eed565b9150508582015185820387870152615cb78282613eed565b91505060408083015186830382880152615cd18382613eed565b6060948501519790940196909652505098840198925090830190600101615c79565b5090979650505050505050565b602081526000610a8a6020830184615c5c565b60008282518085526020808601955060208260051b8401016020860160005b84811015615cf357601f19868403018952615d4e838351613eed565b98840198925090830190600101615d32565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615dc8610180850183613eed565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e058483613eed565b935060608801519150615e246101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615e4b8282615c5c565b9150508281036020840152614c658185615d13565b6000815160208301516001600160e01b031980821693506004831015615e905780818460040360031b1b83161693505b50505091905056fea164736f6c6343000818000a", } var EVM2EVMMultiOffRampABI = EVM2EVMMultiOffRampMetaData.ABI var EVM2EVMMultiOffRampBin = EVM2EVMMultiOffRampMetaData.Bin -func DeployEVM2EVMMultiOffRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig EVM2EVMMultiOffRampStaticConfig, sourceChainConfigs []EVM2EVMMultiOffRampSourceChainConfigArgs) (common.Address, *types.Transaction, *EVM2EVMMultiOffRamp, error) { +func DeployEVM2EVMMultiOffRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig EVM2EVMMultiOffRampStaticConfig, dynamicConfig EVM2EVMMultiOffRampDynamicConfig, sourceChainConfigs []EVM2EVMMultiOffRampSourceChainConfigArgs) (common.Address, *types.Transaction, *EVM2EVMMultiOffRamp, error) { parsed, err := EVM2EVMMultiOffRampMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -179,7 +179,7 @@ func DeployEVM2EVMMultiOffRamp(auth *bind.TransactOpts, backend bind.ContractBac return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EVM2EVMMultiOffRampBin), backend, staticConfig, sourceChainConfigs) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EVM2EVMMultiOffRampBin), backend, staticConfig, dynamicConfig, sourceChainConfigs) if err != nil { return common.Address{}, nil, nil, err } 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 b30bace8ea6..c107b9b066a 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 @@ -9,7 +9,7 @@ ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../ commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin ddc26c10c2a52b59624faae9005827b09b98db4566887a736005e8cc37cf8a51 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin ebd8aac686fa28a71d4212bcd25a28f8f640d50dce5e50498b2f6b8534890b69 ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de -evm_2_evm_multi_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.bin 2ab5cd4acb0c0b7087397d0c99e928119ef9e174bfd55628e6b2daf14f2da1fe +evm_2_evm_multi_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.bin 8e77a0d82e9b891a88843c7ac429c0074badd104f106986e7208375eb893cc4b evm_2_evm_multi_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.bin 85698e5c4c6cb10f4f969cc1740b9ff094c469530e0a763670cf388311f00619 evm_2_evm_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.bin b6132cb22370d62b1b20174bbe832ec87df61f6ab65f7fe2515733bdd10a30f5 evm_2_evm_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.bin 383e9930fbc1b7fbb6554cc8857229d207fd6742e87c7fb1a37002347e8de8e2 diff --git a/core/services/ocr3/plugins/ccip_integration_tests/helpers.go b/core/services/ocr3/plugins/ccip_integration_tests/helpers.go index 2a4e85560c9..8526c62b271 100644 --- a/core/services/ocr3/plugins/ccip_integration_tests/helpers.go +++ b/core/services/ocr3/plugins/ccip_integration_tests/helpers.go @@ -163,6 +163,10 @@ func createUniverses( TokenAdminRegistry: tokenAdminRegistry.Address(), NonceManager: nonceManager.Address(), }, + evm_2_evm_multi_offramp.EVM2EVMMultiOffRampDynamicConfig{ + Router: rout.Address(), + PriceRegistry: priceRegistry.Address(), + }, // Source chain configs will be set up later once we have all chains []evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs{}, ) From 1da6ea640d2c934b9410c3876154ca95dc52f868 Mon Sep 17 00:00:00 2001 From: Jean Arnaud Date: Mon, 15 Jul 2024 11:02:25 +0200 Subject: [PATCH 07/10] Cleanup http test servers (#1163) ## Motivation Test flakiness ## Solution Cleanup resources --- .../ocr2/plugins/ccip/testhelpers/integration/chainlink.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go b/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go index 11d46a17a77..6546d44d10b 100644 --- a/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go +++ b/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go @@ -561,10 +561,14 @@ func (c *CCIPIntegrationTestHarness) CreatePricesPipeline(t *testing.T) (string, _, err := w.Write([]byte(`{"UsdPerLink": "8000000000000000000"}`)) require.NoError(t, err) })) + t.Cleanup(linkUSD.Close) + ethUSD := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _, err := w.Write([]byte(`{"UsdPerETH": "1700000000000000000000"}`)) require.NoError(t, err) })) + t.Cleanup(ethUSD.Close) + sourceWrappedNative, err := c.Source.Router.GetWrappedNative(nil) require.NoError(t, err) destWrappedNative, err := c.Dest.Router.GetWrappedNative(nil) From 2cb3ffb418096d196df66add0efbe440ce6a09f3 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Mon, 15 Jul 2024 09:17:13 -0400 Subject: [PATCH 08/10] Update stale action to close PRs more aggressively. (#1194) --- .github/workflows/stale.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 8eb95f4147c..de7ef871b38 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,8 +1,5 @@ -# Workflow is triggered daily midnight UTC -# A PR with more than 60 days of inactivity will be marked as stale -# A PR that's stale for more than 7 days will be automatically closed -# Issues are exempt from auto marking as stale but issues with manually added 'stale' label are eligible for auto closure after 7 days. -# PRs with assignees are exempt from auto stale marking, it's the responsibility of the assignee to get the PR progressed either with review/merge or closure. +# Workflow to manage automatically closing stale pull requests and issues. +# See configuration for configuration. name: Manage stale Issues and PRs on: @@ -21,6 +18,8 @@ jobs: - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - exempt-all-pr-assignees: true - stale-pr-message: 'This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days.' days-before-issue-stale: -1 # disables marking issues as stale automatically. Issues can still be marked as stale manually, in which the closure policy applies. + stale-pr-message: 'This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 10 days.' + close-pr-message: 'This PR was closed because it has been stalled for 10 days with no activity.' + days-before-pr-stale: 45 + days-before-pr-close: 10 From 1b5ec8e5bd44cefc27dbd45f8b259741405a1824 Mon Sep 17 00:00:00 2001 From: Erik Burton Date: Mon, 15 Jul 2024 10:50:18 -0700 Subject: [PATCH 09/10] feat: gha cost reduction for ci-core (#1174) ## Motivation Reduce costs of CI-core while preserving reliability and speed. ## Solution https://github.com/smartcontractkit/chainlink/pull/13784 > ### Changes > * Set the runner type in the matrix for ci-core > * Downgrade the runners used for ci-core matrix > * core tests: 64 core -> 32 core > * Remove `short-tests` step due to it being re-run regardless (no caching) > * core race: 64 core -> 32 core > * 64 cores on overnight cron runs > * core fuzz: 64 core -> 8 core > >These runners were chosen for cost effectiveness, and reliability based on testing. > > ### Why > > Estimated 62% cost reduction per CI core run (7.04$ -> 2.64$), with a decrease in execution time. > > ``` > Cost estimation per run: > - 8 cores - 21 minutes = 0.336 (linting, clean, core_fuzz) > - 32 cores - 18 minutes = 2.304 (core_race, core_tests) > > 2.304 + 0.336 = 2.64$ (62.5% decrease) > ``` --- https://smartcontract-it.atlassian.net/browse/RE-2796 --- .github/workflows/ci-core.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index 3a552babf0f..053aa7a04d6 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -90,15 +90,19 @@ jobs: type: - cmd: go_core_tests id: core_unit + os: ubuntu22.04-32cores-128GB - cmd: go_core_race_tests id: core_race + # use 64cores for overnight runs only due to massive number of runs from PRs + os: ${{ github.event_name == 'schedule' && 'ubuntu-latest-64cores-256GB' || 'ubuntu-latest-32cores-128GB' }} - cmd: go_core_fuzz id: core_fuzz + os: ubuntu22.04-8cores-32GB name: Core Tests (${{ matrix.type.cmd }}) # We don't directly merge dependabot PRs, so let's not waste the resources if: github.actor != 'dependabot[bot]' needs: [filter] - runs-on: ubuntu-latest-64cores-256GB + runs-on: ${{ matrix.type.os }} steps: - name: Checkout the repo uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 @@ -113,9 +117,6 @@ jobs: - name: Setup Go if: ${{ needs.filter.outputs.changes == 'true' }} uses: ./.github/actions/setup-go - - name: Run short tests - if: ${{ needs.filter.outputs.changes == 'true' && matrix.type.cmd == 'go_core_tests' }} - run: go test -short ./... - name: Setup Solana if: ${{ needs.filter.outputs.changes == 'true' }} uses: ./.github/actions/setup-solana From 6876a78e5fcb5c455d31799ff9754ca4b0973ac8 Mon Sep 17 00:00:00 2001 From: Sishir Giri Date: Mon, 15 Jul 2024 12:00:45 -0700 Subject: [PATCH 10/10] Chore: Add zksync config (#1121) ## Motivation ## Solution --- .../config/toml/defaults/zkSync_Mainnet.toml | 26 ++++++++++---- .../config/toml/defaults/zkSync_Sepolia.toml | 26 ++++++++++---- docs/CONFIG.md | 36 +++++++++---------- 3 files changed, 58 insertions(+), 30 deletions(-) diff --git a/core/chains/evm/config/toml/defaults/zkSync_Mainnet.toml b/core/chains/evm/config/toml/defaults/zkSync_Mainnet.toml index 02ce2b0f18c..a434cd38153 100644 --- a/core/chains/evm/config/toml/defaults/zkSync_Mainnet.toml +++ b/core/chains/evm/config/toml/defaults/zkSync_Mainnet.toml @@ -1,14 +1,28 @@ ChainID = '324' ChainType = 'zksync' -FinalityDepth = 10 +# 1200block ~ 20min concurrent with the l1_committed tag +FinalityDepth = 1200 +# block rate is ~2-5sec, so this ensures blocks are polled correctly LogPollInterval = '5s' -MinIncomingConfirmations = 1 +# sufficient time for RPC to be labelled out of sync, since blockRate is pretty fast NoNewHeadsThreshold = '1m' [GasEstimator] -LimitDefault = 100_000_000 -PriceMax = 18446744073709551615 -PriceMin = 0 +# no EIP1559 to ensure our estimator doesnot estimate gas with MaxPriorityFee which will break minFunding requirement +EIP1559DynamicFees = false +# high LimitDefault for worst case pubdata bytes with BatchGasLimit reduced to 4M in OCR2Config +LimitDefault = 2_500_000_000 +FeeCapDefault = '500 mwei' +PriceDefault = '25 mwei' +# p999 value for gasPrice based on historical data +PriceMax = '500 mwei' +# avg gasPrices are at 0.025 gwei +PriceMin = '25 mwei' + +[GasEstimator.BlockHistory] +# increasing this to smooth out gas estimation +BlockHistorySize = 200 [HeadTracker] -HistoryDepth = 50 +# tracks top N blocks to keep in heads database table. Should store atleast the same # of blocks as finalityDepth +HistoryDepth = 1500 \ No newline at end of file diff --git a/core/chains/evm/config/toml/defaults/zkSync_Sepolia.toml b/core/chains/evm/config/toml/defaults/zkSync_Sepolia.toml index b4e957a6c99..f3bc594886a 100644 --- a/core/chains/evm/config/toml/defaults/zkSync_Sepolia.toml +++ b/core/chains/evm/config/toml/defaults/zkSync_Sepolia.toml @@ -1,14 +1,28 @@ ChainID = '300' ChainType = 'zksync' -FinalityDepth = 10 +# 200block ~ 20min concurrent with the l1_committed tag +FinalityDepth = 200 +# block rate is ~2-5sec, so this ensures blocks are polled correctly LogPollInterval = '5s' -MinIncomingConfirmations = 1 +# sufficient time for RPC to be labelled out of sync, since blockRate is pretty fast NoNewHeadsThreshold = '1m' [GasEstimator] -LimitDefault = 100_000_000 -PriceMax = 18446744073709551615 -PriceMin = 0 +# no EIP1559 to ensure our estimator doesnot estimate gas with MaxPriorityFee which will break minFunding requirement +EIP1559DynamicFees = false +# high LimitDefault for worst case pubdata bytes with BatchGasLimit reduced to 4M in OCR2Config +LimitDefault = 2_500_000_000 +FeeCapDefault = '500 mwei' +PriceDefault = '25 mwei' +# p999 value for gasPrice based on historical data +PriceMax = '500 mwei' +# avg gasPrices are at 0.025 gwei +PriceMin = '25 mwei' + +[GasEstimator.BlockHistory] +# increasing this to smooth out gas estimation +BlockHistorySize = 200 [HeadTracker] -HistoryDepth = 50 +# tracks top N blocks to keep in heads database table. Should store atleast the same # of blocks as finalityDepth +HistoryDepth = 250 \ No newline at end of file diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 03af3e44e67..d94edbd2d41 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -3631,14 +3631,14 @@ AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false ChainType = 'zksync' -FinalityDepth = 10 +FinalityDepth = 200 FinalityTagEnabled = false LogBackfillBatchSize = 1000 LogPollInterval = '5s' LogKeepBlocksDepth = 100000 LogPrunePageSize = 10000 BackupLogPollerBlockDelay = 100 -MinIncomingConfirmations = 1 +MinIncomingConfirmations = 3 MinContractPayment = '0.00001 link' NonceAutoSync = true NoNewHeadsThreshold = '1m0s' @@ -3662,10 +3662,10 @@ Enabled = true [GasEstimator] Mode = 'BlockHistory' -PriceDefault = '20 gwei' -PriceMax = '18.446744073709551615 ether' -PriceMin = '0' -LimitDefault = 100000000 +PriceDefault = '25 mwei' +PriceMax = '500 mwei' +PriceMin = '25 mwei' +LimitDefault = 2500000000 LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -3673,19 +3673,19 @@ BumpMin = '5 gwei' BumpPercent = 20 BumpThreshold = 3 EIP1559DynamicFees = false -FeeCapDefault = '100 gwei' +FeeCapDefault = '500 mwei' TipCapDefault = '1 wei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 8 +BlockHistorySize = 200 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 50 +HistoryDepth = 250 MaxBufferSize = 3 SamplingInterval = '1s' MaxAllowedFinalityDepth = 10000 @@ -3724,14 +3724,14 @@ AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false ChainType = 'zksync' -FinalityDepth = 10 +FinalityDepth = 1200 FinalityTagEnabled = false LogBackfillBatchSize = 1000 LogPollInterval = '5s' LogKeepBlocksDepth = 100000 LogPrunePageSize = 10000 BackupLogPollerBlockDelay = 100 -MinIncomingConfirmations = 1 +MinIncomingConfirmations = 3 MinContractPayment = '0.00001 link' NonceAutoSync = true NoNewHeadsThreshold = '1m0s' @@ -3755,10 +3755,10 @@ Enabled = true [GasEstimator] Mode = 'BlockHistory' -PriceDefault = '20 gwei' -PriceMax = '18.446744073709551615 ether' -PriceMin = '0' -LimitDefault = 100000000 +PriceDefault = '25 mwei' +PriceMax = '500 mwei' +PriceMin = '25 mwei' +LimitDefault = 2500000000 LimitMax = 8000000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -3766,19 +3766,19 @@ BumpMin = '5 gwei' BumpPercent = 20 BumpThreshold = 3 EIP1559DynamicFees = false -FeeCapDefault = '100 gwei' +FeeCapDefault = '500 mwei' TipCapDefault = '1 wei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 8 +BlockHistorySize = 200 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 50 +HistoryDepth = 1500 MaxBufferSize = 3 SamplingInterval = '1s' MaxAllowedFinalityDepth = 10000