stones/scripts/utils/test_ens_resolver.py

112 lines
4.0 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Test ENS Resolver
This script tests the ENS resolver with known ENS names and addresses.
Usage:
python test_ens_resolver.py
"""
import os
import sys
from dotenv import load_dotenv
# Add parent directory to path to import utils
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from utils.ens_resolver import ENSResolver
from utils.logger import setup_logger
from web3 import Web3
# Load environment variables
load_dotenv()
# Setup logging
logger = setup_logger("test_ens_resolver")
def test_ens_resolver():
"""
Test the ENS resolver with known ENS names and addresses.
"""
logger.info("Testing ENS resolver")
# Initialize Web3 and ENS resolver
alchemy_api_key = os.getenv("ALCHEMY_API_KEY")
if not alchemy_api_key:
logger.error("ALCHEMY_API_KEY not found in environment variables")
sys.exit(1)
web3 = Web3(Web3.HTTPProvider(f"https://eth-mainnet.g.alchemy.com/v2/{alchemy_api_key}"))
ens_resolver = ENSResolver(web3)
# Test cases - known ENS names and addresses
test_cases = [
# Vitalik's ENS
{"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "expected_ens": "vitalik.eth"},
# ENS DAO
{"address": "0x4f3a120E72C76c22ae802D129F599BFDbc31cb81", "expected_ens": "ens.eth"},
# Brantly.eth
{"address": "0x983110309620D911731Ac0932219af06091b6744", "expected_ens": "brantly.eth"},
# Nick.eth
{"address": "0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5", "expected_ens": "nick.eth"}
]
# Test address to ENS resolution
logger.info("Testing address to ENS resolution")
for test_case in test_cases:
address = test_case["address"]
expected_ens = test_case["expected_ens"]
try:
resolved_ens = ens_resolver.get_ens_name(address)
if resolved_ens:
logger.info(f"✅ Address {address} resolved to {resolved_ens}")
if resolved_ens.lower() == expected_ens.lower():
logger.info(f"✅ Matches expected ENS {expected_ens}")
else:
logger.warning(f"❌ Does not match expected ENS {expected_ens}")
else:
logger.warning(f"❌ Could not resolve ENS for address {address}")
except Exception as e:
logger.error(f"Error resolving ENS for {address}: {str(e)}")
# Test ENS to address resolution
logger.info("\nTesting ENS to address resolution")
for test_case in test_cases:
address = test_case["address"]
ens_name = test_case["expected_ens"]
try:
resolved_address = ens_resolver.get_ens_address(ens_name)
if resolved_address:
logger.info(f"✅ ENS {ens_name} resolved to {resolved_address}")
if resolved_address.lower() == address.lower():
logger.info(f"✅ Matches expected address {address}")
else:
logger.warning(f"❌ Does not match expected address {address}")
else:
logger.warning(f"❌ Could not resolve address for ENS {ens_name}")
except Exception as e:
logger.error(f"Error resolving address for {ens_name}: {str(e)}")
# Test ENS profile retrieval
logger.info("\nTesting ENS profile retrieval")
for test_case in test_cases:
ens_name = test_case["expected_ens"]
try:
profile = ens_resolver.get_ens_profile(ens_name)
if profile:
logger.info(f"✅ Retrieved profile for {ens_name}:")
for key, value in profile.items():
if value:
logger.info(f" - {key}: {value}")
else:
logger.warning(f"❌ Could not retrieve profile for {ens_name}")
except Exception as e:
logger.error(f"Error retrieving profile for {ens_name}: {str(e)}")
logger.info("ENS resolver testing completed")
if __name__ == "__main__":
test_ens_resolver()