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

使用ethers.js v6获取ENS个人资料全部文本记录的问题

最优实现方案:精准筛选ENS文本记录

你当前的问题在于只通过事件签名和合约地址筛选日志,会返回所有用户的文本记录变更,数据量自然过大。最优方案是利用ENS文本事件的topic结构,直接精准筛选目标ENS名称的相关日志,无需绕路查询交易。

核心原理

ENS PublicResolver的文本相关事件(如TextChanged)的topic结构固定:

  • 第一个topic:事件签名哈希
  • 第二个topic:目标ENS名称的node哈希(通过namehash计算)
  • 第三个topic:文本记录的键哈希

通过指定第二个topic为目标ENS的node哈希,就能只返回该ENS的文本记录变更日志,彻底过滤无关数据。

实现步骤与代码示例

  1. 计算目标ENS的node哈希
const ethers = require("ethers");
const provider = new ethers.JsonRpcProvider("your-rpc-url");

// 替换为你要查询的ENS名称
const targetEnsName = "example.eth";
const nodeHash = ethers.utils.namehash(targetEnsName);
  1. 修改日志查询逻辑,添加node哈希筛选
const publicResolverContractAddress = '0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63';

// 文本相关事件签名哈希
const eventTopics = [
  '0x448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1', 
  '0xc0e482f545380f3c76a14db8d5717d205abfdc508449ed2befe6d5427a9d45cd',
  '0x36c0d6cc28ff7763f02401a2d40c3a72c4dfdd8a6b812dfa978274306592721e'
];

// 精准筛选目标ENS的日志
let logs = await provider.getLogs({
  address: publicResolverContractAddress,
  fromBlock: '0x1024592',
  toBlock: '0x107D3F5',
  topics: [eventTopics, nodeHash]
});

为什么不建议查询交易?

  1. ethers.js无直接API:确实没有getTransactions()这类按发起者查询交易的函数,需要遍历区块逐个检查交易发起地址,效率极低。
  2. 易遗漏记录:ENS文本记录的修改交易发起者不一定是ENS所有者(比如授权第三方修改),按发起者筛选会漏掉这类合法记录。

内容的提问来源于stack exchange,提问作者Paul M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:55:18