如何用Python批量查询以太坊ENS域名的注册状态
ENS域名批量查询可行解决方案
方案1:以太坊RPC直接调用链上合约(最推荐)
- 完全不需要依赖Etherscan网页接口,规避反爬、请求频率限制、Cloudflare拦截等所有问题
- 免费公共RPC的请求额度普遍支持每秒几十次查询,批量打包调用的话1000个域名1分钟内就能完成校验
- 操作逻辑:
- 准备任意以太坊主网公共RPC节点,免费节点即可满足需求
- 使用
web3.py等链交互库初始化ENS实例 - 直接调用ENS接口查询域名对应的解析地址,返回零地址即为未注册
- 参考代码示例:
from web3 import Web3 from ens import ENS # 初始化实例 w3 = Web3(Web3.HTTPProvider("此处替换为以太坊主网RPC地址")) ens_client = ENS(w3) def check_ens_status(domain: str) -> bool: """返回True为已注册,False为未注册""" try: resolve_addr = ens_client.address(domain.lower()) return resolve_addr != "0x0000000000000000000000000000000000000000" except Exception: return False # 批量查询时可以用异步web3或者批量rpc调用进一步提升效率
方案2:离线快照比对
- 不需要发起任何网络请求,查询效率极高,1000个域名比对耗时不超过1秒
- 操作逻辑:
- 下载公开的ENS已注册域名全量快照,一般为CSV格式
- 将待查询域名列表转为小写后和快照内的域名集合做比对,不在集合内即为未注册
- 注意每1-2周更新一次快照,避免新注册域名未被收录导致的校验误差
方案3:ENS索引子图批量查询
- 支持一次请求查询上百个域名的注册状态,请求效率比单条查询高几十倍
- 操作逻辑:
- 构造批量查询的GraphQL语句,一次传入所有待查询域名参数
- 发起请求后直接解析返回结果即可获取所有域名的注册状态
- 免费额度足够覆盖单次查询几万域名的需求
内容的提问来源于stack exchange,提问作者Stephan Yazvinski
相关产品推荐
相关产品推荐

