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.
This commit is contained in:
defiQUG
2025-12-12 14:57:48 -08:00
parent a1466e4005
commit 1fb7266469
1720 changed files with 241279 additions and 16 deletions

View File

@@ -0,0 +1,180 @@
#!/bin/bash
# Fetch Runtime Bytecode from Mainnet
# Fetches runtime bytecode for contracts from Ethereum mainnet to use in genesis predeploy
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PHASE1_DIR="$SCRIPT_DIR/../"
PROJECT_ROOT="$(cd "$PHASE1_DIR/../../.." && pwd)"
GENESIS_FILE="$PHASE1_DIR/config/genesis-138.json"
# Load .env (try multiple locations)
ENV_FILE=""
for path in "$PROJECT_ROOT/.env" "$PHASE1_DIR/../../.env" "$HOME/.env"; do
if [ -f "$path" ]; then
ENV_FILE="$path"
break
fi
done
if [ -n "$ENV_FILE" ]; then
export $(grep -v '^#' "$ENV_FILE" | grep -E "^(ETHEREUM_MAINNET_RPC)" | xargs)
fi
# Try multiple RPC endpoints
RPC_ENDPOINTS=(
"${ETHEREUM_MAINNET_RPC:-}"
"https://eth.llamarpc.com"
"https://rpc.ankr.com/eth"
"https://ethereum.publicnode.com"
"https://eth-mainnet.public.blastapi.io"
)
MAINNET_RPC=""
for RPC in "${RPC_ENDPOINTS[@]}"; do
if [ -n "$RPC" ]; then
if cast code "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" --rpc-url "$RPC" &>/dev/null; then
MAINNET_RPC="$RPC"
echo "Using RPC: $RPC"
break
fi
fi
done
if [ -z "$MAINNET_RPC" ]; then
echo "Error: Could not find working mainnet RPC endpoint"
exit 1
fi
echo "=========================================="
echo "Fetch Runtime Bytecode from Mainnet"
echo "=========================================="
echo "RPC: $MAINNET_RPC"
echo ""
# Contract addresses
WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
WETH10_ADDRESS="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
CCIP_ROUTER="0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"
CCIPWETH9_BRIDGE="0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6"
CCIPWETH10_BRIDGE="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
LINK_TOKEN="0x514910771AF9Ca656af840dff83E8264EcF986CA"
# Fetch bytecode
echo "Fetching bytecode from mainnet..."
WETH9_CODE=$(cast code "$WETH9_ADDRESS" --rpc-url "$MAINNET_RPC" 2>/dev/null | grep -v "Error\|Warning" || echo "")
WETH10_CODE=$(cast code "$WETH10_ADDRESS" --rpc-url "$MAINNET_RPC" 2>/dev/null | grep -v "Error\|Warning" || echo "")
CCIP_ROUTER_CODE=$(cast code "$CCIP_ROUTER" --rpc-url "$MAINNET_RPC" 2>/dev/null | grep -v "Error\|Warning" || echo "")
CCIPWETH9_BRIDGE_CODE=$(cast code "$CCIPWETH9_BRIDGE" --rpc-url "$MAINNET_RPC" 2>/dev/null | grep -v "Error\|Warning" || echo "")
CCIPWETH10_BRIDGE_CODE=$(cast code "$CCIPWETH10_BRIDGE" --rpc-url "$MAINNET_RPC" 2>/dev/null | grep -v "Error\|Warning" || echo "")
LINK_TOKEN_CODE=$(cast code "$LINK_TOKEN" --rpc-url "$MAINNET_RPC" 2>/dev/null | grep -v "Error\|Warning" || echo "")
# Check results
SUCCESS_COUNT=0
TOTAL=6
if [ -n "$WETH9_CODE" ] && [ "$WETH9_CODE" != "0x" ]; then
echo "✓ WETH9 bytecode retrieved (${#WETH9_CODE} characters)"
((SUCCESS_COUNT++))
else
echo "✗ WETH9 bytecode not available"
fi
if [ -n "$WETH10_CODE" ] && [ "$WETH10_CODE" != "0x" ]; then
echo "✓ WETH10 bytecode retrieved (${#WETH10_CODE} characters)"
((SUCCESS_COUNT++))
else
echo "✗ WETH10 bytecode not available"
fi
if [ -n "$CCIP_ROUTER_CODE" ] && [ "$CCIP_ROUTER_CODE" != "0x" ]; then
echo "✓ CCIP Router bytecode retrieved (${#CCIP_ROUTER_CODE} characters)"
((SUCCESS_COUNT++))
else
echo "✗ CCIP Router bytecode not available"
fi
if [ -n "$CCIPWETH9_BRIDGE_CODE" ] && [ "$CCIPWETH9_BRIDGE_CODE" != "0x" ]; then
echo "✓ CCIP WETH9 Bridge bytecode retrieved (${#CCIPWETH9_BRIDGE_CODE} characters)"
((SUCCESS_COUNT++))
else
echo "✗ CCIP WETH9 Bridge bytecode not available"
fi
if [ -n "$CCIPWETH10_BRIDGE_CODE" ] && [ "$CCIPWETH10_BRIDGE_CODE" != "0x" ]; then
echo "✓ CCIP WETH10 Bridge bytecode retrieved (${#CCIPWETH10_BRIDGE_CODE} characters)"
((SUCCESS_COUNT++))
else
echo "✗ CCIP WETH10 Bridge bytecode not available"
fi
if [ -n "$LINK_TOKEN_CODE" ] && [ "$LINK_TOKEN_CODE" != "0x" ]; then
echo "✓ LINK Token bytecode retrieved (${#LINK_TOKEN_CODE} characters)"
((SUCCESS_COUNT++))
else
echo "✗ LINK Token bytecode not available"
fi
echo ""
echo "Retrieved: $SUCCESS_COUNT/$TOTAL contracts"
if [ $SUCCESS_COUNT -eq 0 ]; then
echo "Error: Could not retrieve any bytecode"
exit 1
fi
# Update genesis file
echo ""
echo "Updating genesis file with retrieved bytecode..."
# Create backup
cp "$GENESIS_FILE" "$GENESIS_FILE.backup"
# Update using jq
if [ -n "$WETH9_CODE" ] && [ "$WETH9_CODE" != "0x" ]; then
jq --arg addr "$WETH9_ADDRESS" --arg code "$WETH9_CODE" \
'.alloc[$addr].code = $code' "$GENESIS_FILE" > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE"
echo "✓ Updated WETH9"
fi
if [ -n "$WETH10_CODE" ] && [ "$WETH10_CODE" != "0x" ]; then
jq --arg addr "$WETH10_ADDRESS" --arg code "$WETH10_CODE" \
'.alloc[$addr].code = $code' "$GENESIS_FILE" > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE"
echo "✓ Updated WETH10"
fi
if [ -n "$CCIP_ROUTER_CODE" ] && [ "$CCIP_ROUTER_CODE" != "0x" ]; then
jq --arg addr "$CCIP_ROUTER" --arg code "$CCIP_ROUTER_CODE" \
'.alloc[$addr].code = $code' "$GENESIS_FILE" > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE"
echo "✓ Updated CCIP Router"
fi
if [ -n "$CCIPWETH9_BRIDGE_CODE" ] && [ "$CCIPWETH9_BRIDGE_CODE" != "0x" ]; then
jq --arg addr "$CCIPWETH9_BRIDGE" --arg code "$CCIPWETH9_BRIDGE_CODE" \
'.alloc[$addr].code = $code' "$GENESIS_FILE" > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE"
echo "✓ Updated CCIP WETH9 Bridge"
fi
if [ -n "$CCIPWETH10_BRIDGE_CODE" ] && [ "$CCIPWETH10_BRIDGE_CODE" != "0x" ]; then
jq --arg addr "$CCIPWETH10_BRIDGE" --arg code "$CCIPWETH10_BRIDGE_CODE" \
'.alloc[$addr].code = $code' "$GENESIS_FILE" > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE"
echo "✓ Updated CCIP WETH10 Bridge"
fi
if [ -n "$LINK_TOKEN_CODE" ] && [ "$LINK_TOKEN_CODE" != "0x" ]; then
jq --arg addr "$LINK_TOKEN" --arg code "$LINK_TOKEN_CODE" \
'.alloc[$addr].code = $code' "$GENESIS_FILE" > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE"
echo "✓ Updated LINK Token"
fi
echo ""
echo "=========================================="
echo "Genesis File Updated"
echo "=========================================="
echo "Backup saved to: $GENESIS_FILE.backup"
echo "Updated file: $GENESIS_FILE"
echo ""
echo "Note: Storage layouts may need to be filled in manually"
echo " See config/GENESIS_PREDEPLOY_INSTRUCTIONS.md"