58 lines
2.5 KiB
Bash
Executable File
58 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Fix nonce mismatch by clearing broadcast/cache so Forge uses fresh on-chain nonce.
|
|
# Usage: ./scripts/deployment/fix-nonce-and-retry.sh [--chain cronos] [--script <path>]
|
|
# ./scripts/deployment/fix-nonce-and-retry.sh cronos # positional still supported
|
|
set -euo pipefail
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
|
load_deployment_env
|
|
|
|
CHAIN=""
|
|
SCRIPT=""
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--chain) CHAIN="${2:-cronos}"; shift 2 ;;
|
|
--script) SCRIPT="${2:-script/bridge/trustless/DeployTrustlessBridge.s.sol:DeployTrustlessBridge}"; shift 2 ;;
|
|
*) if [[ -z "$CHAIN" ]]; then CHAIN="$1"; elif [[ -z "$SCRIPT" ]]; then SCRIPT="$1"; fi; shift ;;
|
|
esac
|
|
done
|
|
CHAIN="${CHAIN:-cronos}"
|
|
SCRIPT="${SCRIPT:-script/bridge/trustless/DeployTrustlessBridge.s.sol:DeployTrustlessBridge}"
|
|
|
|
case "$(echo "$CHAIN" | tr '[:upper:]' '[:lower:]')" in
|
|
cronos) RPC="${CRONOS_RPC_URL:-https://evm.cronos.org}"; CHAIN_ID=25 ;;
|
|
chain138) RPC="${RPC_URL_138:-${CHAIN_138_RPC_URL:-}}"; CHAIN_ID=138 ;;
|
|
bsc) RPC="${BSC_RPC_URL:-}"; CHAIN_ID=56 ;;
|
|
polygon) RPC="${POLYGON_MAINNET_RPC:-}"; CHAIN_ID=137 ;;
|
|
base) RPC="${BASE_MAINNET_RPC:-}"; CHAIN_ID=8453 ;;
|
|
optimism) RPC="${OPTIMISM_MAINNET_RPC:-}"; CHAIN_ID=10 ;;
|
|
arbitrum) RPC="${ARBITRUM_MAINNET_RPC:-}"; CHAIN_ID=42161 ;;
|
|
avalanche) RPC="${AVALANCHE_RPC_URL:-}"; CHAIN_ID=43114 ;;
|
|
gnosis) RPC="${GNOSIS_MAINNET_RPC:-}"; CHAIN_ID=100 ;;
|
|
*) echo "Unknown chain: $CHAIN (use: cronos, chain138, bsc, polygon, base, optimism, arbitrum, avalanche, gnosis)"; exit 1 ;;
|
|
esac
|
|
if [[ -z "$RPC" ]]; then echo "RPC not set for $CHAIN"; exit 1; fi
|
|
|
|
DEPLOYER=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || true)
|
|
NONCE=$(cast nonce "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "0")
|
|
echo "Deployer: $DEPLOYER"
|
|
echo "Current on-chain nonce: $NONCE"
|
|
echo "RPC: $RPC"
|
|
echo ""
|
|
|
|
# Clear broadcast cache so Forge fetches fresh nonce
|
|
CACHE_DIR="$PROJECT_ROOT/cache"
|
|
BROADCAST_DIR="$PROJECT_ROOT/broadcast"
|
|
SCRIPT_PATH="${SCRIPT%%:*}"
|
|
rm -rf "$CACHE_DIR/$SCRIPT_PATH/$CHAIN_ID" 2>/dev/null || true
|
|
rm -rf "$BROADCAST_DIR/$SCRIPT_PATH/$CHAIN_ID" 2>/dev/null || true
|
|
echo "Cleared cache for $SCRIPT_PATH on chain $CHAIN_ID"
|
|
|
|
echo ""
|
|
echo "Run deployment (use --slow to avoid nonce gaps):"
|
|
echo " forge script $SCRIPT --rpc-url \"$RPC\" --chain-id $CHAIN_ID --broadcast --private-key \"\$PRIVATE_KEY\" --slow"
|
|
echo ""
|