> Historical note (2026-04-01): this overview preserves earlier deployment phases, but the live canonical Chain 138 PMM stable stack is now `DODOPMMIntegration=0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895` and `DODOPMMProvider=0x3f729632E9553EBacCdE2e9b4c8F2B285b014F2e`.
**Source:** `smom-dbis-138/.env` and deployment runbooks.
**Script conventions:** Deployment scripts use **tags** (CLI args) for one-off values instead of .env placeholders, support **interactive** prompts when run without args, and are **callable** from other scripts (e.g. `run-all-four-gaps.sh g4 --eth 1`). See `scripts/lib/deployment/README.md`.
**Env vars for Chain 138 and Mainnet:** `.env` includes mainnet aliases (`BOND_MANAGER`, `CHALLENGE_MANAGER`, `LIQUIDITY_POOL`, `INBOX_ETH`, `SWAP_ROUTER`, `BRIDGE_SWAP_COORDINATOR`) for scripts that expect unsuffixed names (e.g. `InitializeBridgeSystem.s.sol`, `FundMainnetLP.s.sol`). Chain 138 explicit names: `CHAIN_138_CCIP_ROUTER`, `CHAIN_138_DODO_PMM_INTEGRATION`, `CHAIN_138_DODO_VENDING_MACHINE`; optional `CHAIN138_SELECTOR` (from CCIP Router `getChainSelector()` on 138). See `.env.example` for all contract vars.
This document maps all deployed contracts by network, what each enables, requirements, and live-test status.
The footprint above shows **PMM**, **Trustless (LP/Inbox)**, and **Lockbox** only on 138 and/or Ethereum. Deploying the following would enable faster or deeper liquidity:
| **PMM / DODO integration on L2s** | Local swap liquidity on BSC, Polygon, Base, etc.; users swap on L2 without bridging to 138 first | BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis | `DeployDODOPMMIntegration.s.sol` per chain; use **official DODO DVM** on each (DODO lists these chains). Set chain-specific `DODO_VENDING_MACHINE_ADDRESS`, `OFFICIAL_USDT_*`, `OFFICIAL_USDC_*` in .env. | Requires compliant or bridge-wrapped token addresses on each L2; DODO is already deployed on these chains by DODO team. |
| **Trustless Inbox + LP on L2s** | Direct 138 ↔ L2 trustless flow (lock on 138 or L2, claim on the other) instead of only 138 ↔ Mainnet | BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis | `DeployTrustlessBridge.s.sol` — currently **mainnet-only** for Inbox/LP/Bond. Would need chain-specific script or params (WETH address, chain id). | Design today: Lockbox 138 ↔ Inbox/LP Mainnet. Extending to L2 = deploy Inbox + BondManager + LP (+ SwapRouter) on each L2 and optionally Lockbox on L2. |
| **Lockbox on L2s** | Users lock on BSC/Polygon/etc. and claim on 138 (or vice versa) | BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis | Same as above; Lockbox is chain-specific (e.g. Lockbox138). Would need LockboxBSC, LockboxPolygon, etc. or a parameterized Lockbox. | Paired with Inbox on 138 or mainnet depending on direction. |
| **Fund mainnet Liquidity Pool** | Trustless claims on mainnet can be paid out; no new contracts | Ethereum (LP already deployed) | Operator adds ETH/WETH to `LiquidityPoolETH` (see .env `LIQUIDITY_POOL_*`). | [ALL_MAINNETS_DEPLOYMENT_RUNBOOK.md §5.2](ALL_MAINNETS_DEPLOYMENT_RUNBOOK.md) and Requirements §4. |
```mermaid
flowchart LR
subgraph NOW["Current liquidity path"]
A[User on L2] -->|CCIP only after LINK| B[138 or Mainnet]
C[User on 138] -->|Trustless| D[Mainnet LP]
end
subgraph AFTER["After missing deployments"]
A2[User on L2] -->|PMM on L2| E[Swap on L2]
A2 -->|Lockbox + Inbox on L2| F[Claim on 138]
C2[User on 138] -->|Inbox on L2| G[Claim on L2]
D2[Mainnet LP] -->|Funded| H[Payouts work]
end
```
**Summary:** The largest gaps for **faster liquidity** are (1) **PMM/DODO integration on each L2** (use official DODO; add DODOPMMIntegration + pools per chain), (2) **Trustless Inbox + LP (+ optional Lockbox) on L2s** for direct 138 ↔ L2 trustless flows, and (3) **Funding the existing mainnet LP** so current trustless claims can be paid.
### Tasks list (4 gaps)
| # | Task | Status | Script / action |
|---|------|--------|-----------------|
| **G1** | Deploy PMM / DODO integration on L2s (BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis) | ✅ Script ready | `scripts/deployment/deploy-pmm-all-l2s.sh`; set per-chain `*_RPC`, `*_DODO_VENDING_MACHINE_ADDRESS`, `*_OFFICIAL_USDT_ADDRESS`, `*_OFFICIAL_USDC_ADDRESS` in .env and run |
| **G2** | Deploy Trustless Inbox + LP (+ Bond) on L2s for direct 138 ↔ L2 flows | ✅ Script ready | `DeployTrustlessBridge.s.sol` supports L2 when `TRUSTLESS_WETH_ADDRESS` set; `scripts/deployment/deploy-trustless-l2s.sh` runs per chain |
| **G3** | Deploy Lockbox on L2s (lock on L2, claim on 138 or vice versa) | ✅ Script ready | Same as G2; use --lockbox tag |
| **G4** | Fund mainnet Liquidity Pool (ETH/WETH) so trustless claims can be paid out | ✅ Script ready | `scripts/deployment/fund-mainnet-lp.sh --eth <amt> --weth <amt>` or run script for interactive prompt; `.env` only for `LIQUIDITY_POOL_ETH_MAINNET`, RPC, key |
---
## 3. Capability matrix — what can be done now
| Capability | Networks involved | Requirements | Can do now? | Notes |
| **CCIPLogger on other L2s** | BSC, Polygon, etc. | deploy-ccip-logger-all-chains.sh | Optional | Only mainnet logger deployed so far |
| **PMM / DODO pools on L2s** | BSC, Polygon, Base, etc. | DODOPMMIntegration + official DODO DVM per chain; token addresses on L2 | ❌ Not deployed | Would allow local swap liquidity on each L2; see §2.7 |
| **Trustless 138 ↔ L2 (Lockbox + Inbox on L2)** | 138 + any L2 | Deploy Inbox/LP/Bond (and optional Lockbox) on L2; extend DeployTrustlessBridge or add chain-specific script | ❌ Not deployed | Direct lock/claim 138 ↔ L2; see §2.7 |
| **Mainnet LP funded** | Ethereum | Add ETH/WETH to LiquidityPoolETH | ⚠️ Operator action | Enables payouts for existing trustless claims; no new contracts |
---
## 4. Requirements summary (by capability)
| Requirement | Where | Status / action |
|-------------|--------|-----------------|
| **LINK on each chain** | All CCIP bridge chains | Deployer must hold LINK; run fund-ccip-bridges-with-link.sh (10 LINK per bridge, 20 per chain with 2 bridges) |
| **Native gas (ETH/BNB/MATIC etc.)** | Each chain | Deployer needs gas for relay and user txs |
| **DODO_VENDING_MACHINE_ADDRESS** | Chain 138 | ✅ Set (mock DVM). For real DODO, deploy official DVM or use adapter (see DVM_DEPLOYMENT_CHECK.md) |
| **RPC for Chain 138** | .env | ✅ RPC_URL_138 / CHAIN138_RPC_URL set |
| `scripts/deployment/check-balances-gas-and-deploy.sh` | Balance check; optional --deploy for 138 |
| `scripts/deployment/fund-ccip-bridges-with-link.sh` | Send LINK to all CCIP bridges (need LINK per chain) |
| `scripts/deployment/run-pmm-and-pools.sh` | Deploy PMM integration and optional pools |
| `scripts/deployment/deploy-official-dvm-chain138.sh` | Deploy official DODO DVM (blocked by Truffle/solc mix) |
| `scripts/deployment/deploy-pmm-all-l2s.sh` | **(G1)** Deploy DODOPMMIntegration on each L2 (BSC, Polygon, Base, etc.); set per-chain .env |
| `scripts/deployment/deploy-trustless-l2s.sh` | **(G2/G3)** Deploy Trustless stack (Bond, LP, Inbox, optional Lockbox) on each L2 |
| `scripts/deployment/fund-mainnet-lp.sh` | **(G4)** Fund mainnet LiquidityPoolETH; use `--eth <amt>` / `--weth <amt>` or interactive prompt (no .env amounts) |
| `scripts/deployment/verify-trustless-deployments.sh` | Verify all Trustless contracts (BondManager, LP, Inbox, Lockbox) on Mainnet, 138, BSC, Polygon, Base, Optimism, Cronos, Arbitrum, Avalanche, Gnosis via `cast code` |
| Doc | Content |
|-----|--------|
| `docs/deployment/DVM_DEPLOYMENT_CHECK.md` | DVM options (mock vs official) |
| `docs/deployment/WARNINGS_AND_OPTIONAL_TASKS.md` | Warnings and optional tasks |
| `docs/deployment/NEXT_STEPS_COMPLETION.md` | What’s done vs operator tasks |
All 10 networks have WETH9 + WETH10 + CCIPWETH9Bridge + CCIPWETH10Bridge in .env; CCIP can connect any pair once routers are configured and bridges funded with LINK.
---
## 10. One-page summary table (all networks)
| Network | Chain ID | Core/CCIP | PMM | Trustless | Explorer | RPC env | LINK funded | Script verified | E2E tested |
Exact names may vary in `.env`; see `smom-dbis-138/.env.example` and deployment runbooks.
---
**Summary:** Contracts are deployed across Chain 138, Ethereum mainnet, and eight other EVM chains (BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis). Everything that does not require LINK (RPC, PMM, tokenization, oracle, channels, settlement, tx reporting) can be used or tested now. CCIP WETH bridging is ready once LINK is funded on each chain; cross-chain CCIP and full trustless flows are not yet live-tested in this repo.
---
## 12. Optional next steps (operator)
| Step | Action | Notes |
|------|--------|--------|
| **CHAIN138_SELECTOR** | Set in `.env` (default `138`). To use a custom value from your CCIP Router: run `scripts/configuration/find-chain-selector.sh` or `cast call <CCIP_ROUTER> "getChainSelector()(uint64)" --rpc-url $RPC_URL_138` when RPC is reachable. | Required for `configure-*-bridges.sh`, `verify-chain138-full-deployment.sh`. |
| **Arbitrum / Avalanche / Gnosis Trustless** | Addresses are in `.env` (`ARBITRUM_*`, `AVALANCHE_*`, `GNOSIS_*`). `verify-trustless-deployments.sh` uses them when set. | No action unless you need to override. |
| **G4 – Fund mainnet LP** | Use script **tags** (no .env placeholders): `./scripts/deployment/fund-mainnet-lp.sh --eth 1.5 --weth 0.5`, or run interactively: `./scripts/deployment/fund-mainnet-lp.sh` or `./scripts/deployment/run-all-four-gaps.sh g4`. | Modular and callable; operator runs with key and gas. |