发行 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 示例仓库。