ERC6551: 當 NFT 碰上合約錢包
ERC -6551 協議在社區中的討論逐漸加熱,這一協議為 NFT 帶來了巨大的拓展潛力。 ERC -6551 通過代幣綁定賬戶( Token Bond Account , TBA )為每個 NFT 創建一個獨特的合約錢包,使其能夠持有資產並記錄相關行為。這為非同質化代幣( Non - Fungible Token , NFT )的身份驗證和組合型 NFT 創造了可能性。深入探究,我們可以發現 ERC -6551 實際上為 NFT 提供了一個功能齊全的錢包,而這個錢包的"鑰匙"正是 NFT 本身。本文將回顧 NFT 的標準發展歷程,並涵蓋之前對 NFT 拓展的嘗試。鑑於 TBA 的核心是合約錢包,我們也會對合約錢包進行簡要介紹。最後,我們將深入探討該協議的實現細節及其潛在的應用前景。
一、 NFT 標準歷史及現狀
NFT 作為一種特殊的加密貨幣和數字藝術資產,為藝術品提供了新的數字載體,並拓展了區塊鏈技術的應用場景。與傳統的同質化代幣不同,每個 NFT 都是獨一無二的,並關聯著特定的元數據,如藝術品、遊戲道具、音樂等電子資料。因此, NFT 可以作為電子數據的所有權憑證,供人們收藏或交易。2014年 5 月3日,數字藝術家 Kevin McCoy 創作了首個已知的 NFT 作品" Quantum "。它是由各種形狀構成的像素化八邊形,並以迷幻的方式呈現。然而,直到 ERC -721( Ethereum Request for Comments 721)的出現, NFT 才真正有了統一的標準,為廣大開發者在不同項目中的應用提供了便利。
ERC -721
ERC -721與 CryptoPunks 的發展歷程緊密相連。 CryptoPunks 于 2017 年問世,包括了10000個唯一的 24x24 像素藝術形象。正是其成功吸引了開發者和社區的廣泛關注,使更多人認識到 NFT 的巨大潛力。此後,它成為了眾多 NFT 項目的藍本,並催生了 ERC -721 標準的制定。該標準由 CryptoKitties 的 CTO Dieter Shirley 創立。2018 年 1 月, William Entriken 、 Dieter Shirley 、 Jacob Evans 和 Nastassia Sachs 共同提出了 ERC -721標準。這一非同質化代幣標準在智能合約中實現了代幣相關的 ABI ,為在以太坊上創建、管理和轉移獨特的數字資產奠定了基礎,開啟了藝術家、收藏家以及數字藝術市場的新篇章。
ERC -721主要特點如下:
- 獨特性:與 ERC -20 代幣不同(它們是同質化的,每個代幣都與其他代幣完全相同),每個 ERC -721 代幣都是獨一無二的。
- 所有權和轉移:這種代幣標準允許確定任何給定代幣的所有者,並允許所有者或經過批准的個體轉移代幣。
- 元數據關聯:允許與每個代幣關聯元數據,這可能包括代幣的圖片、描述或其他相關屬性。
為了確保其作為一個標準, ERC -721定義了以下關鍵方法和事件:
balanceOf ()、 ownerOf ()、 approve ()、 getApproved ()、 set Approval ForAll ()、 isApprovedForAll ()、 transferFrom () 和 safe Transfer From () 等方法。
以及 Transfer () 和 Approval () 等事件。
簡而言之, ERC -721標準為以太坊上的獨特資產提供了一種機制,確保了每個資產的獨特性和所有權,並允許它們被驗證、交易和管理。 ERC -721作為非同質化代幣的標準,在數字藝術和收藏品領域取得了爆炸性的成功。 ERC -721重要的是定義了
然而,儘管它為 NFT 應用帶來了許多著名的項目,但仍然存在一些局限性,如它們不能作為代理操作,或與其他鏈上資產進行直接關聯。為了解決這些問題,社區提出了一系列擴展和新標準,其中最具代表性的是 EIP3664 和 EIP3525 。
ERC -3664
早在 2021 年5月, DRepublic 團隊提出了 EIP -3664這一 NFT 屬性擴展協議。該提案通過一種巧妙的方式,解決了主流 NFT 標準如 ERC -721或 ERC -1155在屬性表現力不足、 NFT 之間難以融合以及屬性存儲中心化等局限性。
具體來說, EIP -3664不需要修改現有的 ERC -721和 ERC -1155標準。它通過在 NFT 的鑄造( mint )方法中使用I ERC 721 Receiver 或I ERC 1155 Receiver 接口的回調函數為 NFT 動態添加屬性。或者通過重寫鑄造的方式也可。使用該協議,一個 NFT 可以無限制地附加任意多個屬性。
在 EIP -3664中,所有屬性都實現了I ERC 3664接口。基礎屬性包含 ID 、名稱、符號、 URI 地址、餘額等幾個基本字段,用於描述 NFT 的元數據。通過 EIP -3664, NFT 的屬性擴展變得更加靈活和可定制。它為 NFT 的屬性功能提供了一種標準化的實現方式,並且與現有的 NFT 生態系統無縫集成。
ERC -3525
EIP -3525則引入了半同質化代幣( SFT ),它可以看作是介於可替代代幣( FT )和不可替代代幣(NFT )之間的資產。與NFT 相似, SFT 代幣可以從一個錢包地址完整地轉移到另一個地址。但與 FT 相似, SFT 允許在不同代幣之間只轉移部分的價值。例如,可以僅轉移土地的部分"使用年限"到另一塊土地上。無疑, SFT 在定制性上超越了 FT ,在效率上超越了NFT 。
ERC3525 允許構建多層級的 SFT 結構,類似於俄羅斯套娃,從而實現更複雜的虛擬世界,並定義不同層級之間的交互規則。通過使用 ERC3525 , NFT 可以搭載任意的數字貨幣。這意味著可以在 NFT 中嵌入具有經濟價值的代幣,實現更豐富的功能和交互方式。例如,一個 SFT 可以包含一個攜帶價值的 NFT ,而 NFT 中又可以嵌套其他代幣。通過 ERC3525 ,開發者可以通過智能合約定義 SFT 的規則和邏輯,為其定制特定的行為規則和交易規則。這些特性使得 ERC3525 成為 NFT 領域的重要標準之一,為開發者和項目方提供了更多創造性的空間。
二、 ERC -6551
介紹
為了增強 NFT 的拓展性和實用性, ERC -6551 提案旨在為每個 NFT 賦予與以太坊用戶相同的權益。這意味著, NFT 不僅可以持有資產,還可以記錄交易歷史,從而極大地提高了其應用範圍。在這一提案下, NFT 的持有者能夠為其 NFT 創建一個專屬的名為 TBA ( Token Bond Account , 代幣綁定賬戶)的合約錢包,進行鏈上的各種操作。這是通過定義一個統一的註冊表------ Registry 來實現的。這個註冊表專門為所有的 NFT 分配獨特且固定的智能合約賬戶地址,並確保該賬戶的控制權完全在 NFT 的持有者手中。值得注意的是,這一提案與現有的 ERC -721或 1155 標準完全兼容,無需進行任何修改,同時也適應了大部分支持以太坊賬戶的基礎設施。
這一創新為 NFT 提供了與以太坊賬戶相同的功能,為 NFT 開闢了眾多新的應用場景。例如,現實中的複雜資產,如角色扮演遊戲中的角色、由多種部件組成的汽車、多元化的投資組合,甚至是打卡會員卡等,都可以通過這一提案被轉化為 NFT 形式。此外,這一提案不僅與所有現有的鏈上資產標準相容,還為未來的新資產標準提供了擴展可能性。
正如上文所述, ERC -6551允許為每個 NFT 創建一個專用於鏈上交互的錢包。這種錢包與我們在 Metamask 等平台上常用的錢包有所不同,它實際上是一個合約錢包,也就是部署在以太坊網絡上的智能合約。在深入探討其實現方式之前,我們首先來了解這兩種錢包之間的主要區別。
合約賬戶
以太坊賬戶是一個實體,它擁有以太幣( ETH )的餘額,並可以在以太坊網絡上發送交易。賬戶可以由用戶控制,也可以作為智能合約進行部署。
在以太坊中賬戶擁有 4 個字段:
- nonce : 一個計數器,用來顯示外部賬戶發送的交易數量或合約賬戶創建的合約數量。 每個賬戶只能執行具有一個給定隨機數的一筆交易,以防範重放攻擊,重放攻擊指多次廣播和重複執行已簽署的交易。
- balance : 餘額記賬模型,這個地址擁有的 Wei 數量。 Wei 是以太幣的計數單位。
- codeHash : 該哈希表示以太坊虛擬機 ( EVM ) 上的賬戶代碼。 合約賬戶具有編程的代碼片段,可以執行不同的操作。 如果賬戶收到消息調用,則執行此 EVM 代碼。 與其他賬戶字段不同,不能更改。 所有代碼片段都被保存在狀態數據庫的相應哈希下,供後續檢索。 此哈希值稱為 codeHash 。 對於外部所有的賬戶, codeHash 字段是空字符串的哈希。
- storageRoot : 存儲哈希。 Merkle Patricia trie 根節點的 2 56 位哈希已編碼了賬戶的存儲內容( 2 56 位整數值映射),並編碼為 Trie ,作為來自 2 56 的 Keccak 2 56 位哈希的映射位整數鍵,用於 RLP 編碼的 2 56 位整數值。 此 Trie 對此賬戶存儲內容的哈希進行編碼,默認情況下為空。
以太坊賬戶一共分為 2 種:外部賬戶(用戶管理私鑰)、合約賬戶。
- 外部賬戶 ( Externally Owned Accounts , EOA ):由私鑰控制,其 codeHash 為空。這類賬戶可以發送和接收加密貨幣,並與智能合約交互。我們常用的 Metamask 錢包就屬於此。
- 合約賬戶 ( Contract Account , CA ):沒有私鑰,其 codeHash 非空。它是部署在以太坊網絡上的智能合約,通過外部賬戶與該合約交互來控制合約錢包。
在 CA 中有標準合約錢包,比如 ERC4337 賬戶抽象錢包,和 Native AA 類型的錢包,比如 ZkSync 和 StarkNet 等鏈其中沒有傳統交易,所有賬戶都是合約賬戶。目前錢包存在所有權和簽名權的問題,比如私鑰難以保護,用戶失去私鑰後就會失去所有資產,以及存在簽名算法少權限高問題,還有手續費只可以通過 ETH 付款的單幣種結算問題。
在不改變共識協議層的前提下,可以幫助以太坊向著賬戶抽象的方向前進, ERC4337 可以通過智能合約來實現賬戶抽象的升級,將原來整個交易的發起至其被包含到整個區塊鏈之中的過程進行了更新改變,引入了 UserOperation ,描述代表用戶發送的事務的結構, Bundler 會對這些內存池中的交易進行打包,降低用戶的交易成本,多簽的場景更加完整,去實現社交恢復等功能的升級。
實現
在 ERC -6551標準下, NFT 的持有者可以通過與 Register Contract 交互,在以太坊網絡或其他支持 EVM 的區塊鏈上部署一個新的智能合約,即 TBA 。 TBA 的所有權屬於 NFT 的持有者,且會隨 NFT 的轉移而變更。只有 NFT 的持有者才能控制這個 TBA 。 TBA 的代碼,即其規則,來源於實現合約 ( Implementation Contract )的調用。
以下圖解展示了 ERC -6551的工作原理:假設一個用戶是 NFT 的持有者,其 User A ccount 擁有 Contract A 的#123和 Contract B 的#456兩個 NFT 。 User Account 與無許可註冊表即註冊合約 ( Register Contract )交互,輸入 NFT 信息和實現合約的地址,從而創建 TBA 。當 User A ccount 在調用註冊合約時,輸入 Token #123的 NFT 信息和 Implementation A ( 0x321 …)的地址,合約錢包 Account A ( 0x123 …)將被創建。其所有權屬於 NFT Token #123的持有者,其功能和規則來源於 Implementation A 的規定。當 User Account 再次調用註冊合約並更改輸入內容時,會生成另一個 TBA 。但是對於特定的 NFT 和實現合約,只能存在一個獨一無二的對應的 TBA 。
TBA 的創建與行為完全依賴於註冊合約和實現合約。這些合約中的規則決定了 TBA 的特性和功能。 EIP -6551為這些合約提供了代碼模板。我們將在後續部分深入探討這些模板。然而,這些模板並不是唯一的選擇,它們的代碼決定了 TBA 的部署方式和功能實現。這為開發者提供了廣泛的擴展可能性。例如,註冊合約可以設定哪些 NFT 有資格使用該註冊合約進行註冊。而實現合約可以定義 TBA 的功能和規則,如設定 TBA 的每日交易限額或指定其可持有的資產類型。
實現合約 ( Implementation Contract )
通過註冊合約創建的所有 TBA 都可以選擇他們希望為該賬戶使用的實現合約 。實現合約記錄了智能合約賬戶的功能與規則。它至少實現合約必須提供以下功能:
executeCall (): 用於執行與外部合約交互的任意智能合約函數的函數。例如,要在與 NFT 綁定的賬戶中銷售包含的資產,您可能需要調用 Uniswap 合約中的函數。 exe
- cuteCall ()允許您代表智能合約賬戶進行該函數調用,從而讓您能夠買賣/交換任何您想要的資產。
- token (): 一個只讀的視圖函數,返回擁有此與令牌綁定的賬戶的 NFT 的標識符。它返回鏈 ID ( NFT 是否在主網絡、 Polygon 、 Optimism 等), NFT 合約地址和 NFT 令牌 ID 。
- owner (): 返回控制此與令牌綁定賬戶的 NFT 的所有者的地址。按照上面的例子,這將是 User Account 的地址。
- nonce (): 返回此智能合約錢包的當前 nonce 。每個成功的交易都會將 nonce 增加1,初始值為0。
最後,雖然不是一個函數調用,但與令牌綁定賬戶的實現合約必須具有一個 receive ()函數,以便能夠直接接收原生資產(如 ETH )到其地址。
註冊合約 ( Register Contract )
下面是利用 Solidity 語言編寫的 Registry 智能合約:
這個代碼可以表明,在為某個 NFT 創建賬戶需要的參數包括 implementation () 執行合約地址、 chainId () 目標鏈的 id 、 token Contract () 對應 NFT 所属合約、 token Id () 對應 NFT 所属 id 、混淆值 salt 。根據 Fast Dapp 的 Demo 創建一個 NFT 賬戶僅需要輸入 NFT 合約地址與 ID ,其餘字段均自動生成,步驟是比較簡單的。
ERC -6551提案是一個全新 Token 標準,屬於一種對原 NFT 標準的顛覆升級, ERC -6551使用了一個與現有 ERC -721 NFT 兼容的無需許可的註冊表。 這個註冊表是一個智能合約,作為 TBA s 的工廠和目錄。 任何人都可以通過調用註冊表上的函數並支付少量費用為任何 ERC -721代幣創建一個 TBA 。註冊表的智能合約具有兩個函數:
- createAccount ():為給定的 ERC -721 NFT 和特定實現部署一個新的與 token 綁定的賬戶。
- account ():一個只讀的視圖函數,返回給定 ERC -721 NFT 的與 token 綁定賬戶的地址,給出其實現。
潛在的應用
自從 Azuki 事件之後,單一靜態圖像的 NFT 的吸引力已大大降低,導致許多頂級項目的價值下滑。然而,具有高度互動性和可組合性的 NFT 可能是市場復甦的關鍵。從區塊鏈遊戲、音樂、 DID 到元宇宙,這些領域都充滿了無盡的潛力。
NFT 不僅僅是資產;它們還擁有自己的鏈上身份和容器屬性,能夠與去中心化應用( Dapps )進行交互。這意味著所有與 NFT 的互動都會直接記錄在 NFT 本身,而不是其持有者的賬戶。此外,由於 NFT 基於智能合約,它們的行為和互動可以通過合約規則進行定義和控制,提供了靈活性和安全性。
ERC -6551協議在 NFT 領域中帶來了革命性的變化,將焦點從用戶錢包轉移到了 NFT 本身,為交易、遊戲、追溯和治理等提供了新的可能性。隨著 NFT 的進一步發展,這一協議將引領我們進入一個更加個性化、互動和有意義的數字時代。
考慮以下四個潛在的應用方向:
- 資產打包: NFT 可以作為資產容器,允許在單一 NFT 中打包和交易多個資產。例如,一個音樂專輯 NFT 可能包含多首歌曲 NFT ,或一個藝術集 NFT 可能包含多幅藝術品 NFT 。這不僅使收藏更加系統化,還可以在交易時減少 Gas 費用。
- 投資組合: NFT 可以作為資產管理工具,允許用戶在一個 TBA 中存放和管理多種 Token 。此外, NFT 持有者還可以授權第三方管理者進行資產交易,並在智能合約中明確定義管理者的權限,確保資產的安全性。
- NFT 身份管理: NFT 可以記錄其在鏈上的所有活動,使其成為一個真正的鏈上身份。用戶可以使用單一的 ENS 錢包代表自己,並使用不同的 TBA 代表在不同社群或應用中的角色。
- 模塊化 NFT :主 NFT 可以生成 TBA ,用於存儲其組件 NFT 。例如,在遊戲中,角色 NFT 可能配備各種裝備 NFT 。這不僅使元宇宙的實現變得更加可能,還可以與 AI 結合,創建更加逼真的 NPC 角色。
總之, NFT 的未來充滿了無限的可能性。從資產管理到身份驗證,再到模塊化的遊戲設計,它們都將在數字世界中發揮關鍵作用。