#!/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__ 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__ 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"