跳到主要内容

发行 ERC-1155 多代币合约

ERC-1155 让一个合约容纳多种代币——可替代或不可替代——支持高效批处理。OXN 上模式与以太坊一致。

标准 ERC-1155

contracts/GameItems.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract GameItems is ERC1155, Ownable {
uint256 public constant SWORD = 0;
uint256 public constant SHIELD = 1;
uint256 public constant POTION = 2;

constructor(address initialOwner)
ERC1155("https://game.example/api/item/{id}.json")
Ownable(initialOwner)
{}

function mint(address to, uint256 id, uint256 amount) external onlyOwner {
_mint(to, id, amount, "");
}

function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts)
external onlyOwner
{
_mintBatch(to, ids, amounts, "");
}
}

gasLimit: 4_000_000n 部署。

每玩家私密状态(游戏示例)

有隐藏物品栏或游戏内属性的游戏可以用 OXN 的机密性:

mapping(address => mapping(uint256 => uint256)) private hiddenStats;

function updateStats(uint256 itemId, uint256 newValue) external {
require(balanceOf(msg.sender, itemId) > 0, "must own item");
hiddenStats[msg.sender][itemId] = newValue; // 加密存储
}

function getMyStats(uint256 itemId) external view returns (uint256) {
return hiddenStats[msg.sender][itemId]; // 仅签名查询
}

玩家看到自己的物品属性;对手无法在链下检查。

机密批量转账

标准 safeBatchTransferFrom 在 OXN 上自动加密参数(ids 与 amounts)。观察者看到发生了两个地址间的转账,但看不到哪些物品或数量。

完整示例

可运行的 game-items 项目见 OXN 示例仓库

下一步