一、背景介绍
2024年春节前夕,一个名叫 Pandora 的项目突然引起了市场的关注。2月2日部署合约后短短两周时间,其总市值就超过了1.5亿美元。
在其出色的造富效应之后,市场上也涌现了一大批仿盘,这时候笔者才发现Pandora并不是一个普普通通的代币,其背后的团队提出了一个新的代币标准,即ERC-404。
二、ERC-404是什么
我们可以在项目团队的Github上看到对ERC-404的原始介绍:
ERC404 is an experimental, mixed ERC20 / ERC721 implementation with native liquidity and fractionalization. While these two standards are not designed to be mixed, this implementation strives to do so in as robust a manner as possible while minimizing tradeoffs.
ERC-404 为一种结合了 ERC-20 和 ERC-721 标准的代币。它既可以提供ERC-20的流动性,又做到了将NFT碎片化的处理。
- ERC-404的新特性
在之前的文章中,笔者已经分析过ERC-20和ERC-721标准的具体内容(juejin.cn/post/723878... ,ERC-20是同质化代币,白话来说就是币和币之间没有差异,比如我们钱包里有若干10块钱,购买物品时抽出哪一张10块钱进行支付本质上没有差异。而ERC-721是非同质化代币,每一枚代币都有其特定的意义,常用它来做数字头像、数字徽章、数字艺术品等等。两者之间有着天然的差别,那么ERC-404是如何结合二者,创造出新的特性呢?
结合项目团队在Github上开源的ERC-404代码,我们不难看到它带来的新特性。
首先它的特别之处在于用户mint一个Token的时候,这个用户的钱包地址中同时获得了一个对应的NFT.
js
function _mint(address to) internal virtual {
if (to == address(0)) {
revert InvalidRecipient();
}
unchecked {
minted++;
}
uint256 id = minted;
if (_ownerOf[id] != address(0)) {
revert AlreadyExists();
}
_ownerOf[id] = to;
_owned[to].push(id);
_ownedIndex[id] = _owned[to].length - 1;
emit Transfer(address(0), to, id);
}
如果此后,用户将其持有的Token进行转移,比如A钱包转移给B钱包,那么此转移过程伴随着A钱包里NFT的销毁,和B钱包里对应个数的NFT的mint。转移的Token数量可以不是整数,但创造和销毁的NFT数量是取整的。其内部方法如下:
js
function _transfer(
address from,
address to,
uint256 amount
) internal returns (bool) {
uint256 unit = _getUnit();
uint256 balanceBeforeSender = balanceOf[from];
uint256 balanceBeforeReceiver = balanceOf[to];
balanceOf[from] -= amount;
unchecked {
balanceOf[to] += amount;
}
// Skip burn for certain addresses to save gas
if (!whitelist[from]) {
uint256 tokens_to_burn = (balanceBeforeSender / unit) -
(balanceOf[from] / unit);
for (uint256 i = 0; i < tokens_to_burn; i++) {
_burn(from);
}
}
// Skip minting for certain addresses to save gas
if (!whitelist[to]) {
uint256 tokens_to_mint = (balanceOf[to] / unit) -
(balanceBeforeReceiver / unit);
for (uint256 i = 0; i < tokens_to_mint; i++) {
_mint(to);
}
}
emit ERC20Transfer(from, to, amount);
return true;
}
可以看到,在完成一次代币转移时,无需用户做任何额外操作,就可以实现同质化代币和非同质化代币的同时变化。
细想一下,ERC-404代币标准的创新之处在于它巧妙地把ERC-20的代币数量和ERC-721的tokenId从数据结构上做了关联。随着每次代币的产生、转移、销毁,也就是代码中对应的mint方法,transfer方法和burn方法中,下面这三个映射关系都同步变化,实现了token数量和tokenId的持有者信息的同步联动。
js
/// @dev Owner of id in native representation
mapping(uint256 => address) internal _ownerOf;
/// @dev Array of owned ids in native representation
mapping(address => uint256[]) internal _owned;
/// @dev Tracks indices for the _owned mapping
mapping(uint256 => uint256) internal _ownedIndex;
2. 新的可能性
NFT交易缺乏流动性问题一直是困扰其发展的一大难题,之前也出现过一些解决NFT流动性问题的方案,但从简便适用、应用推广等方面都有所欠缺。ERC-404的出现恰好可以解决NFT流动性的问题,也为NFT碎片化合集的玩法打开了新思路。
业内称ERC-404标准是一次创新性的图币结合的实践,依托于此的Pandora在市场上的表现令人眼前一亮。目前Pandora既可以以NFT的形式在OpenSea和BLUR等NFT交易市场上进行交易,也可以以ERC-20代币的形式在Uniswap上灵活交易。
举个例子,用户A在Uniswap上购买了1个Pandora,除了收到代币之外,用户A还会收到一个新铸造出的Pandora NFT Replicant,如果这个NFT Replicant恰好有更高的稀有属性,用户A可以选择在NFT交易市场以更高的价格出售此NFT Replicant。出售就意味着把这个token id的NFT转移给购买者。
另一种情况,如果这个用户A获得的NFT Replicant并不是他想要的,他可以通过继续在Uniswap上进行交易或者通过_transfer()转账的方式将这1个Pandora转移到其他钱包,假设用户A选择了从他的a钱包转移1个Pandora给自己的另一个钱包b,那么此时a钱包减掉1个Pandora,同时销毁这个token id的NFT Replicant,钱包b收到1个Pandora,同时新铸造出来另一个token id的NFT Replicant。由此在忽略gas费用的情况下,用户A可以通过不断进行转账操作,来获得他想要的NFT Replicant,这也是一种"开盲盒"式获得稀有NFT资产的玩法。
三、风险问题
正如其项目团队所说,目前ERC-404仍是试验性质的代币标准,虽然 ERC-404 使用了"ERC"标准架构,但事实在 Ethereum Improvement Proposals 中并没有 404 的 ERC 标准。在上线之处,各个合约审计团队给出的合约审计结果也都有风险提示。如果后面得不到Ethereum 基金会和V神的认可,ERC-404的发展前景将会受到严重影响。
除此之外,在应用ERC-404进行交易时,也会发现它仍有些欠缺之处。比如当拥有多个代币时,无法在Uniswap上指定出售哪一个代币,如果出售后销毁的是高稀有度的NFT Replicant,那将不是用户期望发生的。另外也有一些玩家和开发者指出,通过transfer来刷NFT稀有度,将很容易被恶意操控,如果链上的NFT稀有度算法是公开的,那么交易者可以选择不在链上铸造某个id的 NFT,或者故意操作失败导致回滚交易。在 Pandora 频繁的销毁与铸造生成 NFT 中,稀有度判定算法或仍是可预测的,并没有从根本上解决关于稀有度被操纵的问题。
乐观来看,ERC-404仍处于早期阶段,其发展和完善仍然值得我们共同期待。
四、参考资料
- ERC-404的1.0版本:github.com/Pandora-Lab...
- ERC-404的2.0版本:github.com/Pandora-Lab...
- ERC-404 赛道探讨:创新实验还是短期炒作?foresightnews.pro/article/det...
- 以太坊新试验代币标准 ERC-404:图币结合新探索 存在哪些风险? www.wublock123.com/index.php?m...