Vyper logo

yper

示例Vyper 中文文档

ERC-1155 多代币

ERC-1155 多代币标准实现,支持批量操作和动态 URI。

ERC-1155 多代币合约:在单个合约中管理多种同质化和非同质化代币,支持批量操作。

学习用途

本示例仅用于学习目的。完整合约代码较长,请参阅 源码文件

概览

ERC-1155 是一种多代币标准,允许单个合约表示任意数量的同质化和非同质化代币类型。相比分别部署 ERC-20 和 ERC-721,ERC-1155 更节省 gas 且支持批量操作。

本合约实现了:

  • 批量铸造和转账(safeBatchTransferFrom
  • 余额批量查询(balanceOfBatch
  • URI 管理(支持动态 URI)
  • 所有者权限控制和暂停功能
  • OpenSea 兼容的 namesymbol

核心结构

vyper

#pragma version >0.3.10

from ethereum.ercs import IERC165

BATCH_SIZE: constant(uint256) = 128
MAX_URI_LENGTH: constant(uint256) = 300

owner: public(address)
paused: public(bool)

name: public(String[128])
symbol: public(String[16])

# balances[id][owner] -> balance
balanceOf: public(HashMap[uint256, HashMap[address, uint256]])
# operator approvals
isApprovedForAll: public(HashMap[address, HashMap[address, bool]])

代码解析

批量操作

safeBatchTransferFrom 在单次交易中转移多种代币,显著降低多代币转账的 gas 成本。使用固定大小数组(BATCH_SIZE = 128)来限制单次批量操作的最大规模。

URI 系统

支持静态和动态两种 URI 模式。动态模式通过 uint2str 将代币 ID 转为字符串拼接到基础 URI 后,生成每个代币类型的元数据 URL。

安全检查

所有转账操作都会检查接收者是否为合约,如果是则调用 onERC1155ReceivedonERC1155BatchReceived 回调验证。