CHAIN REGISTER (IMMUTABLE SUBSTRATE)
| CHAIN | CHAIN ID | LZ V2 EID | ROLE | ENDPOINT / OFT |
| Base Sepolia | 84532 | 40245 | HUB | endpoint · child OFT |
| Ethereum Sepolia | 11155111 | 40161 | satellite | endpoint · OFT HOME (adapter) |
| OP Sepolia | 11155420 | 40232 | satellite | endpoint · child OFT |
| Arbitrum Sepolia | 421614 | 40231 | satellite | endpoint · child OFT |
CEREMONY RUN ORDER
0.Prerequisites — funded deployer EOA, archive-capable RPC per chain, Foundry on PATH. Deploy env pins B1_REQUIRE_REAL_DEPS=true so the script reverts loudly instead of silently wiring mocks.
"The one mistake to never repeat": unset v4 addresses once caused a silent mock deploy.
1.Redeploy the B1 fee stack bound to real gGOLD + real Uniswap v4 on each chain. The stack hard-binds gGOLD at construction (no setter). Verify binding on-chain before continuing: systemGGoldPool.ggGoldToken() ==
2.Mesh A — gGOLD OFT any-to-any peers. For every ordered chain pair, oft.setPeer(peerEid, ). Home↔child locks/unlocks; child↔child burns + mints. 12 routes total.
3.Mesh B — vote ingress (M-A). On the Hub: setChainReporter(satEid, ) ×3. On each satellite: reporter.setHub(hubEid, ) — the Guardian-gated setHub IS the peer-set; generic setPeer is intentionally blocked.
4.Mesh C — tier egress (M-C). On the Hub: setChainPassport(satEid, ) ×3. On each satellite: passport.setHub(...) + passport.setPeer(hubEid, ).
5.Re-key the registry from broadcast output, remove the fork-seed marker, and re-snapshot for the dashboard. Registry is the single source of truth; the seeder and dApp read addresses from it — no code edits.
6.Read-only acceptance sweep (no keys, no txs) — run verify-wave2 against every chain. Re-running is safe: registration, pool init and LP mints check on-chain state first and skip work already done.
OFT PEER MATRIX — 12 ROUTES SET
| from \ to | BASE | ETH | OP | ARB |
| Base Sepolia | — | ✓ | ✓ | ✓ |
| Eth Sepolia | ✓ | — | ✓ | ✓ |
| OP Sepolia | ✓ | ✓ | — | ✓ |
| Arb Sepolia | ✓ | ✓ | ✓ | — |
Plus 6 hub registrations (3 reporters + 3 passports) and 6 satellite→hub bindings. Peer addresses recorded as bytes32 in the registry — redacted here.
ACCEPTANCE SWEEP — PER CHAIN, READ-ONLY
[✓]Hook fee table == locked production curves, all 12 cells (values redacted)
[✓]Hook MAX_FEE_PIPS sanity bound
[✓]systemGGoldPool.ggGoldToken() == real gGOLD for the chain
[✓]v4 PositionManager.poolManager() == registry PoolManager
[✓]Volatility scalars (Hub + Membrane) at 1.0× identity
[✓]OFT mesh peers — all 12 routes resolve
[✓]Satellite reporter / passport peers(hubEid) == hub
[✓]Hub reporter / passport bytes32 maps per satellite
92 / 92 ON-CHAIN CHECKS PASSED