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
92 lines
3.0 KiB
Bash
Executable File
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."
|