ERC1155 与 ERC721 的 Gas 对比
分析
ERC1155通过支持批量操作和更高效的数据结构,显著降低了交易的 Gas 成本,因此通常比 ERC721 “更便宜”。
- 核心区别:批量处理 (Batch Operations)
-
ERC721 (单次操作): 如果你想把10个不同的NFT转给同一个人,你需要发起 10次 独立的 transferFrom
交易。每次交易都需要支付一次基础的交易费(21,000 Gas),外加执行合约操作的费用。
-
ERC1155 (批量操作): 如果你想做同样的事情(转移10个不同的NFT),你只需要调用 1次 safeBatchTransferFrom
函数。这意味着你只需要支付一次基础交易费,并且在同一次交易内完成所有代币的转移,极大地节省了Gas。
- 更高效的数据存储
- ERC721:
通常每个代币ID(tokenId)都需要一个独立的存储槽来记录其所有者(ownerOf)。如果你要发行1000个NFT,就需要进行大量的独立存储写入操作。
-
ERC1155: 它采用了一种更集约的数据结构,通常使用一个映射(mapping)来记录 (所有者地址, 代币ID) -> 余额。
-
对于非同质化代币 (NFT),余额就是1。
-
对于同质化代币 (FT),余额可以是任意数量。
这种结构在某些场景下(例如,一个地址拥有多种但每种少量的代币)更节省存储空间,从而降低了Gas成本。
-
- 合约部署的灵活性和成本
-
ERC721: 一个ERC721合约通常代表一个单一的NFT系列(例如,一个CryptoPunks系列)。如果你想创建另一个完全不同的NFT系列,你就需要部署一个新的ERC721合约。
-
ERC1155: 一个ERC1155合约可以同时管理无数种不同类型的代币,包括非同质化代币(游戏道具、门票)和同质化代币(游戏金币)。你只需要一个合约,就可以管理游戏里所有的资产。这大大降低了项目方的合约部署和维护成本。
测试
文件位置:
src/patterns/nfts.sol
test/patterns/nfts.t.sol测试结果:
forge test --gas-report --mt test_nfts_ -vvv --optimize
总结
-
交易成本: 批量转移功能大幅降低了单次转移多个代币的Gas费。
-
存储成本:ERC1155将所有权和余额统一在一个结构里,逻辑更简洁。
-
部署成本: 单一合约可管理多类代币,避免了为每个系列部署新合约的开销。
当然,如果你的场景非常简单,比如永远只需要转移单个NFT,那么单次交易的Gas费差异可能不大。但只要涉及到多个代币的操作,ERC1155的经济优势就变得非常明显。
对应源码
本文配套代码固定到提交
8960383;Gas 数据会随编译器、优化器参数和 EVM 版本变化。