Files
proxmox/scripts/burn-weth9-from-keys.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

92 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Burn all WETH9 from every address whose private key is provided.
# Keys: set BURN_KEYS_FILE to a path with one PRIVATE_KEY=0x... per line,
# or export BURN_KEY_1=0x... BURN_KEY_2=0x... etc.
# Requires: RPC_URL_138 (or CHAIN138_RPC_URL). Keys from smom-dbis-138/.env or BURN_KEYS_FILE / BURN_KEY_*.
# Usage: ./scripts/burn-weth9-from-keys.sh [--dry-run]
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
for a in "$@"; do
case "$a" in
--dry-run) DRY_RUN=true;;
esac
done
# Collect private keys: BURN_KEY_1, BURN_KEY_2, ... and/or PRIVATE_KEY, and/or lines in BURN_KEYS_FILE
KEYS=()
if [[ -n "${PRIVATE_KEY:-}" ]]; then
KEYS+=( "$PRIVATE_KEY" )
fi
for i in $(seq 1 50); do
v="BURN_KEY_$i"
[[ -n "${!v:-}" ]] && KEYS+=( "${!v}" )
done
if [[ -n "${BURN_KEYS_FILE:-}" ]] && [[ -f "$BURN_KEYS_FILE" ]]; then
while IFS= read -r line || true; do
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
[[ -z "$line" || "$line" =~ ^# ]] && continue
if [[ "$line" =~ PRIVATE_KEY=(.+) ]]; then
KEYS+=( "$(echo "${BASH_REMATCH[1]}" | sed "s/^['\"]//;s/['\"]$//")" )
fi
done < "$BURN_KEYS_FILE"
fi
if [[ ${#KEYS[@]} -eq 0 ]]; then
echo "No private keys found. Set PRIVATE_KEY, BURN_KEY_1, BURN_KEY_2, ... or BURN_KEYS_FILE (file with PRIVATE_KEY=0x... per line)."
exit 1
fi
echo "=== Burn WETH9 from all key-controlled addresses ==="
echo "RPC: $RPC"
echo "WETH9: $WETH9"
echo "Keys loaded: ${#KEYS[@]}"
echo ""
BURNED=0
for KEY in "${KEYS[@]}"; do
[[ -z "$KEY" ]] && continue
ADDR=$(cast wallet address --private-key "$KEY" 2>/dev/null || true)
[[ -z "$ADDR" ]] && continue
BALANCE_WEI=$(cast call "$WETH9" "balanceOf(address)(uint256)" "$ADDR" --rpc-url "$RPC" 2>/dev/null || echo "0")
[[ -z "$BALANCE_WEI" ]] && BALANCE_WEI=0
if [[ "$BALANCE_WEI" == "0" ]]; then
echo "[$ADDR] Balance 0, skip"
continue
fi
BALANCE_ETH=$(cast from-wei "$BALANCE_WEI" ether 2>/dev/null || echo "?")
echo "[$ADDR] WETH9: $BALANCE_WEI ($BALANCE_ETH WETH)"
if $DRY_RUN; then
echo " [dry-run] Would withdraw($BALANCE_WEI)"
((BURNED++)) || true
continue
fi
if cast send "$WETH9" "withdraw(uint256)" "$BALANCE_WEI" \
--rpc-url "$RPC" --private-key "$KEY" --legacy --gas-price "$GAS_PRICE" --gas-limit "$GAS_LIMIT" 2>&1; then
echo " Burned."
((BURNED++)) || true
else
echo " Failed."
fi
echo ""
done
echo "Done. Burned from $BURNED address(es)."
echo "To zero total supply, every WETH9 holder must withdraw; use ./scripts/weth9-list-holders.sh to list holders."