Skip to content

fix(deploy): allow intent facets to deploy against codeless settler refs - #2184

Merged
gvladika merged 1 commit into
mainfrom
feature/exsc-748-allow-redeploying-intent-facets-against-codeless-reserved
Aug 10, 2026
Merged

fix(deploy): allow intent facets to deploy against codeless settler refs#2184
gvladika merged 1 commit into
mainfrom
feature/exsc-748-allow-redeploying-intent-facets-against-codeless-reserved

Conversation

@gvladika

@gvladika gvladika commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Which Linear task belongs to this PR?

Fixes EXSC-748

Why did I implement it this way?

The intent settlers (InputSettlerEscrowLIFI / OutputSettlerSimple) are reserved, deterministically-deployed vanity addresses — identical on every chain. We deploy LiFiIntentEscrowFacetV2 and ReceiverOIF on a chain before the settler is deployed there, so the immutable ref legitimately points at an address that has no code yet (e.g. jovay/megaeth after the 2026-08-06 switchover). DeployReceiverOIF read the output settler through the default _getConfigContractAddress, which runs LibAsset.isContract and reverted on a codeless ref, blocking (re)deployment on those chains.

This reuses the existing 4-arg _getConfigContractAddress overload with allowNonContractAddress=true — the same pattern already used for tempo's dummy wrappedNative in DeployAcrossFacetV4 — scoped only to the settler fields. allowZeroAddress stays false and the Executor read stays checked, so a zero address or a missing real dependency is still caught; only the intentional codeless-settler case is allowed through. The facet script previously read the input settler with a raw stdJson.readAddress (no zero/code checks at all); it now uses the same checked reader, keeping the codeless allowance while adding the zero-address guard it was missing.

No automated test is added: this repo does not unit-test Foundry deploy scripts (the tempo precedent has none either), and getConstructorArgs is internal and env/config-dependent. Functional validation is the actual (re)deploy against a chain whose settler ref is codeless.

Checklist before requesting a review

Checklist for reviewer (DO NOT DEPLOY and contracts BEFORE CHECKING THIS!!!)

  • I have checked that any arbitrary calls to external contracts are validated and or restricted
  • I have checked that any privileged calls (i.e. storage modifications) are validated and or restricted
  • I have ensured that any new contracts have had AT A MINIMUM 1 preliminary audit conducted on by <company/auditor>

@lifi-action-bot
lifi-action-bot marked this pull request as draft August 7, 2026 11:14
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Changes

Settler address configuration

Layer / File(s) Summary
LiFi Intent Escrow settler lookup
script/deploy/facets/DeployLiFiIntentEscrowFacetV2.s.sol
getConstructorArgs uses _getConfigContractAddress for the settler address. Zero addresses remain invalid, while non-contract addresses are allowed.
ReceiverOIF settler lookup
script/deploy/facets/DeployReceiverOIF.s.sol
getConstructorArgs passes the OIFOutputSettlerSimple key directly and allows non-contract addresses while rejecting zero addresses.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: AuditNotRequired

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the deployment fix for codeless settler references.
Description check ✅ Passed The description explains the issue, implementation, validation approach, task, and checklist status; reviewer-only checks remain appropriately unchecked.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/exsc-748-allow-redeploying-intent-facets-against-codeless-reserved

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gvladika
gvladika marked this pull request as ready for review August 7, 2026 11:15
@gvladika
gvladika enabled auto-merge (squash) August 7, 2026 11:22
@gvladika
gvladika merged commit db4f26e into main Aug 10, 2026
68 of 72 checks passed
@gvladika
gvladika deleted the feature/exsc-748-allow-redeploying-intent-facets-against-codeless-reserved branch August 10, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants