#!/usr/bin/env bash # List all WETH9 holders and their balances on Chain 138 (Blockscout API). # Usage: ./scripts/weth9-list-holders.sh set -euo pipefail BLOCKSCOUT_API="${BLOCKSCOUT_API:-https://explorer.d-bis.org/api}" WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" PAGE_SIZE=100 echo "=== WETH9 holders (Chain 138) ===" echo "WETH9: $WETH9" echo "API: $BLOCKSCOUT_API" echo "" PAGE=1 TOTAL=0 while true; do URL="${BLOCKSCOUT_API}/v2/tokens/${WETH9}/holders?page=${PAGE}&page_size=${PAGE_SIZE}" RESP=$(curl -sS --connect-timeout 10 "$URL" 2>/dev/null || echo '{"items":[]}') N=$(echo "$RESP" | jq -r '(.items | length) // (.data | length) // 0' 2>/dev/null || echo "0") [[ -z "$N" || "$N" -eq 0 ]] && break for i in $(seq 0 $((N - 1))); do ITEM=$(echo "$RESP" | jq -c "(.items[$i] // .data[$i]) // {}") ADDR=$(echo "$ITEM" | jq -r '.address.hash // .address // .holder_address // empty') VAL=$(echo "$ITEM" | jq -r '.value // .balance // "0"') [[ -z "$ADDR" || "$ADDR" == "null" ]] && continue if command -v cast &>/dev/null; then ETH=$(cast from-wei "$VAL" ether 2>/dev/null || echo "$VAL") else ETH="$VAL" fi echo "$ADDR $VAL ($ETH WETH9)" ((TOTAL++)) || true done [[ "$N" -lt $PAGE_SIZE ]] && break ((PAGE++)) || true done echo "" echo "Total holders: $TOTAL" echo "To burn from an address you control: WETH9.withdraw(balance) with that key."