最流行的ERC721模板比较
除了最近的宏观经济事件导致市场略微看跌外,我认为我们可以确信我们仍处于 NFT 牛市的中间。
在这轮牛市中,每周都有数百个项目推出,其中大部分都是类似的智能合约。由于在这个领域几乎所有的东西都是开源的,因此很容易实施被证明有效的解决方案。
然而,这导致项目复制粘贴当前流行的少数NFT智能合约模板,而没有真正理解每个实施中存在的不同的优缺点。
为了在一定程度上消除这种混乱,有必要研究一下最流行的模板,检查每种模板的优缺点,并尝试得出一些关于不同类型项目的最佳合约的结论。
ERC721和ERC721Enumerable
NFT起源于EIP-721不可替代代币标准提议。这个几乎每个人都使用的提案的OG实现是由OpenZeppelin完成的。
ERC721提供的功能很快被证明是不够的,许多项目开始采用ERC721Enumerable扩展。该扩展通过在合约中添加所有代币ID的可枚举性,以及检查帐户拥有的所有代币ID的方法,来增强原始ERC721的功能。
然而,这就是我们开始遇到麻烦的地方。ERC721Enumerable的问题是,它做了很多不必要的事情,导致了gas成本的上升,给社区造成了数百万美元的损失。
ERC721Enumerable可以优化读取函数,但不利于写入函数。
ERC721Enumerable使用了大量的冗余存储,这不仅提高了代币的铸造成本,而且也提高了代币的转账成本。
ERC721Enumerable.sol
这些是状态修改函数,在每次更新或转账发生时执行。
我们可以清楚地看到ERC721Enumerable不是一个理想的选择,不应该再被大多数项目使用。
幸运的是,一些聪明的开发人员已经注意到了这些效率低下的问题,并设计了解决方案。
优化的 ERC721Enumerable
一篇不错的文章:https://nftchance.medium.com/
建议大家阅读整篇文章,熟悉解决方案,这个合约的基本前提是,它把优化的重心进行翻转,把写入函数优化为读取函数的成本。这通常很好,因为如果读取函数在链下被调用 ,那么它们不会花费我们的钱。背后的基本原理ERC721Enumerable
是提供对以下三个函数的访问:totalSupply
、tokenByIndex
和tokenofOwnerByIndex
。
我们可以忍受这些函数的低效率和无限循环,因为它们几乎总是在链下被调用。
这个实现首先用一个数组替换E