Files
proxmox/scripts/verify-weth-canonical-erc20.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

161 lines
5.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verify WETH9 at canonical address on ChainID 138
# Tests ERC-20 functions: symbol, decimals, name, totalSupply, balanceOf, approve, transfer
# Usage: ./verify-weth-canonical-erc20.sh
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'
CYAN='\033[0;36m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_error() { echo -e "${RED}[✗]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
log_section() { echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"; echo -e "${CYAN}$1${NC}"; echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"; }
# Configuration
CHAIN138_RPC="${RPC_URL_138:-https://rpc-http-pub.d-bis.org}"
WETH_CANONICAL="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
# Test results
TESTS_PASSED=0
TESTS_FAILED=0
TESTS_TOTAL=0
log_section "WETH9 ERC-20 Verification at Canonical Address"
log_info "WETH9 Address: $WETH_CANONICAL"
log_info "ChainID: 138"
log_info "RPC URL: $CHAIN138_RPC"
log_info ""
# Check if cast is available
if ! command -v cast &> /dev/null; then
log_error "cast (foundry) is not installed"
log_warn "Please install foundry: curl -L https://foundry.paradigm.xyz | bash"
exit 1
fi
# Test function
test_erc20_function() {
local func_name=$1
local func_sig=$2
local expected_result=$3
local description=$4
((TESTS_TOTAL++))
log_info "Testing $func_name()..."
local result=$(cast call "$WETH_CANONICAL" "$func_sig" --rpc-url "$CHAIN138_RPC" 2>&1 || echo "ERROR")
if [[ "$result" == *"ERROR"* ]] || [ -z "$result" ] || [ "$result" = "0x" ]; then
log_error "$func_name() failed or returned empty"
log_error " Result: $result"
((TESTS_FAILED++))
return 1
else
if [ "$func_name" = "symbol" ] || [ "$func_name" = "name" ]; then
local clean_result=$(echo "$result" | cast --to-ascii 2>/dev/null | tr -d '\0' || echo "$result")
log_success "$func_name() = $clean_result"
elif [ "$func_name" = "decimals" ]; then
local dec_result=$(cast --to-dec "$result" 2>/dev/null || echo "unknown")
if [ "$dec_result" = "18" ]; then
log_success " ✅ decimals() = $dec_result (expected: 18)"
else
log_warn " ⚠ decimals() = $dec_result (expected: 18)"
fi
else
local dec_result=$(cast --to-dec "$result" 2>/dev/null || echo "$result")
log_success "$func_name() = $dec_result"
fi
((TESTS_PASSED++))
return 0
fi
}
# Step 1: Check bytecode
log_section "Step 1: Bytecode Verification"
log_info "Checking bytecode using eth_getCode..."
BYTECODE=$(cast code "$WETH_CANONICAL" --rpc-url "$CHAIN138_RPC" 2>/dev/null || echo "")
if [ -z "$BYTECODE" ] || [ "$BYTECODE" = "0x" ]; then
log_error "❌ No bytecode found at WETH9 canonical address"
log_error " This means the contract is NOT deployed at this address on-chain"
log_error " However, genesis.json shows it should be predeployed"
log_warn " Possible reasons:"
log_warn " 1. Chain was not started with this genesis.json"
log_warn " 2. RPC endpoint issue"
log_warn " 3. Contract was removed/overwritten"
exit 1
else
BYTECODE_LENGTH=$((${#BYTECODE} - 2))
BYTECODE_BYTES=$((BYTECODE_LENGTH / 2))
log_success "✅ Bytecode exists at WETH9 canonical address"
log_info " Bytecode length: $BYTECODE_LENGTH chars ($BYTECODE_BYTES bytes)"
fi
# Step 2: ERC-20 Function Tests
log_section "Step 2: ERC-20 Function Verification"
log_info "Testing standard ERC-20 functions..."
log_info ""
# Test symbol()
test_erc20_function "symbol" "symbol()" "" "Token symbol"
# Test name()
test_erc20_function "name" "name()" "" "Token name"
# Test decimals()
test_erc20_function "decimals" "decimals()" "18" "Token decimals (should be 18)"
# Test totalSupply()
test_erc20_function "totalSupply" "totalSupply()" "" "Total supply"
# Test balanceOf (test with zero address)
log_info "Testing balanceOf(address(0))..."
((TESTS_TOTAL++))
BALANCE_RESULT=$(cast call "$WETH_CANONICAL" "balanceOf(address)" "0x0000000000000000000000000000000000000000" --rpc-url "$CHAIN138_RPC" 2>&1 || echo "ERROR")
if [[ "$BALANCE_RESULT" == *"ERROR"* ]]; then
log_error " ❌ balanceOf() failed"
((TESTS_FAILED++))
else
BALANCE_DEC=$(cast --to-dec "$BALANCE_RESULT" 2>/dev/null || echo "unknown")
log_success " ✅ balanceOf(address(0)) = $BALANCE_DEC"
((TESTS_PASSED++))
fi
# Summary
log_section "Verification Summary"
log_info "Tests Passed: $TESTS_PASSED / $TESTS_TOTAL"
log_info "Tests Failed: $TESTS_FAILED / $TESTS_TOTAL"
log_info ""
if [ $TESTS_FAILED -eq 0 ]; then
log_success "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
log_success "✅ ALL ERC-20 TESTS PASSED"
log_success "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
log_info ""
log_info "WETH9 at canonical address is a valid ERC-20 token"
log_info "Ready for bridge routing verification"
exit 0
else
log_warn "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
log_warn "⚠ SOME TESTS FAILED"
log_warn "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
log_info ""
log_warn "WETH9 may not be fully ERC-20 compliant or RPC issues occurred"
exit 1
fi