Files
proxmox/scripts/lib/load-contract-addresses.sh
defiQUG bea1903ac9
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Sync all local changes: docs, config, scripts, submodule refs, verification evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 15:46:06 -08:00

68 lines
2.5 KiB
Bash

#!/usr/bin/env bash
# Load contract addresses from config/smart-contracts-master.json into the environment.
# Use after load-project-env.sh so .env overrides; addresses not set in .env are filled from the master JSON.
#
# Usage: source "${SCRIPT_DIR}/lib/load-contract-addresses.sh"
# Requires: jq (optional; if missing, only config/contract-addresses.conf is sourced when present)
#
# Exports: For each chain, contract names as CONTRACTS_<chain>_<Name> and env var names from envVarMap
# (e.g. CCIP_ROUTER, CCIPWETH9_BRIDGE_CHAIN138) when not already set.
# Version: 2026-02-13
if [[ -z "${PROJECT_ROOT:-}" ]]; then
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
export PROJECT_ROOT
fi
CONTRACTS_JSON="${PROJECT_ROOT}/config/smart-contracts-master.json"
# Source legacy contract-addresses.conf if present (e.g. ADDR_CCIP_SENDER for verify scripts)
[[ -f "${PROJECT_ROOT}/config/contract-addresses.conf" ]] && source "${PROJECT_ROOT}/config/contract-addresses.conf" 2>/dev/null || true
if [[ ! -f "$CONTRACTS_JSON" ]]; then
return 0 2>/dev/null || true
fi
if ! command -v jq &>/dev/null; then
return 0 2>/dev/null || true
fi
# Export a var only if not already set (so .env overrides)
_set_if_unset() {
local key="$1"
local val="$2"
if [[ -z "${!key:-}" ]]; then
export "${key}=${val}"
fi
}
# For chain $1, export contracts as CONTRACTS_<chain>_<contract_key> and envVarMap names
_export_chain() {
local chain="$1"
local chain_key="$chain"
local contracts
local env_map
contracts=$(jq -r --arg c "$chain_key" '.chains[$c].contracts // {} | to_entries[] | "\(.key)\t\(.value)"' "$CONTRACTS_JSON" 2>/dev/null)
env_map=$(jq -r --arg c "$chain_key" '.chains[$c].envVarMap // {} | to_entries[] | "\(.key)\t\(.value)"' "$CONTRACTS_JSON" 2>/dev/null)
while IFS=$'\t' read -r name addr; do
[[ -z "$name" || -z "$addr" ]] && continue
local safe_name="${name//[^a-zA-Z0-9_]/_}"
_set_if_unset "CONTRACTS_${chain}_${safe_name}" "$addr"
done <<< "$contracts"
while IFS=$'\t' read -r env_var contract_key; do
[[ -z "$env_var" || -z "$contract_key" ]] && continue
local addr
addr=$(jq -r --arg c "$chain_key" --arg k "$contract_key" '.chains[$c].contracts[$k] // empty' "$CONTRACTS_JSON" 2>/dev/null)
[[ -n "$addr" ]] && _set_if_unset "$env_var" "$addr"
done <<< "$env_map"
}
for chain in 138 1; do
if jq -e --arg c "$chain" '.chains[$c]' "$CONTRACTS_JSON" &>/dev/null; then
_export_chain "$chain"
fi
done
export CONTRACTS_MASTER_JSON="$CONTRACTS_JSON"