Files
explorer-monorepo/docs/COMPREHENSIVE_DEPLOYMENT_GUIDE.md

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 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)

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

  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