Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
98 lines
3.5 KiB
Bash
Executable File
98 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Unwrap (burn) all WETH9 in the deployer wallet on Chain 138.
|
|
# Calls WETH9.withdraw(balance) so WETH9 is burned and ETH is returned to the deployer.
|
|
#
|
|
# Requires: PRIVATE_KEY and RPC_URL_138 (or CHAIN138_RPC_URL) in smom-dbis-138/.env
|
|
# Usage: ./scripts/burn-weth9-deployer.sh [--dry-run]
|
|
# ./scripts/burn-weth9-deployer.sh <0xADDRESS> # Check WETH9 balance of ADDRESS only (read-only)
|
|
# If the UI shows WETH9 in a different wallet, that wallet's key must be in PRIVATE_KEY to unwrap.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
if [[ -f smom-dbis-138/.env ]]; then
|
|
set -a
|
|
source smom-dbis-138/.env
|
|
set +a
|
|
fi
|
|
|
|
RPC="${RPC_URL_138:-${CHAIN138_RPC_URL:-http://192.168.11.211:8545}}"
|
|
GAS_PRICE="${GAS_PRICE:-1000000000}"
|
|
GAS_LIMIT="${GAS_LIMIT:-150000}"
|
|
WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
|
|
|
DRY_RUN=false
|
|
CHECK_ADDRESS=""
|
|
for a in "$@"; do
|
|
case "$a" in
|
|
--dry-run) DRY_RUN=true;;
|
|
0x*) [[ -z "$CHECK_ADDRESS" ]] && CHECK_ADDRESS="$a";;
|
|
esac
|
|
done
|
|
|
|
DEPLOYER=""
|
|
if [[ -n "${PRIVATE_KEY:-}" ]]; then
|
|
DEPLOYER=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || true)
|
|
fi
|
|
if [[ -n "$CHECK_ADDRESS" ]]; then
|
|
DEPLOYER="$CHECK_ADDRESS"
|
|
if [[ -z "$DEPLOYER" ]]; then
|
|
echo "Error: invalid address $CHECK_ADDRESS"
|
|
exit 1
|
|
fi
|
|
echo "=== WETH9 balance check (read-only) ==="
|
|
echo "Address: $DEPLOYER"
|
|
echo "RPC: $RPC"
|
|
echo "WETH9: $WETH9"
|
|
echo ""
|
|
BALANCE_WEI=$(cast call "$WETH9" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "0")
|
|
if [[ -z "$BALANCE_WEI" ]] || [[ "$BALANCE_WEI" == "0" ]]; then
|
|
echo "WETH9 balance: 0"
|
|
else
|
|
BALANCE_ETH=$(cast from-wei "$BALANCE_WEI" ether 2>/dev/null || echo "?")
|
|
echo "WETH9 balance: $BALANCE_WEI wei ($BALANCE_ETH WETH)"
|
|
echo ""
|
|
echo "To unwrap: run this script with PRIVATE_KEY for this address (e.g. set in smom-dbis-138/.env), or call withdraw($BALANCE_WEI) from this wallet."
|
|
fi
|
|
exit 0
|
|
fi
|
|
if [[ -z "$DEPLOYER" ]]; then
|
|
echo "Error: could not derive deployer address. Set PRIVATE_KEY in smom-dbis-138/.env"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== Burn all WETH9 in deployer wallet ==="
|
|
echo "Deployer: $DEPLOYER"
|
|
echo "RPC: $RPC"
|
|
echo "WETH9: $WETH9"
|
|
echo ""
|
|
|
|
BALANCE_WEI=$(cast call "$WETH9" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "0")
|
|
if [[ -z "$BALANCE_WEI" ]] || [[ "$BALANCE_WEI" == "0" ]]; then
|
|
echo "Deployer WETH9 balance is 0. Nothing to burn."
|
|
exit 0
|
|
fi
|
|
|
|
# Human-readable for display (18 decimals)
|
|
BALANCE_ETH=$(cast from-wei "$BALANCE_WEI" ether 2>/dev/null || echo "?")
|
|
echo "WETH9 balance: $BALANCE_WEI wei ($BALANCE_ETH WETH)"
|
|
echo ""
|
|
|
|
if $DRY_RUN; then
|
|
echo "[dry-run] Would call WETH9.withdraw($BALANCE_WEI) to burn all WETH9 and receive $BALANCE_ETH ETH."
|
|
echo "[dry-run] Command: cast send $WETH9 \"withdraw(uint256)\" $BALANCE_WEI --rpc-url \$RPC --private-key \$PRIVATE_KEY --legacy --gas-price $GAS_PRICE --gas-limit $GAS_LIMIT"
|
|
exit 0
|
|
fi
|
|
|
|
echo "Calling WETH9.withdraw($BALANCE_WEI)..."
|
|
if cast send "$WETH9" "withdraw(uint256)" "$BALANCE_WEI" \
|
|
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-price "$GAS_PRICE" --gas-limit "$GAS_LIMIT"; then
|
|
echo "Done. All WETH9 in deployer wallet has been unwrapped (burned); ETH returned to $DEPLOYER"
|
|
else
|
|
echo "Transaction failed. Check gas, nonce, or RPC."
|
|
exit 1
|
|
fi
|