以ENS為例剖析web3域名系統設計
注冊地址:https://app.ens.domains/
web3域名系統,簡而言之就是基于區塊鏈的分布式、去中心化的命名系統,與DNS類似,將地址解析成可讀性的名稱,本文以ENS為例從整體架構到合約細節,深度剖析web3域名系統的設計ENS前置概念ENS模塊概念ENS模塊解析ENS存在的問題與解決ENS的DNS模塊部署自己的web3域名總結ENS前置概念
域名層級:類似DNS,ENS域名層級同樣分為根域名,即""域名一級域名,類似.com,.cn,在ens中有.eth和.reverse(用來記錄反向解析,后面會提到)二級域名,即用戶注冊的域名,比如axtrur.eth三級域名,用戶注冊了二級域名之后,可以創建或修改該二級域名下的三級域名,比如app.axtrur.ethNameHash算法:由于智能合約直接與可讀的域名進行交互效率低,因此ENS采用固定長度的256位加密哈希作為域名記錄。namehash是一個遞歸算法,可從任意域名的NameHash值推導出任意子域名的值,而無需知道原域名的真實文本字符串,同時符合域名的多層級特性Namehash("")="0x0000000000000000000000000000000000000000000000000000000000000000"Namehash("eth")=keccak256(Namehash(""),keccak256("eth"))Namehash("axtrur.eth")=keccak256(Namehash("eth"),keccak256("axtrur"))Namehash("app.axtrur.eth")=keccak256(Namehash("axtrur.eth"),keccak256("app"))node:在ens中,用戶注冊的域名比如axtrur.eth,會采用namehash算法生成的哈希node去記錄鏈上數據,后文中我們將提到的node理解為一個域名名稱比如axtrur即可,關于ENS名稱的處理請參考?https://ensuser.com/docs/contract-api-reference/name-processing.htmlENS模塊概念
注冊器合約:負責分配名稱的合約,有正向注冊器,反向注冊器,DNS注冊器
解析器合約:負責記錄域名映射關系的合約,分正向、反向解析器,其中正向解析器合約也可自定義實現正向解析:負責記錄域名所綁定的內容,即域名的nameNode到的解析,可設置各類幣種的錢包地址,還可以設置IPFS的內容哈希,甚至記錄郵箱等第三方賬號作為文本記錄。反向解析:負責記錄錢包地址所綁定的域名,即反向域名的nameNode價格預言機:ENS定價采用的是U本位,所以需要USDT預言機來計算某一時刻的注冊費的eth換算值,ENS主網上的注冊費為:長度為5+個字符的域名:每年支付5美元長度為4個字符的域名:每年支付160美元長度為3個字符的域名:每年支付640美元DNSSEC預言機:DNS安全擴展預言機合約,負責校驗證明web3域名的所有權和有效性ENS模塊解析
報告:貝萊德比特幣ETF即便獲批也不會在2023年內推出:6月24日消息,Bloomberg Intelligence高級宏觀策略師Mike McGlone在社交媒體公布了最新一期《加密展望》報告內容,其中指出即便貝萊德申請的現貨比特幣交易所交易基金(ETF)真的獲得監管機構批準,該ETF也不會在2023年內推出。此外,Mike McGlone還指出美聯儲在最近的FOMC會議上已經宣布今年還將“再加息幾次”,加上流動性走弱和潛在股市走熊,這些都與復蘇預期相反,因此加密市場依然會遇到上升阻力。[2023/6/24 21:57:10]
注冊表合約(EnsRegistry.sol)
注冊表是ENS最核心的合約,上圖為注冊表合約內部的records結構,維護著域名層級node對應的owner、解析器、ttl信息注冊表是ENS最核心的合約,上圖為注冊表合約內部的records結構,維護著域名層級node對應的owner、解析器、ttl信息
除了注冊表信息records維護,合約還維護owner的委托管理者信息operators,owner可以通過添加設置委托管理者地址來共同管理域名信息合約中相關管理設置接口,都會通過修飾器`authorised(node)`來限制調用權限;該修飾器將判斷該接口的交易請求者是否為當前域名的owner,或者委托管理者地址,保證了僅有域名的owner或委托者才有創建下一級子域名的權限。同時這里部署初始化的時候將`""`根域名的node的owner設置為部署者,只有這樣,部署者才能將根域名的owner設置給Root合約根合約
根合約是根域名的owner,同時根合約作為根域名的owner,有權限調用注冊表合約的setSubnodeOwner接口,將域名.eth的owner指向基礎注冊器合約;
基礎注冊器合約
由于Root合約將域名.eth的owner指向基礎注冊器合約,從而基礎注冊器擁有.eth底下的二級域名的設置權限,使得用戶可以通過基礎注冊器合約進行域名注冊;同時該注冊器合約繼承了ERC721協議標準,這也就是為什么ENS域名可以作為NFT在交易市場比如opensea上買賣的原因。除此之外,基礎注冊器合約還維護著每個域名的過期時間expiries,注冊器為每個域名設置了90天的保護期,當域名過期后且在保護期內,域名擁有者可以通過調用續期renew接口進行續期,如果超過了保護期,則需要重新注冊。同時在ENS設計中,注冊器合約基本上都有controllers結構,維護著可信的controller注冊器合約,只有可信合約才可進行調用。
萊特幣已啟動Litecoin Core v24開發:4月11日消息,據萊特幣官推宣布,目前已在其核心開發人員David Burkett領導下啟動開發 Litecoin Core v24,新版本將新增對MWEB的硬件支持、對輕客戶端的P2P支持、對不需要訪問私人支出密鑰即可識別已發送或接收交易的“Watch-only”錢包支持、以及新增支付證明等。[2023/4/11 13:55:12]
控制器合約
用戶在官網中,將要注冊的域名等注冊信息傳給控制器合約,控制器合約通過預言機計算該域名的價格,同時將域名通過namehash轉成node后傳給基礎注冊器進行域名NFT的注冊,同時將域名相關注冊表信息寫入注冊表合約完成注冊,同時域名的owner可以在官網通過注冊表合約進行管理操作,官網中的注冊頁面如下:
核心注冊流程:
ENS注冊采用“請求-提交”兩階段注冊模式ENS注冊采用“請求-提交”兩階段注冊模式,為什么需要兩階段提交?我們知道以太坊節點從交易池pool中撈取交易是會按照交易給的gas費進行優先級排序;在注冊者攜帶待注冊域名構造的交易提交上鏈前,在整個網絡是公開透明的,惡意的攻擊者可以監聽并解析此類待上鏈交易,并構造相同域名的注冊交易,通過提高gas費的方式搶先上鏈注冊控制器合約注冊。
為了防止此類域名搶注問題,ENS采用了先請求,后提交的注冊模式。在第一階段并不直接提交域名,而是先調用
makeCommitment接口根據待申請域名name、待申請地址owner、隨機值secret進行哈希后生成一條特殊的commitment后,通過commit提交上鏈
提交階段的commitment記錄著當前時間戳,同時ENS設置commitment的有效期為60s到86400s之間;第二階段注冊的時候合約會重新計算commitment,判斷是否與第一階段提交的一致,同時檢查Commitment的有效期,保證跟第一階段的鏈上處理時間間隔1分鐘以上,保證記錄了第一階段交易的區塊經過了至少5個后續區塊的確認。
WazirX:用戶將資金轉移到國際交易所可能會不合規,其沒有TDS框架:8月9日消息,WazirX表示,鑒于最近的事態發展,注意到用戶選擇將資金提取到國際交易所。然而,在這個過程中,他們可能在不知不覺中不合規。因為國際交易所沒有TDS框架,對用戶的真實身份或交易規模一無所知。因此,國際交易所會將扣除TDS的責任推給個人,但這幾乎是不可能的。
WazirX提醒,對于超過10,000盧比的交易,買方(無論是否為印度居民)必須扣除向印度賣方支付的金額的1%(在某些情況下為5%)。WazirX具有根據政府通知遵守TDS的框架,希望用戶不要驚慌并做出正確的決定。用戶資金在WazirX是安全的
據悉,印度財政部發布關于1%源頭稅收減免(TDS)的指導方針,該指導方針于7月1日生效。關于TDS,印度政府表示,加密貨幣資產交易必須在交易發生當月月底起30天內報告,扣除的金額必須在同一期限內支付給政府。報告交易的格式也由政府規定,對此政府將推出26QE表格。[2022/8/9 12:13:13]
用戶在官網的第二階段注冊流程實際上是代碼中的resolver!=address(0)邏輯分支,因為ENS默認會將注冊的resolver解析器設置為默認的公共正向解析器,這里為什么需要將域名注冊給合約本身然后在轉移給用戶呢?因為上文中我們提到注冊表合約中只有owner或者委托管理者才有權限設置解析器或更新owner,所以為了幫用戶設置好解析器,需要通過基礎注冊器注冊給合約自身,再通過注冊表合約設置解析器,然后聲明所有權,最后才轉移給注冊者
解析器(Resolver)
ENS中的解析器合約分為正向解析和反向解析,解析記錄是ENS比較重要的內容,只有定義好規范,生態才能方便的即成ENS這類web3域名系統
正向解析(ENS默認的正向解析器合約PublicResolver.sol或者自定義解析器合約
負責將域名映射為對應用戶設置的內容(包括幣種地址,ipfs內容hash,通用text記錄等等
首先metamask會通過注冊表合約獲取域名node設置的解析器地址,然后與該解析器地址交互,獲取用戶設置的eth的幣種地址進行轉賬操作
反向解析
負責將用戶錢包地址映射為對應的域名
反向解析實際上是對用戶不透明的,用戶也無法像正向解析器合約那樣可以自定義。用戶也可以通過反向注冊器的setName方法設置當前錢包地址要綁定的域名,反向記錄同樣在ENS注冊表合約維護,用戶注冊的反向記錄在三級域名記錄中,格式為:具體用戶地址.addr.reverse
去中心化實體博物館Arkive完成970萬美元融資,Coinbase Ventures等參投:7月16日消息,去中心化實體博物館Arkive完成970萬美元融資,本輪融資由Offline和TCG Crypto領投,NFX、Freestyle Capital、Coinbase Ventures、Not Boring Capital、Precursor、Chainforest等參投,天使投資人包括Pantera Capital合伙人Paul Veradittakit等。
博物館一直依靠策展人、收藏家和投資者來決定哪些藝術品被展示,數以百萬計的物品被鎖定在1%的私人收藏中,Arkive希望改變這一狀況,通過接納來自世界各地的人為會員,讓他們能夠投票決定博物館將獲得哪些歷史和藝術文物。
作為一個去中心化自治組織(DAO),Arkive的收藏品由其成員策劃,成員通過Discord進行交流并使用他們的以太坊錢包進行投票決定購買、展示哪些藏品,然后鑄造對應的藏品NFT,歷史來源、身份驗證、質量和狀況都會被記錄在區塊鏈上,任何人都可以在博物館和畫廊現場驗證。(Svdaily)[2022/7/16 2:17:35]
設置反向解析之后,opensea用戶界面會將用戶錢包地址展示為可讀的ENS域名,則是反向解析的過程解析器結構以及node對應的注冊表信息
根域名的owner是根域名
.eth一級域名的owner是正向注冊器也就是用戶注冊的二級、三級域名的owner是用戶本身,同時可以自由設置解析器合約地址.reserve一級域名owner是ENS的多簽錢包地址.addr.reserve二級域名owner是反向注冊器,ens當前主網版本控制器合約注冊的時候默認通過反向注冊器設置反向解析記錄,用戶無需提供gas之外的反向注冊費。用戶注冊域名的反向三級域名的owner都默認指向反向注冊器合約,同時resolver默認指向反向解析器合約上面我們已經把ENS域名合約設計以及主要的模塊梳理完了,ENS在設計上比如模塊拆分,權限拆分方面都是值得我們借鑒的,但是目前主網上的ENS也存在一些問題
ENS存在問題與解決
零寬問題:這是ENS目前比較麻煩的問題,因為合約設計之初并沒有限制零寬字符,比如可以官網注冊某個域名的時候,如果該域名已被注冊,此時用?https://unicode-table.com/en/200B/?拷貝對應某種零寬字符串插入到要注冊的域名中間某個位置,則可以注冊對應的域名了特殊字符:ENS合約并沒有限制.,emoji表情等特殊字符過濾,以致于目前交易市場存在太多冗雜非規范的域名
凌迪Style3D完成近1億美元Pre B+輪融資,打造數字時尚基礎設施:6月21日消息,物理世界數字化基礎設施服務商凌迪Style3D宣布完成近1億美元Pre B+輪融資,由高瓴創投、鼎暉等多家機構連續投資,該融資將主要用于核心技術與產品的研發迭代,以及海外市場的推廣建設。高榕資本曾于2020年初領投凌迪Style3D的A+輪融資,并在后續輪融資中加注。
據悉,凌迪Style3D成立于2015年,主要提供自主仿真引擎的底層技術服務及產業鏈級工業軟件,打造以科技為驅動的3D設計一體化協同平臺,成為數字時尚的基礎設施。目前已落地應用于服裝產業,助力服飾類企業的研發、協同、展銷、生產全鏈路數字化。(高榕資本公眾號)[2022/6/21 4:42:07]
目前ENS官網已經對特殊字符進行過濾,并給予必要的警告提示
3.transfer問題:ENS目前有個比較麻煩的問題就是域名NFT在轉移的時候,owner沒有同步轉移,所以當你在交易市場買了一個ENS域名NFT的時候,你需要通過基礎注冊器合約的reclaim接口,消耗一定的gas費聲明NFT所有權后,才能到ens官網上看到自己擁有的域
4.tokenURI問題:ENS的基礎注冊器合約并沒有即成ERC721標準的tokenURI,可能是設計之初沒有考慮好,所以目前我們在交易市場比如opensea上的ENS的NFT的metadata,是交易市場特殊對ENS即成了ENS中心化的metaservice的API,比如
5.保留字:這是我覺得.bit這方面做得比較好的方面,.bit官方會把web2世界中的機構或公司名稱保留下來,便于后續web2與web3之間的連接這對于web3域名生態發展是有意義
6.基礎合約可升級,ENS目前對于基礎模塊并沒有采用代理模式支持合約可升級,這樣當未來需要對基礎模塊升級的時候是比較麻煩的,一種是fallback一種是遷移數據,但這都只能解決部分問題,這個方面ENS是有改善空間的。
我們可以怎么解決上面那些問題呢
1.字符問題,我們可以在控制器合約的valid函數修改邏輯,一種實現方式是限制零寬等特殊字符比如spaceid,另一種就是只允許符合規范的字符
2.transfer問題:我們可以在基礎注冊器里復寫transferFrom和saveTransferFrom函數,在轉移nft的同時調用setSubnodeOwner轉移owner
3.tokenURI問題:這個比較簡單我們只要繼承ECR721的tokenURI標準呢就可以了,那怎么實現在圖片中動態的域名的展示呢?我們可以采用svg上鏈
4.保留字問題:可以將保留字以及對應要保留的錢包地址上鏈,先保留給合約本身,后面可以通過apply接口申請給某個特定地址
5.基礎合約可升級:我們可以采用代理模式(eip-1967)對基礎模塊合約進行改造,感興趣可以參考lens-protocol的合約設計(
core/contractsatmain·lens-protocol/coreTheLensProtocol.Contributetolens-protocol/coredevelopmentbycreatinganaccountonGitHub.github.com
DNS模塊
ENS的DNS能力并不是我們說的web2域名系統比如.com可以實現在瀏覽器里訪問域名來訪問你的ens域名,ENS的dns注冊實際上只是基于DNS安全擴展,通過相關的證明,校驗算法證明你對于該web2的域名的所有權,然后在鏈上做一個的記錄,使得我們可以用web2域名進行鏈上轉賬。詳見
但是本文為什么我們沒有詳細講ENS的DNS模塊呢?是因為ENS雖然花了大部分精力在實現DNS,但是這個功能放在ENS比較雞肋,用的人很少。其實這實際上是一個did聚合的范疇,類似的能力個人覺得更適合放到聚合DID中去實現,比如像masknetwork的nextid,cloaknetwork的zkid。可以把proof做好,向即成twitter等web2的handler一樣,去集成web2域名
部署自己的web3域名
本文最后給大家提供一個改造后的ENS域名合約版本(?https://github.com/axtrur/xens-contracts?改造內容以及部署方式詳見readme),方便大家自行部署自己的web3域名,深入理解web3域名系統的設計原理部署goerli測試網命令
OWNER_KEY={{accountprivatekey}}INFURA_ID=c03713652e3c4ef6a3c09ea7dbf58711npxhardhatdeploy--networkgoerli(INFURA_ID可以替換成自己的infuraid,執行前刪除deployment/goerli文件夾以及deployment/goerli_result.json)部署測試網goerli后,執行注冊腳本ens.js注冊域名
OWNKEY={{accountprivatekey}}INFURA=https://goerli.infura.io/v3/c03713652e3c4ef6a3c09ea7dbf58711nodeens.js
就可以到opensea測試網查看已經部署的nft了,比如我部署的.buidlerdao后綴的域名就可以到opensea測試網查看已經部署的nft了,比如我部署的.buidlerdao后綴的域名
testnets.opensea.iotestnets.opensea.io
總結
ENS域名作為web3域名的先行者,在設計上有很多值得借鑒的地方,我們看到的.bnb,.nft也都是基于ens合約基礎上搭建的。希望通過本文大家對ENS的設計從整體到細節有個深入的深入,web3域名不僅僅是一個NFT,他有著更深遠的意義。同時web域名只是一個很小的開始,相信隨之普及、生態集成以及大家對did的探索,原生鏈上的可讀的web3域名將會被聚合起來,使得每個用戶在加密世界里都有個統一的名片描述,更好地去連接多鏈生態,連接用戶。
ENS域名系統相關EIP標準
EIP137-注冊表?https://eips.ethereum.org/EIPS/eip-137EIP181-反向注冊器?https://eips.ethereum.org/EIPS/eip-181EIP205-ABI解析(ABI()).EIP619-SECP256k1公鑰解析(pubkey()).EIP634-文本記錄解析(text()).EIP1577-內容hash解析(contenthash()).EIP2304-多代幣地址解析(addr()).新的記錄類型可以隨時通過EIP標準化程序進行定義主網部署的ENS合約
注冊表合約:0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e根合約:0xab528d626ec275e3fad363ff1393a41f581c5897基礎正向注冊器合約:0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85反向注冊器合約:0x084b1c3c81545d370f3634392de611caabff8148默認正向解析器合約:0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41默認反向解析器合約:0xa2c122be93b0074270ebee7f6b7292c7deb45047控制器合約:0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5ENS域名資料
官網:?https://app.ens.domains/github:?https://github.com/ensdomains合約代碼:https://github.com/ensdomains/ens-contracts/tree/master/contracts線網部署版本:https://etherscan.io/accounts/label/ens文檔:https://ensuser.com/docs/contract-api-reference/ens-contracts-overview.html交易市場:https://opensea.io/collection/ens其他web3域名系統資料
.bnb官網:?https://space.id/github:?https://github.com/Space-ID交易市場:https://www.element.market/collections/space-id-bnb.bit官網:https://www.did.id/github:https://github.com/dotbitHQ交易市場:https://opensea.io/collection/dotbit.nft官網:https://nft.space/交易市場:https://www.element.market/collections/nft-name-service
Tags:ENSOWNNERWEBCENSCROWNSuper miner token DecimalsMETAWEB3PA
在2021年底創下歷史新高后,加密貨幣市場于次年崩盤。市場總值急劇下降:從2021年11月的2.9萬億美元跌至一年后的約8000億美元。隨著市場下降,領先的加密貸款機構和交易所也宣布倒閉.
1900/1/1 0:00:00一3月計劃成立一支新的CryptoFund;4月在新加坡注冊持牌基金;5月募資遇到Luna事件,老錢全嚇跑;8月基金設立完畢,想著做一次季度報告再募資.
1900/1/1 0:00:00盡管最初創建加密貨幣是為打破原有系統,但古典金融領域的有遠見的先鋒派早已意識到其巨大潛力。>注意:“古典金融”是從中國互聯網借用的一個詞,傳統的VC投資者嘲笑加密行業并自稱為“古典互聯網”.
1900/1/1 0:00:00據MarsBit統計,11月19日至11月25日期間,加密市場共發生15筆投融資事件,其中基礎設施領域2筆、DeFi領域2筆、鏈游和NFT領域5筆、Web3領域3筆.
1900/1/1 0:00:0012月1日21:00,由NFTERA及香港數碼港主辦,香港立法會議員吳杰莊、NanoLabs創始人Jack孔共同發起,CrossSpace聯創Leon、Marsbit聯創商思林主持的“對話港府.
1900/1/1 0:00:00注:本文來自@DeFi_Cheetah推特,MarsBit將內容整理如下:1Synthetix的重要更新與巨大的ALPHA!!!!通過質押$SNX獲得近60%的年利率.
1900/1/1 0:00:00