2026-01-06 01:46:25 -08:00
|
|
|
#!/usr/bin/env bash
|
2026-02-12 15:46:57 -08:00
|
|
|
set -euo pipefail
|
|
|
|
|
|
2026-01-06 01:46:25 -08:00
|
|
|
# Error handling utilities
|
2026-02-12 15:46:57 -08:00
|
|
|
# err_exit is defined in load-project-env.sh when sourced; fallback here for standalone use
|
|
|
|
|
err_exit() { echo "ERROR: $1" >&2; exit 1; }
|
2026-01-06 01:46:25 -08:00
|
|
|
|
|
|
|
|
handle_rpc_error() {
|
|
|
|
|
local error="$1"
|
|
|
|
|
if echo "$error" | grep -q "insufficient funds"; then
|
|
|
|
|
echo "ERROR: Insufficient balance for transaction"
|
|
|
|
|
return 1
|
|
|
|
|
elif echo "$error" | grep -q "nonce too low"; then
|
|
|
|
|
echo "ERROR: Transaction nonce too low. Wait for pending transactions."
|
|
|
|
|
return 1
|
|
|
|
|
elif echo "$error" | grep -q "replacement transaction underpriced"; then
|
|
|
|
|
echo "ERROR: Pending transaction exists. Wait or increase gas price."
|
|
|
|
|
return 1
|
|
|
|
|
elif echo "$error" | grep -q "execution reverted"; then
|
|
|
|
|
echo "ERROR: Transaction reverted. Check contract state."
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
retry_transaction() {
|
|
|
|
|
local command="$1"
|
|
|
|
|
local max_retries=3
|
|
|
|
|
local retry=0
|
|
|
|
|
|
|
|
|
|
while [ $retry -lt $max_retries ]; do
|
|
|
|
|
if eval "$command"; then
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
((retry++))
|
|
|
|
|
sleep 5
|
|
|
|
|
done
|
|
|
|
|
return 1
|
|
|
|
|
}
|