Add optional Cosmos/Engine-X/act-runner templates, CWUSDC/EI-matrix tooling, non-EVM route planner in multi-chain-execution (tests passing), token list and extraction updates, and documentation (MetaMask matrix, GRU/CWUSDC packets). Ignore institutional evidence tarballs/sha256 under reports/status. Validated with: bash scripts/verify/run-all-validation.sh --skip-genesis Co-authored-by: Cursor <cursoragent@cursor.com>
70 lines
3.0 KiB
Bash
Executable File
70 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Single operator pipeline: preflight + mint cWUSDC to every EI matrix wallet on Ethereum mainnet.
|
|
#
|
|
# This does NOT bridge from Chain 138 — it mints on mainnet via MINTER_ROLE on CWUSDC_MAINNET.
|
|
#
|
|
# Usage:
|
|
# ./scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh --dry-run --mint-raw 1000000
|
|
# ./scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh --total-mint-raw 1000000000000 --spread-pct 15
|
|
# ./scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh --mint-raw 1000000 -- --limit 10 # extra args after --
|
|
#
|
|
# Env: loads scripts/lib/load-project-env.sh (PRIVATE_KEY, ETHEREUM_MAINNET_RPC, CWUSDC_MAINNET).
|
|
#
|
|
set -euo pipefail
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
PASS=()
|
|
while [[ $# -gt 0 ]]; do
|
|
if [[ "$1" == "--" ]]; then shift; PASS+=("$@"); break; fi
|
|
PASS+=("$1")
|
|
shift
|
|
done
|
|
|
|
# shellcheck disable=SC1091
|
|
source "$PROJECT_ROOT/scripts/lib/load-project-env.sh"
|
|
|
|
CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}"
|
|
PUBLIC_ETH_RPC="${ETHEREUM_MAINNET_PUBLIC_RPC:-https://ethereum-rpc.publicnode.com}"
|
|
RPC="${ETHEREUM_MAINNET_RPC:-${RPC_URL_1:-${ETH_MAINNET_RPC_URL:-$PUBLIC_ETH_RPC}}}"
|
|
|
|
echo "══════════════════════════════════════════════════════════════"
|
|
echo "Pipeline: EI matrix mainnet cWUSDC mint"
|
|
echo "══════════════════════════════════════════════════════════════"
|
|
echo "Grid: config/pmm-soak-wallet-grid.json"
|
|
echo "Token: $CWUSDC"
|
|
echo "RPC: $RPC"
|
|
echo ""
|
|
|
|
command -v cast &>/dev/null || { echo "cast required" >&2; exit 1; }
|
|
[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set" >&2; exit 1; }
|
|
|
|
FROM=$(cast wallet address --private-key "$PRIVATE_KEY")
|
|
CID=$(cast chain-id --rpc-url "$RPC" 2>/dev/null | tr -d '[:space:]' || echo "?")
|
|
echo "Signer: $FROM"
|
|
echo "Chain ID: $CID (expected 1)"
|
|
if [[ "$CID" != "1" ]]; then
|
|
echo "[WARN] Not Ethereum mainnet — aborting." >&2
|
|
exit 1
|
|
fi
|
|
|
|
ROLE=$(cast keccak "MINTER_ROLE")
|
|
if [[ "${SKIP_EI_MATRIX_MINT_PREFLIGHT:-}" == "1" ]]; then
|
|
echo "Preflight: skipped (SKIP_EI_MATRIX_MINT_PREFLIGHT=1)"
|
|
elif HR=$(cast call "$CWUSDC" "hasRole(bytes32,address)(bool)" "$ROLE" "$FROM" --rpc-url "$RPC" 2>/dev/null); then
|
|
HR_TR=$(echo "$HR" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]')
|
|
if [[ "$HR_TR" == *true* || "$HR_TR" == *0x0000000000000000000000000000000000000000000000000000000000000001* ]]; then
|
|
echo "Preflight: MINTER_ROLE on cWUSDC for signer — OK"
|
|
else
|
|
echo "[WARN] hasRole(MINTER_ROLE) not true for signer (got: $HR) — mints may revert if minter is elsewhere." >&2
|
|
fi
|
|
else
|
|
echo "[WARN] Could not call hasRole — continuing (token ABI may differ)." >&2
|
|
fi
|
|
|
|
echo ""
|
|
echo "→ Running mint-cwusdc-ei-matrix-wallets.sh ${PASS[*]}"
|
|
echo ""
|
|
exec "$SCRIPT_DIR/mint-cwusdc-ei-matrix-wallets.sh" "${PASS[@]}"
|