# Deployment Execution Plan **Date**: 2025-12-11 **Status**: Ready for Execution --- ## 🎯 Deployment Overview **Total**: 7 chains, 31 contracts | Chain | Contracts | Script | Status | |-------|-----------|--------|--------| | **Ethereum Mainnet** | 1 (CCIPLogger) | `DeployCCIPLoggerOnly.s.sol` | ✅ Ready | | **BSC** | 5 (all) | `DeployAll.s.sol` | ✅ Ready | | **Polygon** | 5 (all) | `DeployAll.s.sol` | ✅ Ready | | **Avalanche** | 5 (all) | `DeployAll.s.sol` | ✅ Ready | | **Base** | 5 (all) | `DeployAll.s.sol` | ✅ Ready | | **Arbitrum** | 5 (all) | `DeployAll.s.sol` | ✅ Ready | | **Optimism** | 5 (all) | `DeployAll.s.sol` | ✅ Ready | --- ## ⚠️ Important Notes ### CCIPLogger Deployment **Note**: The `CCIPLogger` contract deployment in Foundry scripts is currently a placeholder. The script will: 1. Log a warning about using Hardhat script 2. Return `address(0)` as placeholder **Options**: 1. **Use Hardhat script** (if available): `npm run deploy:logger:mainnet` 2. **Implement CCIPLogger in Foundry** (if contract exists) 3. **Deploy other contracts first**, then handle CCIPLogger separately ### Recommended Approach 1. **Deploy to chains that don't need CCIPLogger first** (if any) 2. **Deploy all contracts except CCIPLogger** to all chains 3. **Handle CCIPLogger separately** using appropriate deployment method --- ## 🚀 Deployment Commands ### Option 1: Automated Script ```bash ./scripts/deployment/deploy-all-ready-chains.sh ``` ### Option 2: Manual Deployment (One Chain at a Time) #### 1. Ethereum Mainnet (CCIPLogger only) ```bash forge script script/DeployCCIPLoggerOnly.s.sol:DeployCCIPLoggerOnly \ --rpc-url mainnet --chain-id 1 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` #### 2. BSC (All 5 contracts) ```bash forge script script/DeployAll.s.sol:DeployAll \ --rpc-url bsc --chain-id 56 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` #### 3. Polygon (All 5 contracts) ```bash forge script script/DeployAll.s.sol:DeployAll \ --rpc-url polygon --chain-id 137 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` #### 4. Avalanche (All 5 contracts) ```bash forge script script/DeployAll.s.sol:DeployAll \ --rpc-url avalanche --chain-id 43114 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` #### 5. Base (All 5 contracts) ```bash forge script script/DeployAll.s.sol:DeployAll \ --rpc-url base --chain-id 8453 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` #### 6. Arbitrum (All 5 contracts) ```bash forge script script/DeployAll.s.sol:DeployAll \ --rpc-url arbitrum --chain-id 42161 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` #### 7. Optimism (All 5 contracts) ```bash forge script script/DeployAll.s.sol:DeployAll \ --rpc-url optimism --chain-id 10 \ --private-key $PRIVATE_KEY --broadcast --verify -vvvv ``` --- ## 📋 Pre-Deployment Checklist - [x] All RPC URLs configured - [x] All CCIP configurations added - [x] Private key set in `.env` - [x] Wallet balances sufficient - [ ] Explorer API keys added (optional) - [ ] CCIPLogger deployment method determined - [ ] Test deployment on one chain first (recommended) --- ## 🔍 Post-Deployment After deployment, for each chain: 1. **Save deployed addresses** to `.env`: ```bash WETH9_BSC= WETH10_BSC= CCIPWETH9BRIDGE_BSC= CCIPWETH10BRIDGE_BSC= CCIPLOGGER_BSC= ``` 2. **Verify contracts** on explorer (if not auto-verified) 3. **Test contracts** with simple interactions 4. **Update documentation** with deployed addresses --- ## ⚠️ Warnings 1. **Real Mainnet Deployments**: These are real transactions on mainnet chains 2. **Gas Costs**: Ensure sufficient balance for all deployments 3. **CCIPLogger**: May need separate deployment method 4. **Verification**: API keys needed for automatic verification --- **Ready to proceed when you confirm!**