Standardize deployment env and deployer handling
This commit is contained in:
@@ -30,22 +30,11 @@ fi
|
||||
|
||||
log_info "=== Deployment Status Check ==="
|
||||
|
||||
# Check .env file
|
||||
if [ ! -f .env ]; then
|
||||
log_error "❌ .env file not found"
|
||||
echo "Please create .env file with required variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "✅ .env file exists"
|
||||
|
||||
# Load environment variables
|
||||
source .env
|
||||
|
||||
# Check RPC endpoint
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_error "❌ RPC_URL not set in .env"
|
||||
echo "Please set RPC_URL in .env file"
|
||||
log_error "❌ Chain 138 RPC not configured"
|
||||
echo "Set RPC_URL, RPC_URL_138, or CHAIN138_RPC_URL."
|
||||
else
|
||||
log_success "✅ RPC_URL configured: ${RPC_URL}"
|
||||
|
||||
@@ -68,9 +57,9 @@ else
|
||||
fi
|
||||
|
||||
# Check PRIVATE_KEY
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "❌ PRIVATE_KEY not set in .env"
|
||||
echo "Please set PRIVATE_KEY in .env file"
|
||||
if ! require_private_key_env > /dev/null 2>&1; then
|
||||
log_error "❌ PRIVATE_KEY not configured"
|
||||
echo "Set PRIVATE_KEY in smom-dbis-138/.env, repo .env, or ~/.secure-secrets/private-keys.env."
|
||||
else
|
||||
log_success "✅ PRIVATE_KEY configured"
|
||||
fi
|
||||
@@ -110,28 +99,28 @@ else
|
||||
fi
|
||||
|
||||
# WETH10
|
||||
if [ -z "$WETH10_ADDRESS" ] || [ "$WETH10_ADDRESS" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
if [ -z "${WETH10_ADDRESS:-}" ] || [ "${WETH10_ADDRESS:-}" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
log_warn "⏳ WETH10_ADDRESS: Not deployed"
|
||||
else
|
||||
log_success "✅ WETH10_ADDRESS: ${WETH10_ADDRESS}"
|
||||
fi
|
||||
|
||||
# CCIPWETH9Bridge
|
||||
if [ -z "$CCIPWETH9BRIDGE_ADDRESS" ] || [ "$CCIPWETH9BRIDGE_ADDRESS" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
if [ -z "${CCIPWETH9BRIDGE_ADDRESS:-}" ] || [ "${CCIPWETH9BRIDGE_ADDRESS:-}" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
log_warn "⏳ CCIPWETH9BRIDGE_ADDRESS: Not deployed"
|
||||
else
|
||||
log_success "✅ CCIPWETH9BRIDGE_ADDRESS: ${CCIPWETH9BRIDGE_ADDRESS}"
|
||||
fi
|
||||
|
||||
# CCIPWETH10Bridge
|
||||
if [ -z "$CCIPWETH10BRIDGE_ADDRESS" ] || [ "$CCIPWETH10BRIDGE_ADDRESS" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
if [ -z "${CCIPWETH10BRIDGE_ADDRESS:-}" ] || [ "${CCIPWETH10BRIDGE_ADDRESS:-}" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
log_warn "⏳ CCIPWETH10BRIDGE_ADDRESS: Not deployed"
|
||||
else
|
||||
log_success "✅ CCIPWETH10BRIDGE_ADDRESS: ${CCIPWETH10BRIDGE_ADDRESS}"
|
||||
fi
|
||||
|
||||
# Oracle Aggregator
|
||||
if [ -z "$ORACLE_AGGREGATOR_ADDRESS" ] || [ "$ORACLE_AGGREGATOR_ADDRESS" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
if [ -z "${ORACLE_AGGREGATOR_ADDRESS:-}" ] || [ "${ORACLE_AGGREGATOR_ADDRESS:-}" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
log_warn "⏳ ORACLE_AGGREGATOR_ADDRESS: Not deployed"
|
||||
else
|
||||
log_success "✅ ORACLE_AGGREGATOR_ADDRESS: ${ORACLE_AGGREGATOR_ADDRESS}"
|
||||
@@ -164,11 +153,10 @@ fi
|
||||
# Summary
|
||||
log_info "=== Summary ==="
|
||||
echo "Ready for contract deployment:"
|
||||
if [ -n "$RPC_URL" ] && [ -n "$PRIVATE_KEY" ]; then
|
||||
if [ -n "${RPC_URL:-}" ] && [ -n "${PRIVATE_KEY:-}" ]; then
|
||||
log_success "✅ Prerequisites met"
|
||||
echo "Run: ./scripts/deployment/deploy-contracts-ordered.sh"
|
||||
else
|
||||
log_error "❌ Prerequisites not met"
|
||||
echo "Please configure RPC_URL and PRIVATE_KEY in .env"
|
||||
fi
|
||||
|
||||
|
||||
@@ -5,19 +5,17 @@
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "$PROJECT_ROOT"
|
||||
fi
|
||||
|
||||
echo "=== Environment Variables Requirements Check ==="
|
||||
echo ""
|
||||
|
||||
# Check if .env exists
|
||||
if [ -f .env ]; then
|
||||
echo "✓ .env file exists"
|
||||
source .env
|
||||
else
|
||||
echo "✗ .env file not found"
|
||||
echo " Create it from .env.template or manually"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Required Variables (Must Be Set) ==="
|
||||
echo ""
|
||||
@@ -32,7 +30,7 @@ REQUIRED_ALL=(
|
||||
|
||||
MISSING_REQUIRED=()
|
||||
for var in "${REQUIRED_ALL[@]}"; do
|
||||
if [ -z "${!var}" ] || [ "${!var}" == "0x..." ] || [ "${!var}" == "your_etherscan_api_key" ] || [ "${!var}" == "http://chain138.example.com:8545" ]; then
|
||||
if [ -z "${!var:-}" ] || [ "${!var:-}" == "0x..." ] || [ "${!var:-}" == "your_etherscan_api_key" ] || [ "${!var:-}" == "http://chain138.example.com:8545" ]; then
|
||||
echo "✗ $var: NOT SET or using placeholder"
|
||||
MISSING_REQUIRED+=("$var")
|
||||
else
|
||||
@@ -180,6 +178,13 @@ else
|
||||
echo "Please set these variables in .env file before deployment"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== External Dependency Blockers ==="
|
||||
echo ""
|
||||
if ! bash "$PROJECT_ROOT/scripts/verify/check-external-dependencies.sh" --advisory; then
|
||||
true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Next Steps ==="
|
||||
echo ""
|
||||
@@ -194,4 +199,3 @@ else
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -35,12 +35,8 @@ CRONOS_RPC="${CRONOS_RPC:-${CRONOS_RPC_URL:-https://evm.cronos.org}}"
|
||||
CELO_RPC="${CELO_RPC:-${CELO_MAINNET_RPC:-https://forno.celo.org}}"
|
||||
WEMIX_RPC="${WEMIX_RPC:-${WEMIX_MAINNET_RPC:-https://api.wemix.com}}"
|
||||
|
||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||
echo "Error: Set PRIVATE_KEY in .env" >&2
|
||||
exit 1
|
||||
fi
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)
|
||||
[[ -z "$DEPLOYER" ]] && { echo "Error: Could not derive deployer from PRIVATE_KEY" >&2; exit 1; }
|
||||
DEPLOYER="${DEPLOYER_ADDRESS:-$(derive_deployer_address 2>/dev/null || true)}"
|
||||
[[ -z "$DEPLOYER" ]] && { echo "Error: Set PRIVATE_KEY or DEPLOYER_ADDRESS in env before checking LINK balances." >&2; exit 1; }
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
|
||||
@@ -7,7 +7,6 @@ set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
@@ -24,15 +23,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "=== Mainnet Wallet Balance Check ==="
|
||||
|
||||
# Check if cast is available
|
||||
@@ -42,20 +32,20 @@ if ! command -v cast &> /dev/null; then
|
||||
fi
|
||||
|
||||
# Get wallet address from private key
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WALLET_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
WALLET_ADDRESS="$(derive_deployer_address || true)"
|
||||
if [ -z "$WALLET_ADDRESS" ]; then
|
||||
log_error "Error: Could not derive address from private key"
|
||||
log_error "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Wallet Address: $WALLET_ADDRESS"
|
||||
|
||||
# Mainnet RPC
|
||||
MAINNET_RPC_URL="${MAINNET_RPC_URL:-${ETHEREUM_MAINNET_RPC:-}}"
|
||||
if [ -z "$MAINNET_RPC_URL" ]; then
|
||||
MAINNET_RPC_URL="https://eth.llamarpc.com"
|
||||
fi
|
||||
@@ -66,6 +56,7 @@ MAINNET_LINK="0x514910771AF9Ca656af840dff83E8264EcF986CA"
|
||||
# Required amounts
|
||||
ETH_RECOMMENDED="50000000000000000" # 0.05 ETH
|
||||
LINK_RECOMMENDED="10000000000000000000" # 10 LINK
|
||||
ETH_REQUIRED="${ETH_REQUIRED:-${MAINNET_ETH_REQUIRED:-25000000000000000}}" # 0.025 ETH
|
||||
|
||||
log_info "=== Mainnet ETH Balance ==="
|
||||
|
||||
@@ -94,6 +85,13 @@ log_info "=== Mainnet LINK Balance ==="
|
||||
|
||||
# Check LINK balance
|
||||
LINK_BALANCE=$(cast call "$MAINNET_LINK" "balanceOf(address)(uint256)" "$WALLET_ADDRESS" --rpc-url "$MAINNET_RPC_URL" 2>/dev/null || echo "0")
|
||||
if [[ "$LINK_BALANCE" =~ ^0x ]]; then
|
||||
LINK_BALANCE=$(cast --to-dec "$LINK_BALANCE" 2>/dev/null || echo "0")
|
||||
fi
|
||||
LINK_BALANCE="$(printf '%s' "$LINK_BALANCE" | tr -d '\r\n[:space:]')"
|
||||
if [[ -z "$LINK_BALANCE" || ! "$LINK_BALANCE" =~ ^[0-9]+$ ]]; then
|
||||
LINK_BALANCE="0"
|
||||
fi
|
||||
|
||||
if [ "$LINK_BALANCE" != "0" ] && [ -n "$LINK_BALANCE" ]; then
|
||||
LINK_AMOUNT=$(cast --to-unit "$LINK_BALANCE" ether 2>/dev/null || echo "0")
|
||||
|
||||
@@ -8,7 +8,6 @@ set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
@@ -25,18 +24,13 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Colors
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "=== Pre-Deployment Wallet Balance Check ==="
|
||||
|
||||
: "${MAINNET_ETH_REQUIRED:=25000000000000000}" # 0.025 ETH
|
||||
: "${MAINNET_LINK_REQUIRED:=0}"
|
||||
: "${CHAIN138_ETH_REQUIRED:=0}"
|
||||
: "${CHAIN138_LINK_REQUIRED:=0}"
|
||||
|
||||
# Required amounts (in wei, then converted)
|
||||
|
||||
# Check if cast is available
|
||||
@@ -46,14 +40,13 @@ if ! command -v cast &> /dev/null; then
|
||||
fi
|
||||
|
||||
# Get wallet address from private key
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WALLET_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
WALLET_ADDRESS="$(derive_deployer_address || true)"
|
||||
if [ -z "$WALLET_ADDRESS" ]; then
|
||||
log_error "Error: Could not derive address from PRIVATE_KEY"
|
||||
log_error "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -75,7 +68,15 @@ check_balance() {
|
||||
# Check ERC20 token balance
|
||||
balance=$(cast call "$token_address" "balanceOf(address)(uint256)" "$address" --rpc-url "$rpc_url" 2>/dev/null || echo "0")
|
||||
fi
|
||||
|
||||
|
||||
if [[ "$balance" =~ ^0x ]]; then
|
||||
balance=$(cast --to-dec "$balance" 2>/dev/null || echo "0")
|
||||
fi
|
||||
balance="$(printf '%s' "$balance" | tr -d '\r\n[:space:]')"
|
||||
if [[ -z "$balance" || ! "$balance" =~ ^[0-9]+$ ]]; then
|
||||
balance="0"
|
||||
fi
|
||||
|
||||
if [ "$balance" == "0" ] || [ -z "$balance" ]; then
|
||||
balance="0"
|
||||
fi
|
||||
@@ -123,6 +124,7 @@ check_balance() {
|
||||
# Check Mainnet balances
|
||||
log_info "=== Ethereum Mainnet Balances ==="
|
||||
|
||||
MAINNET_RPC_URL="${MAINNET_RPC_URL:-${ETHEREUM_MAINNET_RPC:-}}"
|
||||
if [ -z "$MAINNET_RPC_URL" ]; then
|
||||
MAINNET_RPC_URL="https://eth.llamarpc.com"
|
||||
log_warn "Using default Mainnet RPC: $MAINNET_RPC_URL"
|
||||
@@ -150,8 +152,9 @@ fi
|
||||
# Check ChainID 138 balances
|
||||
log_info "=== ChainID 138 Balances ==="
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_error "Error: RPC_URL not set in .env"
|
||||
log_error "ERROR: Chain 138 RPC not available. Set RPC_URL, RPC_URL_138, or CHAIN138_RPC_URL."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -40,24 +40,19 @@ CRONOS_RPC="${CRONOS_RPC:-${CRONOS_RPC_URL:-https://evm.cronos.org}}"
|
||||
CELO_RPC="${CELO_RPC:-${CELO_MAINNET_RPC:-https://forno.celo.org}}"
|
||||
WEMIX_RPC="${WEMIX_RPC:-${WEMIX_MAINNET_RPC:-https://api.wemix.com}}"
|
||||
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
if [[ -n "$PRIVATE_KEY" && ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
||||
PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
|
||||
# Chain 138 bridge addresses (required)
|
||||
WETH9_138=$(grep "CCIPWETH9_BRIDGE_CHAIN138=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH9_BRIDGE_CHAIN138:-}")
|
||||
WETH10_138=$(grep "CCIPWETH10_BRIDGE_CHAIN138=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH10_BRIDGE_CHAIN138:-}")
|
||||
WETH9_138="${CCIPWETH9_BRIDGE_CHAIN138:-}"
|
||||
WETH10_138="${CCIPWETH10_BRIDGE_CHAIN138:-}"
|
||||
|
||||
# Config-ready chain bridge addresses (optional; if set, we configure them)
|
||||
WETH9_GNOSIS=$(grep "CCIPWETH9_BRIDGE_GNOSIS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH9_BRIDGE_GNOSIS:-}")
|
||||
WETH10_GNOSIS=$(grep "CCIPWETH10_BRIDGE_GNOSIS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH10_BRIDGE_GNOSIS:-}")
|
||||
WETH9_CRONOS=$(grep "CCIPWETH9_BRIDGE_CRONOS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH9_BRIDGE_CRONOS:-}")
|
||||
WETH10_CRONOS=$(grep "CCIPWETH10_BRIDGE_CRONOS=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH10_BRIDGE_CRONOS:-}")
|
||||
WETH9_CELO=$(grep "CCIPWETH9_BRIDGE_CELO=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH9_BRIDGE_CELO:-}")
|
||||
WETH10_CELO=$(grep "CCIPWETH10_BRIDGE_CELO=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH10_BRIDGE_CELO:-}")
|
||||
WETH9_WEMIX=$(grep "CCIPWETH9_BRIDGE_WEMIX=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH9_BRIDGE_WEMIX:-}")
|
||||
WETH10_WEMIX=$(grep "CCIPWETH10_BRIDGE_WEMIX=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 | tr -d ' "\r\n' || echo "${CCIPWETH10_BRIDGE_WEMIX:-}")
|
||||
WETH9_GNOSIS="${CCIPWETH9_BRIDGE_GNOSIS:-}"
|
||||
WETH10_GNOSIS="${CCIPWETH10_BRIDGE_GNOSIS:-}"
|
||||
WETH9_CRONOS="${CCIPWETH9_BRIDGE_CRONOS:-}"
|
||||
WETH10_CRONOS="${CCIPWETH10_BRIDGE_CRONOS:-}"
|
||||
WETH9_CELO="${CCIPWETH9_BRIDGE_CELO:-}"
|
||||
WETH10_CELO="${CCIPWETH10_BRIDGE_CELO:-}"
|
||||
WETH9_WEMIX="${CCIPWETH9_BRIDGE_WEMIX:-}"
|
||||
WETH10_WEMIX="${CCIPWETH10_BRIDGE_WEMIX:-}"
|
||||
|
||||
# Besu eth_call via `cast call` can return -32602; lowercase 20-byte addresses avoids some failures on sends.
|
||||
WETH9_138="${WETH9_138,,}"
|
||||
@@ -72,8 +67,7 @@ if [[ -z "$WETH9_138" || -z "$WETH10_138" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$PRIVATE_KEY" ]]; then
|
||||
echo "Error: PRIVATE_KEY not set in .env" >&2
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -59,7 +59,6 @@ _gas138="--legacy --gas-limit 250000 --gas-price 2000000000"
|
||||
_gas_remote="--legacy --gas-limit 400000"
|
||||
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
[[ -n "$PRIVATE_KEY" && ! "$PRIVATE_KEY" =~ ^0x ]] && PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
|
||||
DRY_RUN="${DRY_RUN:-0}"
|
||||
RED='\033[0;31m'
|
||||
@@ -86,8 +85,7 @@ run_or_echo() {
|
||||
echo -e "${GREEN}=== Avalanche/Arbitrum/Cronos ↔ Chain 138 Bridge Configuration ===${NC}"
|
||||
echo ""
|
||||
|
||||
if [[ -z "$PRIVATE_KEY" ]]; then
|
||||
echo -e "${RED}ERROR: PRIVATE_KEY not set${NC}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -27,16 +27,10 @@ RPC_URL="${RPC_URL_138:-http://localhost:8545}"
|
||||
GAS_PRICE="${GAS_PRICE:-1000000000}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure PRIVATE_KEY has 0x prefix
|
||||
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
||||
export PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "Deploy All Contracts"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
@@ -29,18 +29,9 @@ echo "Phase 2 Complete Deployment from Proxy Host"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
|
||||
# Check if .env exists
|
||||
if [ ! -f .env ]; then
|
||||
echo "❌ Error: .env file not found"
|
||||
echo "Please ensure .env is in $PROJECT_ROOT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
|
||||
# Verify SSH key
|
||||
if [ -z "$SSH_PRIVATE_KEY_PATH" ]; then
|
||||
echo "❌ Error: SSH_PRIVATE_KEY_PATH not set in .env"
|
||||
echo "ERROR: SSH_PRIVATE_KEY_PATH not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -25,15 +25,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "=== Ethereum Mainnet Deployment ==="
|
||||
|
||||
# Check wallet balances first (warning only)
|
||||
@@ -55,7 +46,12 @@ if [[ "$MAINNET_RPC" == *"infura.io"* ]] && [[ -n "${INFURA_PROJECT_SECRET:-}" ]
|
||||
_with_auth=$(build_infura_rpc "mainnet" 2>/dev/null || true)
|
||||
[[ -n "$_with_auth" ]] && MAINNET_RPC="$_with_auth" && log_info "Using Infura Mainnet RPC with Basic Auth"
|
||||
fi
|
||||
MAINNET_PRIVATE_KEY="${PRIVATE_KEY}"
|
||||
MAINNET_PRIVATE_KEY="${MAINNET_PRIVATE_KEY:-${PRIVATE_KEY:-}}"
|
||||
export PRIVATE_KEY="$MAINNET_PRIVATE_KEY"
|
||||
if ! require_private_key_env "Set MAINNET_PRIVATE_KEY or PRIVATE_KEY in smom-dbis-138/.env, repo .env, or ~/.secure-secrets/private-keys.env."; then
|
||||
exit 1
|
||||
fi
|
||||
MAINNET_PRIVATE_KEY="$PRIVATE_KEY"
|
||||
MAINNET_CCIP_ROUTER="${MAINNET_CCIP_ROUTER:-0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D}" # Official Chainlink CCIP Router
|
||||
MAINNET_LINK_TOKEN="${MAINNET_LINK_TOKEN:-0x514910771AF9Ca656af840dff83E8264EcF986CA}"
|
||||
WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
||||
|
||||
@@ -30,36 +30,17 @@ fi
|
||||
|
||||
log_info "=== Deploy All Contracts in Proper Order ==="
|
||||
|
||||
# Check if .env exists
|
||||
if [ ! -f .env ]; then
|
||||
log_error "Error: .env file not found"
|
||||
echo "Creating .env from .env.example..."
|
||||
if [ -f .env.example ]; then
|
||||
cp .env.example .env
|
||||
log_success "✅ Created .env from .env.example"
|
||||
log_warn "Please configure .env with your values before continuing"
|
||||
exit 1
|
||||
else
|
||||
log_error "Error: .env.example not found"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Load environment variables
|
||||
source .env
|
||||
|
||||
# Check PRIVATE_KEY
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check RPC_URL
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_warn "RPC_URL not set in .env"
|
||||
log_warn "Chain 138 RPC not configured"
|
||||
log_warn "Options:"
|
||||
echo "1. Start local Anvil testnet (for testing)"
|
||||
echo "2. Set RPC_URL to existing blockchain endpoint"
|
||||
echo "2. Set RPC_URL/RPC_URL_138 to existing blockchain endpoint"
|
||||
echo "3. Deploy blockchain infrastructure first (Azure/Kubernetes)"
|
||||
read -p "Choose option (1/2/3): " choice
|
||||
|
||||
@@ -74,30 +55,12 @@ if [ -z "$RPC_URL" ]; then
|
||||
|
||||
# Set RPC_URL
|
||||
RPC_URL="http://localhost:8545"
|
||||
update_env() {
|
||||
local key=$1
|
||||
local value=$2
|
||||
if grep -q "^${key}=" .env; then
|
||||
sed -i "s|^${key}=.*|${key}=${value}|" .env
|
||||
else
|
||||
echo "${key}=${value}" >> .env
|
||||
fi
|
||||
}
|
||||
update_env "RPC_URL" "$RPC_URL"
|
||||
log_success "✅ RPC_URL set to: ${RPC_URL}"
|
||||
log_warn "Note: Anvil is running in background. Kill it with: kill $ANVIL_PID"
|
||||
;;
|
||||
2)
|
||||
read -p "Enter RPC URL: " RPC_URL
|
||||
update_env() {
|
||||
local key=$1
|
||||
local value=$2
|
||||
if grep -q "^${key}=" .env; then
|
||||
sed -i "s|^${key}=.*|${key}=${value}|" .env
|
||||
else
|
||||
echo "${key}=${value}" >> .env
|
||||
fi
|
||||
}
|
||||
update_env "RPC_URL" "$RPC_URL"
|
||||
log_success "✅ RPC_URL set to: ${RPC_URL}"
|
||||
;;
|
||||
@@ -116,6 +79,17 @@ if [ -z "$RPC_URL" ]; then
|
||||
esac
|
||||
fi
|
||||
|
||||
update_env() {
|
||||
local key=$1
|
||||
local value=$2
|
||||
if grep -q "^${key}=" .env 2>/dev/null; then
|
||||
sed -i "s|^${key}=.*|${key}=${value}|" .env
|
||||
else
|
||||
echo "${key}=${value}" >> .env
|
||||
fi
|
||||
log_success "✅ Updated .env: ${key}=${value}"
|
||||
}
|
||||
|
||||
# Verify RPC endpoint is accessible
|
||||
log_warn "Verifying RPC endpoint..."
|
||||
if ! curl -s -X POST "$RPC_URL" -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' > /dev/null 2>&1; then
|
||||
@@ -200,7 +174,7 @@ if [ -z "$CCIP_FEE_TOKEN" ] || [ "$CCIP_FEE_TOKEN" = "0x000000000000000000000000
|
||||
|
||||
# Fund deployer with LINK tokens
|
||||
log_warn "Funding deployer with LINK tokens..."
|
||||
DEPLOYER_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
DEPLOYER_ADDRESS="$(derive_deployer_address || true)"
|
||||
if [ -n "$DEPLOYER_ADDRESS" ]; then
|
||||
cast send "$CCIP_FEE_TOKEN" "mint(address,uint256)" "$DEPLOYER_ADDRESS" "1000000e18" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
|
||||
@@ -32,12 +32,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
if [ -f .env ]; then
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC="${RPC_URL_138:-http://192.168.11.211:8545}"
|
||||
GAS_PRICE="${GAS_PRICE_138:-1000000000}"
|
||||
DRY_RUN=""
|
||||
@@ -56,8 +50,7 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo "ERROR: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -25,11 +25,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Source environment
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
fi
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
@@ -43,8 +38,7 @@ echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Check prerequisites
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo -e "${RED}✗ PRIVATE_KEY not set in .env${NC}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -29,16 +29,6 @@ fi
|
||||
DEPLOYMENT_LOG="${PROJECT_ROOT}/deployment.log"
|
||||
CONTRACT_ADDRESSES_FILE="${PROJECT_ROOT}/contracts-deployed.json"
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "${PROJECT_ROOT}/.env" ]; then
|
||||
set -a
|
||||
source "${PROJECT_ROOT}/.env"
|
||||
set +a
|
||||
else
|
||||
log_error "Error: .env file not found. Please create .env file from .env.example"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Logging function
|
||||
log() {
|
||||
log_success "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$DEPLOYMENT_LOG"
|
||||
@@ -132,6 +122,12 @@ check_prerequisites() {
|
||||
error "Required environment variable $var is not set"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$SKIP_CONTRACTS" != "true" ]; then
|
||||
export RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
require_private_key_env || exit 1
|
||||
[[ -n "${RPC_URL:-}" ]] || error "Required environment variable RPC_URL is not set"
|
||||
fi
|
||||
|
||||
if [ $missing -eq 0 ]; then
|
||||
log "All prerequisites met"
|
||||
|
||||
@@ -41,6 +41,10 @@ SIMULATE="${SIMULATE:-0}"
|
||||
PREFLIGHT="${PREFLIGHT:-1}"
|
||||
CHAIN="${1:-all}"
|
||||
|
||||
if [[ "$DRY_RUN" != "1" && "$SIMULATE" != "1" ]] && ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Per-chain env for DeployWETHBridges: RPC_URL, CCIP_ROUTER_ADDRESS, LINK_TOKEN_ADDRESS, WETH9_ADDRESS, WETH10_ADDRESS (0x0 to skip)
|
||||
run_deploy() {
|
||||
local chain_name="$1"
|
||||
@@ -59,10 +63,6 @@ run_deploy() {
|
||||
echo " Skip $chain_name: set ${rpc_var} and ${router_var} in .env"
|
||||
return 0
|
||||
fi
|
||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||
echo " Skip $chain_name: PRIVATE_KEY not set"
|
||||
return 0
|
||||
fi
|
||||
if [[ -z "$weth9" || -z "$weth10" ]]; then
|
||||
echo " Skip $chain_name: set ${weth9_var} and ${weth10_var} in .env (native wrapped token addresses from chain)"
|
||||
return 0
|
||||
|
||||
@@ -24,15 +24,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Canonical addresses
|
||||
WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
||||
WETH10_ADDRESS="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
|
||||
@@ -49,23 +40,21 @@ fi
|
||||
log_success "✅ Wallet balances sufficient"
|
||||
|
||||
# Check required variables
|
||||
MAINNET_RPC_URL="${MAINNET_RPC_URL:-${ETHEREUM_MAINNET_RPC:-}}"
|
||||
if [ -z "$MAINNET_RPC_URL" ]; then
|
||||
MAINNET_RPC_URL="https://eth.llamarpc.com"
|
||||
log_warn "Using default Mainnet RPC: $MAINNET_RPC_URL"
|
||||
fi
|
||||
|
||||
if [ -z "$MAINNET_PRIVATE_KEY" ]; then
|
||||
if [ -n "$PRIVATE_KEY" ]; then
|
||||
MAINNET_PRIVATE_KEY="$PRIVATE_KEY"
|
||||
log_warn "Using PRIVATE_KEY for Mainnet deployment"
|
||||
else
|
||||
log_error "Error: MAINNET_PRIVATE_KEY or PRIVATE_KEY not set"
|
||||
exit 1
|
||||
fi
|
||||
MAINNET_PRIVATE_KEY="${MAINNET_PRIVATE_KEY:-${PRIVATE_KEY:-}}"
|
||||
export PRIVATE_KEY="$MAINNET_PRIVATE_KEY"
|
||||
if ! require_private_key_env "Set MAINNET_PRIVATE_KEY or PRIVATE_KEY in smom-dbis-138/.env, repo .env, or ~/.secure-secrets/private-keys.env."; then
|
||||
exit 1
|
||||
fi
|
||||
MAINNET_PRIVATE_KEY="$PRIVATE_KEY"
|
||||
|
||||
if [ -z "$MAINNET_CCIP_ROUTER" ]; then
|
||||
log_error "Error: MAINNET_CCIP_ROUTER not set"
|
||||
log_error "ERROR: MAINNET_CCIP_ROUTER not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -9,35 +9,13 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
fi
|
||||
|
||||
# Configuration
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
FEE_TOKEN="${FEE_TOKEN:-}" # LINK token address
|
||||
BASE_FEE="${BASE_FEE:-1000000000000000000}" # 1 LINK in wei
|
||||
DATA_FEE_PER_BYTE="${DATA_FEE_PER_BYTE:-1000000000000000}" # 0.001 LINK per byte
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$FEE_TOKEN" ]; then
|
||||
echo "Error: FEE_TOKEN environment variable not set (LINK token address)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying CCIP Router..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "Fee Token: $FEE_TOKEN"
|
||||
echo "Base Fee: $BASE_FEE"
|
||||
echo "Data Fee Per Byte: $DATA_FEE_PER_BYTE"
|
||||
|
||||
# Deploy using Foundry
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
@@ -56,6 +34,22 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$FEE_TOKEN" ]; then
|
||||
echo "ERROR: FEE_TOKEN not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying CCIP Router..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "Fee Token: $FEE_TOKEN"
|
||||
echo "Base Fee: $BASE_FEE"
|
||||
echo "Data Fee Per Byte: $DATA_FEE_PER_BYTE"
|
||||
|
||||
forge script script/DeployCCIPRouter.s.sol \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--broadcast \
|
||||
|
||||
@@ -8,12 +8,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
# Load environment
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
# CCIP Configuration
|
||||
@@ -23,29 +18,7 @@ CCIP_FEE_TOKEN="${CCIP_FEE_TOKEN:-}" # LINK token address
|
||||
# WETH10 address (canonical Mainnet address or deployed address)
|
||||
WETH10_ADDRESS="${WETH10_ADDRESS:-0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_ROUTER" ]; then
|
||||
echo "Error: CCIP_ROUTER environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
||||
echo "Error: CCIP_FEE_TOKEN environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying CCIPWETH10Bridge to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "CCIP Router: $CCIP_ROUTER"
|
||||
echo "WETH10 Address: $WETH10_ADDRESS"
|
||||
echo "Fee Token (LINK): $CCIP_FEE_TOKEN"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
@@ -62,6 +35,28 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_ROUTER" ]; then
|
||||
echo "ERROR: CCIP_ROUTER not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
||||
echo "ERROR: CCIP_FEE_TOKEN not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying CCIPWETH10Bridge to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "CCIP Router: $CCIP_ROUTER"
|
||||
echo "WETH10 Address: $WETH10_ADDRESS"
|
||||
echo "Fee Token (LINK): $CCIP_FEE_TOKEN"
|
||||
|
||||
# Export environment variables for Foundry
|
||||
export PRIVATE_KEY
|
||||
export CCIP_ROUTER
|
||||
@@ -79,4 +74,3 @@ echo "Next steps:"
|
||||
echo "1. Save the deployed bridge address to your .env file"
|
||||
echo "2. Configure bridge destinations:"
|
||||
echo " ./scripts/deployment/configure-weth10-bridge.sh"
|
||||
|
||||
|
||||
@@ -8,12 +8,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
# Load environment
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
# CCIP Configuration
|
||||
@@ -23,29 +18,7 @@ CCIP_FEE_TOKEN="${CCIP_FEE_TOKEN:-}" # LINK token address
|
||||
# WETH9 address (canonical Mainnet address or deployed address)
|
||||
WETH9_ADDRESS="${WETH9_ADDRESS:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_ROUTER" ]; then
|
||||
echo "Error: CCIP_ROUTER environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
||||
echo "Error: CCIP_FEE_TOKEN environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying CCIPWETH9Bridge to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "CCIP Router: $CCIP_ROUTER"
|
||||
echo "WETH9 Address: $WETH9_ADDRESS"
|
||||
echo "Fee Token (LINK): $CCIP_FEE_TOKEN"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
@@ -62,6 +35,28 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_ROUTER" ]; then
|
||||
echo "ERROR: CCIP_ROUTER not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
||||
echo "ERROR: CCIP_FEE_TOKEN not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying CCIPWETH9Bridge to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "CCIP Router: $CCIP_ROUTER"
|
||||
echo "WETH9 Address: $WETH9_ADDRESS"
|
||||
echo "Fee Token (LINK): $CCIP_FEE_TOKEN"
|
||||
|
||||
# Export environment variables for Foundry
|
||||
export PRIVATE_KEY
|
||||
export CCIP_ROUTER
|
||||
@@ -79,4 +74,3 @@ echo "Next steps:"
|
||||
echo "1. Save the deployed bridge address to your .env file"
|
||||
echo "2. Configure bridge destinations:"
|
||||
echo " ./scripts/deployment/configure-weth9-bridge.sh"
|
||||
|
||||
|
||||
@@ -30,22 +30,17 @@ RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
NGINX_IP="${NGINX_PROXY_IP:-20.160.58.99}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "❌ Error: PRIVATE_KEY environment variable not set"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure PRIVATE_KEY has 0x prefix
|
||||
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
||||
export PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
DEPLOYER="$(derive_deployer_address || echo 'unknown')"
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "Deploy All Contracts - Network Ready"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "RPC URL: $RPC_URL"
|
||||
echo "Deployer: $(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo 'unknown')"
|
||||
echo "Deployer: $DEPLOYER"
|
||||
echo ""
|
||||
|
||||
# Step 1: Verify network is ready
|
||||
|
||||
@@ -28,23 +28,13 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Load environment variables
|
||||
if [ ! -f .env ]; then
|
||||
log_error "Error: .env file not found"
|
||||
echo "Please create .env file with required variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
|
||||
# Check required variables
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_error "Error: RPC_URL not set in .env"
|
||||
log_error "ERROR: Chain 138 RPC not available. Set RPC_URL, RPC_URL_138, or CHAIN138_RPC_URL."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -62,7 +52,7 @@ log_success "✅ RPC endpoint is accessible"
|
||||
update_env() {
|
||||
local key=$1
|
||||
local value=$2
|
||||
if grep -q "^${key}=" .env; then
|
||||
if grep -q "^${key}=" .env 2>/dev/null; then
|
||||
sed -i "s|^${key}=.*|${key}=${value}|" .env
|
||||
else
|
||||
echo "${key}=${value}" >> .env
|
||||
@@ -240,7 +230,7 @@ ORACLE_HEARTBEAT=${ORACLE_HEARTBEAT:-"60"}
|
||||
ORACLE_DEVIATION_THRESHOLD=${ORACLE_DEVIATION_THRESHOLD:-"50"}
|
||||
|
||||
# Get deployer address
|
||||
DEPLOYER_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
DEPLOYER_ADDRESS="$(derive_deployer_address || true)"
|
||||
|
||||
if [ -z "$DEPLOYER_ADDRESS" ]; then
|
||||
log_warn "Warning: Could not get deployer address. Using script default"
|
||||
|
||||
@@ -25,23 +25,14 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Load environment variables
|
||||
if [ ! -f .env ]; then
|
||||
log_error "Error: .env file not found"
|
||||
echo "Please create .env file with required variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
|
||||
# Check required variables
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_error "Error: RPC_URL not set in .env"
|
||||
log_error "ERROR: Chain 138 RPC not available. Set RPC_URL, RPC_URL_138, or CHAIN138_RPC_URL."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -137,11 +128,8 @@ wait $MULTICALL_PID
|
||||
wait $WETH9_PID
|
||||
wait $WETH10_PID
|
||||
|
||||
# Reload .env to get deployed addresses
|
||||
source .env
|
||||
|
||||
# Phase 2: CCIP Router (if needed)
|
||||
if [ -z "$CCIP_ROUTER" ] || [ "$CCIP_ROUTER" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
if [ -z "${CCIP_ROUTER:-}" ] || [ "${CCIP_ROUTER:-}" = "0x0000000000000000000000000000000000000000" ]; then
|
||||
log_warn "Phase 2: Deploying CCIP Router..."
|
||||
CCIP_ROUTER_OUTPUT=$(forge_scoped script script/DeployCCIPRouter.s.sol:DeployCCIPRouter \
|
||||
--sig "run(address,uint256,uint256)" \
|
||||
@@ -161,11 +149,8 @@ else
|
||||
log_success "✅ CCIP Router already configured: $CCIP_ROUTER"
|
||||
fi
|
||||
|
||||
# Reload .env
|
||||
source .env
|
||||
|
||||
# Phase 3: Bridge contracts (can be deployed in parallel if dependencies are met)
|
||||
if [ "${DEPLOY_BRIDGES:-true}" = "true" ] && [ -n "$CCIP_ROUTER" ] && [ -n "$WETH9_ADDRESS" ] && [ -n "$WETH10_ADDRESS" ]; then
|
||||
if [ "${DEPLOY_BRIDGES:-true}" = "true" ] && [ -n "${CCIP_ROUTER:-}" ] && [ -n "${WETH9_ADDRESS:-}" ] && [ -n "${WETH10_ADDRESS:-}" ]; then
|
||||
log_warn "Phase 3: Deploying CCIP bridges in parallel..."
|
||||
|
||||
{
|
||||
@@ -234,7 +219,7 @@ log_warn "Phase 4: Deploying Oracle and MultiSig in parallel..."
|
||||
ORACLE_PID=$!
|
||||
|
||||
# Deploy MultiSig (independent if owners are set)
|
||||
if [ -z "$MULTISIG_OWNERS" ]; then
|
||||
if [ -z "${MULTISIG_OWNERS:-}" ]; then
|
||||
log_warn "⚠️ MULTISIG_OWNERS not set. Skipping MultiSig deployment."
|
||||
log_warn "Set MULTISIG_OWNERS in .env (comma-separated addresses) to deploy."
|
||||
MULTISIG_PID=""
|
||||
@@ -261,12 +246,8 @@ if [ -n "$MULTISIG_PID" ]; then
|
||||
wait $MULTISIG_PID
|
||||
fi
|
||||
|
||||
# Reload .env to get all new addresses
|
||||
source .env
|
||||
|
||||
# Final summary
|
||||
log_success "=== Deployment Summary ==="
|
||||
source .env
|
||||
log_success "Multicall: ${MULTICALL_ADDRESS:-N/A}"
|
||||
log_success "WETH9: ${WETH9_ADDRESS:-N/A}"
|
||||
log_success "WETH10: ${WETH10_ADDRESS:-N/A}"
|
||||
|
||||
@@ -28,7 +28,7 @@ fi
|
||||
|
||||
# Default values
|
||||
MODE="${MODE:-ordered}" # ordered or parallel
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
DRY_RUN="${DRY_RUN:-false}"
|
||||
|
||||
@@ -81,24 +81,19 @@ while [[ $# -gt 0 ]]; do
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "ERROR: Unknown option: $1" >&2
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
fi
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set. Use --private-key or set in .env"
|
||||
exit 1
|
||||
fi
|
||||
if ! require_private_key_env "Use --private-key or set PRIVATE_KEY in smom-dbis-138/.env, repo .env, or ~/.secure-secrets/private-keys.env."; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_error "Error: RPC_URL not set. Use --rpc-url or set in .env"
|
||||
log_error "ERROR: Chain 138 RPC not available. Use --rpc-url or set RPC_URL/RPC_URL_138/CHAIN138_RPC_URL."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -8,46 +8,31 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../" && pwd)"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
|
||||
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
|
||||
elif [[ -f "$PROJECT_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$PROJECT_ROOT/.env"
|
||||
set +a
|
||||
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$REPO_ROOT/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Source environment variables
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
else
|
||||
echo "❌ Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check required variables
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "❌ Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ETHEREUM_MAINNET_RPC" ]; then
|
||||
echo "❌ Error: ETHEREUM_MAINNET_RPC not set in .env"
|
||||
echo "ERROR: ETHEREUM_MAINNET_RPC not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get deployer address
|
||||
DEPLOYER=$(cast wallet address $PRIVATE_KEY 2>/dev/null || echo "")
|
||||
DEPLOYER="$(derive_deployer_address || true)"
|
||||
if [ -z "$DEPLOYER" ]; then
|
||||
echo "❌ Error: Could not derive deployer address from PRIVATE_KEY"
|
||||
echo "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -87,7 +72,7 @@ echo "=== Deploying MainnetTether ==="
|
||||
LOG_FILE="/tmp/mainnet_tether_deploy.log"
|
||||
forge script script/DeployMainnetTether.s.sol \
|
||||
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
||||
--private-key $PRIVATE_KEY \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--broadcast \
|
||||
--verify \
|
||||
--via-ir \
|
||||
@@ -121,7 +106,7 @@ echo "=== Deploying TransactionMirror ==="
|
||||
LOG_FILE="/tmp/transaction_mirror_deploy.log"
|
||||
forge script script/DeployTransactionMirror.s.sol \
|
||||
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
||||
--private-key $PRIVATE_KEY \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--broadcast \
|
||||
--verify \
|
||||
--via-ir \
|
||||
@@ -171,4 +156,3 @@ if [ -n "$MAINNET_TETHER" ] && [ -n "$TRANSACTION_MIRROR" ]; then
|
||||
else
|
||||
echo "⚠️ Deployment incomplete - check logs for details"
|
||||
fi
|
||||
|
||||
|
||||
@@ -8,17 +8,6 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying Multicall to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
@@ -37,6 +26,14 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying Multicall to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
|
||||
forge script script/DeployMulticall.s.sol \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--broadcast \
|
||||
@@ -44,4 +41,3 @@ forge script script/DeployMulticall.s.sol \
|
||||
--verify
|
||||
|
||||
echo "Multicall deployment complete!"
|
||||
|
||||
|
||||
@@ -29,13 +29,12 @@ RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
OWNERS="${OWNERS:-}" # Comma-separated list of owner addresses
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY not set"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$OWNERS" ]; then
|
||||
echo "Error: OWNERS not set (comma-separated list)"
|
||||
echo "ERROR: OWNERS not set. Provide a comma-separated owner list." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -59,4 +58,3 @@ echo "Next steps:"
|
||||
echo "1. Transfer admin roles to multi-sig address"
|
||||
echo "2. Test multi-sig operations"
|
||||
echo "3. Document multi-sig procedures"
|
||||
|
||||
|
||||
@@ -29,12 +29,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
if [ -f .env ]; then
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC="${RPC_URL_138:-http://192.168.11.211:8545}"
|
||||
# Default 2 gwei to reduce "Replacement transaction underpriced"; override with GAS_PRICE_138.
|
||||
GAS_PRICE="${GAS_PRICE_138:-2000000000}"
|
||||
@@ -52,8 +46,7 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo "ERROR: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -25,14 +25,7 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Load environment variables
|
||||
if [ ! -f .env ]; then
|
||||
log_error "Error: .env file not found"
|
||||
echo "Please create .env file with required variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "Phase 2 + Contract Deployment - Full Parallel Mode"
|
||||
@@ -123,7 +116,6 @@ PHASE2_VERIFY_PID=$!
|
||||
if [ -n "$CONTRACTS_PID" ] && [ -n "$RPC_URL" ]; then
|
||||
(
|
||||
log_warn "Verifying contracts..."
|
||||
source .env
|
||||
if ./scripts/deployment/verify-contracts-parallel.sh > /tmp/contracts-verify.out 2>&1; then
|
||||
log_success "✅ Contracts verified"
|
||||
else
|
||||
@@ -166,4 +158,3 @@ echo "Next steps:"
|
||||
echo "1. Review Phase 2 services: ./terraform/phases/phase2/scripts/status.sh all"
|
||||
echo "2. Verify contracts: ./scripts/deployment/verify-contracts-parallel.sh"
|
||||
echo "3. Check deployment outputs: terraform/phases/phase2/terraform output"
|
||||
|
||||
|
||||
@@ -31,15 +31,6 @@ echo "Phase 2 Deployment from Proxy Host"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
|
||||
# Check if .env exists
|
||||
if [ ! -f .env ]; then
|
||||
echo "Error: .env file not found"
|
||||
echo "Please ensure .env is available on this host"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
|
||||
# Change to Phase 2 directory
|
||||
cd terraform/phases/phase2
|
||||
|
||||
@@ -64,4 +55,3 @@ echo ""
|
||||
echo "Next steps:"
|
||||
echo "1. Start services: ./terraform/phases/phase2/scripts/start-services.sh all"
|
||||
echo "2. Check status: ./terraform/phases/phase2/scripts/status.sh all"
|
||||
|
||||
|
||||
@@ -27,21 +27,13 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Load .env
|
||||
if [ -f .env ]; then
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
fi
|
||||
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo -e "${RED}ERROR: PRIVATE_KEY not set in .env${NC}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -28,13 +28,9 @@ RPC_URL="${RPC_URL_138:-http://192.168.11.211:8545}"
|
||||
GAS_PRICE="${GAS_PRICE:-1000000000}"
|
||||
CHAIN_ID="${CHAIN_ID:-138}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY not set (e.g. in smom-dbis-138/.env)"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
||||
export PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "1. Deploy Vault System (DeployVaultSystem.s.sol)"
|
||||
|
||||
@@ -30,16 +30,10 @@ fi
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure PRIVATE_KEY has 0x prefix
|
||||
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
||||
export PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🚀 Deploying WETH9 and WETH10 using CREATE (vm.etch)"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
@@ -135,4 +129,3 @@ echo " 1. If deployment failed, try using fork mode: --fork-url \$RPC_URL"
|
||||
echo " 2. Or calculate CREATE nonce: node scripts/utils/calculate-create-address.js"
|
||||
echo " 3. Or use address mapping for deployed addresses"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -29,16 +29,10 @@ fi
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure PRIVATE_KEY has 0x prefix
|
||||
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
|
||||
export PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🚀 Deploying WETH9 and WETH10 using CREATE2"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
@@ -149,4 +143,3 @@ echo "📋 Next Steps:"
|
||||
echo " 1. Verify contract functionality"
|
||||
echo " 2. Update .env with deployment details if needed"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -12,8 +12,12 @@ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
METHOD="${METHOD:-create}"
|
||||
TOKEN="${TOKEN:-both}" # weth9, weth10, or both
|
||||
DEPLOY_BRIDGE="${DEPLOY_BRIDGE:-false}"
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
rpc_url_override=false
|
||||
private_key_override=false
|
||||
CLI_RPC_URL=""
|
||||
CLI_PRIVATE_KEY=""
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
@@ -59,29 +63,27 @@ while [[ $# -gt 0 ]]; do
|
||||
;;
|
||||
--rpc-url)
|
||||
RPC_URL="$2"
|
||||
CLI_RPC_URL="$2"
|
||||
rpc_url_override=true
|
||||
shift 2
|
||||
;;
|
||||
--private-key)
|
||||
PRIVATE_KEY="$2"
|
||||
CLI_PRIVATE_KEY="$2"
|
||||
private_key_override=true
|
||||
shift 2
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "ERROR: Unknown option: $1" >&2
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
@@ -98,6 +100,20 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
if [[ "$rpc_url_override" == true ]]; then
|
||||
RPC_URL="$CLI_RPC_URL"
|
||||
else
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
fi
|
||||
|
||||
if [[ "$private_key_override" == true ]]; then
|
||||
export PRIVATE_KEY="$CLI_PRIVATE_KEY"
|
||||
fi
|
||||
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🚀 Unified WETH Deployment"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
@@ -136,8 +152,8 @@ case "$METHOD" in
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unknown method: $METHOD"
|
||||
echo "Valid methods: create, create2, genesis"
|
||||
echo "ERROR: Unknown method: $METHOD" >&2
|
||||
echo "Valid methods: create, create2, genesis" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -8,12 +8,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
# Load environment
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
# CCIP Configuration
|
||||
@@ -29,19 +24,37 @@ DEPLOY_BRIDGES="${DEPLOY_BRIDGES:-true}"
|
||||
WETH9_ADDRESS="${WETH9_ADDRESS:-}"
|
||||
WETH10_ADDRESS="${WETH10_ADDRESS:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
|
||||
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$PROJECT_ROOT/.env"
|
||||
set +a
|
||||
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$REPO_ROOT/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$DEPLOY_BRIDGES" = "true" ]; then
|
||||
if [ -z "$CCIP_ROUTER" ]; then
|
||||
echo "Error: CCIP_ROUTER environment variable not set (required for bridge deployment)"
|
||||
echo "ERROR: CCIP_ROUTER not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
||||
echo "Error: CCIP_FEE_TOKEN environment variable not set (required for bridge deployment)"
|
||||
echo "ERROR: CCIP_FEE_TOKEN not available. Set it in smom-dbis-138/.env or repo .env." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
@@ -68,24 +81,6 @@ if [ -n "$WETH10_ADDRESS" ]; then
|
||||
fi
|
||||
echo "========================================="
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
|
||||
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$PROJECT_ROOT/.env"
|
||||
set +a
|
||||
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$REPO_ROOT/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Export environment variables for Foundry
|
||||
export PRIVATE_KEY
|
||||
export CCIP_ROUTER
|
||||
@@ -117,4 +112,3 @@ echo "2. Configure bridge destinations:"
|
||||
echo " ./scripts/deployment/configure-weth9-bridge.sh"
|
||||
echo " ./scripts/deployment/configure-weth10-bridge.sh"
|
||||
echo "3. Test cross-chain transfers"
|
||||
|
||||
|
||||
@@ -8,17 +8,6 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying WETH to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
@@ -37,6 +26,14 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying WETH to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
|
||||
forge script script/DeployWETH.s.sol \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--broadcast \
|
||||
@@ -44,4 +41,3 @@ forge script script/DeployWETH.s.sol \
|
||||
--verify
|
||||
|
||||
echo "WETH deployment complete!"
|
||||
|
||||
|
||||
@@ -8,17 +8,6 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying WETH10 to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
@@ -37,6 +26,14 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}}"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying WETH10 to ChainID 138..."
|
||||
echo "RPC URL: $RPC_URL"
|
||||
|
||||
forge script script/DeployWETH10.s.sol \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--broadcast \
|
||||
@@ -44,4 +41,3 @@ forge script script/DeployWETH10.s.sol \
|
||||
--verify
|
||||
|
||||
echo "WETH10 deployment complete!"
|
||||
|
||||
|
||||
@@ -7,18 +7,15 @@ set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "$PROJECT_ROOT"
|
||||
fi
|
||||
|
||||
|
||||
log_info "=== Ethereum Mainnet Deployment Dry-Run ==="
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ERRORS=0
|
||||
WARNINGS=0
|
||||
|
||||
@@ -64,7 +61,7 @@ log_info "Step 2: Validating environment variables..."
|
||||
# Required variables
|
||||
REQUIRED_VARS=("PRIVATE_KEY" "ETHEREUM_MAINNET_RPC")
|
||||
for var in "${REQUIRED_VARS[@]}"; do
|
||||
if [ -z "${!var}" ]; then
|
||||
if [ -z "${!var:-}" ]; then
|
||||
log_error "❌ Missing required variable: $var"
|
||||
((ERRORS++))
|
||||
else
|
||||
@@ -73,7 +70,7 @@ for var in "${REQUIRED_VARS[@]}"; do
|
||||
done
|
||||
|
||||
# Optional but recommended
|
||||
if [ -z "$CCIP_ETH_ROUTER" ]; then
|
||||
if [ -z "${CCIP_ETH_ROUTER:-}" ]; then
|
||||
CCIP_ETH_ROUTER="0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"
|
||||
log_warn "⚠️ CCIP_ETH_ROUTER not set, using default: $CCIP_ETH_ROUTER"
|
||||
((WARNINGS++))
|
||||
@@ -81,7 +78,7 @@ else
|
||||
validate_address "$CCIP_ETH_ROUTER" "CCIP_ETH_ROUTER"
|
||||
fi
|
||||
|
||||
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
||||
if [ -z "${CCIP_FEE_TOKEN:-}" ]; then
|
||||
CCIP_FEE_TOKEN="0x514910771AF9Ca656af840dff83E8264EcF986CA" # LINK token
|
||||
log_warn "⚠️ CCIP_FEE_TOKEN not set, using default: $CCIP_FEE_TOKEN"
|
||||
((WARNINGS++))
|
||||
@@ -108,16 +105,6 @@ validate_address "$WETH10_ADDRESS" "WETH10"
|
||||
# Step 4: Compile contracts
|
||||
log_info "Step 4: Compiling contracts..."
|
||||
cd "$PROJECT_ROOT"
|
||||
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
|
||||
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$PROJECT_ROOT/.env"
|
||||
set +a
|
||||
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
|
||||
@@ -36,7 +36,8 @@ case "$(echo "$CHAIN" | tr '[:upper:]' '[:lower:]')" in
|
||||
esac
|
||||
if [[ -z "$RPC" ]]; then echo "RPC not set for $CHAIN"; exit 1; fi
|
||||
|
||||
DEPLOYER=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || true)
|
||||
DEPLOYER="$(require_deployer_address || true)"
|
||||
[[ -n "$DEPLOYER" ]] || exit 1
|
||||
NONCE=$(cast nonce "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "0")
|
||||
echo "Deployer: $DEPLOYER"
|
||||
echo "Current on-chain nonce: $NONCE"
|
||||
|
||||
@@ -24,16 +24,6 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Colors
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "=== Wallet Address from .env Private Key ==="
|
||||
|
||||
# Check if cast is available
|
||||
@@ -43,17 +33,15 @@ if ! command -v cast &> /dev/null; then
|
||||
fi
|
||||
|
||||
# Get private key from .env
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
log_error "Error: PRIVATE_KEY not set in .env"
|
||||
if ! require_private_key_env; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Derive address
|
||||
WALLET_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
WALLET_ADDRESS="$(derive_deployer_address || true)"
|
||||
|
||||
if [ -z "$WALLET_ADDRESS" ]; then
|
||||
log_error "Error: Could not derive address from private key"
|
||||
echo "Please check that PRIVATE_KEY is valid (should start with 0x and be 66 characters)"
|
||||
log_error "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -71,15 +59,13 @@ echo " Recommended: 2 ETH (with buffer)"
|
||||
echo " Purpose: Gas fees for bridge deployment"
|
||||
|
||||
# Show balances if RPC is available
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
MAINNET_RPC_URL="${MAINNET_RPC_URL:-${ETHEREUM_MAINNET_RPC:-}}"
|
||||
if [ -n "$RPC_URL" ]; then
|
||||
log_info "=== Current Balances ==="
|
||||
|
||||
# Check Mainnet balance
|
||||
if [ -n "$MAINNET_RPC_URL" ]; then
|
||||
MAINNET_RPC="$MAINNET_RPC_URL"
|
||||
else
|
||||
MAINNET_RPC="https://eth.llamarpc.com"
|
||||
fi
|
||||
MAINNET_RPC="${MAINNET_RPC_URL:-https://eth.llamarpc.com}"
|
||||
|
||||
MAINNET_BALANCE=$(cast balance "$WALLET_ADDRESS" --rpc-url "$MAINNET_RPC" 2>/dev/null || echo "0")
|
||||
MAINNET_ETH=$(cast --to-unit "$MAINNET_BALANCE" ether 2>/dev/null || echo "0")
|
||||
|
||||
@@ -38,13 +38,13 @@ if [ -f .env ]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Deployer: derive from PRIVATE_KEY or use DEPLOYER_ADDRESS if set (read-only mode)
|
||||
# Deployer: prefer DEPLOYER_ADDRESS from loader; otherwise derive from PRIVATE_KEY.
|
||||
if [ -n "${DEPLOYER_ADDRESS:-}" ]; then
|
||||
DEPLOYER="${DEPLOYER_ADDRESS}"
|
||||
[[ "$DEPLOYER" != 0x* ]] && DEPLOYER="0x$DEPLOYER"
|
||||
else
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo "ERROR: Set PRIVATE_KEY in .env or DEPLOYER_ADDRESS=0x4A666F96fC8764181194447A7dFdb7d471b301C8 for read-only"
|
||||
echo "ERROR: Set PRIVATE_KEY in .env or DEPLOYER_ADDRESS=0x... for read-only"
|
||||
exit 1
|
||||
fi
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)
|
||||
@@ -129,7 +129,7 @@ echo "============================================"
|
||||
# Fallback public RPCs when env not set (so token lists are always shown)
|
||||
RPC_138="${RPC_URL_138:-https://rpc-core.d-bis.org}"
|
||||
RPC_1="${ETHEREUM_MAINNET_RPC:-https://eth.llamarpc.com}"
|
||||
RPC_651940="${CHAIN_651940_RPC:-${ALLTRA_MAINNET_RPC:-https://mainnet-rpc.alltra.global}}"
|
||||
RPC_651940="${CHAIN_651940_RPC:-${CHAIN_651940_RPC_URL:-${ALL_MAINNET_RPC:-${ALLTRA_MAINNET_RPC:-https://mainnet-rpc.alltra.global}}}}"
|
||||
RPC_25="${CRONOS_RPC:-${CRONOS_MAINNET_RPC:-https://evm.cronos.org}}"
|
||||
RPC_137="${POLYGON_MAINNET_RPC:-https://polygon-rpc.com}"
|
||||
RPC_8453="${BASE_MAINNET_RPC:-https://mainnet.base.org}"
|
||||
|
||||
@@ -14,7 +14,7 @@ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "$PROJECT_ROOT"
|
||||
elif [[ -f "$PROJECT_ROOT/.env" ]]; then
|
||||
@@ -49,13 +49,9 @@ if [[ -n "${DEPLOYER_ADDRESS:-}" ]]; then
|
||||
DEPLOYER="${DEPLOYER_ADDRESS}"
|
||||
[[ "$DEPLOYER" != 0x* ]] && DEPLOYER="0x$DEPLOYER"
|
||||
else
|
||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||
echo "Error: Set PRIVATE_KEY in .env or DEPLOYER_ADDRESS for read-only check" >&2
|
||||
exit 1
|
||||
fi
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)
|
||||
DEPLOYER="$(derive_deployer_address 2>/dev/null || true)"
|
||||
if [[ -z "$DEPLOYER" ]]; then
|
||||
echo "Error: Could not derive deployer from PRIVATE_KEY (is 'cast' available?)" >&2
|
||||
echo "Error: Set PRIVATE_KEY or DEPLOYER_ADDRESS for read-only check." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -45,8 +45,9 @@ export RPC_URL_138="${RPC_URL_138:-${CHAIN_138_RPC_URL:-}}"
|
||||
export ETHEREUM_MAINNET_RPC="${ETHEREUM_MAINNET_RPC:-}"
|
||||
|
||||
# Require key and RPCs so we fail with a clear message instead of "Invalid params"
|
||||
[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set in .env"; exit 1; }
|
||||
RECIPIENT=$(cast wallet address "$PRIVATE_KEY")
|
||||
require_private_key_env || exit 1
|
||||
RECIPIENT="$(derive_deployer_address || true)"
|
||||
[[ -n "$RECIPIENT" ]] || { echo "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY." >&2; exit 1; }
|
||||
NONCE=$(cast keccak "e2e-$(date +%s)" | tr -d '\n\r')
|
||||
# 0.001 ether in wei
|
||||
AMOUNT_WEI="${AMOUNT_WEI:-1000000000000000}"
|
||||
|
||||
@@ -34,9 +34,10 @@ XAU_SEED_OZ="${XAU_SEED_OZ:-100}"
|
||||
XAU_SPOT_USD="${XAU_SPOT_USD:-4506.30}"
|
||||
|
||||
[[ -n "$DODO_PMM_INTEGRATION_ADDRESS" ]] || { echo "DODO_PMM_INTEGRATION_ADDRESS not set" >&2; exit 1; }
|
||||
[[ -n "$PRIVATE_KEY" ]] || { echo "PRIVATE_KEY not set" >&2; exit 1; }
|
||||
require_private_key_env || exit 1
|
||||
|
||||
DEPLOYER="$(cast wallet address --private-key "$PRIVATE_KEY")"
|
||||
DEPLOYER="$(derive_deployer_address || true)"
|
||||
[[ -n "$DEPLOYER" ]] || { echo "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY." >&2; exit 1; }
|
||||
MAX_UINT='115792089237316195423570985008687907853269984665640564039457584007913129639935'
|
||||
ZERO_ADDR='0x0000000000000000000000000000000000000000'
|
||||
|
||||
|
||||
@@ -5,6 +5,14 @@
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "$PROJECT_ROOT"
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
echo " Trustless Bridge Deployment"
|
||||
echo "=========================================="
|
||||
@@ -22,20 +30,10 @@ if ! command -v forge &> /dev/null; then
|
||||
fi
|
||||
echo "✓ Foundry installed"
|
||||
|
||||
# Check .env file
|
||||
if [ ! -f .env ]; then
|
||||
echo "✗ Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ .env file exists"
|
||||
|
||||
# Load environment
|
||||
source .env 2>/dev/null || true
|
||||
|
||||
# Check required variables
|
||||
MISSING=0
|
||||
for var in PRIVATE_KEY ETHEREUM_MAINNET_RPC RPC_URL_138 ETHERSCAN_API_KEY; do
|
||||
if [ -z "${!var}" ] || [ "${!var}" == "0x..." ] || [ "${!var}" == "your_etherscan_api_key" ]; then
|
||||
if [ -z "${!var:-}" ] || [ "${!var:-}" == "0x..." ] || [ "${!var:-}" == "your_etherscan_api_key" ]; then
|
||||
echo "✗ $var: Not set"
|
||||
MISSING=1
|
||||
fi
|
||||
|
||||
@@ -62,7 +62,9 @@ command -v jq >/dev/null 2>&1 || { echo "jq is required" >&2; exit 1; }
|
||||
command -v cast >/dev/null 2>&1 || { echo "cast is required" >&2; exit 1; }
|
||||
[[ -n "$DODO_PMM_INTEGRATION_ADDRESS" ]] || { echo "DODO_PMM_INTEGRATION_ADDRESS not set" >&2; exit 1; }
|
||||
[[ -n "$DODO_PMM_PROVIDER_ADDRESS" ]] || { echo "DODO_PMM_PROVIDER_ADDRESS not set" >&2; exit 1; }
|
||||
[[ "$DRY_RUN" == "1" || -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set (required unless DRY_RUN=1)" >&2; exit 1; }
|
||||
if [[ "$DRY_RUN" != "1" ]]; then
|
||||
require_private_key_env || exit 1
|
||||
fi
|
||||
CHAIN_GAS_PRICE="${CHAIN_GAS_PRICE:-1000000000}"
|
||||
TX_TIMEOUT_SECONDS="${TX_TIMEOUT_SECONDS:-120}"
|
||||
POST_CREATE_POLL_SECONDS="${POST_CREATE_POLL_SECONDS:-20}"
|
||||
@@ -149,8 +151,8 @@ failed=0
|
||||
CURRENT_NONCE=""
|
||||
|
||||
if [[ "$DRY_RUN" != "1" ]]; then
|
||||
DEPLOYER_ADDRESS="$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || true)"
|
||||
[[ -n "$DEPLOYER_ADDRESS" ]] || { echo "Failed to derive deployer address from PRIVATE_KEY" >&2; exit 1; }
|
||||
DEPLOYER_ADDRESS="$(derive_deployer_address || true)"
|
||||
[[ -n "$DEPLOYER_ADDRESS" ]] || { echo "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY." >&2; exit 1; }
|
||||
fi
|
||||
|
||||
rpc_call() {
|
||||
|
||||
@@ -24,19 +24,10 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
else
|
||||
log_error "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "=== Etherscan Contract Verification ==="
|
||||
|
||||
if [ -z "$ETHERSCAN_API_KEY" ]; then
|
||||
log_error "Error: ETHERSCAN_API_KEY not set in .env"
|
||||
log_error "ERROR: ETHERSCAN_API_KEY not available. Set it in smom-dbis-138/.env or repo .env."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -26,15 +26,11 @@ fi
|
||||
|
||||
|
||||
# Get deployer address
|
||||
if [ -z "${PRIVATE_KEY:-}" ]; then
|
||||
echo "Error: PRIVATE_KEY not set in .env"
|
||||
DEPLOYER="$(require_deployer_address || true)"
|
||||
if [[ -z "$DEPLOYER" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PRIVATE_KEY_FIXED="${PRIVATE_KEY}"
|
||||
[[ "$PRIVATE_KEY_FIXED" != 0x* ]] && PRIVATE_KEY_FIXED="0x${PRIVATE_KEY_FIXED}"
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY_FIXED" 2>/dev/null | head -1)
|
||||
|
||||
echo "=========================================="
|
||||
echo "Contract Ownership Verification"
|
||||
echo "=========================================="
|
||||
@@ -185,4 +181,3 @@ fi
|
||||
echo "=========================================="
|
||||
echo "Ownership Verification Complete"
|
||||
echo "=========================================="
|
||||
|
||||
|
||||
@@ -25,18 +25,10 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Load environment variables
|
||||
if [ ! -f .env ]; then
|
||||
log_error "Error: .env file not found"
|
||||
echo "Please create .env file with required variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
|
||||
# Check required variables
|
||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-${CHAIN138_RPC_URL:-}}}"
|
||||
if [ -z "$RPC_URL" ]; then
|
||||
log_error "Error: RPC_URL not set in .env"
|
||||
log_error "ERROR: Chain 138 RPC not available. Set RPC_URL, RPC_URL_138, or CHAIN138_RPC_URL."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -90,7 +82,7 @@ CONTRACTS=(
|
||||
|
||||
for contract_info in "${CONTRACTS[@]}"; do
|
||||
IFS=':' read -r env_var name <<< "$contract_info"
|
||||
address="${!env_var}"
|
||||
address="${!env_var:-}"
|
||||
|
||||
if [ -n "$address" ]; then
|
||||
output_file="${TEMP_DIR}/${env_var}.out"
|
||||
@@ -132,4 +124,3 @@ else
|
||||
log_error "❌ ${FAILED} out of ${TOTAL} contract(s) failed verification"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -148,6 +148,13 @@ fi
|
||||
|
||||
echo
|
||||
|
||||
log_info "External Dependency Blockers:"
|
||||
if ! bash "$PROJECT_ROOT/scripts/verify/check-external-dependencies.sh" --advisory; then
|
||||
true
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# Optional Configuration
|
||||
log_info "Optional Configuration:"
|
||||
if [ -n "${AZURE_CLIENT_ID:-}" ]; then
|
||||
@@ -200,4 +207,3 @@ else
|
||||
info "Run: ./scripts/deployment/populate-env.sh to complete setup"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -12,6 +12,77 @@ _LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
[[ -z "${PROJECT_ROOT:-}" ]] && PROJECT_ROOT="$(cd "$_LIB_DIR/../../.." && pwd)"
|
||||
source "$_LIB_DIR/../forge-scope.sh"
|
||||
|
||||
_dep_dotenv_source() {
|
||||
local f="$1"
|
||||
[[ -f "$f" ]] || return 0
|
||||
local had_nounset=0
|
||||
if [[ $- == *u* ]]; then
|
||||
had_nounset=1
|
||||
set +u
|
||||
fi
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$f"
|
||||
set +a
|
||||
(( had_nounset )) && set -u
|
||||
}
|
||||
|
||||
_dep_export_from_private_key() {
|
||||
[[ -n "${DEPLOYER_ADDRESS:-}" || -z "${PRIVATE_KEY:-}" ]] && return 0
|
||||
command -v cast >/dev/null 2>&1 || return 0
|
||||
local deployer_addr
|
||||
deployer_addr="$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)"
|
||||
[[ -n "$deployer_addr" ]] || return 0
|
||||
export DEPLOYER_ADDRESS="$deployer_addr"
|
||||
export DEPLOYER="${DEPLOYER:-$deployer_addr}"
|
||||
}
|
||||
|
||||
normalize_private_key_env() {
|
||||
[[ -n "${PRIVATE_KEY:-}" ]] || return 0
|
||||
if [[ "${PRIVATE_KEY#0x}" == "$PRIVATE_KEY" ]]; then
|
||||
export PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
fi
|
||||
}
|
||||
|
||||
require_private_key_env() {
|
||||
local hint="${1:-Set PRIVATE_KEY in smom-dbis-138/.env, repo .env, or ~/.secure-secrets/private-keys.env.}"
|
||||
normalize_private_key_env
|
||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||
echo "ERROR: PRIVATE_KEY not available. $hint" >&2
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
derive_deployer_address() {
|
||||
if [[ -n "${DEPLOYER_ADDRESS:-}" ]]; then
|
||||
printf '%s\n' "$DEPLOYER_ADDRESS"
|
||||
return 0
|
||||
fi
|
||||
normalize_private_key_env
|
||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||
return 1
|
||||
fi
|
||||
command -v cast >/dev/null 2>&1 || return 1
|
||||
local deployer_addr
|
||||
deployer_addr="$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)"
|
||||
[[ -n "$deployer_addr" ]] || return 1
|
||||
export DEPLOYER_ADDRESS="$deployer_addr"
|
||||
export DEPLOYER="${DEPLOYER:-$deployer_addr}"
|
||||
printf '%s\n' "$deployer_addr"
|
||||
}
|
||||
|
||||
require_deployer_address() {
|
||||
local deployer_addr
|
||||
require_private_key_env "${1:-Set PRIVATE_KEY in smom-dbis-138/.env, repo .env, or ~/.secure-secrets/private-keys.env.}" || return 1
|
||||
deployer_addr="$(derive_deployer_address || true)"
|
||||
if [[ -z "$deployer_addr" ]]; then
|
||||
echo "ERROR: Could not derive DEPLOYER_ADDRESS from PRIVATE_KEY." >&2
|
||||
return 1
|
||||
fi
|
||||
printf '%s\n' "$deployer_addr"
|
||||
}
|
||||
|
||||
# Preferred .env: ENV_FILE if set and readable; else PROJECT_ROOT/.env (repo root).
|
||||
load_deployment_env() {
|
||||
local root="${PROJECT_ROOT}"
|
||||
@@ -24,17 +95,9 @@ load_deployment_env() {
|
||||
export PROJECT_ROOT="$root"
|
||||
local dotenv="${root}/.env"
|
||||
[[ -n "${ENV_FILE:-}" && -f "${ENV_FILE}" ]] && dotenv="${ENV_FILE}"
|
||||
if [[ -f "$dotenv" ]]; then
|
||||
local had_nounset=0
|
||||
if [[ $- == *u* ]]; then
|
||||
had_nounset=1
|
||||
set +u
|
||||
fi
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$dotenv"
|
||||
set +a
|
||||
(( had_nounset )) && set -u
|
||||
_dep_dotenv_source "$dotenv"
|
||||
if [[ -z "${ENV_FILE:-}" ]]; then
|
||||
_dep_dotenv_source "${root}/smom-dbis-138/.env"
|
||||
fi
|
||||
local secure_secrets_file="${SECURE_SECRETS_FILE:-$HOME/.secure-secrets/private-keys.env}"
|
||||
if [[ -f "$secure_secrets_file" ]]; then
|
||||
@@ -65,11 +128,17 @@ load_deployment_env() {
|
||||
if [[ -z "${PRIVATE_KEY:-}" && -n "${DEPLOYER_PRIVATE_KEY:-}" ]]; then
|
||||
export PRIVATE_KEY="$DEPLOYER_PRIVATE_KEY"
|
||||
fi
|
||||
normalize_private_key_env
|
||||
_dep_export_from_private_key
|
||||
export CHAIN_651940_RPC_URL="${CHAIN_651940_RPC_URL:-${ALL_MAINNET_RPC:-}}"
|
||||
export CHAIN_651940_RPC="${CHAIN_651940_RPC:-${CHAIN_651940_RPC_URL:-${ALL_MAINNET_RPC:-}}}"
|
||||
export ALLTRA_MAINNET_RPC="${ALLTRA_MAINNET_RPC:-${ALL_MAINNET_RPC:-${CHAIN_651940_RPC_URL:-${CHAIN_651940_RPC:-}}}}"
|
||||
# Trailing CR/LF on RPC URL lines breaks cast/curl; strip common RPC vars after load.
|
||||
local _k _v
|
||||
for _k in RPC_URL_138 RPC_URL CHAIN138_RPC ETHEREUM_MAINNET_RPC GNOSIS_MAINNET_RPC GNOSIS_RPC \
|
||||
CRONOS_RPC_URL CRONOS_RPC CELO_MAINNET_RPC CELO_RPC BSC_RPC_URL POLYGON_MAINNET_RPC \
|
||||
BASE_MAINNET_RPC OPTIMISM_MAINNET_RPC ARBITRUM_MAINNET_RPC AVALANCHE_RPC_URL WEMIX_RPC WEMIX_MAINNET_RPC; do
|
||||
BASE_MAINNET_RPC OPTIMISM_MAINNET_RPC ARBITRUM_MAINNET_RPC AVALANCHE_RPC_URL WEMIX_RPC WEMIX_MAINNET_RPC \
|
||||
ALL_MAINNET_RPC ALLTRA_MAINNET_RPC CHAIN_651940_RPC CHAIN_651940_RPC_URL; do
|
||||
_v="${!_k:-}"
|
||||
[[ -z "$_v" ]] && continue
|
||||
_v="${_v%$'\r'}"
|
||||
|
||||
Reference in New Issue
Block a user