跳转到主要内容
Change page

命名智能合约

智能合约是以太坊去中心化基础设施的基石,支持自主应用和协议。但即使合约功能不断演进,用户和开发者仍然依赖原始的十六进制地址来识别和引用这些合约。

使用 以太坊域名服务 (ENS) (opens in a new tab) 命名智能合约,通过消除十六进制合约地址来改善用户体验,并降低地址投毒和欺骗攻击等风险。本指南解释了为什么命名智能合约很重要、如何实现它,以及可用的工具(如 Enscribe (opens in a new tab))来简化该过程并帮助开发者采用这种做法。

为什么要命名智能合约?

人类可读的标识符

开发者和用户可以使用像 v2.myapp.eth 这样人类可读的名称,而不是与像 0x8f8e...f9e3 这样不透明的合约地址进行交互。这简化了智能合约的交互。

这是通过 以太坊域名服务 (opens in a new tab) 实现的,该服务为以太坊地址提供去中心化的命名服务。这类似于域名系统 (DNS) 使互联网用户能够使用诸如 ethereum.org 之类的名称而不是通过诸如 104.18.176.152 之类的 IP 地址来访问网络地址。

提高安全性和信任度

命名的合约有助于减少向错误地址发送的意外交易。它们还帮助用户识别与特定应用或品牌绑定的合约。这增加了一层声誉信任,特别是当名称附加到像 uniswap.eth 这样知名的父域名时。

由于以太坊地址长达 42 个字符,用户很难识别地址中的微小变化(例如修改了几个字符)。例如,像 0x58068646C148E313CB414E85d2Fe89dDc3426870 这样的地址通常会被面向用户的应用(如钱包)截断为 0x580...870。用户不太可能注意到被更改了几个字符的恶意地址。

这种技术被用于地址欺骗和投毒攻击,用户被误导以为他们正在与正确的地址交互或向其发送资金,而实际上该地址只是看起来像正确的地址,但并不相同。

钱包和合约的 ENS 名称可以防范这些类型的攻击。就像 DNS 欺骗攻击一样,ENS 欺骗攻击也可能发生,但是,与十六进制地址的微小修改相比,用户更容易注意到 ENS 名称中的拼写错误。

改善钱包和浏览器的用户体验

当智能合约配置了 ENS 名称时,钱包和区块链浏览器等应用就可以显示智能合约的 ENS 名称,而不是十六进制地址。这为用户带来了显著的用户体验 (UX) 提升。

例如,在与尤尼斯瓦普等应用交互时,用户通常会看到他们正在交互的应用托管在网站 uniswap.org 上,但如果尤尼斯瓦普没有使用 ENS 命名其智能合约,他们将看到一个十六进制的合约地址。如果合约被命名了,他们就可以看到 v4.contracts.uniswap.eth,这要有用得多。

部署时命名与部署后命名

可以在两个时间点对智能合约进行命名:

  • 部署时:在部署合约时为其分配一个 ENS 名称。
  • 部署后:将现有的合约地址映射到一个新的 ENS 名称。

这两种方法都依赖于拥有 ENS 域名的所有者或管理员权限,以便他们可以创建和设置 ENS 记录。

ENS 命名如何用于合约

ENS 名称存储在链上,并通过 ENS 解析器解析为以太坊地址。要命名智能合约:

  1. 注册或控制一个父 ENS 域名(例如 myapp.eth
  2. 创建一个子域名(例如 v1.myapp.eth
  3. 将子域名的 address 记录设置为合约地址
  4. 将合约的反向记录设置为该 ENS,以允许通过其地址找到该名称

ENS 名称是分层的,并支持无限的子名称。设置这些记录通常涉及与 ENS 注册表和公共解析器合约进行交互。

命名合约的工具

命名智能合约有两种方法。要么使用 ENS 应用 (opens in a new tab) 并执行一些手动步骤,要么使用 Enscribe (opens in a new tab)。下面将概述这些方法。

手动设置 ENS

使用 ENS 应用 (opens in a new tab),开发者可以手动创建子名称并设置正向地址记录。但是,他们无法通过 ENS 应用设置名称的反向记录来为智能合约设置主名称。必须采取手动步骤,这些步骤在 ENS 文档 (opens in a new tab) 中有介绍。

Enscribe

Enscribe (opens in a new tab) 简化了使用 ENS 命名智能合约的过程,并增强了用户对智能合约的信任。它提供:

  • 原子化部署和命名:在部署新合约时分配 ENS 名称
  • 部署后命名:为已部署的合约附加名称
  • 多链支持:在支持 ENS 的以太坊和二层网络 (l2) 上运行
  • 合约验证数据:包含从多个来源提取的合约验证数据,以增加用户的信任度

Enscribe 支持用户提供的 ENS 名称,如果用户没有 ENS 名称,则支持其自己的域名。

你可以访问 Enscribe 应用 (opens in a new tab) 开始命名和查看智能合约。

最佳实践

  • 使用清晰的、带版本的名称(如 v1.myapp.eth),使合约升级透明化
  • 设置反向记录,将合约链接到 ENS 名称,以便在钱包和区块链浏览器等应用中可见。
  • 密切监控到期时间,以防止所有权发生意外变更
  • 验证合约源码,以便用户可以信任命名的合约会按预期运行

风险

命名智能合约为以太坊用户带来了显著的好处,但是,ENS 域名的所有者必须对其管理保持警惕。值得注意的风险包括:

  • 到期:就像 DNS 名称一样,ENS 名称的注册是有期限的。因此,所有者监控其域名的到期日期并在到期前尽早续费至关重要。当即将到期时,ENS 应用和 Enscribe 都会为域名所有者提供视觉提示。
  • 所有权变更:ENS 记录在以太坊上表示为 NFT,特定 .eth 域名的所有者拥有相关的 NFT。因此,如果另一个账户获得了该 NFT 的所有权,新所有者就可以随意修改任何 ENS 记录。

为了降低此类风险,.eth 二级域名 (2LD) 的所有者账户应通过多重签名钱包进行保护,并创建子域名来管理合约命名。这样,如果子域名级别发生任何意外或恶意的所有权变更,2LD 所有者都可以覆盖它们。

合约命名的未来

合约命名正在成为去中心化应用 (dapp) 开发的最佳实践,类似于域名在网络上取代 IP 地址的方式。随着钱包、浏览器和仪表板等更多基础设施集成针对合约的 ENS 解析,命名的合约将提高整个生态系统的安全性并减少错误。

通过使智能合约更容易识别和理解,命名有助于弥合以太坊上用户和应用之间的差距,从而提高用户的安全性和用户体验。

延伸阅读