目前 ENS 提供的綁定方式有以下兩種:
購買想要的 ENS 名稱、綁定到地址上
使用既有的 DNS 綁定持有的網址到地址上
前一篇文章中,我們介紹了 ENS 是什麼以及第一種綁定自己的 Ethereum 地址到你所購買、註冊的 ENS 上的步驟說明。而目前你正在閱讀的這篇文章中,將紀錄如何使用既有的 DNS 服務做驗證來綁定持有網址到自己的地址上的步驟。
若你還沒有看過前一篇文章的話,建議可以先做閱讀、了解 ENS 是什麼:
https://mirror.xyz/carawang.eth/_zLa85tHYaps-ivRUE1DspMYWuNf86RDGrKvRJxHvJE
在前一篇文章中,我們說明了大部分使用 ENS 做綁定的方式,是直接購買一組你想要的 ENS 名稱後,綁定到自己的地址上,而這些名稱,全部都會是以 .eth 做為結尾的名稱。例如在前一篇文章中,我購買了 carawang.eth 這個名稱並完成綁定後,就可以在其他有支援 ENS 的服務上,看到我的以太坊地只會出現 carawang.eth 的對應關係。
以下以 OpenSea 網站為例,你可以看到,在我的以太坊地址 0x71A1…86EE 前方,出現了 carawang.eth 的 ENS 名稱:

而 ENS 也提供讓你可以綁定你持有的網址到以太坊地址上的方法,像筆者目前持有 metaversepets-nft.com 這個網址,則我可以利用 ENS 要求的驗證步驟一步步完成後,在 ENS 中紀錄我的地址對應的 ENS 即為我的網址。如下圖所示,你可以看到在 0x1E60…4eE9這組地址前方的 ENS 名稱便是我持有的網址 metaversepets-nft.com:

筆者認為,將地址綁定到 ENS 上最大的好處,其實是多一層安全認證。以 NFT 在 OpenSea 這樣的二級市場上的認證方式為例,OpenSea 一般要給一個 Collection 或地址藍勾勾的認證,還是需要這個藝術家或項目有一定的銷售量或知名度才會給予,但筆者在 Instagram 或是其他社群網站中,其實也會發現有小型的藝術家或專案會被有心人進行偽造 (為了方便描述,我們姑且稱這個正版專案叫做 A),而這些藝術家或項目方他們確實是首要發起者,但可能因為種種原因導致他們無法獲得 OpenSea 的藍勾勾。此時,當有有心人想要偽造 A 來販售作品時,通常就得靠聰明的使用者去識破後,通知 A,讓 A 在社群媒體中發佈訊息說明哪些發售者是盜版行為、提醒粉絲或消費者們多加注意。而前述所說的聰明使用者通常是怎麼識破的呢?無非就是看銷售量或是發售者的地址來多加判斷。
而作為藝術家或項目方,假如我們的 NFT 專案本身有架設網站的話,也許就可以選擇利用 DNS 綁定網址到 ENS 上的作法,去對自己的發佈作品的地址做認證,並宣導要用戶在購買前多一層檢查發佈者的 ENS 名稱的動作,減低使用者成為聰明消費者的門檻 (從要辨認一組難以記憶的以太坊地址到簡單檢查大家都熟悉的網址即可),來做到增加自己與消費者的保護力。
而另外的好處,就如同前一篇文章所提的,綁定後的地址在其他有支援的 Web3.0 網站、服務中,可以顯示你的 ENS (當前文章所述的,便會是顯示你持有的網址),以品牌經營的角度來說,也許就會更容易地讓大眾去產生記憶。
DNS 的運作方式,是藉由新增 DNS Record 去做導向。例如,今天我的網站實際上架設於 127.0.0.1 這樣的 IP 位子上,因此我的 DNS 中就會新增一筆 DNS Record 去說明 metaversepets-nft.com 這個網址,要被指向 127.0.0.1 的 IP 地址。而我們也可以透過設定子網域 (subdomain) 的方式,去擴充網址可以指向的位址或回傳值,例如 ENS 所設計的驗證方式,就會是請驗證者在自己的 DNS 上,設定一組 DNS Record,子網域統一叫做 _ens ,而回傳值就會是你當下想要綁定的以太坊地址。
(圖)
然而,過去的域名系統 (DNS = Domain Name System) 的安全性並不高,並沒有嚴謹的加密與驗證技術在背後做支撐,因此,是有可能藉由中間人從中篡改回傳值,而導致正在照訪該網站的用戶,在完全渾然不覺的情況下,進入到了惡意網站或取得了錯誤的內容。
而要如何補足這一塊的安全缺漏呢?方法是透過啟用 DNSSEC (Domain Name Service Security Extensions) 在 DNS 上的安全性擴展,讓 DNS 的服務在取得 DNS Record (通常便是你的網址要導到哪個 IP 地址的資訊) 時可以驗證來源的正確性,以確保中間內容並未遭竄改。因此,有了 DNSSEC 後,ENS 便有辦法藉由請擁有者新增一筆 DNS Record 的方式,驗證此設定的來源正確性與內容來做到將 DNS 網址作為 ENS 名稱來綁定到特定地址上的需求。
更多關於 DNSSEC 的介紹可以參考這篇文章:
https://www.ithome.com.tw/tech/92685
首先,當你完成網站的功能開發後,會需要先在網址註冊商中購買、註冊一個你喜歡的網址,接著,你會需要有 DNS (Domain Name System) 託管服務來設定、將網址導向你的網站實際所在的 IP 位址。
因此,在做 ENS 驗證時,會涉及到購買網址的域名註冊服務,以及 DNS 託管服務兩個角色。不過大部分的註冊網址服務中,也會涵蓋到 DNS 託管的服務,筆者則是在 GoDaddy 註冊、購買得到 metaversepets-nft.com 的網址後,另外申請 CloudFlare 的 DNS 服務做託管。因此,以下的 ENS 流程,將以此兩個服務的結合做截圖範例。若你選擇的是其他的服務,還是可以搭配下方步驟再與你選擇的服務後台設定做比較,預期也可以順利完成 ENS 註冊。
筆者是透過 GoDaddy 購買網址的,其他常見的網址註冊商還有 Google Domain,台灣在地服務則可以透過中華電信的域名註冊進行購買。
GoDaddy:
Google Domain:
中華電信:
GoDaddy 本身也有提供 DNS 的代管服務,不過筆者的 DNS 代管服務是選擇使用 CloudFlare:
https://www.cloudflare.com/zh-tw/
因此,以下在介紹 ENS 註冊既有 DNS 到地址的步驟中,筆者截圖的畫面會是以 GoDaddy 配上 CloudFlare 的設定方式進行截圖、說明。
首先,你一樣是進到 ENS 的網站中搜尋你想要綁定的網址。以筆者所擁有的網址為例,我就直接在搜尋框中搜尋 metaversepets-nft.com 即可:

