# 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=<deployed_address>
   WETH10_BSC=<deployed_address>
   CCIPWETH9BRIDGE_BSC=<deployed_address>
   CCIPWETH10BRIDGE_BSC=<deployed_address>
   CCIPLOGGER_BSC=<deployed_address>
   ```

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!**

