第二十课 以太坊ERC1155协议分析及代码测试

2019-12-27  本文已影响0人  笔名辉哥

1,摘要

【本文目标】
待补充。

【前置条件】
待补充。

2,协议分析

2.1 协议描述函数列表:

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);
}

2.2 函数说明:

transfer

transferFrom

approve

increaseApproval

decreaseApproval

降低一个或多个资产的授权量而不需要重置为0.地址和资产数组的长度要一致,以便一一对应。
必须触发Approval事件。

name

symbol

返回每个itemId资产对应的标识符,简称,本函数可选的。

decimals

totalSupply

balanceOf

allowance

ownerOf

itemURI

itemByIndex

itemOfOwnerByIndex

Non-Fungible Items

在同一合同中将Fungible和Non-Fungible Items混合在一起的示例策略是在uint256 _itemID参数的前128位中传递item ID ,然后使用底部128位用于您希望传递给合同的任何额外数据。
非同质化资产可以同使用基于索引的智能合约/项目数据集的附件进行交互。
可以使用基于索引的标识将非同质化支持与智能合约/项目数据集进行交互。因此,访问混合数据合约中的特定资产集以及该集合中的特定NFT,_itemID可以切分成<uint128: base item id><uint128: index of NFT>。
在合约代码内部,可以使用uint128(~0)提取访问单个NFT所需的两个数据,并将相同的掩码移位128。

Example of split ID bits

uint256 baseToken = 12345 << 128;
uint128 index = 50;

balanceOf(baseToken, msg.sender); // 获取基础通证的余额;
balanceOf(baseToken + index, msg.sender); // 获取非同质化通证索引对应的余额。

3,代码实现

4,智能合约测试

5, 参考

上一篇 下一篇

猜你喜欢

热点阅读