Skip to content

feat(infra): USDT OFT warp route deployment + SDK fix for unproxied contracts#8507

Draft
Mo-Hussain wants to merge 3 commits intoaudit-q2-2026from
mo/usdt-oft-warp-config
Draft

feat(infra): USDT OFT warp route deployment + SDK fix for unproxied contracts#8507
Mo-Hussain wants to merge 3 commits intoaudit-q2-2026from
mo/usdt-oft-warp-config

Conversation

@Mo-Hussain
Copy link
Copy Markdown
Collaborator

@Mo-Hussain Mo-Hussain commented Apr 1, 2026

Summary

  • Deployed USDT collateralOft warp route across ethereum, arbitrum, and plasma using LayerZero OFT bridge contracts
  • SDK fix: EvmWarpModule.createHookUpdateTxs() no longer asserts proxyAdmin for unproxied OFT contracts

Deployed Contracts

Chain Address
arbitrum 0xE4c1A1E54C232454311cF68610c3885FdD991c0E
ethereum 0x7Bb4fe8f406fB7B22487Fa2e3BCbCb6A38cF29E6
plasma 0x93bfFA2231fbA5029997603fb68D9aC08024Baa2

SDK Fix (critical for OFT deployment)

enrollCrossChainRouters was failing with ProxyAdmin address is undefined for all collateralOft deployments.

Root cause: EvmWarpRouteReader sets hook: AddressZero as a sentinel for unproxied OFT contracts. createHookUpdateTxs checked if (!expectedConfig.hook) — but AddressZero is truthy, so it fell through to assert proxyAdmin exists, which is undefined for unproxied contracts.

Fix: Added || expectedConfig.hook === constants.AddressZero to the early-return check in createHookUpdateTxs.

Test Transfers (0.1 USDT each via LayerZero)

Route Tx LayerZero Scan
Arbitrum → Ethereum arbiscan layerzeroscan
Ethereum → Plasma etherscan layerzeroscan
Plasma → Arbitrum plasmascan layerzeroscan

Related

TODO

  • Restore production owners (ownersByChain) — currently using deployer address
  • Contract verification on block explorers
  • Merge registry PR with deployment artifacts

Test plan

  • Fork test with warp deploy — full deployment including router enrollment succeeded
  • Production deployment — contracts deployed, OFT domains configured, routers enrolled
  • Test transfers via cast send — 0.1 USDT sent in all 3 directions via LayerZero

🤖 Generated with Claude Code

EvmWarpModule.createHookUpdateTxs() asserted proxyAdmin exists even for
unproxied collateralOft contracts. The EvmWarpRouteReader sets hook to
AddressZero as a sentinel for OFT/deposit-address contracts, but
AddressZero is truthy so the early-return check did not fire.

Now treats AddressZero hook as empty, matching the sentinel pattern.
Added collateralOft config getter for USDT/oft warp route across
ethereum, arbitrum, and plasma using LayerZero OFT bridge contracts.

Contracts deployed:
- arbitrum: 0xE4c1A1E54C232454311cF68610c3885FdD991c0E
- ethereum: 0x7Bb4fe8f406fB7B22487Fa2e3BCbCb6A38cF29E6
- plasma: 0x93bfFA2231fbA5029997603fb68D9aC08024Baa2
chain,
{
...routerConfig[chain],
owner: deployerAddress,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be the AW ICA?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep will be transferring ownership

expectedConfig: HypTokenRouterConfig,
): Promise<AnnotatedEV5Transaction[]> {
if (!expectedConfig.hook) {
if (!expectedConfig.hook || expectedConfig.hook === constants.AddressZero) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding a small test here would be nice

Replaced deployer address with production ownership:
- ethereum: awSafes.ethereum
- arbitrum: ICA 0xD2757Bbc (inline, commented out in aw.ts)
- plasma: ICA 0x5f132a9a (from origin/main, not on audit branch)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Review

Development

Successfully merging this pull request may close these issues.

2 participants