如何使用web3.py从ENS获取ETH域名的DNS记录?
如何通过Web3.py获取ETH域名的DNS记录(如IPv4地址)
我已完成web3.py的安装配置,并且搭建了可正常使用的Alchemy RPC账户,目前能成功获取ETH域名的链上地址,但找不到获取实际DNS记录(比如james.eth的IPv4地址)的文档或示例。
当前可运行的代码(获取链上地址)
#! /usr/bin/python3 from ens.auto import ns from ens import ENS from web3 import Web3 # 初始化w3实例 w3 = Web3(Web3.HTTPProvider("https://eth-mainnet.g.alchemy.com/v2/*********")) ns = ENS.from_web3(w3) # 输出james.eth的链上地址 print(ns.address("james.eth"))
运行后输出0x6Dc43be93a8b5Fd37dC16f24872BaBc6dA5E5e3E,功能正常。
需求说明
我确认james.eth存在IPv4地址记录,但不知道如何通过Web3.py获取该记录。
补充信息
通过Cloudflare托管的eth.link网关可以查询到DNS记录,但速度极慢。我被告知直接使用RPC服务能提升查询性能,因此寻求解决方案。
查询命令如下:
$ curl -Ss -H 'content-type: application/dns-json' 'https://eth.link/dns-query?type=A&name=james.eth' | jq
尝试过的无效方案(Bard提供的代码)
Bard给出了一段代码(已做少量修正),但无法告知正确的dns_contract_address,且调用的函数也不符合实际ENS DNS记录的查询逻辑:
#! /usr/bin/python3 from web3 import Web3 # 连接以太坊区块链 w3 = Web3(Web3.HTTPProvider("https://eth-mainnet.g.alchemy.com/v2/*********")) # 此处的合约地址是错误的 dns_contract_address = "0x0000000000000000000000000000000000000001" # 创建合约实例 dns_contract = w3.eth.contract(address=dns_contract_address) # 调用不存在的getNameRecord函数 name_record = dns_contract.functions.getNameRecord("james.eth").call() print(name_record)
内容的提问来源于stack exchange,提问作者James Stevens
相关产品推荐
相关产品推荐

