Files
explorer-monorepo/scripts/get-token-info.sh
defiQUG a2beda3db4 chore(scripts): use load_explorer_runtime_env + address-inventory helper
Align remaining shell scripts with shared env loading (no direct .env source).

Made-with: Cursor
2026-03-27 22:10:38 -07:00

122 lines
4.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Get correct token information for WETH9 and WETH10
# Provides correct decimals (18) even if contract returns 0
# Usage: ./get-token-info.sh [weth9|weth10|both]
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "$PROJECT_ROOT/scripts/lib/address-inventory.sh"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
load_explorer_runtime_env
# Configuration
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
WETH9_ADDRESS="$(resolve_address_value WETH9_ADDRESS WETH9_ADDRESS 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)"
WETH10_ADDRESS="$(resolve_address_value WETH10_ADDRESS WETH10_ADDRESS 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f)"
# Correct decimals (contract may return wrong value)
WETH9_DECIMALS=18
WETH10_DECIMALS=18
TOKEN="${1:-both}"
log_info "========================================="
log_info "Token Information (Corrected)"
log_info "========================================="
log_info ""
if [ "$TOKEN" = "weth9" ] || [ "$TOKEN" = "both" ]; then
log_info "WETH9 Token Information:"
log_info " Address: $WETH9_ADDRESS"
log_info " Symbol: WETH"
log_info " Name: Wrapped Ether"
log_info " Decimals: $WETH9_DECIMALS (corrected - contract returns 0)"
# Get on-chain data
TOTAL_SUPPLY=$(cast call "$WETH9_ADDRESS" "totalSupply()" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
CONTRACT_BALANCE=$(cast balance "$WETH9_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
# Convert hex to decimal if needed
if echo "$TOTAL_SUPPLY" | grep -q "^0x"; then
TOTAL_SUPPLY_DEC=$(cast --to-dec "$TOTAL_SUPPLY" 2>/dev/null || echo "0")
else
TOTAL_SUPPLY_DEC="$TOTAL_SUPPLY"
fi
TOTAL_SUPPLY_ETH=$(echo "scale=18; $TOTAL_SUPPLY_DEC / 1000000000000000000" | bc 2>/dev/null || echo "0")
CONTRACT_BALANCE_ETH=$(echo "scale=18; $CONTRACT_BALANCE / 1000000000000000000" | bc 2>/dev/null || echo "0")
log_info " Total Supply: $TOTAL_SUPPLY_ETH WETH"
log_info " Contract Balance: $CONTRACT_BALANCE_ETH ETH"
# Compare in wei (both should be same value)
if [ "$CONTRACT_BALANCE" = "$TOTAL_SUPPLY_DEC" ]; then
log_success " 1:1 Backing: ✅ Yes"
else
log_warn " 1:1 Backing: ❌ No (Contract: $CONTRACT_BALANCE, Supply: $TOTAL_SUPPLY_DEC)"
fi
log_info ""
fi
if [ "$TOKEN" = "weth10" ] || [ "$TOKEN" = "both" ]; then
log_info "WETH10 Token Information:"
log_info " Address: $WETH10_ADDRESS"
log_info " Symbol: WETH10"
log_info " Name: Wrapped Ether 10"
log_info " Decimals: $WETH10_DECIMALS (correct)"
# Get on-chain data
TOTAL_SUPPLY=$(cast call "$WETH10_ADDRESS" "totalSupply()" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
CONTRACT_BALANCE=$(cast balance "$WETH10_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
# Convert hex to decimal if needed
if echo "$TOTAL_SUPPLY" | grep -q "^0x"; then
TOTAL_SUPPLY_DEC=$(cast --to-dec "$TOTAL_SUPPLY" 2>/dev/null || echo "0")
else
TOTAL_SUPPLY_DEC="$TOTAL_SUPPLY"
fi
TOTAL_SUPPLY_ETH=$(echo "scale=18; $TOTAL_SUPPLY_DEC / 1000000000000000000" | bc 2>/dev/null || echo "0")
CONTRACT_BALANCE_ETH=$(echo "scale=18; $CONTRACT_BALANCE / 1000000000000000000" | bc 2>/dev/null || echo "0")
log_info " Total Supply: $TOTAL_SUPPLY_ETH WETH10"
log_info " Contract Balance: $CONTRACT_BALANCE_ETH ETH"
# Compare in wei
if [ "$CONTRACT_BALANCE" = "$TOTAL_SUPPLY_DEC" ]; then
log_success " 1:1 Backing: ✅ Yes"
elif [ "$TOTAL_SUPPLY_DEC" = "0" ] && [ "$CONTRACT_BALANCE" = "0" ]; then
log_info " 1:1 Backing: No tokens minted yet"
else
log_warn " 1:1 Backing: ❌ No (Contract: $CONTRACT_BALANCE, Supply: $TOTAL_SUPPLY_DEC)"
fi
log_info ""
fi
log_info "========================================="
log_info "Usage in Code"
log_info "========================================="
log_info ""
log_info "JavaScript/TypeScript (ethers.js):"
log_info " const decimals = 18; // Always use 18, don't read from contract"
log_info " const balance = await contract.balanceOf(address);"
log_info " const formatted = ethers.utils.formatUnits(balance, 18);"
log_info ""
log_info "Python (web3.py):"
log_info " decimals = 18 # Always use 18"
log_info " balance = contract.functions.balanceOf(address).call()"
log_info " formatted = Web3.fromWei(balance, 'ether')"
log_info ""