玩過較多 NFT 項目的朋友有可能會問:合成類的項目不是有很多嗎?比如收集碎片( 採用 ERC-1155 或者 ERC-20 標準 )燒燬換 NFT( 採用 ERC-721 標準 )的,也有反方向把 NFT 打碎換碎片的...... 總之,這有什麼新鮮的?的確,這個概念很早就被提出來了,也還有其他變種玩法,如 James 本人也寫過 NFT 角色可以喝變身藥水( ERC-1155 )來進化成另外的 NFT 的合約。那麼 ERC-404 的創新性,具體體現在哪裏?要回答這個問題,我們還是往後退一步,先看一下 NFT 的市場流動性。
1.什麼是流動性?
簡單來說,流動性好的市場,資產交易頻繁,總成交筆數多、總成交金額大。反之,流動性差的市場,總成交筆數少、總成交金額小。影響流動性的因素有很多,例如話題因素,熱門項目肯定比無名項目流動性好;例如技術因素,合約簡潔,交易體驗流暢、Gas 低,對交易數量、乃至項目流動性的影響也是正向的。
我們來比較一下 Token( FT )和 NFT 的流動性在技術層面的區別:交易數量:Token 數量可以是整數,也可以是小數,大多數 Token 支持到小數點後 18 位,換言之,你基本上可以成交任意金額或數量的 Token。而在 NFT 交易中,一般只能按照整數( 一個或多個 )進行買賣,對應所需的金額也會更多。
交易價格( 市場公允價 ):獲取 Token 的價格很容易,通過中心化 / 去中心化交易所或 defi 協議等都能輕鬆詢價。而 NFT 交易中,每一個都是獨一無二的,每一個的價格可能都不盡相同,無法輕易形成一個市場公允價。
交易轉移:Token 的轉移很方便,一次性可以轉移任何數量。而在 NFT 交易中,則需要把轉移的 ID 在交易中明確寫出來,花費的 Gas 隨着交易數量,呈線性增長。
2. 如何增強 NFT 的流動性
最根治的方法是打不過就加入,即把 NFT 變成 Token,“ 碎片化 ” 應運而生。在市面上已經流通的 NFT 來說,它們本身沒有打碎的功能,需要一個 “ 池化合約 ” 來完成這個任務。即用戶可以把 NFT 質押給池化合約,來換取該 NFT 系列對應的 Token。在 NFT 碎片化爲 Token 之後,就可以任意交易了。支付給池化合約對應數量的 Token,能換回裏面被 “ 打碎 ” 的任意 NFT。** 注意,對這個 NFT 系列來說,質押任何 ID 得到的 Token 數目都是一樣的。ID 是否具有稀有的屬性,對於池化合約無關緊要。這看起來是一個很完美的流動性解決方案,隨之而來的是一個新問題:用誰的池化合約?
3. ERC-404 合約的創新與價值
ERC-404 不採用這些外圍的機制,而是把 “ 池子 ” 建立在合約內部:
ERC-404 同時兼容 ERC-20 和 ERC-721,使用這個合約可發行了兩種資產,並且設置了一個 ERC-721 的 ID 對應多少個( #uints )ERC-20 的 Token。
增加了 _transferERC20WithERC721 方法,在轉移 Token 的同時,觸發 NFT 的轉移。
🌰 舉個栗子:假設合約設定了一個 NFT = 10 Token,在 A 賬戶向 B 賬戶轉移 10 個 Token 的同時,1 個 NFT 也隨着被轉移到 B 賬戶。
我們把在 ERC-404 合約中,發行的 Token 叫做 404 Token,發行的 NFT 叫做 404 NFT。那麼 ERC-404 具有以下性質:
404 NFT 和普通 NFT 的操作是一樣的。
404 Token 的買賣比普通的 Token 買賣多了一些操作,即轉出 Token 的同時,會轉出相應數量的 NFT。
再延伸一個例子,大家可以琢磨一下:
A 賬戶有 10 個Token、1 個 NFT。
B 賬戶有 9.9 個 Token,沒有 NFT。
當 A 賬戶轉移 0.1 個 Token 給 B 賬戶之後:
A 賬戶剩餘 9.9 個 Token,同時,失去 NFT。
B 賬戶變成 10 個Token,同時,獲得 1 個 NFT( 這個 NFT 不一定是 A 失去的,細品 )。
如何應對「 不想或無需 」同時轉移 Token 和 NFT 的場景呢?
ERC-404 還有一個核心概念是 ERC 721 TransferExempt ,即是否免除( 被 )轉移 NFT 的操作:
A 賬戶賣出 404 Token 到 #UniswapV4 需要與 NFT 同時轉移,但在這個場景裏轉移 NFT 給 uniswap 是毫無意義。