ENS子名怎么发行?权限、解析与运营成本

 / 
11

发行 ENS 子名的技术门槛比想象中低,但权限设计决定你以后能不能反悔。如果你只是给自己的团队或活动发一批名字,用链下方式几乎零成本;如果你要向用户出售或长期出租子名,就必须处理 NameWrapper 的 fuse(熔断器)机制——烧掉 PARENT_CANNOT_CONTROL 意味着你永久放弃对这些子名的控制权,烧掉 CANNOT_TRANSFER 意味着用户拿到的是一个不可转让的 soulbound 名字。选错 fuse,运营成本不在 gas 上,在事后无法补救上。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

先选发行方式:链上、L2 还是链下

ENS 官方文档把子名分为三类,选择取决于你对"控制权"和"成本"的取舍。

L1 链上子名是最直接的方式。你拥有 myname.eth,在 ENS Manager 里创建子名,或者部署一个 registrar 合约让用户自己注册。每个子名是一枚链上 NFT,完全由你或用户控制。代价是每次创建都要付以太坊主网 gas,批量发行时成本会快速上升。适合发行量小、需要以太坊原生所有权的场景。

L2 子名把注册逻辑放到 L2 上,L1 只保留解析入口。Durin 是 ENS 官方推荐的一套方案,帮你处理 L1 resolver 和链下网关的接线,你只需要写 L2 上的业务逻辑。成本比 L1 低很多,用户拿到的仍然是链上 NFT。适合有明确发行量、希望用户真正"持有"子名的场景。

链下子名存放在中心化数据库里,通过 CCIP Read 解析。发行几乎零 gas,可以瞬间批量创建,管理就是调用 REST API。Coinbase 的 cb.id 和 Uniswap 的 uni.eth 都是这个模式。代价是控制权留在你手里:你可以修改、撤销子名,用户拿到的不是链上资产,而是你的服务承诺。适合大规模空投、活动门票、应用内用户名这类不需要用户长期持有的场景。

我的判断是:如果你在做一个产品,用户会在里面长期使用这个名字来收款或展示身份,选 L2 或 L1;如果只是活动或 onboarding 的一次性标识,链下足够,没必要为了"去中心化"三个字多花钱。

权限:fuse 烧掉就回不来,先想清楚

NameWrapper 把 ENS 名字变成 ERC-1155 NFT,并用 fuse 控制权限。fuse 一旦烧毁,在该名字过期前无法撤销。发行子名时,你作为父名所有者,在创建子名的交易里决定烧哪些 fuse。

最关键的 fuse 是 PARENT_CANNOT_CONTROL(PCC)。烧掉它,子名进入 Emancipated 状态:你不能再替换、删除或对其烧毁更多 fuse,用户真正拥有这个子名直到过期。不烧 PCC,你保留了对子名的最终控制权——可以随时收回,但这意味着用户无法信任"这个子名永远属于我"。ENS 官方文档把烧 PCC 描述为让子名 "unruggable" 的方式。

CANNOT_TRANSFER 决定子名能不能转卖。烧掉它,子名绑定在接收地址上,不可转让。活动门票、灵魂绑定凭证用这个。不烧,用户可以拿到 NFT 市场上去卖。

CAN_EXTEND_EXPIRY 允许子名持有者自己续期。如果你发行的是"永久"子名(过期时间设成父名的过期时间),但想给用户自己续期的能力,烧这个。如果你希望续期完全由你控制,不烧。

还有一个前提条件经常被忽略:要烧任何 fuse,父名必须先 Locked(烧掉 CANNOT_UNWRAP)。Locked 意味着你不能再 unwrap 父名。如果你以后可能需要把 myname.eth 从 NameWrapper 里取出来,现在就不要烧 fuse 发子名。这个决定在发行之前就要做,发行之后改不了。

解析:用户输入子名后,钱包怎么找到地址

子名创建后,还需要 resolver 才能解析出地址、头像、社交记录。L1 子名默认用 Public Resolver,你在创建时或之后设置记录即可。L2 和链下子名依赖 CCIP Read(EIP-3668):客户端查询 L1 resolver,resolver 抛出一个 OffchainLookup 错误,告诉客户端去哪个网关取数据;客户端拿到网关返回的签名数据后,回调 resolver 验证,最终返回解析结果。

这个过程对用户和大多数 dApp 是透明的,但你需要维护一个网关服务。L2 方案的网关负责从 L2 读数据,链下方案的网关从你的数据库读数据并签名。网关挂了,子名就解析不出来——用户的钱包会显示"无法解析",而不是显示一个错误地址。这是链下方案的主要可用性风险:不是资产丢失,是名字暂时失效。

运营成本:不只是 gas

链上 gas:L1 发行每个子名都要付主网 gas,批量发行时可以用批量合约优化,但单笔成本仍然存在。L2 和链下发行本身的链上成本接近零。

网关运维:CCIP Read 需要一个始终在线的 HTTP 端点。如果你用 Namespace 这类服务商,网关由他们托管,你付订阅费或按量计费。如果自己搭,需要服务器、监控和签名密钥管理。

父名续期:所有子名的存在依赖于父名 myname.eth 的有效期。父名过期,子名全部失效。这是一项每年都要处理的固定成本,不是一次性投入。

权限管理的隐性成本:如果你不烧 PCC,用户无法验证"你不会收回我的名字"。在需要信任的场景里,这个不确定性会降低子名的价值。如果你烧了 PCC,就失去了对子名滥用的纠正能力——比如有人注册了冒犯性标签,你无法删除。ENS 官方文档建议在链下发行时由运营方做标签审核和保留,但链上 Emancipated 子名做不到这一点。

完成标准

不是"子名创建成功",而是:一个外部用户/钱包在不依赖你的前端的情况下,输入子名能解析出你设置的地址;如果你承诺了用户所有权,该子名在 NameWrapper 中的状态是 Emancipated 且不可被父名撤销;父名的到期时间覆盖了你承诺给子名的使用周期。 如果你发的是链下子名,完成标准还包括:网关在你不主动干预时保持在线,且解析延迟在可接受范围内。先用一个测试子名走完从创建到第三方钱包解析的全流程,再批量发行。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料