Mainnet TEL v3 infra deployment: bridges, DVN mesh, migration contracts - #49
Merged
Conversation
…live on eth/base/polygon - deployments/*.json: full contract set on all three chains — MintBurnWrapper 0x4A1c…D149, TelcoinBridge 0x6A7E…6a7e, TokenMigration 0x2703…2703 (deployed paused), MigrationVault 0x2222…3333, alongside TelcoinV3 0x7E13…0731. All source-verified on Etherscan/Basescan/Polygonscan. - BaseDeployBridges: split each chain's deployment into two consecutive-nonce proposals (initcode-heavy deploys separate from config/role calls) so the EIP-712 payload stays within hardware-wallet signing memory. Config proposal falls back to the first free nonce when deploys are already on-chain.
…exts Foundry 1.8.0 (CI is unpinned stable; 1.7.1 -> 1.8.0 since the last main run) changed remapping auto-detection so files inside forge-deploy-utils and safe-utils resolve forge-std/ to their own vendored copies (v1.16.1 / v1.9.6) instead of the repo's lib/forge-std (v1.11.0). Two source paths for VmSafe make its enums distinct types, breaking every vm.isContext() call site. Explicit context remappings restore the single-copy resolution the build has always effectively used.
The split never fixed hardware-wallet signing - the deploy batch alone still carries the bridge initcode, which exceeds the device memory cap under the Safe UI's EIP-712 flow regardless of batching. Hash-based co-signing (safe-cosigner) is the actual fix, and the executed mainnet deployments used the original single 9-txn batches, so this restores the code to match what ran.
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.
Summary
Completes the TEL v3 mainnet rollout on Ethereum, Base, and Polygon. All contracts deployed via CREATE3 from the admin Safe (
0x6012…eB03) at identical addresses on every chain, executed as Safe MultiSend batches at nonces 1–3, and source-verified on all three explorers.0x4A1c2ab0661651Ee55C41DB1239F292e00C3D1490x6A7E6616653e84eee0c70257eC2E3d79A4476a7e0x2703E00cAE30A7707e4d18C38f8CB6A4a40c27030x222213DeB441C5A9F71Df2942db431978a733333Changes
DVN configuration (2_ConfigureDVNs + Constants) — mainnet LayerZero security stack, verified against the LZ metadata API (standard messaging DVNs, not the lzRead variants):
BaseConfigureDVNsfix: receive-side ULN configs now use the source chain's confirmations (receive-side confirmations count source-chain blocks; building them from the destination's value stalls any pathway where the two differ — hidden on testnet by symmetric confs=1). Verified on-chain post-execution: all 6 pathways' send/receive configs match.Migration deploy-paused (BaseDeployMigrationInfra) — fresh TokenMigration deploys are paused within the same MultiSend (grant PAUSER to admin → pause → grant dedicated pauser/unpauser), so migration cannot start before the coordinated launch. Admin retains PAUSER alongside the dedicated pauser. At launch, per chain: admin extends
setMigrationExpiry(launch + 365d)(extend-only setter), then UNPAUSER unpauses.deployments/*.json — the full five-contract address set for all three chains.
Verification
MigrationVault.solpins solc 0.8.30 exactly, so the vault impl + proxy verify with 0.8.30 while the rest use 0.8.35.Remaining (not in this PR)
Vault funding mints, launch-day expiry extension + unpause, TelcoinNetwork/NativeBridge when TN launches.