top of page

ERC6551: 當NFT碰上合約錢包

已更新:2023年9月28日

作者:Ash Li, Noah Ho


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()、setApprovalForAll()、isApprovedForAll()、transferFrom()safeTransferFrom() 等方法。

  • 以及 Transfer()Approval() 等事件。

簡而言之,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)方法中使用IERC721Receiver或IERC1155Receiver接口的回調函數為NFT動態添加屬性。或者通過重寫鑄造的方式也可。使用該協議,一個NFT可以無限制地附加任意多個屬性。


在EIP-3664中,所有屬性都實現了IERC3664接口。基礎屬性包含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 根節點的 256 位哈希已編碼了帳戶的儲存內容(256 位整數值映射),並編碼為 Trie,作為來自 256 的 Keccak 256 位哈希的映射位整數鍵,用於 RLP 編碼的 256 位整數值。 此 Trie 對此帳戶儲存內容的哈希進行編碼,默認情況下為空。

以太坊帳戶一共分為2種:外部帳戶(用戶管理私鑰)、合約帳戶。

  1. 外部帳戶 (Externally Owned Accounts, EOA):由私鑰控制,其codeHash為空。這類帳戶可以發送和接收加密貨幣,並與智能合約交互。我們常用的Metamask錢包就屬於此。

  2. 合約帳戶 (Contract Account, CA):沒有私鑰,其codeHash非空。它是部署在以太坊網絡上的智能合約,通過外部帳戶與該合約交互來控制合約錢包。


以太坊帳戶一共分為2種:外部帳戶(用戶管理私鑰)、合約帳戶。

  1. 外部帳戶 (Externally Owned Accounts, EOA):由私鑰控制,其codeHash為空。這類帳戶可以發送和接收加密貨幣,並與智能合約交互。我們常用的Metamask錢包就屬於此。

  2. 合約帳戶 (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 Account擁有Contract A的#123和Contract B的#456兩個NFT。User Account與無許可註冊表即註冊合約 (Register Contract)交互,輸入NFT信息和實現合約的地址,從而創建TBA。當User Account在調用註冊合約時,輸入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合約中的函數。executeCall允許您代表智能合約帳戶進行該函數調用,從而讓您能夠買賣/交換任何您想要的資產。

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、tokenContract對應NFT所屬合約、tokenId對應NFT所屬id、混淆值salt。根據Fast Dapp 的Demo創建一個NFT帳戶僅需要輸入NFT合約地址與ID,其餘欄位均自動生成,步驟是比較簡單的。


ERC-6551提案是一個全新Token標準,屬於一種對原NFT標準的顛覆升級,ERC-6551使用了一個與現有ERC-721 NFT兼容的無需許可的註冊表。該註冊表是一個智能合約,作為TBAs的工廠和目錄。任何人都可以通過調用註冊表上的函數並支付少量費用為任何ERC-721代幣創建一個TBA。註冊表的智能合約具有兩個函數:


createAccount():為給定的ERC-721 NFT和特定實現部署一個新的與token綁定的帳戶。

account():一個只讀的視圖函數,返回給定ERC-721 NFT的與token綁定帳戶的地址,給出其實現。


潛在的應用

自Azuki事件後,單一靜態圖像的NFT吸引力大減,導致多數頂尖項目的價值下滑。然而,具有高度互動和組合性的NFT可能是市場復甦的關鍵。從鏈上遊戲、音樂、DID到元宇宙,這些領域都充滿了無窮的潛力。


NFT不僅僅是一個資產,它還具有自己的鏈上身份和容器屬性,能夠與去中心化應用(Dapp)進行交互。這意味著所有與NFT的互動都會直接記錄在NFT上,而不是其持有者的帳戶。此外,由於NFT基於智能合約,它們的行為和交互可以通過合約規則進行定義和控制,使得NFT更具靈活性和安全性。


ERC-6551協議在NFT領域中帶來了革命性的變化,它將焦點從用戶錢包轉移到了NFT本身,為交易、遊戲、追溯和治理等提供了新的可能性。隨著NFT的進一步發展,這一協議將帶領我們進入一個更加個性化、互動和有意義的數字時代。


考慮以下四個潛在的應用方向:

  1. 資產打包:NFT可以用作資產容器,允許在單一NFT中打包和交易多個資產。例如,一個音樂專輯NFT可以包含多首歌曲,或一個藝術集NFT可以包含多幅畫作。這不僅使得收藏更具系統性,還可以在交易時節省Gas Fee。

  2. 投資組合:NFT可以作為一個資產管理工具,允許用戶在一個TBA中存放和管理多種Token。此外,NFT持有者還可以授權第三方管理員進行資產交易,並在智能合約中明確定義管理員的權限,確保資產的安全性。

  3. NFT身份管理:NFT可以記錄其在鏈上的所有活動,使其成為一個真正的鏈上身份。用戶可以使用單一的ENS錢包代表自己,並使用不同的TBA代表在不同社群或應用中的角色。

  4. 模組化NFT:主NFT可以生成TBA,用於存儲其組件NFT。例如,在遊戲中,角色NFT可以裝配不同的裝備NFT。這不僅使元宇宙的實現變得更加可能,還可以與AI結合,創建更加真實的NPC角色。

總之,NFT的未來充滿了無限的可能性,從資產管理到身份認證,再到模組化的遊戲設計,它都將在數字世界中扮演重要的角色。

58 次查看0 則留言

Comments


bottom of page