132 lines
5.1 KiB
Markdown
132 lines
5.1 KiB
Markdown
|
|
# 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.
|