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:
180
terraform/phases/phase1/scripts/fetch-runtime-bytecode.sh
Executable file
180
terraform/phases/phase1/scripts/fetch-runtime-bytecode.sh
Executable 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"
|
||||
|
||||
Reference in New Issue
Block a user