Files
smom-dbis-138/docs/deployment/DEPLOYMENT_COMPLETE_GUIDE.md
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

8.2 KiB

Complete Deployment Guide

Overview

This guide covers the complete deployment process for the DeFi Oracle Meta Mainnet (ChainID 138), including blockchain infrastructure and smart contracts.

Prerequisites

  1. Azure CLI installed and authenticated
  2. Terraform >= 1.0 installed
  3. kubectl configured for AKS
  4. Helm 3.x installed
  5. Foundry (forge, cast, anvil) installed
  6. .env file configured with required variables

Deployment Order

The deployment follows this order:

  1. Blockchain Infrastructure (Azure/Kubernetes)
  2. Smart Contracts (in proper dependency order)

Step 1: Check Deployment Status

First, check the current deployment status:

./scripts/deployment/check-deployment-status.sh

This will show:

  • Current contract deployment status
  • Infrastructure status
  • Missing configuration

Step 2: Deploy Blockchain Infrastructure (if needed)

If the blockchain infrastructure is not deployed:

Option A: Deploy to Azure/Kubernetes (Production)

  1. Deploy Infrastructure with Terraform:

    cd terraform
    terraform init
    terraform plan
    terraform apply
    
  2. Get AKS Credentials:

    az aks get-credentials --resource-group az-p-we-rg-comp-001 --name az-p-we-aks-main
    
  3. Deploy Kubernetes Resources:

    kubectl apply -f k8s/base/namespace.yaml
    helm install besu-validators ./helm/besu-network -f helm/besu-network/values-validators.yaml -n besu-network
    helm install besu-sentries ./helm/besu-network -f helm/besu-network/values-sentries.yaml -n besu-network
    helm install besu-rpc ./helm/besu-network -f helm/besu-network/values-rpc.yaml -n besu-network
    
  4. Get RPC URL:

    • After deployment, get the RPC endpoint from the Application Gateway
    • Update .env with RPC_URL

Option B: Start Local Testnet (Development/Testing)

For local testing, start an Anvil testnet:

./scripts/deployment/start-local-testnet.sh

This will:

  • Start Anvil testnet on port 8545
  • Set Chain ID to 138
  • Update .env with RPC_URL=http://localhost:8545
  • Prefund test accounts

Step 3: Deploy Smart Contracts

Deploy all contracts in proper order:

./scripts/deployment/deploy-all-ordered.sh

This script will:

  1. Check RPC endpoint - Verify blockchain is accessible
  2. Deploy Mock LINK Token (if not configured)
  3. Deploy CCIP Router - Cross-chain message router
  4. Deploy WETH9 - Standard WETH implementation
  5. Deploy WETH10 - Enhanced WETH with flash loans
  6. Deploy CCIPWETH9Bridge - Cross-chain WETH9 bridge
  7. Deploy CCIPWETH10Bridge - Cross-chain WETH10 bridge
  8. Deploy Oracle Aggregator - Oracle price feed aggregator
  9. Update .env file - Save all deployed addresses

Manual Deployment (Alternative)

If you prefer to deploy contracts manually:

forge script script/DeployMockLinkToken.s.sol:DeployMockLinkToken \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

CCIP_FEE_TOKEN=<deployed_address>

2. Deploy CCIP Router

forge script script/DeployCCIPRouter.s.sol:DeployCCIPRouter \
    --sig "run(address,uint256,uint256)" \
    $CCIP_FEE_TOKEN \
    1000000000000000 \
    1000000000 \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

CCIP_ROUTER=<deployed_address>

3. Deploy WETH9

forge script script/DeployWETH.s.sol:DeployWETH \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

WETH9_ADDRESS=<deployed_address>

4. Deploy WETH10

forge script script/DeployWETH10.s.sol:DeployWETH10 \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

WETH10_ADDRESS=<deployed_address>

5. Deploy CCIPWETH9Bridge

forge script script/DeployCCIPWETH9Bridge.s.sol:DeployCCIPWETH9Bridge \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

CCIPWETH9BRIDGE_ADDRESS=<deployed_address>

