You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:32:11