ENS有兩個主要元件:登錄檔[4]和解析器[5]
ENS登錄檔是一個智慧合約,該合約維護所有域名和子域名列表,並儲存關於每個域名的三個關鍵資訊:
•域名的所有者
•域名的解析器
•域名下所有記錄的快取存活時間(即TTL)
域名的所有者可以是外部帳戶(使用者)或智慧合約。註冊中心就是一個擁有頂級域名的智慧合約,並按照合約中的規則將該域名的子域名分發給使用者。
ENS登錄檔中的域名所有者可以:
•為域名設定解析器和TTL
•將域名的所有權轉讓給另一個地址
•更改子域名的所有權
ENS登錄檔非常簡單,它的存在只是為了將域名對映到負責解析這個域名的解析器。
解析器負責將域名轉換為地址。只要是符合解析器相關標準的智慧合約,都可以在ENS中作為解析器程式。通用解析器服務於需求簡單的使用者,比如不經常更改地址的使用者。
每個記錄型別(以太坊地址、內容的雜湊等)都定義了一個或多個方法,解析器必須實現這些方法才能提供這類記錄。新的記錄型別可以隨時透過EIP標準化程式進行定義,因此不需要為了支援它們而對ENS登錄檔或現有的解析器進行更改。
在ENS中解析一個域名需要兩個步驟:首先,詢問登錄檔是哪個解析器負責解析該域名,然後,向該解析器查詢解析結果。
在上面的例子中,我們想找到"foo.eth"指向的以太坊地址。首先,我們詢問登錄檔是哪個解析器負責解析"foo.eth";然後,我們向該解析器查詢"foo.eth"的地址。
Namehash
智慧合約中的資源限制使得直接與可讀的域名互動效率低下,因此ENS只使用固定長度的256位加密雜湊。為了從域名生成雜湊的同時仍然保留其層次性,ENS使用了名為Namehash的演算法。例如,"alice.eth"的Namehash為 0x787192fc5378cc32aa956ddfdedbf26b24e8d78e40109add0eea2c1a012c3dec,Namehash只是用來在ENS內部表示域名。
Namehash是一個遞迴過程,可以為任何有效的域名生成唯一的雜湊。從任意一個域名的Namehash開始(比如"alice.eth"的Namehash)可以推匯出任意子域名的Namehash(比如"iam.alice.eth"的Namehash),而且推導過程中不需要知道或處理"alice.eth"這個可讀的原始域名。正是這個特性使得ENS能夠成為一個層次性的系統,且不必在內部處理可讀的文字字串。
在使用Namehash進行雜湊之前,首先需要藉助UTS-46標準對域名進行規範化,確保域名中的字母與大小寫無關,並禁止使用無效字元。任何對域名進行雜湊和解析的操作都必須首先對其進行規範化,以確保所有使用者獲得ENS的一致性。
有關Namehash和規範化如何工作的詳細資訊,請參閱有關域名處理[6]的文件。
開始使用
ENS為包括DApp開發者和合約開發者在內的各種人員提供參考文件。
我是DApp的開發者,我想為我的DApp新增ENS支援
從在DApp中啟用ENS[7]開始,檢視開發應用程式開發者指南,你可以從眾多可用的ENS庫[8]中選擇一個來開始使用ENS。
我是一名合約開發者,希望在我的智慧合約中與ENS進行互動
從鏈上域名解析[9]開始,檢視合約開發者指南。你還可以編寫自己的解析器[10](自定義查詢域名的過程)或自己的註冊中心[11](自定義註冊新域名的過程)。
我想檢視ENS智慧合約的參考文件
檢視ENS智慧合約的API參考文件,這些文件涵蓋了ENS的核心合約、登錄檔[12]、解析器[13]和常用的註冊中心,如:測試註冊中心[14]、反向註冊中心[15]以及.eth註冊中心[16]。
References
[1] ehereum-ens: https://www.npmjs.com/package/ethereum-ens
[2] ENS管理器: https://app.ens.domains/
[3] ENS官方主頁: https://ens.domains/
[4] 登錄檔: https://learnblockchain.cn/docs/ens/contract-api-reference/ens.html
[5] 解析器: https://learnblockchain.cn/docs/ens/contract-api-reference/publicresolver.html
[6] 域名處理: https://learnblockchain.cn/docs/ens/contract-api-reference/name-processing.html
[7] 在DApp中啟用ENS: https://learnblockchain.cn/docs/ens/dapp-developer-guide/ens-enabling-your-dapp.html
[8] ENS庫: https://learnblockchain.cn/docs/ens/dapp-developer-guide/ens-libraries.html
[9] 鏈上域名解析: https://learnblockchain.cn/docs/ens/contract-developer-guide/resolving-names-on-chain.html
[10] 編寫自己的解析器: https://learnblockchain.cn/docs/ens/contract-developer-guide/writing-a-resolver.html
[11] 註冊中心: https://learnblockchain.cn/docs/ens/contract-developer-guide/writing-a-registrar.html
[12] 登錄檔: https://learnblockchain.cn/docs/ens/contract-api-reference/ens.html
[13] 解析器: https://learnblockchain.cn/docs/ens/contract-api-reference/publicresolver.html
[14] 測試註冊中心: https://learnblockchain.cn/docs/ens/contract-api-reference/testregistrar.html
[15] 反向註冊中心: https://learnblockchain.cn/docs/ens/contract-api-reference/reverseregistrar.html
[16] .eth註冊中心: https://learnblockchain.cn/docs/ens/contract-api-reference/.eth-permanent-registrar/