chore(deploy): production deploy of intent contracts for new settlers - #2177
Merged
Merged
Conversation
Contributor
WalkthroughUpdated Katana gas configuration, LI.FI Intents whitelist addresses, and ChangesDeployment Registry Configuration
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…ntents-switchover-production
…r cuts Regenerated deployments/<net>.diamond.json from on-chain state on the 9 rolled-out chains now that the timelock diamondCut / registerPeripheryContract ops for LiFiIntentEscrowFacetV2 and ReceiverOIF have executed. Ref EXSC-736 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gvladika
marked this pull request as ready for review
August 6, 2026 12:01
gvladika
enabled auto-merge (squash)
August 6, 2026 12:02
melianessa
approved these changes
Aug 6, 2026
8 tasks
This was referenced Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Which Linear task belongs to this PR?
Ref EXSC-736
Why did I implement it this way?
LI.FI Intents switched to new settler contracts on 2026-08-06. Our two bindings to them —
LiFiIntentEscrowFacetV2.LIFI_INTENT_ESCROW_SETTLER_V2andReceiverOIF.OUTPUT_SETTLER— areimmutable, so repointing them is a redeploy, not a config write. This is the production half; the staging half is #2173, which this branch is stacked on (its commit shows in the diff until #2173 merges).Both contracts were deployed via CREATE3 and their
diamondCut/diamondUpdatePeripheryproposed to each chain'sLiFiTimelockControllerthrough the Safe. No Solidity changed, so there are no version bumps and no new audit is required — the upstreamopen(StandardOrder)ABI is unchanged apart from becomingpayable, which does not alter the selector and is irrelevant while the facet isnoNativeAsset.LiFiIntentEscrowFacetV2ReceiverOIF0x1B5c543CFe993ec1c89ad399E5433562A8CF4e050xe6ee2a573047598B2452a879F2188B31d0442dbF0x1B5c543CFe993ec1c89ad399E5433562A8CF4e050xe6ee2a573047598B2452a879F2188B31d0442dbF0x1B5c543CFe993ec1c89ad399E5433562A8CF4e050xe6ee2a573047598B2452a879F2188B31d0442dbF0x1B5c543CFe993ec1c89ad399E5433562A8CF4e050xe6ee2a573047598B2452a879F2188B31d0442dbF0x1B5c543CFe993ec1c89ad399E5433562A8CF4e050xe6ee2a573047598B2452a879F2188B31d0442dbF0x1B5c543CFe993ec1c89ad399E5433562A8CF4e050xe6ee2a573047598B2452a879F2188B31d0442dbF0xe45163d84952c381c5899C426cCEBAC5B16361080x3Ae6D86812cFe41686DbFEceDa22782855134e010x8A0Ca1F897F4a48ee54B5842f6861A21FA162AD10xF57475939184DD15C73Bb97cbaa649517695d9830xF824feC6aCdD168C9Db95B1Eaed18bf3E8Aae0FF0xc1DcE9F7F5a7477CaE473D262e47b05bF2E712a321 proposals total. Addresses differ per chain group because the CREATE3 factory address differs per network; the deployer and salt are identical throughout. Every deployment was read back on-chain: all 9 facets return the new input settler
0x00fC00edbe7C003b006f870068c548940000223eand all 9 receivers return the new output settler0x75220B7600c300005038432a0000f308e0000068.Whitelist (
config/whitelist.json) — theLI.FI IntentsDEXSentry allowlistsopen()(0x7515fd56) on the input settler for mainnet, base and arbitrum, and that pair was live on all three diamonds. The sync produced one proposal per chain combining the removal of the old pair and the addition of the new one in a single timelockscheduleBatch, so the swap is atomic — there is no window in which both settlers are callable as swap targets, nor one in which neither is. This matters because the settler is reachable as an allowlisted swap target throughSwapperV2andGenericSwapFacetV3, independently of the facet's own_startBridgepath, which does not consultLibAllowList.config/networks.json— katana'sgasPricepin drops from 3 gwei to 0.5 gwei. The pin exists because katana's RPC used to over-report ~20 gwei, but it now reports ~0.002 gwei, so the stale 3 gwei value combined withGAS_ESTIMATE_MULTIPLIER=250made forge's balance pre-check demand ~0.0176 ETH for a deployment that actually cost ~0.0000118 ETH — blocking the deploy with a misleadinginsufficient fundserror. 0.5 gwei keeps a 250× margin over the live price. The katana deploy then succeeded and spent 0.0000348 ETH for both contracts.Chains deliberately excluded. arc, jovay and megaeth are not in this rollout: neither new settler is deployed on them (verified on-chain). arc and megaeth run intents on the old settler today and would have broken; jovay has never had a settler at either address. Facet contracts were deployed on those three before this was caught, and the resulting three
diamondCutproposals were deleted from the Safe queue rather than signed. Their deployment logs are intentionally left untouched here so the recorded state matches what is actually registered — the orphaned addresses are recorded in EXSC-742 instead.This PR is a draft on purpose.
deploymentAddressConsistency.ymlskips draft PRs to support exactly this two-step flow: the flat deployment logs are ahead of the*.diamond.jsonlogs until the timelock cuts execute. Once they have, the diamond logs get updated and the PR can be marked ready.Follow-ups filed from what this rollout exposed: EXSC-740 (the facet deploy script does not verify its settler is a contract — the root cause of the arc/jovay/megaeth mis-deploy), EXSC-741 (
deployContractToNetworks.shreportsOKafter every deploy attempt fails), EXSC-742 (settlers missing on arc/jovay/megaeth — deploy or descope), EXSC-743 (verification broken on the arc/jovay/robinhood explorers), EXSC-744 (_targetState.jsonpins 1.1.2 against actual 1.0.0), EXSC-745 (config/whitelist.jsoncarries 139 stalePERIPHERYentries and drifts in format from the sync output).Checklist before requesting a review
Checklist for reviewer (DO NOT DEPLOY and contracts BEFORE CHECKING THIS!!!)