feat(scripts): resolve CCIP/LINK addresses via config inventory
- Add scripts/lib/address-inventory.sh (jq + JSON inventory fallback) - Wire deployment helper scripts to load_explorer_runtime_env + resolve_address_value - Persist new LINK to address-inventory.json via persist_inventory_value - Document config/*.json in config/README.md Made-with: Cursor
This commit is contained in:
@@ -6,12 +6,13 @@ set -euo pipefail
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || source "$PROJECT_ROOT/../.env" 2>/dev/null || true
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
LINK_TOKEN="${LINK_TOKEN:-}"
|
||||
WETH9_BRIDGE="0x971cD9D156f193df8051E48043C476e53ECd4693"
|
||||
WETH10_BRIDGE="0xe0E93247376aa097dB308B92e6Ba36bA015535D0"
|
||||
LINK_TOKEN="$(resolve_address_value LINK_TOKEN LINK_TOKEN "")"
|
||||
WETH9_BRIDGE="$(resolve_address_value CCIPWETH9_BRIDGE CCIPWETH9_BRIDGE 0x971cD9D156f193df8051E48043C476e53ECd4693)"
|
||||
WETH10_BRIDGE="$(resolve_address_value CCIPWETH10_BRIDGE CCIPWETH10_BRIDGE 0xe0E93247376aa097dB308B92e6Ba36bA015535D0)"
|
||||
ACCOUNT=$(cast wallet address "$PRIVATE_KEY")
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
@@ -53,9 +54,9 @@ if [ "${LINK_CONFIRMED:-false}" != "true" ]; then
|
||||
echo "Waiting 60 seconds for network confirmation..."
|
||||
sleep 60
|
||||
|
||||
# Update .env
|
||||
sed -i "s|^LINK_TOKEN=.*|LINK_TOKEN=$NEW_LINK|" "$PROJECT_ROOT/.env" 2>/dev/null || \
|
||||
echo "LINK_TOKEN=$NEW_LINK" >> "$PROJECT_ROOT/.env"
|
||||
# Keep address inventory as the script-facing source of truth for addresses.
|
||||
persist_inventory_value "LINK_TOKEN" "$NEW_LINK" || true
|
||||
persist_inventory_value "CCIP_CHAIN138_FEE_TOKEN" "$NEW_LINK" || true
|
||||
export LINK_TOKEN="$NEW_LINK"
|
||||
|
||||
# Verify
|
||||
@@ -139,4 +140,3 @@ if [ "${LINK_CONFIRMED:-false}" = "true" ]; then
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -6,13 +6,14 @@ set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
LINK_TOKEN="0x514910771AF9Ca656af840dff83E8264EcF986CA"
|
||||
LINK_TOKEN="$(resolve_address_value LINK_TOKEN LINK_TOKEN_138 0x514910771AF9Ca656af840dff83E8264EcF986CA)"
|
||||
CHAIN_ID=138
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
CCIP_ROUTER="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
|
||||
CCIP_ROUTER="$(resolve_address_value CCIP_ROUTER_ADDRESS CCIP_ROUTER_ADDRESS 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e)"
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ COMPLETE LINK TOKEN SETUP ║"
|
||||
@@ -125,8 +126,8 @@ echo ""
|
||||
# Step 4: Check bridge balances (if token exists)
|
||||
if [ "${TOKEN_EXISTS:-false}" = "true" ]; then
|
||||
echo "=== Step 4: Checking Bridge LINK Balances ==="
|
||||
WETH9_BRIDGE="0x971cD9D156f193df8051E48043C476e53ECd4693"
|
||||
WETH10_BRIDGE="0xe0E93247376aa097dB308B92e6Ba36bA015535D0"
|
||||
WETH9_BRIDGE="$(resolve_address_value CCIPWETH9_BRIDGE CCIPWETH9_BRIDGE 0x971cD9D156f193df8051E48043C476e53ECd4693)"
|
||||
WETH10_BRIDGE="$(resolve_address_value CCIPWETH10_BRIDGE CCIPWETH10_BRIDGE 0xe0E93247376aa097dB308B92e6Ba36bA015535D0)"
|
||||
|
||||
WETH9_LINK=$(cast call "$LINK_TOKEN" "balanceOf(address)" "$WETH9_BRIDGE" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||||
WETH9_LINK_ETH=$(cast --from-wei "$WETH9_LINK" ether 2>/dev/null || echo "0")
|
||||
@@ -172,7 +173,7 @@ echo "║ SETUP SUMMARY ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo "Configuration:"
|
||||
echo " ✓ .env updated with LINK_TOKEN"
|
||||
echo " ✓ Address inventory available for LINK_TOKEN"
|
||||
echo " ✓ Token lists updated"
|
||||
echo " ✓ CCIP configuration documented"
|
||||
echo ""
|
||||
@@ -207,4 +208,3 @@ fi
|
||||
echo ""
|
||||
echo "✅ Setup script completed!"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR/.."
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
source .env 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
ACCOUNT=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
@@ -45,8 +47,8 @@ echo "╚═══════════════════════
|
||||
echo ""
|
||||
if ./scripts/diagnose-link-deployment.sh 2>&1 | grep -q "Using Existing LINK Token"; then
|
||||
echo "✓✓✓ Found existing LINK token!"
|
||||
source .env 2>/dev/null || true
|
||||
LINK_TOKEN="${LINK_TOKEN:-}"
|
||||
load_explorer_runtime_env
|
||||
LINK_TOKEN="$(resolve_address_value LINK_TOKEN LINK_TOKEN "")"
|
||||
if [ -n "$LINK_TOKEN" ] && [ ${#LINK_TOKEN} -eq 42 ]; then
|
||||
CODE=$(cast code "$LINK_TOKEN" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$CODE" ] && [ "$CODE" != "0x" ] && [ ${#CODE} -gt 100 ]; then
|
||||
@@ -86,8 +88,8 @@ echo ""
|
||||
echo "Waiting 45 seconds for network confirmation..."
|
||||
sleep 45
|
||||
|
||||
source .env 2>/dev/null || true
|
||||
LINK_TOKEN="${LINK_TOKEN:-}"
|
||||
load_explorer_runtime_env
|
||||
LINK_TOKEN="$(resolve_address_value LINK_TOKEN LINK_TOKEN "")"
|
||||
if [ -n "$LINK_TOKEN" ] && [ ${#LINK_TOKEN} -eq 42 ]; then
|
||||
CODE=$(cast code "$LINK_TOKEN" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$CODE" ] && [ "$CODE" != "0x" ] && [ ${#CODE} -gt 100 ]; then
|
||||
@@ -128,4 +130,3 @@ echo " 1. Wait additional time (5-10 minutes)"
|
||||
echo " 2. Use Remix IDE (instructions above)"
|
||||
echo " 3. Check block explorer: https://explorer.d-bis.org/address/$ACCOUNT"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -7,9 +7,12 @@ set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
load_explorer_runtime_env
|
||||
|
||||
# Ethereum Mainnet canonical LINK token address
|
||||
LINK_TOKEN_MAINNET="0x514910771AF9Ca656af840dff83E8264EcF986CA"
|
||||
CCIP_ROUTER="$(resolve_address_value CCIP_ROUTER_ADDRESS CCIP_ROUTER_ADDRESS 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e)"
|
||||
CHAIN_ID=138
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
@@ -20,26 +23,16 @@ echo "LINK Token Address: $LINK_TOKEN_MAINNET"
|
||||
echo "Chain ID: $CHAIN_ID"
|
||||
echo ""
|
||||
|
||||
# Step 1: Update .env file
|
||||
echo "=== Step 1: Updating .env file ==="
|
||||
ENV_FILE="$PROJECT_ROOT/.env"
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
# Update or add LINK_TOKEN
|
||||
if grep -q "^LINK_TOKEN=" "$ENV_FILE"; then
|
||||
sed -i "s|^LINK_TOKEN=.*|LINK_TOKEN=$LINK_TOKEN_MAINNET|" "$ENV_FILE"
|
||||
echo "✓ Updated LINK_TOKEN in .env"
|
||||
else
|
||||
echo "LINK_TOKEN=$LINK_TOKEN_MAINNET" >> "$ENV_FILE"
|
||||
echo "✓ Added LINK_TOKEN to .env"
|
||||
fi
|
||||
|
||||
# Update CCIP fee token if exists
|
||||
if grep -q "^CCIP_CHAIN138_FEE_TOKEN=" "$ENV_FILE"; then
|
||||
sed -i "s|^CCIP_CHAIN138_FEE_TOKEN=.*|CCIP_CHAIN138_FEE_TOKEN=$LINK_TOKEN_MAINNET|" "$ENV_FILE"
|
||||
echo "✓ Updated CCIP_CHAIN138_FEE_TOKEN in .env"
|
||||
fi
|
||||
# Step 1: Update address inventory
|
||||
echo "=== Step 1: Updating address inventory ==="
|
||||
if [ -f "$EXPLORER_ADDRESS_INVENTORY_FILE" ]; then
|
||||
persist_inventory_value "LINK_TOKEN" "$LINK_TOKEN_MAINNET"
|
||||
persist_inventory_value "LINK_TOKEN_138" "$LINK_TOKEN_MAINNET"
|
||||
persist_inventory_value "LINK_TOKEN_MAINNET" "$LINK_TOKEN_MAINNET"
|
||||
persist_inventory_value "CCIP_CHAIN138_FEE_TOKEN" "$LINK_TOKEN_MAINNET"
|
||||
echo "✓ Updated config/address-inventory.json"
|
||||
else
|
||||
echo "⚠ .env file not found at $ENV_FILE"
|
||||
echo "⚠ Address inventory not found at $EXPLORER_ADDRESS_INVENTORY_FILE"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
@@ -105,7 +98,6 @@ echo ""
|
||||
|
||||
# Step 3: Add to database
|
||||
echo "=== Step 3: Adding LINK token to database ==="
|
||||
source "$ENV_FILE" 2>/dev/null || true
|
||||
|
||||
DB_HOST="${DB_HOST:-localhost}"
|
||||
DB_PORT="${DB_PORT:-5432}"
|
||||
@@ -158,7 +150,7 @@ echo ""
|
||||
echo "LINK Token Address: $LINK_TOKEN_MAINNET"
|
||||
echo ""
|
||||
echo "Updated:"
|
||||
echo " ✓ .env file (LINK_TOKEN and CCIP_CHAIN138_FEE_TOKEN)"
|
||||
echo " ✓ Address inventory (LINK_TOKEN and CCIP_CHAIN138_FEE_TOKEN)"
|
||||
echo " ✓ Token list files (dbis-138.tokenlist.json, token-list.json)"
|
||||
echo " ✓ Database tokens table (if accessible)"
|
||||
echo " ✓ CCIP documentation"
|
||||
@@ -168,9 +160,8 @@ echo " 1. Verify LINK token on ChainID 138:"
|
||||
echo " cast code $LINK_TOKEN_MAINNET --rpc-url <RPC_URL>"
|
||||
echo ""
|
||||
echo " 2. Check CCIP Router fee token:"
|
||||
echo " cast call <CCIP_ROUTER> \"getFeeToken()\" --rpc-url <RPC_URL>"
|
||||
echo " cast call $CCIP_ROUTER \"getFeeToken()\" --rpc-url <RPC_URL>"
|
||||
echo ""
|
||||
echo " 3. Fund bridge contracts with LINK if needed:"
|
||||
echo " ./scripts/fund-bridge-contracts.sh 10"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@ set -euo pipefail
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
SOURCE_PROJECT="/home/intlc/projects/smom-dbis-138"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || source "$PROJECT_ROOT/../.env" 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="http://192.168.11.250:8545"
|
||||
CHAIN_ID=138
|
||||
@@ -26,7 +27,7 @@ echo ""
|
||||
|
||||
# Check prerequisites
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo "❌ Error: PRIVATE_KEY not set in .env"
|
||||
echo "❌ Error: PRIVATE_KEY not available in effective environment"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -189,14 +190,13 @@ echo "Deploying LINK Token (required for CCIP)..."
|
||||
echo ""
|
||||
deploy_contract "script/DeployMockLinkToken.s.sol:DeployMockLinkToken" "MockLinkToken"
|
||||
|
||||
# Update .env with LINK token address if found
|
||||
# Update address inventory with LINK token address if found
|
||||
if [ -n "${DEPLOYED_ADDRESS:-}" ]; then
|
||||
echo ""
|
||||
echo "Updating .env with LINK_TOKEN=$DEPLOYED_ADDRESS"
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
sed -i "s/^LINK_TOKEN=.*/LINK_TOKEN=$DEPLOYED_ADDRESS/" "$PROJECT_ROOT/.env" || true
|
||||
echo "✅ .env updated"
|
||||
fi
|
||||
echo "Updating address inventory with LINK_TOKEN=$DEPLOYED_ADDRESS"
|
||||
persist_inventory_value "LINK_TOKEN" "$DEPLOYED_ADDRESS" || true
|
||||
persist_inventory_value "CCIP_CHAIN138_FEE_TOKEN" "$DEPLOYED_ADDRESS" || true
|
||||
echo "✅ Address inventory updated"
|
||||
DEPLOYED_ADDRESS="" # Reset for next deployment
|
||||
fi
|
||||
|
||||
@@ -220,4 +220,3 @@ echo " Deployer: $DEPLOYER"
|
||||
echo ""
|
||||
echo "📄 Deployment logs saved in /tmp/deploy-*.log"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -5,8 +5,9 @@ set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || source "$PROJECT_ROOT/../.env" 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
GAS_PRICE="${1:-$(cast --to-wei 20 gwei)}"
|
||||
@@ -158,10 +159,10 @@ if [ "$CONFIRMED" != "true" ]; then
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Updating .env ==="
|
||||
sed -i "s|^LINK_TOKEN=.*|LINK_TOKEN=$LINK_ADDRESS|" "$PROJECT_ROOT/.env" 2>/dev/null || \
|
||||
echo "LINK_TOKEN=$LINK_ADDRESS" >> "$PROJECT_ROOT/.env"
|
||||
echo "✓ Updated .env"
|
||||
echo "=== Updating address inventory ==="
|
||||
persist_inventory_value "LINK_TOKEN" "$LINK_ADDRESS"
|
||||
persist_inventory_value "CCIP_CHAIN138_FEE_TOKEN" "$LINK_ADDRESS"
|
||||
echo "✓ Updated config/address-inventory.json"
|
||||
echo ""
|
||||
|
||||
echo "=== Verifying Token Functions ==="
|
||||
@@ -197,4 +198,3 @@ fi
|
||||
echo "✅✅✅ LINK TOKEN DEPLOYMENT COMPLETE!"
|
||||
echo "Address: $LINK_ADDRESS"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -4,12 +4,15 @@
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR/.."
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
source .env 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
ACCOUNT=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
FOUND_LINK=""
|
||||
|
||||
if [ -z "$ACCOUNT" ]; then
|
||||
echo "Error: PRIVATE_KEY not set or invalid"
|
||||
@@ -43,7 +46,7 @@ echo ""
|
||||
|
||||
# Check CCIP Router for fee token
|
||||
echo "=== Checking CCIP Router for Fee Token ==="
|
||||
CCIP_ROUTER="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
|
||||
CCIP_ROUTER="$(resolve_address_value CCIP_ROUTER_ADDRESS CCIP_ROUTER_ADDRESS 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e)"
|
||||
ROUTER_CODE=$(cast code "$CCIP_ROUTER" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$ROUTER_CODE" ] && [ "$ROUTER_CODE" != "0x" ]; then
|
||||
echo "✓ CCIP Router exists"
|
||||
@@ -65,6 +68,7 @@ echo ""
|
||||
# Check if LINK token exists at any known address
|
||||
echo "=== Checking Known LINK Addresses ==="
|
||||
KNOWN_LINKS=(
|
||||
"$(resolve_address_value LINK_TOKEN LINK_TOKEN 0x514910771AF9Ca656af840dff83E8264EcF986CA)"
|
||||
"0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
|
||||
"0x07dE1f489E1bfCE2c326066a9DFc10e731CBA0CB"
|
||||
"0x514910771AF9Ca656af840dff83E8264EcF986CA"
|
||||
@@ -92,8 +96,9 @@ echo ""
|
||||
if [ -n "$FOUND_LINK" ]; then
|
||||
echo "=== Using Existing LINK Token ==="
|
||||
echo "LINK Token: $FOUND_LINK"
|
||||
sed -i "s|^LINK_TOKEN=.*|LINK_TOKEN=$FOUND_LINK|" .env 2>/dev/null || echo "LINK_TOKEN=$FOUND_LINK" >> .env
|
||||
echo "✓ Updated .env"
|
||||
persist_inventory_value "LINK_TOKEN" "$FOUND_LINK" || true
|
||||
persist_inventory_value "CCIP_CHAIN138_FEE_TOKEN" "$FOUND_LINK" || true
|
||||
echo "✓ Updated address inventory"
|
||||
|
||||
# Check balance
|
||||
BALANCE=$(cast call "$FOUND_LINK" "balanceOf(address)" "$ACCOUNT" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||||
@@ -246,9 +251,10 @@ if [ -n "$NEW_LINK" ] && [ ${#NEW_LINK} -eq 42 ]; then
|
||||
echo "$NEW_LINK" > /tmp/link_address.txt
|
||||
|
||||
# Update .env
|
||||
cd "$SCRIPT_DIR/.."
|
||||
sed -i "s|^LINK_TOKEN=.*|LINK_TOKEN=$NEW_LINK|" .env 2>/dev/null || echo "LINK_TOKEN=$NEW_LINK" >> .env
|
||||
echo "✓ Updated .env"
|
||||
cd "$PROJECT_ROOT"
|
||||
persist_inventory_value "LINK_TOKEN" "$NEW_LINK" || true
|
||||
persist_inventory_value "CCIP_CHAIN138_FEE_TOKEN" "$NEW_LINK" || true
|
||||
echo "✓ Updated address inventory"
|
||||
|
||||
# Wait and verify
|
||||
echo ""
|
||||
@@ -294,4 +300,3 @@ fi
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$TEMP_DIR"
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ set -uo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
@@ -20,15 +21,15 @@ log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
||||
log_header() { echo -e "${CYAN}[CHECK]${NC} $1"; }
|
||||
|
||||
# Load environment
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || source "$PROJECT_ROOT/../.env" 2>/dev/null || true
|
||||
# Load runtime env plus address inventory.
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
LINK_TOKEN="${LINK_TOKEN:-0x73ADaF7dBa95221c080db5631466d2bC54f6a76B}"
|
||||
WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
||||
WETH10="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
|
||||
WETH9_BRIDGE="0x971cD9D156f193df8051E48043C476e53ECd4693"
|
||||
WETH10_BRIDGE="0xe0E93247376aa097dB308B92e6Ba36bA015535D0"
|
||||
LINK_TOKEN="$(resolve_address_value LINK_TOKEN LINK_TOKEN 0x73ADaF7dBa95221c080db5631466d2bC54f6a76B)"
|
||||
WETH9="$(resolve_address_value WETH9_ADDRESS WETH9_ADDRESS 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)"
|
||||
WETH10="$(resolve_address_value WETH10_ADDRESS WETH10_ADDRESS 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f)"
|
||||
WETH9_BRIDGE="$(resolve_address_value CCIPWETH9_BRIDGE CCIPWETH9_BRIDGE 0x971cD9D156f193df8051E48043C476e53ECd4693)"
|
||||
WETH10_BRIDGE="$(resolve_address_value CCIPWETH10_BRIDGE CCIPWETH10_BRIDGE 0xe0E93247376aa097dB308B92e6Ba36bA015535D0)"
|
||||
|
||||
PASSED=0
|
||||
FAILED=0
|
||||
@@ -63,7 +64,7 @@ echo ""
|
||||
# 2. Account Status
|
||||
log_header "2. Account Status"
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
check_fail "PRIVATE_KEY not set in .env"
|
||||
check_fail "PRIVATE_KEY not available in effective environment"
|
||||
ACCOUNT=""
|
||||
else
|
||||
ACCOUNT=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
@@ -211,18 +212,18 @@ echo ""
|
||||
log_header "8. Configuration Files"
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
check_pass ".env file exists"
|
||||
if grep -q "^PRIVATE_KEY=" "$PROJECT_ROOT/.env"; then
|
||||
check_pass "PRIVATE_KEY configured"
|
||||
else
|
||||
check_fail "PRIVATE_KEY not in .env"
|
||||
fi
|
||||
if grep -q "^LINK_TOKEN=" "$PROJECT_ROOT/.env"; then
|
||||
check_pass "LINK_TOKEN configured"
|
||||
else
|
||||
check_warn "LINK_TOKEN not in .env"
|
||||
fi
|
||||
else
|
||||
check_fail ".env file not found"
|
||||
check_warn ".env file not found"
|
||||
fi
|
||||
if [ -n "${PRIVATE_KEY:-}" ]; then
|
||||
check_pass "PRIVATE_KEY available in effective environment"
|
||||
else
|
||||
check_fail "PRIVATE_KEY not available in effective environment"
|
||||
fi
|
||||
if [ -f "$EXPLORER_ADDRESS_INVENTORY_FILE" ] && [ -n "$(inventory_get LINK_TOKEN 2>/dev/null || true)" ]; then
|
||||
check_pass "LINK_TOKEN configured in address inventory"
|
||||
else
|
||||
check_warn "LINK_TOKEN not in address inventory"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
@@ -264,4 +265,3 @@ else
|
||||
log_error "✗ SYSTEM NOT READY - $FAILED critical issues found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
67
scripts/lib/address-inventory.sh
Normal file
67
scripts/lib/address-inventory.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Shared helpers for explorer-monorepo address inventory access.
|
||||
|
||||
_inventory_helper_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
EXPLORER_PROJECT_ROOT="${EXPLORER_PROJECT_ROOT:-$(cd "$_inventory_helper_dir/../.." && pwd)}"
|
||||
EXPLORER_RUNTIME_ENV_FILE="${EXPLORER_RUNTIME_ENV_FILE:-$EXPLORER_PROJECT_ROOT/.env}"
|
||||
EXPLORER_PARENT_ENV_FILE="${EXPLORER_PARENT_ENV_FILE:-$EXPLORER_PROJECT_ROOT/../.env}"
|
||||
EXPLORER_ADDRESS_INVENTORY_FILE="${EXPLORER_ADDRESS_INVENTORY_FILE:-$EXPLORER_PROJECT_ROOT/config/address-inventory.json}"
|
||||
|
||||
load_explorer_runtime_env() {
|
||||
source "$EXPLORER_RUNTIME_ENV_FILE" 2>/dev/null || true
|
||||
source "$EXPLORER_PARENT_ENV_FILE" 2>/dev/null || true
|
||||
}
|
||||
|
||||
inventory_get() {
|
||||
local key="${1:-}"
|
||||
if [ -z "$key" ] || [ ! -f "$EXPLORER_ADDRESS_INVENTORY_FILE" ] || ! command -v jq >/dev/null 2>&1; then
|
||||
return 1
|
||||
fi
|
||||
jq -r --arg key "$key" '.inventory[$key] // empty' "$EXPLORER_ADDRESS_INVENTORY_FILE"
|
||||
}
|
||||
|
||||
resolve_address_value() {
|
||||
local env_name="${1:-}"
|
||||
local inventory_key="${2:-$env_name}"
|
||||
local fallback="${3:-}"
|
||||
local current="${!env_name:-}"
|
||||
|
||||
if [ -n "$current" ]; then
|
||||
printf '%s\n' "$current"
|
||||
return 0
|
||||
fi
|
||||
|
||||
current="$(inventory_get "$inventory_key" 2>/dev/null || true)"
|
||||
if [ -n "$current" ]; then
|
||||
printf '%s\n' "$current"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -n "$fallback" ]; then
|
||||
printf '%s\n' "$fallback"
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
persist_inventory_value() {
|
||||
local key="${1:-}"
|
||||
local value="${2:-}"
|
||||
local tmp_file
|
||||
|
||||
if [ -z "$key" ] || [ -z "$value" ] || [ ! -f "$EXPLORER_ADDRESS_INVENTORY_FILE" ]; then
|
||||
return 1
|
||||
fi
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
echo "jq is required to update $EXPLORER_ADDRESS_INVENTORY_FILE" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
tmp_file="$(mktemp)"
|
||||
jq --arg key "$key" --arg value "$value" --arg updated "$(date -I)" \
|
||||
'.updated = $updated | .inventory[$key] = $value' \
|
||||
"$EXPLORER_ADDRESS_INVENTORY_FILE" > "$tmp_file"
|
||||
mv "$tmp_file" "$EXPLORER_ADDRESS_INVENTORY_FILE"
|
||||
}
|
||||
@@ -5,11 +5,13 @@ set -uo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
CHAIN_ID=138
|
||||
LINK_TOKEN="${LINK_TOKEN:-$(resolve_address_value LINK_TOKEN LINK_TOKEN "")}"
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ LINK TOKEN DEPLOYMENT TEST ║"
|
||||
@@ -19,7 +21,7 @@ echo ""
|
||||
# Test 1: Environment
|
||||
echo "1. Environment Variables:"
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo " ❌ PRIVATE_KEY not set"
|
||||
echo " ❌ PRIVATE_KEY not available in effective environment"
|
||||
exit 1
|
||||
else
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
@@ -138,7 +140,7 @@ if [ -n "${LINK_TOKEN:-}" ] && [ "$LINK_TOKEN" != "" ]; then
|
||||
echo " ⚠️ LINK_TOKEN configured but not found on-chain: $LINK_TOKEN"
|
||||
fi
|
||||
else
|
||||
echo " ⚠️ LINK_TOKEN not configured"
|
||||
echo " ⚠️ LINK_TOKEN not configured in address inventory"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
@@ -153,4 +155,3 @@ echo " --broadcast \\"
|
||||
echo " --legacy \\"
|
||||
echo " --gas-price 20000000000"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -6,11 +6,13 @@ set -uo pipefail # Remove -e to allow error handling
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
|
||||
|
||||
source "$PROJECT_ROOT/.env" 2>/dev/null || source "$PROJECT_ROOT/../.env" 2>/dev/null || true
|
||||
load_explorer_runtime_env
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
CHAIN_ID=138
|
||||
LINK_TOKEN="${LINK_TOKEN:-$(resolve_address_value LINK_TOKEN LINK_TOKEN "")}"
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ LINK TOKEN DEPLOYMENT TEST SUITE ║"
|
||||
@@ -51,7 +53,7 @@ echo "════════════════════════
|
||||
echo ""
|
||||
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
test_fail "PRIVATE_KEY not set in .env"
|
||||
test_fail "PRIVATE_KEY not available in effective environment"
|
||||
else
|
||||
test_pass "PRIVATE_KEY is set"
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
@@ -243,7 +245,7 @@ if [ -n "${LINK_TOKEN:-}" ] && [ "$LINK_TOKEN" != "" ]; then
|
||||
test_warn "LINK token address configured but contract not found on-chain"
|
||||
fi
|
||||
else
|
||||
test_warn "LINK_TOKEN not configured in .env"
|
||||
test_warn "LINK_TOKEN not configured in address inventory"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
@@ -320,4 +322,3 @@ else
|
||||
echo -e "${RED}❌ Some critical tests failed. Please fix issues before deploying.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user