接著,你會看到這個網址尚未被註冊、納入 ENS 的管理範圍中,因此你便可以依照 ENS 的要求步驟來進行設定、證明你擁有該網址的所有權:

這裡的綁定流程不像一般購買 ENS 名稱的流程那樣,會在一開始就讓你知道所有步驟在做什麼,而是你得要一關一關渡過後,才能看到下一關要做的事情。
而就如同上圖所示,第一關需要達成的,是要進入你管理該網址的 DNS 中,開啟 DNSSEC 選項,此步驟是為了確保後續步驟中可以拿到 DNSKEY、RRSIG 進行來源正確性的驗證。
DNSKEY: 是 DNS 的公鑰,可以拿來驗證訊息是否透過只有該 DNS 所擁有的私鑰進行簽章的資料正確性
RRSIG (Resource Record Signature): DNS 經由私鑰進行簽章後的的簽章內容
而以筆者使用的 CloudFlare 託管服務為例,只需要點開你要設定的網址後,進入到「DNS」的管理頁面:

進到管理畫面後,在右邊的設定畫面中,將捲軸往下拉,你就會看到「DNSSEC」的選項,旁邊會有「Enable DNSSEC」的藍色按鈕,點擊後,CloudFlare 就會幫你產生 DNSSEC 所需要的公私鑰並在一個 popup 的畫面中顯示給你看,此時你不需要特別把資料都先記下來,這些資料在 DNS 管理頁面中都看得到 (「DNSSEC」區塊右下方的「DS Record」選項,點開後,便可以看到相同內容)。
完成「Enable DNSSEC」動作後,你會看到 DNSSEC 那一塊的藍色按鈕變成了「Cancel Setup」,此時表示你已完成 DNSSEC 一半的設定:

接著,你還需要將 CloudFlare 幫你產生的部分資訊放到原本的網址註冊商中,以筆者的網址為例,便是要回到 GoDaddy 的後台進行設定。在 GoDaddy 的後台中,找到「DNS Management」的頁面,往下拉找到「Advanced Features」區塊,區塊中就會看到「DNSSEC」選項。
由於筆者當時在 GoDaddy 後台找「DNS Management」入口找非常的久,假如有人也使用 GoDaddy 做設定的話,可以在登入 GoDaddy 後台後,直接使用以下網址進入「DNS Management」頁面:
https://dcc.godaddy.com/manage/dns
進到 GoDaddy 的「DNSSEC」頁面後,點選「ADD」按鈕,你就會看到以下畫面:

接著,請從 CloudFlare 後台中,由 CloudFlare 幫你產生的 Key Tag、Digest 填入,Algorithm 預期都是填入 13,而 Digest Type 預期是填入 2。
假如你是在其他地方購買網址,但與筆者一樣使用 CloudFlare 做 DNS 託管的話,可以參考 CloudFlare 的這一頁,其中有一個「Provider-specific instructions」下拉清單,可以從中找到你的網址註冊商的 DNSSEC 設定說明頁:
https://developers.cloudflare.com/dns/additional-options/dnssec/
完成設定後,稍等約五分鐘的時間,接著在 ENS 的畫面就會顯示已偵測到該網址有開啟 DNSSEC 的選項:

