ENS (Ethereum Name Service)

Polar Sponsor
爱发电 赞助
.NET 9.0

将 .eth 名称解析为以太坊地址,反之亦然。适用于用户提供 .eth 名称(如“发送给 vitalik.eth”)、显示地址时展示 ENS 名称、查询 ENS 档案,或帮助注册、续期、管理 .eth 名称。

ENS( 后继名称服务) —— 技能

功能概述

ENS( 后继名称服务) —— 技能是一项面向实际任务的技能,主要用于此技能能做什么;允许 Gundwane;

核心要点

  • 将 ENS 名称解析为 Ethereum 地址( 前继分辨率);
  • 将地址解析为 ENS 名称( 逆向分辨率)。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

结果检查与注意事项

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

ENS(Ethereum Name Service)——技能说明

该技能的功能

使 Gundwane 能够:

  1. 解析 ENS 名称为以太坊地址(正向解析)
  2. 解析地址为 ENS 名称(反向解析)
  3. 查询 ENS 个人资料(头像、社交记录、文本记录等)
  4. 协助用户在 Ethereum 主网注册、续费和管理 .eth 名称

适用场景

  • 用户提及任意 .eth 名称:例如“发送至 vitalik.eth”、“查询 nick.eth”、“luc.eth 是谁”
  • 向用户展示钱包地址时——同步显示该地址对应的 ENS 主名称
  • 用户询问“我的 ENS 是什么?”、“我有 ENS 名称吗?”、“设置我的 ENS”
  • 用户请求注册新的 .eth 名称、续费已有名称,或更新记录
  • 用户向或从 .eth 地址发起转账

ENS 名称识别

用户输入中匹配 *.eth 模式的任意词元(token)极可能为 ENS 名称。示例:

  • “向 vitalik.eth 发送 0.1 ETH” → 解析 vitalik.eth
  • “nick.eth 对应的地址是什么?” → 解析 nick.eth
  • “注册 myname.eth” → 检查 myname 的可用性

务必先完成解析再使用。 切勿将 .eth 名称直接传递给 LI.FI 或交易工具——必须先解析为 0x 地址。

解析操作

正向解析(名称 → 地址)

使用 curl 将 ENS 名称解析为其以太坊地址。按以下优先级顺序尝试。

方法一:ENS 子图(The Graph)

适用于获取详细数据(如到期时间、注册人、解析器)。需配置环境变量 GRAPH_API_KEY。

curl -s -X POST 
  --url "https://gateway.thegraph.com/api/$GRAPH_API_KEY/subgraphs/id/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH" 
  --header 'Content-Type: application/json' 
  --data '{"query":"{ domains(where: { name: "vitalik.eth" }) { name resolvedAddress { id } expiryDate registration { registrant { id } expiryDate } } }"}'

响应字段:data.domains[0].resolvedAddress.id 即为对应 0x 地址。

方法二:web3.bio API(免费,无需密钥)

适合快速解析 + 同步获取个人资料数据的一体化调用。

curl -s "https://api.web3.bio/profile/vitalik.eth"

返回 JSON,包含 address、identity、displayName、avatar、description 及关联的社交资料。请使用 address 字段作为解析所得的 0x 地址。

方法三:Node.js + viem(备用方案)

当上述 API 不可用且本地可运行 node(项目依赖中已含 viem)时使用:

node --input-type=module -e "
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
import { normalize } from 'viem/ens';
const c = createPublicClient({ chain: mainnet, transport: http('https://eth.llamarpc.com') });
const addr = await c.getEnsAddress({ name: normalize('REPLACE_NAME') });
console.log(JSON.stringify({ address: addr }));
"

请将 REPLACE_NAME 替换为实际的 ENS 名称。

优先级: 方法一 → 方法二 → 方法三。选择当前可用且响应最快的方案。

反向解析(地址 → 名称)

给定一个 0x 地址,查找其主 ENS 名称。

通过 ENS 子图

curl -s -X POST 
  --url "https://gateway.thegraph.com/api/$GRAPH_API_KEY/subgraphs/id/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH" 
  --header 'Content-Type: application/json' 
  --data '{"query":"{ domains(where: { resolvedAddress: "0xd8da6bf26964af9d7eed9e03e53415d37aa96045" }) { name } }"}'

注意:查询中地址必须为小写格式。

通过 web3.bio

curl -s "https://api.web3.bio/profile/0xd8da6bf26964af9d7eed9e03e53415d37aa96045"

若该地址已设置主 ENS 名称,则返回对应名称及个人资料。

