Gas 优化大师课场景与设计模式使用 ERC1155 或 ERC6909 管理多种代币

使用 ERC1155 或 ERC6909 管理多种代币

分析

ERC1155 代币的初衷就是,每个代币的行为都与 ERC20 代币类似,但只需部署一个合约。这种方法的缺点是代币与大多数 DeFi 兑换原语不兼容。ERC1155 在所有转账方法上都使用回调。如果不希望这样做,可以改用 ERC6909 。

  • ERC20:每种代币都需要单独部署一个合约(比如 USDT、DAI、UNI 都是独立的 ERC20 合约)。

  • ERC1155/6909:只需部署一个合约,就可以在里面管理多种“代币”,每种代币用一个 id 区分。每个 id 的行为和 ERC20 代币类似(有余额、可转账、可授权等)。

优点:

  • 节省部署成本(只需一个合约)。

  • 统一管理多种资产,便于批量操作。

缺点:

  • ERC1155 的转账有回调(onERC1155Received),与大多数 DeFi 协议(如 Uniswap、Aave)不兼容。

  • 生态支持度不如 ERC20。

测试

文件位置:

src/patterns/Erc20s.sol
test/patterns/Erc20s.t.sol

测试结果:

forge test --gas-report --mt test_ercs_ -vvv --optimize

使用 ERC1155 或 ERC6909 管理多种代币图示

总结

  • ERC1155 适合批量、多资产、游戏场景,但与 DeFi 生态兼容性差。

  • ERC6909 适合多币种、DeFi 兼容场景,接口更像 ERC20,没有回调。

对应源码

本文配套代码固定到提交 8960383;Gas 数据会随编译器、优化器参数和 EVM 版本变化。