# All-Network Contract Verification And Publication Runbook **Last updated:** 2026-04-10 **Scope:** Chain 138, Ethereum mainnet, and every cross-chain deployment currently tracked in the repo inventories. ## Purpose This runbook defines the repo-standard meaning of **verified and published** for deployed contracts on all tracked networks. Use it together with: - [CONTRACT_VERIFICATION_AND_PUBLICATION_MATRIX_ALL_NETWORKS](../11-references/CONTRACT_VERIFICATION_AND_PUBLICATION_MATRIX_ALL_NETWORKS.md) - [PUBLICATION_PACK_EXPLORER_STATUS](../11-references/PUBLICATION_PACK_EXPLORER_STATUS.md) - [PUBLICATION_ACTIONABLE_BACKLOG](../11-references/PUBLICATION_ACTIONABLE_BACKLOG.md) - `reports/status/contract_verification_publish_matrix.json` ## Definition of done A deployment is only considered closed when all of the following are true: 1. The contract address is present in the correct repo inventory. 2. The deployed runtime exists on the target chain. 3. Source code or equivalent explorer verification is completed on the target chain explorer. 4. The address is published in every required repo-facing surface: - `config/smart-contracts-master.json` when canonical - `cross-chain-pmm-lps/config/deployment-status.json` when part of PMM/cW rollout - token list or mapping docs when user-facing - deployment/status docs where operators rely on them ## Chain 138 ### Canonical verification Run from a host that can reach Blockscout and the Chain 138 RPC: ```bash bash scripts/verify/run-contract-verification-with-proxy.sh bash scripts/verify/check-contracts-on-chain-138.sh ``` ### DODO v3 / pilot verification ```bash bash scripts/verify/verify-dodo-v3-chain138-blockscout.sh ``` ### Publication After Blockscout verification completes: 1. Confirm the address set in `config/smart-contracts-master.json` 2. Confirm the route/token/pool surfaces that depend on it 3. Regenerate the all-network matrix: ```bash node scripts/verify/generate-contract-verification-publish-matrix.mjs ``` ## Other EVM chains The repo currently tracks cross-chain deployments and inventory on: - Ethereum mainnet (`1`) - Optimism (`10`) - Cronos (`25`) - BSC (`56`) - Gnosis (`100`) - Polygon (`137`) - Wemix (`1111`) - Arbitrum (`42161`) - Celo (`42220`) - Avalanche (`43114`) - Base (`8453`) ### Required steps 1. Open the chain explorer shown in the generated matrix. 2. Verify source or deployment metadata for repo-owned contracts. 3. If the address is an external anchor/reference venue, mark it as reference-only in operator notes rather than pretending the repo owns verification. 4. Regenerate the matrix and update the chain-specific runbook or token mapping if anything changed. ### Ethereum mainnet historical-source example `DODOPMMIntegration (Mainnet)` at `0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84` was closed on 2026-04-11 by verifying against the historical `smom-dbis-138` source snapshot that actually matches the deployed bytecode, not current HEAD. Keep the provenance note in [ETHEREUM_MAINNET_DODOPMMINTEGRATION_VERIFICATION.md](ETHEREUM_MAINNET_DODOPMMINTEGRATION_VERIFICATION.md) with the matching commit, constructor arguments, and create transaction. Explorer-side public name tags remain a manual Etherscan account workflow after source verification passes. ### Requested publication packs For the current execution pass, the requested packs are: - Ethereum mainnet - Optimism - BSC - Polygon - Base Use the generated artifacts to distinguish what is actually closable from the repo: ```bash ETHERSCAN_API_KEY=... node scripts/verify/check-publication-pack-explorer-status.mjs node scripts/verify/generate-publication-actionable-backlog.mjs ``` Closure rule for these five packs: 1. **Auto-submittable backlog empty** in `PUBLICATION_ACTIONABLE_BACKLOG.md` means the repo-owned automatic submission pass is complete. 2. Remaining `manual-or-external` rows are not honest candidates for automatic closure until source provenance or explorer ownership is established. 3. `inventory-only` and `reference-only` rows must stay aligned in repo inventories, but should not be misrepresented as repo-owned verification work. ## ALL Mainnet / non-EVM adjacent inventories Not every tracked address lands on a conventional EVM verification path. - `651940` (ALL Mainnet) still needs publication and documentation closure even where explorer verification is manual or non-standard. - Non-EVM reference inventories should still be published consistently in the repo, even when source verification uses a different platform. ## Canonical inventory refresh Regenerate the repo-wide matrix after any deployment or publication sweep: ```bash node scripts/verify/generate-contract-verification-publish-matrix.mjs ``` This writes: - `reports/status/contract_verification_publish_matrix.json` - `docs/11-references/CONTRACT_VERIFICATION_AND_PUBLICATION_MATRIX_ALL_NETWORKS.md` ## Honest limits This runbook improves closure and removes ambiguity, but it does not magically invent missing constructor arguments, compiler settings, or third-party explorer API credentials. Where those are missing, the matrix should remain **pending** until the source bundle is assembled and the publication step is actually completed.