深入解析ERC-6551 底層原理

撰文: @0xCygaar 翻譯:MetaCat

本文是對ERC-6551 如何使任意NFT 擁有任何類型加密資產的簡要說明。

讓我們從大多數NFT 的實際情況開始。

以太坊上的NFT 只是智能合約中的數據條目,這些條目告訴你誰擁有NFT、誰可以轉移NFT,以及NFT 的元數據是什麼樣的。以下是返回有關給定NFT 信息的函數:

獲取給定 NFT 的Owner

獲取給定 NFT 的 tokenURI

獲取給定 NFT 被 approve 的錢包地址

當你mint NFT 時,你只是設置數據條目所有者的值(錢包地址)。當你轉移NFT 時,你只是改變了所有者的值(錢包地址)。下面兩張圖是ERC721 合約中所有權設置相關代碼:

ERC721 合約中的 mint 函數

ERC721 合約中的transfer 函數

大多數NFT 合約就是這麼簡單。正如我們在上面看到的,沒有代碼能夠使這些NFT 擁有其他NFT、ETH 或ERC20 代幣。

智能合約無法更改,那麼ERC-6551 如何讓任何NFT 擁有其他資產呢?

答案是:註冊表+ 合約錢包。

智能合約錢包(CA 錢包)只是一個可以接收NFT、ERC20 或ETH 並另外執行任意交易的智能合約。這些合約錢包都有自己的地址(就像所有智能合約一樣)。

如果你不熟悉註冊表,你可以將它們視為存儲信息的單個智能合約。 ERC-6551 註冊表包含:說明哪些NFT 映射到哪些智能合約錢包的信息,它還使用代理創建智能合約錢包(了解即可並不重要)。

註冊表合約代碼?

https://vscode.blockscan.com/polygon/0x02101dfB77FDE026414827Fdc604ddAF224F0921

例如,Azuki #4567 可能映射到位於地址0x243F4E0d556EFD1006c52E85A6ddFb6748A4C0b7 的智能合約錢包。一個NFT 可以控制多個合約賬戶,但每個合約賬戶只屬於一個NFT,詳見下圖:

好了,我們現在有了一個註冊表,可以為NFT 創建錢包並將NFT 和錢包關聯在一起,這款NFT 綁定錢包現在可以作為普通錢包使用。這個錢包可以轉移ETH、購買NFT 或Swap ERC20 代幣,當然必須由NFT 所有者發起交易。

我想重申一下,這些與NFT 綁定的錢包是智能合約。它們與多簽錢包類似,必須有人調用合約上的函數才能讓錢包執行某些操作。對於ERC-6551 錢包,NFT 所有者將在錢包上調用executeCall 來啟動交易。

那麼這些NFT 綁定錢包有什麼特別之處?當控制NFT 的所有者發生變化時,錢包的控制權也同步變化。控制NFT 意味著你控制NFT 綁定錢包中的一切,NFT 將從單一資產轉變為捆綁的資產包。

TL;DR :ERC-6551 使所有NFT 能夠通過使用註冊表和智能合約錢包來擁有一個錢包。註冊表創建合約錢包並將該合約錢包關聯到NFT。合約錢包可以擁有其他資產,只有NFT 的所有者才能在此錢包上執行交易。

Total
0
Shares
Related Posts