8.1 KiB
8.1 KiB
Comprehensive Deployment Guide
Date: 2025-12-24
Status: Complete deployment guide for all contracts
Overview
This guide provides step-by-step instructions for deploying all contracts in the system, including:
- Legal compliance contracts
- Token contracts
- Utility contracts
- CCIP contracts
- Cross-network deployments
Prerequisites
1. Environment Setup
cd /home/intlc/projects/proxmox/smom-dbis-138
# Load environment variables
source .env
# Verify required variables
echo $PRIVATE_KEY
echo $RPC_URL
2. Required Environment Variables
Core Variables:
PRIVATE_KEY: Deployer private keyRPC_URL: RPC endpoint URL (orRPC_URL_138for ChainID 138)
Contract Addresses (for dependencies):
CCIP_ROUTER_ADDRESS: CCIP Router addressORACLE_AGGREGATOR_ADDRESS: Oracle Aggregator addressLINK_TOKEN_ADDRESS: LINK token address
Optional Variables:
USDT_OWNER: Owner for CompliantUSDT (defaults to deployer)USDC_OWNER: Owner for CompliantUSDC (defaults to deployer)COMPLIANCE_ADMIN: Admin for compliance contracts (defaults to deployer)TOKEN_REGISTRY_OWNER: Owner for TokenRegistry (defaults to deployer)FEE_COLLECTOR_OWNER: Owner for FeeCollector (defaults to deployer)
Phase 1: Legal Compliance Contracts
1.1 Deploy ComplianceRegistry
forge script script/DeployComplianceRegistry.s.sol:DeployComplianceRegistry \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
# Save the deployed address
export COMPLIANCE_REGISTRY_ADDRESS=<deployed_address>
1.2 Deploy CompliantUSDT
# Set optional variables
export USDT_OWNER=${USDT_OWNER:-$DEPLOYER}
export COMPLIANCE_ADMIN=${COMPLIANCE_ADMIN:-$DEPLOYER}
forge script script/DeployCompliantUSDT.s.sol:DeployCompliantUSDT \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
# Save the deployed address
export COMPLIANT_USDT_ADDRESS=<deployed_address>
1.3 Deploy CompliantUSDC
# Set optional variables
export USDC_OWNER=${USDC_OWNER:-$DEPLOYER}
export COMPLIANCE_ADMIN=${COMPLIANCE_ADMIN:-$DEPLOYER}
forge script script/DeployCompliantUSDC.s.sol:DeployCompliantUSDC \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
# Save the deployed address
export COMPLIANT_USDC_ADDRESS=<deployed_address>
1.4 Register Contracts in ComplianceRegistry
# Register CompliantUSDT
cast send $COMPLIANCE_REGISTRY_ADDRESS \
"registerContract(address)" \
$COMPLIANT_USDT_ADDRESS \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
# Register CompliantUSDC
cast send $COMPLIANCE_REGISTRY_ADDRESS \
"registerContract(address)" \
$COMPLIANT_USDC_ADDRESS \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
Phase 2: Utility Contracts
2.1 Deploy TokenRegistry
export TOKEN_REGISTRY_OWNER=${TOKEN_REGISTRY_OWNER:-$DEPLOYER}
forge script script/DeployTokenRegistry.s.sol:DeployTokenRegistry \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
-vv
# Save the deployed address
export TOKEN_REGISTRY_ADDRESS=<deployed_address>
2.2 Deploy FeeCollector
export FEE_COLLECTOR_OWNER=${FEE_COLLECTOR_OWNER:-$DEPLOYER}
forge script script/DeployFeeCollector.s.sol:DeployFeeCollector \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
-vv
# Save the deployed address
export FEE_COLLECTOR_ADDRESS=<deployed_address>
2.3 Register Tokens in TokenRegistry
# Register CompliantUSDT
cast send $TOKEN_REGISTRY_ADDRESS \
"registerToken(address,string,string,uint8,bool,address)" \
$COMPLIANT_USDT_ADDRESS \
"Tether USD (Compliant)" \
"cUSDT" \
6 \
false \
0x0000000000000000000000000000000000000000 \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
# Register CompliantUSDC
cast send $TOKEN_REGISTRY_ADDRESS \
"registerToken(address,string,string,uint8,bool,address)" \
$COMPLIANT_USDC_ADDRESS \
"USD Coin (Compliant)" \
"cUSDC" \
6 \
false \
0x0000000000000000000000000000000000000000 \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
Phase 3: CCIP Contracts (ChainID 138)
3.1 Deploy CCIPSender
forge script script/DeployCCIPSender.s.sol:DeployCCIPSender \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
# Save the deployed address
export CCIP_SENDER_ADDRESS=<deployed_address>
3.2 Deploy CCIPReceiver
forge script script/DeployCCIPReceiver.s.sol:DeployCCIPReceiver \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
# Save the deployed address
export CCIP_RECEIVER_ADDRESS=<deployed_address>
3.3 Deploy CCIP Bridges
# Deploy WETH9 Bridge
forge script script/DeployCCIPWETH9Bridge.s.sol:DeployCCIPWETH9Bridge \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
# Deploy WETH10 Bridge
forge script script/DeployCCIPWETH10Bridge.s.sol:DeployCCIPWETH10Bridge \
--rpc-url $RPC_URL \
--broadcast \
--legacy \
--gas-price 20000000000 \
--via-ir \
-vv
Phase 4: Cross-Network Deployments
4.1 Ethereum Mainnet
# Set Mainnet RPC URL
export RPC_URL_MAINNET=<mainnet_rpc_url>
export PRIVATE_KEY_MAINNET=<mainnet_private_key>
# Deploy CCIPSender
forge script script/DeployCCIPSenderMainnet.s.sol:DeployCCIPSenderMainnet \
--rpc-url $RPC_URL_MAINNET \
--broadcast \
--legacy \
--gas-price <mainnet_gas_price> \
--via-ir \
-vv
# Deploy CCIPReceiver
forge script script/DeployCCIPReceiverMainnet.s.sol:DeployCCIPReceiverMainnet \
--rpc-url $RPC_URL_MAINNET \
--broadcast \
--legacy \
--gas-price <mainnet_gas_price> \
--via-ir \
-vv
# Deploy CCIPLogger
forge script script/DeployCCIPLoggerMainnet.s.sol:DeployCCIPLoggerMainnet \
--rpc-url $RPC_URL_MAINNET \
--broadcast \
--legacy \
--gas-price <mainnet_gas_price> \
--via-ir \
-vv
4.2 Other Networks
Similar deployment process for:
- BSC (ChainID 56)
- Polygon (ChainID 137)
- Avalanche (ChainID 43114)
- Base (ChainID 8453)
- Arbitrum (ChainID 42161)
- Optimism (ChainID 10)
Phase 5: Post-Deployment Configuration
5.1 Update .env Files
Add all deployed addresses to .env:
# Legal Compliance
COMPLIANCE_REGISTRY_ADDRESS=<address>
COMPLIANT_USDT_ADDRESS=<address>
COMPLIANT_USDC_ADDRESS=<address>
# Utility Contracts
TOKEN_REGISTRY_ADDRESS=<address>
FEE_COLLECTOR_ADDRESS=<address>
# CCIP Contracts
CCIP_SENDER_ADDRESS=<address>
CCIP_RECEIVER_ADDRESS=<address>
CCIP_WETH9_BRIDGE_ADDRESS=<address>
CCIP_WETH10_BRIDGE_ADDRESS=<address>
5.2 Configure Fee Recipients
# Add fee recipient for ETH
cast send $FEE_COLLECTOR_ADDRESS \
"addFeeRecipient(address,address,uint256)" \
0x0000000000000000000000000000000000000000 \
<recipient_address> \
10000 \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
5.3 Verify Contracts
# Verify on block explorer
forge verify-contract <address> <contract_name> \
--chain-id 138 \
--etherscan-api-key <api_key>
Verification Checklist
- All contracts deployed successfully
- All addresses saved to
.env - Contracts registered in ComplianceRegistry
- Tokens registered in TokenRegistry
- Fee recipients configured
- Contracts verified on block explorer
- Cross-network deployments completed
- All dependencies configured
Troubleshooting
Common Issues
- "Stack too deep" error: Use
--via-irflag - "Insufficient funds": Check deployer balance
- "Contract already deployed": Check if address already has code
- "Invalid constructor parameters": Verify environment variables
Gas Issues
- Increase gas price:
--gas-price 20000000000 - Increase gas limit:
--gas-limit 10000000 - Use legacy transactions:
--legacy
Next Steps
- Configure cross-chain connections
- Set up monitoring and alerts
- Deploy additional contracts as needed
- Update service configurations
Last Updated: 2025-12-24