Files
explorer-monorepo/scripts/get-token-info.sh

127 lines
4.6 KiB
Bash
Raw Normal View History

#!/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)"
# 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 environment variables if .env exists
if [ -f "$PROJECT_ROOT/.env" ]; then
source "$PROJECT_ROOT/.env"
elif [ -f "$PROJECT_ROOT/../.env" ]; then
source "$PROJECT_ROOT/../.env"
fi
# Configuration
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
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 ""