到這邊,第一個步驟的「ENABLE DNSSEC」被打勾了,我們來到了第二個關卡,這個關卡是要你在你的 DNS 中,設定一個 type 是 TXT 的 DNS Record 並將此紀錄的子網域設定為 _ens,並將內容寫入為 a=0x…. ,後方的 0x… 會是你當前連接在 ENS 上的地址。
藉由這個步驟,ENS 將可以透過 _ens.metaversepets-nft.com 來取得他要求你設定的內容,進而驗證你是這個 DNS 的擁有者。
此時,你需要回到 CloudFlare 的 DNS 管理頁面中,將捲軸拉到管理頁面的頂端,按下「Add Record」

接著,網頁畫面就會出現一塊讓你可以設定 DNS Record 的區域,你就可以依據 ENS 的要求進行設定:

完成後,你在 ENS 的頁面會看到第二個勾勾也被勾起來了:

再來的步驟,便是實際與 ENS 的智能合約進行註冊 ENS 名稱的動作了。點選「Register」後,你的 MetaMask 會跳出視窗要你確認、發送交易,此動作將觸發 ENS 智能合約中的 proveAndClaimWithResolver,這個呼叫因為這個動作要發送的資料量較大、驗證較費資源,因此會需要耗費不少交易手續費,以筆者這次的範例為例,這個動作筆者花了 0.27179 左右的 ETH,大約是 824 鎂,換算台幣要兩萬多塊…
送出交易後,等待幾個交易確認數後,第三個勾勾也被勾起來了:

此步驟與一般的 ENS 綁定方式一樣,進到「My Account」後,在 Primary ENS Name 區塊的下拉選單中找到你的網址後,按下「Save」、送出交易即可。

眼尖的網友大概會發現,上方的截圖中,圖片下方的「Registrant」沒有出現你的網址名稱,這是因為對 ENS 來說,他並不是幫你註冊這個 DNS,而僅是透過既有的 DNS 再加上 DNSSEC 擴充協定來完成你原本就已經註冊過的網址驗證,因此這類型的 ENS 中,並不會有註冊者的選項,相比於上一篇文章的一般 ENS 名稱,可以看出以下的差異:

上圖中可以看出,利用 DNS 做驗證得到的 ENS 名稱中,沒有顯示註冊者 REGISTRANT,而下圖一般透過購買所得的 ENS 名稱則有 REGISTRANT 這一欄:

既有網址的 ENS 類型,是透過產生 ERC721 的 NFT 來辨識 ENS 名稱的所有者,因此,當你想要把 ENS 轉給其他地址時,你實際上轉移的是這個 ENS 對應的 ERC721 NFT,但因為 DNS 網址的所有權仍是依據域名管理局所管理,因此,ENS 在這一塊的設計上,便不會幫這種 ENS 產生對應的 NFT、隨意讓你可以轉移此類型 ENS 的所有權。
若你想要改變 DNS 網址對應到的 ENS 名稱時,則會需要回到講解步驟時的步驟三,將 _ens 的子網域內容做更改,把新的網址放入內容中 ( a=新網址 ) 以便讓 ENS 重新做驗證。
比起一般註冊、購買得到的 .eth 結尾的 ENS 名稱,由於 DNS 的網址變化度較高,所以你可以幫你的以太坊地址綁定的 ENS 名稱增加更多不一樣的豐富度,不過就如同上方的範例所看到的,目前 ENS 的實作中,將驗證內容送到鏈上的步驟是需要消耗許多手續費的,對於已經在註冊 DNS 花費一筆錢的服務主來說,大概不會也不太需要為此再多付一次錢做 ENS 的註冊。
不過,就如同前面筆者所述,透過 ENS 的綁定,或許可以帶給消費者、投資者多一層安全性、提升產品的可驗證度,因此,對於 NFT 項目方、Web3.0 服務提供者,仍是可以考慮利用 DNS 驗證的方式,將既有的網址綁定到主要提供服務的以太坊地址上。
「區塊吧台」是 Metaverse Pets 社群中的子節目,會透過在 Discord 上直播的方式不定期地進行區塊鏈、虛擬貨幣有關的研究分享,若你對於此方面有任何想要分享卻苦於沒有舞臺的話,也非常歡迎你加入 Metaverse Pets 社群後與我報名「區塊吧台」的分享會。
以下是過往區塊吧台的分享會紀錄影片:
若你從我的文章或影片中獲得一些幫助、希望支持我繼續創作或記錄研究結果的話,歡迎購買 Metaverse Pets 的 NFT 當作支持,謝謝!
你可以在 OpenSea 的網址後方直接帶入項目的 ENS 名稱找到我: opensea.io/metaversepets-nft.com

