Files
smom-dbis-138/scripts/deployment/verify-multichain-cw-etherscan.sh
defiQUG f3d2961b97
Some checks failed
CI/CD Pipeline / Lint and Format (push) Failing after 46s
CI/CD Pipeline / Terraform Validation (push) Failing after 35s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 37s
Deploy ChainID 138 / Deploy ChainID 138 (push) Failing after 1m50s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 2m19s
Validation / validate-genesis (push) Successful in 51s
Validation / validate-terraform (push) Failing after 39s
Validation / validate-kubernetes (push) Failing after 10s
CI/CD Pipeline / Solidity Contracts (push) Failing after 12m56s
Validation / validate-smart-contracts (push) Failing after 12s
CI/CD Pipeline / Security Scanning (push) Failing after 15m52s
Validation / validate-security (push) Failing after 10m59s
Validation / validate-documentation (push) Failing after 17s
Validate Token List / validate (push) Failing after 30s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 26s
Verify Deployment / Verify Deployment (push) Failing after 56s
feat: add hybx omnl stack and gas pmm tooling
2026-04-24 12:56:40 -07:00

131 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verify CompliantWrappedToken (cW*) on all chains where addresses exist in .env.
# Skips CW*_MAINNET (use verify-mainnet-cw-etherscan.sh). Same constructor as DeployCWTokens.
#
# Requires: ETHERSCAN_API_KEY (Etherscan v2 / unified explorers); CRONOSCAN_API_KEY for Cronos.
# CW_VERIFY_ADMIN or PRIVATE_KEY for constructor admin address.
#
# Usage: cd smom-dbis-138 && ./scripts/deployment/verify-multichain-cw-etherscan.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
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}"
elif [[ -f "$PROJECT_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$PROJECT_ROOT/.env"
set +a
fi
if [[ -z "${ETHERSCAN_API_KEY:-}" ]]; then
echo "ETHERSCAN_API_KEY not set" >&2
exit 1
fi
ADMIN="${CW_VERIFY_ADMIN:-}"
if [[ -z "$ADMIN" && -n "${PRIVATE_KEY:-}" ]]; then
ADMIN="$(cast wallet address --private-key "$PRIVATE_KEY")"
fi
if [[ -z "$ADMIN" || "$ADMIN" == "0x0000000000000000000000000000000000000000" ]]; then
echo "Set CW_VERIFY_ADMIN or PRIVATE_KEY" >&2
exit 1
fi
# Uppercase chain suffix -> forge --chain name (Foundry)
forge_chain() {
case "$1" in
BSC) echo bsc ;;
POLYGON) echo polygon ;;
GNOSIS) echo gnosis ;;
OPTIMISM) echo optimism ;;
BASE) echo base ;;
ARBITRUM) echo arbitrum ;;
AVALANCHE) echo avalanche ;;
CELO) echo celo ;;
CRONOS) echo cronos ;;
*) echo "" ;;
esac
}
# API key for forge (Cronos uses cronoscan)
api_key_for() {
case "$1" in
CRONOS) echo "${CRONOSCAN_API_KEY:-}" ;;
*) echo "${ETHERSCAN_API_KEY}" ;;
esac
}
# cWUSDT -> Wrapped cUSDT / cWUSDT
name_sym_from_cw() {
local cw="$1"
local core="${cw#CW}"
echo "Wrapped c${core}|cW${core}"
}
OK=0
SKIP=0
FAIL=0
while IFS= read -r line; do
[[ "$line" =~ ^CW[A-Z0-9]+_[A-Z0-9]+= ]] || continue
key="${line%%=*}"
addr="${line#*=}"
[[ -z "$addr" || "$addr" == "0x0000000000000000000000000000000000000000" ]] && continue
chain="${key##*_}"
[[ "$chain" == "MAINNET" ]] && continue
# Cronos: Foundry + Etherscan API v2 often errors ("chainid"); use verify-cronos-contracts.sh or explorer.cronos.org manual upload.
[[ "$chain" == "CRONOS" ]] && { echo " skip $key (Cronos: use verify-cronos-contracts.sh or CRONOS_VERIFICATION_RUNBOOK)"; SKIP=$((SKIP + 1)); continue; }
fc="$(forge_chain "$chain")"
if [[ -z "$fc" ]]; then
echo " skip $key (unknown chain suffix $chain)"
SKIP=$((SKIP + 1))
continue
fi
api="$(api_key_for "$chain")"
if [[ -z "$api" ]]; then
echo " skip $key (no API key for $chain; set CRONOSCAN_API_KEY for Cronos)" >&2
SKIP=$((SKIP + 1))
continue
fi
cwpart="${key%_*}"
IFS='|' read -r cname sym <<< "$(name_sym_from_cw "$cwpart")"
enc="$(cast abi-encode "constructor(string,string,uint8,address)" "$cname" "$sym" 6 "$ADMIN")"
echo "[$fc] $sym $addr ..."
set +e
out="$(forge verify-contract \
--chain "$fc" \
--num-of-optimizations 200 \
--via-ir \
--constructor-args "$enc" \
--etherscan-api-key "$api" \
"$addr" \
"contracts/tokens/CompliantWrappedToken.sol:CompliantWrappedToken" 2>&1)"
rc=$?
set -e
if [[ $rc -eq 0 ]]; then
echo " ok"
OK=$((OK + 1))
elif echo "$out" | grep -qiE 'already verified|Already Verified|Contract source code already verified'; then
echo " already verified"
OK=$((OK + 1))
else
echo " FAILED (exit $rc)" >&2
echo "$out" >&2
FAIL=$((FAIL + 1))
fi
sleep 1
done < <(env | grep '^CW[A-Z0-9]*_' | sort)
echo ""
echo "=== multichain cW*: ok/already=$OK skipped=$SKIP failed=$FAIL ==="