---
title: "命名智能合約"
description: "使用 ENS 命名以太坊智能合約的最佳實務"
lang: zh-tw
---

智能合約是以太坊去中心化基礎設施的基石，使自主應用程式與協定成為可能。但即使合約功能不斷演進，使用者與開發者仍然依賴原始的十六進位地址來識別與參照這些合約。

使用 [以太坊域名服務 (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 名稱中的拼寫錯誤。

### 改善錢包與瀏覽器的使用者體驗 (UX) {#better-ux}

當智能合約配置了 ENS 名稱後，錢包與區塊鏈瀏覽器等應用程式就可以顯示智能合約的 ENS 名稱，而不是十六進位地址。這為使用者帶來了顯著的使用者體驗 (UX) 提升。

例如，當與尤尼斯瓦普 (Uniswap) 等應用程式互動時，使用者通常會看到他們互動的應用程式託管在 `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`），使合約升級透明化
- <strong>設定反向紀錄</strong>以將合約連結至 ENS 名稱，從而在錢包與區塊鏈瀏覽器等應用程式中獲得可見性。
- **密切監控到期日**，以防止所有權發生意外變更
- **驗證合約原始碼**，讓使用者能信任命名的合約會如預期般運作

## 風險 {#risks}

命名智能合約為以太坊使用者帶來了顯著的好處，然而，ENS 網域的擁有者必須對其管理保持警惕。值得注意的風險包括：

- **到期**：就像 DNS 名稱一樣，ENS 名稱的註冊期限是有限的。因此，擁有者監控其網域的到期日並在到期前及早續約至關重要。當到期日臨近時，ENS 應用程式與 Enscribe 都會為網域擁有者提供視覺提示。
- **所有權變更**：ENS 紀錄在以太坊上以 NFT 的形式呈現，特定 `.eth` 網域的擁有者持有相關的 NFT。因此，如果不同的帳戶取得了該 NFT 的所有權，新擁有者就可以隨意修改任何 ENS 紀錄。

為了減輕此類風險，`.eth` 二級網域 (2LD) 的擁有者帳戶應透過多重簽名錢包來保護，並建立子網域來管理合約命名。這樣一來，如果子網域層級發生任何意外或惡意的所有權變更，2LD 擁有者就可以將其覆寫。

## 合約命名的未來 {#future}

合約命名正成為去中心化應用程式 (dapp) 開發的最佳實務，這類似於網域名稱在網路上取代 IP 地址的過程。隨著越來越多如錢包、瀏覽器與儀表板等基礎設施整合了合約的 ENS 解析，命名的合約將提升整個生態系統的安全性並減少錯誤。

透過讓智能合約更容易識別與理解，命名有助於縮小以太坊上使用者與應用程式之間的差距，同時提升使用者的安全性與使用者體驗 (UX)。

## 延伸閱讀 {#further-reading}

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