Files
proxmox/docs/archive/configuration/CONTRACT_DEPLOYMENT_GUIDE.md
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

310 lines
7.0 KiB
Markdown

# Chain 138 Contract Deployment Guide
**Date**: $(date)
**Purpose**: Complete guide for deploying smart contracts to Chain 138
---
## 📋 Prerequisites
### 1. Network Readiness
Verify Chain 138 network is ready:
```bash
# Check block production
cast block-number --rpc-url http://192.168.11.211:8545
# Check chain ID
cast chain-id --rpc-url http://192.168.11.211:8545
```
**Expected Results**:
- Block number > 0
- Chain ID = 138
### 2. Environment Setup
Create `.env` file in source project:
```bash
cd /home/intlc/projects/smom-dbis-138
cp .env.example .env # If exists
```
Required variables:
```bash
# Chain 138 RPC
RPC_URL_138=http://192.168.11.211:8545
# Deployer
PRIVATE_KEY=<your-deployer-private-key>
# Oracle Configuration (deploy Oracle first)
ORACLE_PRICE_FEED=<oracle-price-feed-address>
# Reserve Configuration
RESERVE_ADMIN=<admin-address>
TOKEN_FACTORY=<token-factory-address> # Optional
# Keeper Configuration
KEEPER_ADDRESS=<keeper-address> # Address that will execute upkeep
```
### 3. Required Tools
- **Foundry** (forge, cast)
- **jq** (for address extraction)
- **Access to Proxmox** (for service updates)
---
## 🚀 Deployment Methods
### Method 1: Automated Deployment Script
Use the automated script:
```bash
cd /home/intlc/projects/proxmox
./scripts/deploy-contracts-chain138.sh
```
**What it does**:
1. Verifies network readiness
2. Deploys Oracle contract
3. Deploys CCIP Router
4. Deploys CCIP Sender
5. Deploys Keeper (if Oracle Price Feed configured)
6. Logs all deployments
### Method 2: Manual Deployment
Deploy contracts individually:
#### 1. Deploy Oracle
```bash
cd /home/intlc/projects/smom-dbis-138
forge script script/DeployOracle.s.sol:DeployOracle \
--rpc-url http://192.168.11.211:8545 \
--private-key $PRIVATE_KEY \
--broadcast \
--verify --verifier blockscout --verifier-url https://explorer.d-bis.org/api \
-vvvv
```
**Note**: ChainID 138 uses Blockscout for contract verification. The `--verify` flag with `--verifier blockscout` enables verification on the self-hosted Blockscout instance at `https://explorer.d-bis.org`.
#### 2. Deploy CCIP Router
```bash
cd /home/intlc/projects/smom-dbis-138
forge script script/DeployCCIPRouter.s.sol:DeployCCIPRouter \
--rpc-url http://192.168.11.211:8545 \
--private-key $PRIVATE_KEY \
--broadcast \
--verify --verifier blockscout --verifier-url https://explorer.d-bis.org/api \
-vvvv
```
#### 3. Deploy CCIP Sender
```bash
forge script script/DeployCCIPSender.s.sol:DeployCCIPSender \
--rpc-url http://192.168.11.211:8545 \
--private-key $PRIVATE_KEY \
--broadcast --verify -vvvv
```
#### 4. Deploy Keeper
```bash
# Set Oracle Price Feed address first
export ORACLE_PRICE_FEED=<oracle-price-feed-address>
forge script script/reserve/DeployKeeper.s.sol:DeployKeeper \
--rpc-url http://192.168.11.211:8545 \
--private-key $PRIVATE_KEY \
--broadcast --verify -vvvv
```
#### 5. Deploy Reserve System
```bash
# Set Token Factory address if using
export TOKEN_FACTORY=<token-factory-address>
forge script script/reserve/DeployReserveSystem.s.sol:DeployReserveSystem \
--rpc-url http://192.168.11.211:8545 \
--private-key $PRIVATE_KEY \
--broadcast --verify -vvvv
```
---
## 📝 Extract Contract Addresses
After deployment, extract addresses:
```bash
cd /home/intlc/projects/proxmox
./scripts/extract-contract-addresses.sh 138
```
This creates: `/home/intlc/projects/smom-dbis-138/deployed-addresses-chain138.txt`
**Manual Extraction**:
```bash
cd /home/intlc/projects/smom-dbis-138
LATEST_RUN=$(find broadcast -type d -path "*/138/run-*" | sort -V | tail -1)
# Extract Oracle address
jq -r '.transactions[] | select(.transactionType == "CREATE") | .contractAddress' \
"$LATEST_RUN/DeployOracle.s.sol/DeployOracle.json" | head -1
# Extract CCIP Router address
jq -r '.transactions[] | select(.transactionType == "CREATE") | .contractAddress' \
"$LATEST_RUN/DeployCCIPRouter.s.sol/DeployCCIPRouter.json" | head -1
```
---
## ⚙️ Update Service Configurations
After extracting addresses, update service configs:
```bash
cd /home/intlc/projects/proxmox
# Source addresses
source /home/intlc/projects/smom-dbis-138/deployed-addresses-chain138.txt
# Update all services
./scripts/update-service-configs.sh
```
**Manual Update**:
```bash
# Oracle Publisher (VMID 3500)
pct exec 3500 -- bash -c "cat >> /opt/oracle-publisher/.env <<EOF
ORACLE_CONTRACT_ADDRESS=<deployed-address>
EOF"
# CCIP Monitor (VMID 3501)
pct exec 3501 -- bash -c "cat >> /opt/ccip-monitor/.env <<EOF
CCIP_ROUTER_ADDRESS=<deployed-address>
CCIP_SENDER_ADDRESS=<deployed-address>
EOF"
# Keeper (VMID 3502)
pct exec 3502 -- bash -c "cat >> /opt/keeper/.env <<EOF
PRICE_FEED_KEEPER_ADDRESS=<deployed-address>
EOF"
```
---
## ✅ Verification
### 1. Verify Contracts on Chain
```bash
# Check contract code
cast code <contract-address> --rpc-url http://192.168.11.211:8545
# Check contract balance
cast balance <contract-address> --rpc-url http://192.168.11.211:8545
```
### 2. Verify Service Connections
```bash
# Test Oracle Publisher
pct exec 3500 -- curl -X POST http://localhost:8000/health
# Test CCIP Monitor
pct exec 3501 -- curl -X POST http://localhost:8000/health
# Test Keeper
pct exec 3502 -- curl -X POST http://localhost:3000/health
```
### 3. Check Service Logs
```bash
# Oracle Publisher
pct exec 3500 -- journalctl -u oracle-publisher -f
# CCIP Monitor
pct exec 3501 -- journalctl -u ccip-monitor -f
# Keeper
pct exec 3502 -- journalctl -u price-feed-keeper -f
```
---
## 📊 Deployment Checklist
- [ ] Network producing blocks (block number > 0)
- [ ] Chain ID verified (138)
- [ ] Deployer account has sufficient balance
- [ ] `.env` file configured with PRIVATE_KEY
- [ ] Oracle contract deployed
- [ ] CCIP Router deployed
- [ ] CCIP Sender deployed
- [ ] Keeper deployed (if using)
- [ ] Reserve System deployed (if using)
- [ ] Contract addresses extracted
- [ ] Service .env files updated
- [ ] Services restarted
- [ ] Service health checks passing
---
## 🔧 Troubleshooting
### Network Not Ready
**Error**: `Network is not producing blocks yet`
**Solution**:
- Wait for validators to initialize
- Check validator logs: `pct exec <vmid> -- journalctl -u besu -f`
- Verify network connectivity
### Deployment Fails
**Error**: `insufficient funds` or `nonce too low`
**Solution**:
- Check deployer balance: `cast balance <deployer-address> --rpc-url http://192.168.11.211:8545`
- Check nonce: `cast nonce <deployer-address> --rpc-url http://192.168.11.211:8545`
- Ensure sufficient balance for gas
### Contract Address Not Found
**Error**: Address extraction returns empty
**Solution**:
- Check broadcast files: `ls -la broadcast/*/138/run-*/`
- Verify deployment succeeded (check logs)
- Manually extract from broadcast JSON files
---
## 📚 Related Documentation
- [Source Project Contract Deployment Info](../historical/SOURCE_PROJECT_CONTRACT_DEPLOYMENT_INFO.md)
- [Deployed Smart Contracts Inventory](../historical/DEPLOYED_SMART_CONTRACTS_INVENTORY.md)
- [Smart Contract Connections & Next LXCs](../historical/SMART_CONTRACT_CONNECTIONS_AND_NEXT_LXCS.md)
---
**Last Updated**: $(date)