Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
228 lines
8.0 KiB
Markdown
228 lines
8.0 KiB
Markdown
# Deployments — Master Runbook
|
|
|
|
**Note: Nothing here is optional nor future — these are planned deployments.**
|
|
|
|
**Last Updated:** 2026-02-16
|
|
**Status:** Reference — run when PRIVATE_KEY, funded wallet, and RPC access are available
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
This runbook covers all deployments (Chain 138 and multichain). Run from `smom-dbis-138/` with `.env` loaded. **Chain 138** default gas: 2 gwei (`GAS_PRICE_138`).
|
|
|
|
| Deployment | Script | Chain(s) | Depends |
|
|
|------------|--------|----------|---------|
|
|
| Trustless Bridge | `script/bridge/trustless/DeployTrustlessBridge.s.sol` | 138 + Mainnet | None |
|
|
| DeployAll (multichain) | `script/DeployAll.s.sol` | Mainnet, Cronos, BSC, Polygon, Gnosis, Avalanche, Base, Arbitrum, Optimism | Per-chain RPC |
|
|
| CREATE2 / Deterministic Core | `script/deploy/DeployDeterministicCore.s.sol` | 138 | None |
|
|
| Vault System | `script/deploy/vault/DeployVaultSystem.s.sol` | 138 | None |
|
|
| Reserve System | `script/reserve/DeployReserveSystem.s.sol` | 138 | TOKEN_FACTORY |
|
|
| Reserve Keeper | `script/reserve/DeployKeeper.s.sol` | 138 | Reserve system |
|
|
| DODO / Swap | `script/dex/DeployDODOPMMIntegration.s.sol` | 138 | cUSDT, cUSDC |
|
|
| eMoney | `script/emoney/DeployChain138.s.sol` | 138 | None |
|
|
| Smart Accounts + Paymaster | `script/smart-accounts/DeploySmartAccountsKit.s.sol` | 138 | EntryPoint/Factory from ERC-4337 |
|
|
| PaymentChannelManager | `script/DeployPaymentChannelManager.s.sol` | 138 | None |
|
|
| GenericStateChannelManager | `script/DeployGenericStateChannelManager.s.sol` | 138 | None |
|
|
|
|
---
|
|
|
|
## 1. Trustless Bridge (Chain 138 + Mainnet)
|
|
|
|
**Purpose:** Lockbox138 on Chain 138; BondManager, ChallengeManager, LiquidityPoolETH, InboxETH, SwapRouter, BridgeSwapCoordinator on Mainnet.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
# Chain 138: Lockbox138 only
|
|
forge script script/bridge/trustless/DeployTrustlessBridge.s.sol:DeployTrustlessBridge \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
|
|
# Mainnet: Full bridge (requires MAINNET_RPC in .env)
|
|
forge script script/bridge/trustless/DeployTrustlessBridge.s.sol:DeployTrustlessBridge \
|
|
--rpc-url $ETHEREUM_MAINNET_RPC --broadcast --via-ir --verify
|
|
```
|
|
|
|
**Full system (Mainnet):** DeployEnhancedSwapRouter, DeployIntegrationContracts, InitializeBridgeSystem — see `script/bridge/trustless/DeployCompleteSystem.s.sol` for steps.
|
|
|
|
**Ref:** [bridge/trustless/DEPLOYMENT_GUIDE.md](../../smom-dbis-138/docs/bridge/trustless/DEPLOYMENT_GUIDE.md)
|
|
|
|
---
|
|
|
|
## 2. DeployAll (Mainnet / Multichain)
|
|
|
|
**Purpose:** WETH9, WETH10, CCIP Bridges, CCIPLogger to Cronos, BSC, Polygon, Gnosis, Avalanche, Base, Arbitrum, Optimism. Mainnet: CCIPLogger only.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
# Per chain — set RPC for target chain
|
|
# Cronos
|
|
forge script script/DeployAll.s.sol --rpc-url $CRONOS_RPC --broadcast --private-key $PRIVATE_KEY
|
|
|
|
# Polygon
|
|
forge script script/DeployAll.s.sol --rpc-url $POLYGON_RPC --broadcast --private-key $PRIVATE_KEY
|
|
|
|
# Arbitrum
|
|
forge script script/DeployAll.s.sol --rpc-url $ARBITRUM_RPC --broadcast --private-key $PRIVATE_KEY
|
|
|
|
# ... repeat for BSC, Gnosis, Avalanche, Base, Optimism
|
|
```
|
|
|
|
**Chain 138 is NOT in DeployAll** — use `deploy-and-configure-weth9-bridge-chain138.sh` for Chain 138.
|
|
|
|
---
|
|
|
|
## 3. CREATE2 / Deterministic Core (Chain 138)
|
|
|
|
**Purpose:** CREATE2Factory, UniversalAssetRegistry, UniversalCCIPBridge (proxy), MirrorRegistry, AlltraAdapter — deterministic addresses.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
forge script script/deploy/DeployDeterministicCore.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
|
|
# After deploy: call UniversalCCIPBridge.setCCIPRouter(router) on each chain
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Vault / Reserve / Keeper
|
|
|
|
### Vault System
|
|
|
|
```bash
|
|
forge script script/deploy/vault/DeployVaultSystem.s.sol:DeployVaultSystem \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
### Reserve System (requires TOKEN_FACTORY in .env)
|
|
|
|
```bash
|
|
forge script script/reserve/DeployReserveSystem.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
### Reserve Keeper
|
|
|
|
```bash
|
|
forge script script/reserve/DeployKeeper.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
---
|
|
|
|
## 5. DODO / Swap
|
|
|
|
**Purpose:** DODOPMMIntegration for cUSDT/cUSDC pools. Requires DODO Vending Machine and Approve addresses on Chain 138.
|
|
|
|
**Required env:** `DODO_VENDING_MACHINE_ADDRESS`, `COMPLIANT_USDT_ADDRESS`, `COMPLIANT_USDC_ADDRESS`. Optional: `DODO_APPROVE_ADDRESS`, `OFFICIAL_USDT_ADDRESS`, `OFFICIAL_USDC_ADDRESS`.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
# Env: DODO_VENDING_MACHINE_ADDRESS (required), COMPLIANT_USDT_ADDRESS (required), COMPLIANT_USDC_ADDRESS (required)
|
|
forge script script/dex/DeployDODOPMMIntegration.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
**Pool creation:** Use `script/dex/DeployPrivatePoolRegistryAndPools.s.sol` or DODOPMMIntegration.createPool after deploy.
|
|
|
|
---
|
|
|
|
## 6. eMoney (Chain 138)
|
|
|
|
**Purpose:** ComplianceRegistry, DebtRegistry, PolicyManager, eMoneyToken, TokenFactory138, BridgeVault138.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
forge script script/emoney/DeployChain138.s.sol:DeployChain138 \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
**Optional env:** GOVERNANCE_MULTISIG, TOKEN_DEPLOYER_MULTISIG, POLICY_OPERATOR_MULTISIG, etc.
|
|
|
|
---
|
|
|
|
## 7. Smart Accounts + Paymaster (ERC-4337)
|
|
|
|
**Purpose:** EntryPoint, AccountFactory, Paymaster. Script is informational — deploy from MetaMask Smart Accounts Kit or standard ERC-4337.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
# Script logs addresses; does not deploy contracts
|
|
forge script script/smart-accounts/DeploySmartAccountsKit.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
**Steps:**
|
|
1. Obtain EntryPoint, AccountFactory, Paymaster from MetaMask kit or ERC-4337 impl
|
|
2. Deploy to Chain 138
|
|
3. Set ENTRY_POINT, SMART_ACCOUNT_FACTORY, PAYMASTER in .env
|
|
4. Deploy AccountWalletRegistryExtended: `forge script script/smart-accounts/DeployAccountWalletRegistryExtended.s.sol ...`
|
|
|
|
---
|
|
|
|
## 8. PaymentChannelManager / GenericStateChannelManager
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
|
|
forge script script/DeployPaymentChannelManager.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
|
|
forge script script/DeployGenericStateChannelManager.s.sol \
|
|
--rpc-url $RPC_URL_138 --broadcast --private-key $PRIVATE_KEY --with-gas-price 1000000000
|
|
```
|
|
|
|
**Ref:** [PAYMENT_CHANNELS_DEPLOYMENT.md](../../smom-dbis-138/docs/deployment/PAYMENT_CHANNELS_DEPLOYMENT.md)
|
|
|
|
---
|
|
|
|
## 0. AddressMapper on other chains (Cronos, BSC, etc.)
|
|
|
|
**Purpose:** Deploy an empty AddressMapper (no Chain-138-specific mappings) so `config/smart-contracts-master.json` can set `mapper` to a contract address instead of `"canonical"`.
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
source .env
|
|
# Set RPC for target chain (e.g. Cronos)
|
|
export RPC_URL="${CRONOS_RPC:-https://evm.cronos.org}"
|
|
forge script script/DeployAddressMapperOtherChain.s.sol:DeployAddressMapperOtherChain \
|
|
--rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy
|
|
```
|
|
|
|
**After deploy:** Update `config/smart-contracts-master.json`: set `chains["25"].mapper` (Cronos) to the deployed address. See [OPTIONAL_DEPLOYMENTS_START_HERE](../07-ccip/OPTIONAL_DEPLOYMENTS_START_HERE.md) §A.
|
|
|
|
---
|
|
|
|
## Orchestration Script
|
|
|
|
Run all optional/future deployments in order:
|
|
|
|
```bash
|
|
cd smom-dbis-138
|
|
./scripts/deployment/deploy-optional-future-all.sh [--dry-run] [--phases 1,2,3,...]
|
|
```
|
|
|
|
See `scripts/deployment/deploy-optional-future-all.sh` for phase list and skip logic.
|
|
|
|
---
|
|
|
|
## Post-Deployment
|
|
|
|
1. **Update .env** with all new addresses
|
|
2. **Update config/smart-contracts-master.json** when available
|
|
3. **Run on-chain check:** `./scripts/verify/check-contracts-on-chain-138.sh`
|
|
4. **Blockscout verification:** `./scripts/verify/run-contract-verification-with-proxy.sh` (from LAN)
|