127 lines
4.6 KiB
Bash
Executable File
127 lines
4.6 KiB
Bash
Executable File
#!/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 ""
|
||
|