Files
proxmox/scripts/burn-weth9-deployer.sh
defiQUG b3a8fe4496
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
chore: sync all changes to Gitea
- Config, docs, scripts, and backup manifests
- Submodule refs unchanged (m = modified content in submodules)

Made-with: Cursor
2026-03-02 11:37:34 -08:00

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