通过 viem(备用方案)

node --input-type=module -e "
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
const c = createPublicClient({ chain: mainnet, transport: http('https://eth.llamarpc.com') });
const name = await c.getEnsName({ address: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045' });
console.log(JSON.stringify({ name }));
"

个人资料查询

获取 ENS 个人资料详情:头像、简介、社交链接、文本记录等。

curl -s "https://api.web3.bio/profile/nick.eth"

常用文本记录键(供参考):

  • com.twitter — Twitter/X 用户名
  • com.github — GitHub 用户名
  • url — 网站地址
  • email — 邮箱地址
  • avatar — 头像 URL 或 NFT 引用
  • description — 简介/描述
  • com.discord — Discord 用户名

ENS 头像 URL

直接获取头像图片:

https://metadata.ens.domains/mainnet/avatar/{name}

示例:https://metadata.ens.domains/mainnet/avatar/nick.eth

在消息中展示用户 ENS 头像时,请使用此 URL。

显示规范

展示地址时

  • 通过 defi_get_wallet 获取用户钱包后,可选地检查其反向 ENS 名称。
  • 若用户拥有主 ENS 名称,则统一显示为:fabri.eth (0xabc...def)
  • 在资产组合视图中,如有 ENS 名称则优先显示。
  • 避免每次消息都重新解析——可在会话内缓存解析结果。

执行转账前的解析

  • 务必确认已解析地址,再执行转账操作:
    vitalik.eth → 0xd8dA...6045
    是否向该地址发送 0.1 ETH?
    
  • 切勿盲目信任解析结果——ENS 记录可能随时变更。始终向用户展示 0x 地址。

交易摘要中

  • 同时展示两者:0.1 ETH → vitalik.eth (0xd8d...6045) on Base

注册流程

.eth 名称注册

注册仅支持在Ethereum 主网进行,需支付名称费用及 Gas 费。若用户 ETH 存于 L2,需提示其先跨链桥接。

定价规则:

  • 5 个及以上字符:5 美元/年(以 ETH 支付)
  • 4 个字符:160 美元/年(以 ETH 支付)
  • 3 个字符:640 美元/年(以 ETH 支付)

主网合约地址:

合约 地址
ENS Registry 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e
ETH Registrar Controller 0x253553366Da8546fC250F225fe3d25d0C782303b
Public Resolver 0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63
Reverse Registrar 0xa58E81fe9b61B5c3fE2AFD33CF304c454AbFc7Cb
Name Wrapper 0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401
Universal Resolver 0xce01f8eee7E479C928F8919abD53E553a36CeF67

可用性检查

通过 ENS 子图查询:

curl -s -X POST 
  --url "https://gateway.thegraph.com/api/$GRAPH_API_KEY/subgraphs/id/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH" 
  --header 'Content-Type: application/json' 
  --data '{"query":"{ registrations(where: { labelName: "myname" }) { labelName expiryDate } }"}'

若无返回结果,或 expiryDate 已过期(含 90 天宽限期),则该名称可注册。

也可引导用户直接访问:https://ens.app/myname.eth

注册流程

注册采用两阶段提交/揭晓机制(防止抢跑):

  1. 检查可用性(见上方子图查询)。
  2. 确认价格:5 字符及以上名称约 5 美元/年,具体 ETH 数量由实时价格决定。
  3. 展示摘要:
    注册 myname.eth:
    • 费用:约 0.002 ETH(5 美元),有效期 1 年
    • 链:Ethereum 主网
    • 两阶段流程(总计约 2 分钟)
    
    是否注册?
    
  4. 第一阶段 — 提交(Commit):通过 defi_send_transaction(chainId: 1)调用 ETH Registrar Controller 合约的 commit(bytes32) 方法。提交哈希需基于名称、所有者地址、持续时间及随机密钥生成。
  5. 等待 60 秒(向用户提示:“已提交承诺,注册将在约 1 分钟后完成。”)。
  6. 第二阶段 — 注册(Register):调用 register(name, owner, duration, secret, resolver, data, reverseRecord, fuses),并将名称费用作为 value 参数传入。
  7. 确认成功:myname.eth 已注册!有效期 1 年(至 2027 年 2 月到期)。[查看交易](...)
  8. 保存至策略(strategy),并建议用户设置为主名称。

简化替代方案: 引导用户前往 ENS Manager App 完成注册:https://ens.app/myname.eth —— 此应用提供完整流程与友好 UI。首次注册推荐此方式。

续费

比注册更简单——单笔交易,无需提交步骤。

当用户说“续费 myname.eth”时:

  1. 通过子图或策略查询当前到期时间。
  2. 获取续费价格(与注册价格一致)。
  3. 展示摘要:
    续费 myname.eth:
    • 当前到期日:2027 年 2 月 8 日
    • 费用:约 0.002 ETH(5 美元),有效期 1 年
    • 新到期日:2028 年 2 月 8 日
    
  4. 获得用户批准后:通过 defi_send_transaction(chainId: 1)调用 ETH Registrar Controller 合约的 renew(string name, uint256 duration) 方法,并将续费金额设为 value 参数。duration 单位为秒(1 年 = 31536000 秒)。
  5. 在策略中更新到期时间。

宽限期: 名称到期后享有 90 天宽限期。此期间仅原所有者可续费。宽限期结束后,名称进入公开拍卖,初始溢价随 21 天逐步递减。

设置记录

设置主名称(反向记录)

当用户说“设置我的 ENS 主名称”或“将 myname.eth 设为我的主名称”时:

  • 通过 defi_send_transaction(主网 chainId: 1)调用 Reverse Registrar 合约(0xa58E81fe9b61B5c3fE2AFD33CF304c454AbFc7Cb)的 setName(string name) 方法。
  • 此举使用户地址在反向查询中解析为 myname.eth。
  • 用户必须拥有该名称,且该名称必须指向其地址。

设置文本记录

通过 Public Resolver 合约(0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63)更新社交/文本记录:

  • 方法:setText(bytes32 node, string key, string value)
  • node 为完整名称的 namehash。
  • 常用键:com.twitter、com.github、url、email、avatar、description

对于复杂记录更新,推荐使用 ENS Manager App:https://ens.app/myname.eth

到期监控

将用户注册的 ENS 名称存储于其策略(strategy)中,用于心跳检测:

{
  "ensNames": [
    {
      "name": "fabri.eth",
      "expiry": "2027-02-08T00:00:00Z",
      "isPrimary": true
    }
  ]
}

在心跳周期中,检查各用户策略中的 ensNames 字段:

  • 到期前 30 天:“您的名称 fabri.eth 将在 30 天后到期,是否需要续费?”
  • 到期前 7 天:“fabri.eth 将在 7 天后到期,请及时续费以保留该名称。”
  • 已到期(处于宽限期内):“fabri.eth 已到期!您还有 90 天时间续费,逾期将被释放。”

数据存储 —— 策略 JSON

ENS 数据以用户粒度存储于策略 JSON 中(通过 defi_set_strategy):

{
  "ensNames": [
    {
      "name": "fabri.eth",
      "expiry": "2027-02-08T00:00:00Z",
      "isPrimary": true
    }
  ],
  "ensPreferences": {
    "showEnsInPortfolio": true,
    "expiryAlertDays": 30
  }
}

读取使用 defi_get_strategy,写入使用 defi_set_strategy,自动按用户隔离。

叙事性数据(例如:“已为 0.1 ETH 转账解析 vitalik.eth”)存入用户每日记忆(per-user daily memory)。

规范准则

  1. 转账前务必解析。 切勿将 .eth 名称直接传给 LI.FI 或交易工具;必须先解析为 0x 地址。
  2. 解析结果必须向用户确认。 发送资金前,始终向用户展示解析所得的 0x 地址。ENS 记录可能变更。
  3. 注册与续费仅限主网。 .eth 名称仅部署于 Ethereum 主网。若用户需为 Gas 和费用准备 ETH,请明确提示其跨链桥接。
  4. 查询无需用户授权。 ENS 解析与个人资料查询均为只读操作,可静默执行。
  5. 会话内缓存结果。 若已在当前对话中解析过某名称,请复用该结果,避免每条消息重复解析。
  6. 失败需优雅处理。 若解析失败(名称不存在、API 不可用等),需向用户清晰说明。禁止猜测地址。
  7. 心跳周期内监控到期时间。 检查用户策略中的 ensNames,在名称到期前主动提醒。
  8. 严格用户隔离。 ENS 数据仅存储于用户专属策略 JSON 中,严禁跨用户读取。
  9. ENS 推荐仅一次。 若用户尚无 ENS 名称且频繁使用原始地址,可提供建议一次;切勿反复推销。
  10. 关注 ENSv2 进展。 ENS 正迁移至基于 L2 的新系统(ENSv2)。当前主网注册仍有效,但未来可能调整,请保持关注。

相关专题

更多
DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

2026.11.03

0

11

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

2026.11.03

0

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习