---
title: "命名智能合约"
description: "使用 ENS 命名以太坊智能合约的最佳实践"
lang: zh
---

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

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

## 为什么要命名智能合约？ {#why-name-contracts}

### 人类可读的标识符 {#human-readable-identifiers}

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

这是通过 [以太坊域名服务](https://ens.domains/) 实现的，该服务为以太坊地址提供去中心化的命名服务。这类似于域名系统 (DNS) 使互联网用户能够使用诸如 ethereum.org 之类的名称而不是通过诸如 `104.18.176.152` 之类的 IP 地址来访问网络地址。

### 提高安全性和信任度 {#improved-security-and-trust}

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

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

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

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

### 改善钱包和浏览器的用户体验 {#better-ux}

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

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

## 部署时命名与部署后命名 {#when-to-name}

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

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

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

## ENS 命名如何用于合约 {#how-ens-naming-works}

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

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

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

## 命名合约的工具 {#tools}

命名智能合约有两种方法。要么使用 [ENS 应用](https://app.ens.domains) 并执行一些手动步骤，要么使用 [Enscribe](https://www.enscribe.xyz)。下面将概述这些方法。

### 手动设置 ENS {#manual-ens-setup}

使用 [ENS 应用](https://app.ens.domains/)，开发者可以手动创建子名称并设置正向地址记录。但是，他们无法通过 ENS 应用设置名称的反向记录来为智能合约设置主名称。必须采取手动步骤，这些步骤在 [ENS 文档](https://docs.ens.domains/web/naming-contracts/) 中有介绍。

### Enscribe {#enscribe}

[Enscribe](https://www.enscribe.xyz) 简化了使用 ENS 命名智能合约的过程，并增强了用户对智能合约的信任。它提供：

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

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

你可以访问 [Enscribe 应用](https://app.enscribe.xyz) 开始命名和查看智能合约。

## 最佳实践 {#best-practices}

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

## 风险 {#risks}

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

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

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

## 合约命名的未来 {#future}

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

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

## 延伸阅读 {#further-reading}

- [使用 ENS 命名智能合约](https://docs.ens.domains/web/naming-contracts/)
- [使用 Enscribe 命名智能合约](https://www.enscribe.xyz/docs)。