6. Deploy CCIPWETH10Bridge

forge script script/DeployCCIPWETH10Bridge.s.sol:DeployCCIPWETH10Bridge \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

CCIPWETH10BRIDGE_ADDRESS=<deployed_address>

7. Deploy Oracle Aggregator

forge script script/DeployOracle.s.sol:DeployOracle \
    --rpc-url $RPC_URL \
    --broadcast \
    --private-key $PRIVATE_KEY \
    -vvv

Update .env:

ORACLE_AGGREGATOR_ADDRESS=<deployed_address>

Step 4: Verify Deployment

Verify all contracts are deployed:

./scripts/deployment/check-deployment-status.sh

This will check:

  • Contract addresses in .env
  • Contract existence on-chain
  • Infrastructure status

Step 5: Configure Contracts

Configure CCIP Router

Add supported chains:

cast send $CCIP_ROUTER "addSupportedChain(uint64)" 5009297550715157269 \
    --rpc-url $RPC_URL \
    --private-key $PRIVATE_KEY

Configure CCIP Bridges

Add destination chains for bridges:

# For WETH9 Bridge
cast send $CCIPWETH9BRIDGE_ADDRESS "addDestination(uint64,address)" \
    5009297550715157269 \
    <destination_bridge_address> \
    --rpc-url $RPC_URL \
    --private-key $PRIVATE_KEY

# For WETH10 Bridge
cast send $CCIPWETH10BRIDGE_ADDRESS "addDestination(uint64,address)" \
    5009297550715157269 \
    <destination_bridge_address> \
    --rpc-url $RPC_URL \
    --private-key $PRIVATE_KEY

Environment Variables

Ensure .env file contains:

# Deployer
PRIVATE_KEY=<your_private_key>

# Blockchain
RPC_URL=<rpc_endpoint>

# CCIP Configuration
CCIP_ROUTER=<ccip_router_address>
CCIP_FEE_TOKEN=<link_token_address>

# WETH Configuration
WETH9_ADDRESS=<weth9_address>
WETH10_ADDRESS=<weth10_address>

# Bridge Configuration
CCIPWETH9BRIDGE_ADDRESS=<weth9_bridge_address>
CCIPWETH10BRIDGE_ADDRESS=<weth10_bridge_address>

# Oracle Configuration
ORACLE_AGGREGATOR_ADDRESS=<oracle_aggregator_address>

Deployment Checklist

  • Blockchain infrastructure deployed (or local testnet running)
  • RPC endpoint accessible
  • PRIVATE_KEY configured in .env
  • Mock LINK Token deployed (if needed)
  • CCIP Router deployed and configured
  • WETH9 deployed
  • WETH10 deployed
  • CCIPWETH9Bridge deployed
  • CCIPWETH10Bridge deployed
  • Oracle Aggregator deployed
  • All addresses updated in .env
  • Contracts verified on explorer (if applicable)
  • Configuration verified

Troubleshooting

RPC Endpoint Not Accessible

  1. Check if blockchain is running:

    curl -X POST $RPC_URL -H "Content-Type: application/json" \
      -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
    
  2. For local testnet, check if Anvil is running:

    lsof -Pi :8545 -sTCP:LISTEN
    

Contract Deployment Fails

  1. Check deployer balance:

    cast balance <deployer_address> --rpc-url $RPC_URL
    
  2. Check gas prices:

    cast gas-price --rpc-url $RPC_URL
    
  3. Verify contract compilation:

    forge build
    

Missing Dependencies

  1. Check if OpenZeppelin is installed:

    ls lib/openzeppelin-contracts
    
  2. Install dependencies:

    forge install OpenZeppelin/openzeppelin-contracts@v4.9.6
    

Next Steps

After deployment:

  1. Verify Contracts - Verify contracts on explorer
  2. Test Contracts - Run test suite
  3. Configure Monitoring - Set up monitoring and alerts
  4. Documentation - Update documentation with deployed addresses
  5. Integration - Integrate with external services

Support

For issues or questions:

  • Check deployment logs
  • Review contract documentation
  • Verify configuration
  • Check troubleshooting section

References