68 lines
2.9 KiB
Bash
Executable File
68 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Check deployer nonce and balance on Mainnet, Cronos, and Arbitrum (public RPCs by default).
|
|
# Use to diagnose "nonce too high" / "invalid nonce" and "insufficient funds" before retrying cW* deploy.
|
|
# Usage: ./scripts/deployment/check-deployer-nonce-and-balance.sh
|
|
# Requires: PRIVATE_KEY (repo root .env, smom-dbis-138/.env, or ~/.secure-secrets/private-keys.env via load-project-env).
|
|
# Optional: ETHEREUM_MAINNET_RPC, CRONOS_RPC_URL, ARBITRUM_MAINNET_RPC — if unset, uses public endpoints
|
|
# (override per chain with ETHEREUM_MAINNET_PUBLIC_RPC / CRONOS_MAINNET_PUBLIC_RPC / ARBITRUM_MAINNET_PUBLIC_RPC).
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
# shellcheck disable=SC1091
|
|
source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh"
|
|
|
|
# Defaults when .env does not set provider URLs (read-only public RPCs).
|
|
PUBLIC_ETHEREUM_RPC="${ETHEREUM_MAINNET_PUBLIC_RPC:-https://ethereum-rpc.publicnode.com}"
|
|
PUBLIC_CRONOS_RPC="${CRONOS_MAINNET_PUBLIC_RPC:-https://evm.cronos.org}"
|
|
PUBLIC_ARBITRUM_RPC="${ARBITRUM_MAINNET_PUBLIC_RPC:-https://arbitrum-one-rpc.publicnode.com}"
|
|
|
|
DEPLOYER="${DEPLOYER_ADDRESS:-}"
|
|
if [[ -z "$DEPLOYER" && -n "${PRIVATE_KEY:-}" ]]; then
|
|
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)
|
|
fi
|
|
[[ -z "$DEPLOYER" ]] && {
|
|
echo "Could not derive deployer address. Set PRIVATE_KEY or DEPLOYER_ADDRESS in repo .env, smom-dbis-138/.env, or ~/.secure-secrets/private-keys.env" >&2
|
|
exit 1
|
|
}
|
|
echo "Deployer address: $DEPLOYER"
|
|
echo ""
|
|
|
|
for label in "Mainnet (1)" "Cronos (25)" "Arbitrum (42161)"; do
|
|
case "$label" in
|
|
"Mainnet (1)")
|
|
RPC="${ETHEREUM_MAINNET_RPC:-${ETH_MAINNET_RPC_URL:-$PUBLIC_ETHEREUM_RPC}}"
|
|
CHAIN=1
|
|
;;
|
|
"Cronos (25)")
|
|
RPC="${CRONOS_RPC_URL:-${CRONOS_RPC:-$PUBLIC_CRONOS_RPC}}"
|
|
CHAIN=25
|
|
;;
|
|
"Arbitrum (42161)")
|
|
RPC="${ARBITRUM_MAINNET_RPC:-${ARBITRUM_MAINNET_RPC_URL:-$PUBLIC_ARBITRUM_RPC}}"
|
|
CHAIN=42161
|
|
;;
|
|
esac
|
|
[[ -z "$RPC" ]] && { echo "$label: no RPC set, skip"; continue; }
|
|
NONCE=$(cast nonce "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "?")
|
|
BALANCE=$(cast balance "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "?")
|
|
echo "$label"
|
|
echo " RPC: ${RPC%%\?*}"
|
|
echo " Nonce (next tx): $NONCE"
|
|
echo " Balance (wei): $BALANCE"
|
|
if [[ "$CHAIN" == "42161" && "$BALANCE" != "?" ]]; then
|
|
# ~0.44 ETH needed at 35 gwei for 10 contracts
|
|
NEEDED=440872740000000000
|
|
if [[ "$BALANCE" -lt "$NEEDED" ]]; then
|
|
echo " → Insufficient for cW* deploy (~0.44 ETH at 35 gwei). Send ETH to deployer."
|
|
else
|
|
echo " → Balance OK for deploy."
|
|
fi
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
echo "Mainnet/Cronos nonce: If 'nonce too high' or 'invalid nonce', either wait for pending txs to confirm or replace/cancel them (e.g. same nonce, higher gas, 0 value to self)."
|
|
echo "Arbitrum: Fund deployer with ~0.5 ETH on Arbitrum One, then run deploy with ARBITRUM_GAS_PRICE=35000000000."
|