# 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 ```bash 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 key - `RPC_URL`: RPC endpoint URL (or `RPC_URL_138` for ChainID 138) **Contract Addresses** (for dependencies): - `CCIP_ROUTER_ADDRESS`: CCIP Router address - `ORACLE_AGGREGATOR_ADDRESS`: Oracle Aggregator address - `LINK_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 ```bash 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= ``` ### 1.2 Deploy CompliantUSDT ```bash # 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= ``` ### 1.3 Deploy CompliantUSDC ```bash # 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= ``` ### 1.4 Register Contracts in ComplianceRegistry ```bash # 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 ```bash 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= ``` ### 2.2 Deploy FeeCollector ```bash 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= ``` ### 2.3 Register Tokens in TokenRegistry ```bash # 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 ```bash 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= ``` ### 3.2 Deploy CCIPReceiver ```bash 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= ``` ### 3.3 Deploy CCIP Bridges ```bash # 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 ```bash # Set Mainnet RPC URL export RPC_URL_MAINNET= export PRIVATE_KEY_MAINNET= # Deploy CCIPSender forge script script/DeployCCIPSenderMainnet.s.sol:DeployCCIPSenderMainnet \ --rpc-url $RPC_URL_MAINNET \ --broadcast \ --legacy \ --gas-price \ --via-ir \ -vv # Deploy CCIPReceiver forge script script/DeployCCIPReceiverMainnet.s.sol:DeployCCIPReceiverMainnet \ --rpc-url $RPC_URL_MAINNET \ --broadcast \ --legacy \ --gas-price \ --via-ir \ -vv # Deploy CCIPLogger forge script script/DeployCCIPLoggerMainnet.s.sol:DeployCCIPLoggerMainnet \ --rpc-url $RPC_URL_MAINNET \ --broadcast \ --legacy \ --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`: ```bash # Legal Compliance COMPLIANCE_REGISTRY_ADDRESS=
COMPLIANT_USDT_ADDRESS=
COMPLIANT_USDC_ADDRESS=
# Utility Contracts TOKEN_REGISTRY_ADDRESS=
FEE_COLLECTOR_ADDRESS=
# CCIP Contracts CCIP_SENDER_ADDRESS=
CCIP_RECEIVER_ADDRESS=
CCIP_WETH9_BRIDGE_ADDRESS=
CCIP_WETH10_BRIDGE_ADDRESS=
``` ### 5.2 Configure Fee Recipients ```bash # Add fee recipient for ETH cast send $FEE_COLLECTOR_ADDRESS \ "addFeeRecipient(address,address,uint256)" \ 0x0000000000000000000000000000000000000000 \ \ 10000 \ --rpc-url $RPC_URL \ --private-key $PRIVATE_KEY ``` ### 5.3 Verify Contracts ```bash # Verify on block explorer forge verify-contract
\ --chain-id 138 \ --etherscan-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 1. **"Stack too deep" error**: Use `--via-ir` flag 2. **"Insufficient funds"**: Check deployer balance 3. **"Contract already deployed"**: Check if address already has code 4. **"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 1. Configure cross-chain connections 2. Set up monitoring and alerts 3. Deploy additional contracts as needed 4. Update service configurations --- **Last Updated**: 2025-12-24