玩过较多 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 是毫无意义。