使用 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 适合批量、多资产、游戏场景,但与 DeFi 生态兼容性差。
-
ERC6909 适合多币种、DeFi 兼容场景,接口更像 ERC20,没有回调。
对应源码
本文配套代码固定到提交
8960383;Gas 数据会随编译器、优化器参数和 EVM 版本变化。