以太坊ERC1155协议分析及代码测试
【本文目标】 待补充。
【前置条件】 待补充。
solidity
interface ICryptoItems {
// Events
event Transfer(uint256 indexed _itemId, address indexed _from, address indexed _to, uint256 _value);
event Approval(uint256 indexed _itemId, address indexed _owner, address indexed _spender, uint256 _value);
// Required Functions
function transfer(uint256[] _itemId, address[] _to, uint256[] _value) external returns (bool success);
function transferFrom(uint256[] _itemId, address[] _from, address[] _to, uint256[] _value) external returns (bool success);
function approve(uint256[] _itemId, address[] _spender, uint256[] _value) external returns (bool success);
function increaseApproval(uint256[] _itemId, address[] _spender, uint256[] _addedValue) external returns (bool success);
function decreaseApproval(uint256[] _itemId, address[] _spender, uint256[] _subtractedValue) external returns (bool success);
// Required View Functions
function totalSupply(uint256 _itemId) external view returns (uint256);
function balanceOf(uint256 _itemId, address _owner) external view returns (uint256);
function allowance(uint256 _itemId, address _owner, address _spender) external view returns (uint256);
// Optional View Functions
function name(uint256 _itemId) external view returns (string);
function symbol(uint256 _itemId) external view returns (string);
function decimals(uint256 _itemId) external view returns (uint8);
// Optional Functions for Non-Fungible Items
function ownerOf(uint256 _itemId) external view returns (address);
function itemURI(uint256 _itemId) external view returns (string);
function itemByIndex(uint256 _itemId, uint256 _index) external view returns (uint256);
function itemOfOwnerByIndex(uint256 _itemId, address _owner, uint256 _index) external view returns (uint256);
}
address[] _to
批量转账 uint256[] _itemId
资产。地址和资产数组的长度要一致,以便一一对应。
必须同时触发 Transfer
事件。_itemId[]
从一个或多个地址 _from[]
转移到指定的地址 _to[]
。地址和资产数组的长度要一致,以便一一对应。
必须触发 Transfer
事件。address[] _spender
转移批量资产 uint256[] _itemId
(使用transferFrom)。地址和资产数组的长度要一致,以便一一对应。
必须触发Approval事件。降低一个或多个资产的授权量而不需要重置为0.地址和资产数组的长度要一致,以便一一对应。 必须触发Approval事件。
返回每个itemId资产对应的标识符,简称,本函数可选的。
address _owner
授予消费账号 address _spender
对资产 uint256 _itemId
的授权量。_itemId
对应的管理账号;
本函数是可选的。_itemId
资产的独特统一资源标识符[ a distinct Uniform Resource Identifier (URI) ]
本函数是可选的。_itemId
的 _index
位置的?
本函数是可选的。address _owner
下的资产 _itemId
的索引 uint256 _index
的?
本函数是可选的。在同一合同中将Fungible和Non-Fungible Items混合在一起的示例策略是在uint256 _itemID参数的前128位中传递item ID ,然后使用底部128位用于您希望传递给合同的任何额外数据。 非同质化资产可以同使用基于索引的智能合约/项目数据集的附件进行交互。 可以使用基于索引的标识将非同质化支持与智能合约/项目数据集进行交互。因此,访问混合数据合约中的特定资产集以及该集合中的特定NFT,_itemID可以切分成。 在合约代码内部,可以使用uint128(~0)提取访问单个NFT所需的两个数据,并将相同的掩码移位128。
uint256 baseToken = 12345 << 128;
uint128 index = 50;
balanceOf(baseToken, msg.sender); // 获取基础通证的余额;
balanceOf(baseToken + index, msg.sender); // 获取非同质化通证索引对应的余额。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!