ink合约-psp37

psp是ink合约生态参考erc标准制定的,psp37协议类似于erc1155。本文使用开源框架openbrush-contracts来讲解,该框架汇总并实现了ink中的主要应用协议,减少了自行开发的风险,同时减少了开发复杂度。

1. 概述

psp37中,包含有4大扩展,可根据需要选择:

  1. psp37Batch:批处理转账
  2. psp37Burnable:销毁token
  3. psp37Enumerable:提高合约中token的可访问性
  4. psp37Metadata:用于存储元数据,如symbol、name、uri等
  5. psp37Mintable:生成新的token

2. 协议说明

1. psp37基础方法

  1. psp37::totalSupply(id)
    作用:
    获取指定id的总数量
    参数说明:
    id:指定id

  2. psp37::balanceOf(ownerAccountId, id)
    作用:
    获取账户A指定id的数量
    参数说明:
    ownerAccountId:账户A
    id:指定id

  3. psp37::allowance(ownerAccountId, operatorAccountId, id)
    作用:
    查看账户A授权给账户B指定id的可用数额还有多少
    参数说明:
    ownerAccountId:账户A
    operatorAccountId:账户B
    id:指定id

  4. psp37::transfer(toAccountId, id, balance, data)
    作用:
    当前caller账户,将指定id的部分数额交易给账户A
    参数说明:
    toAccountId:账户A
    id:指定id
    balance:要转账的数额
    data:附属信息,如备注等内容

  5. psp37::transferFrom(fromAccountId, toAccountId, id, balance, data)
    作用:
    账户A转账指定id的部分余额给账户B
    参数说明:
    fromAccountId:账户A
    toAccountId:账户B
    id:指定id
    balance:要转账的余额
    data:附属信息,如备注等内容
    备注:该行为只能给合约管理员使用

  6. psp37::approve(operatorAccountId, id, balance)
    作用:
    caller账户授权给账户A的指定id数额
    参数说明:
    operatorAccountId:账户A
    id:指定id
    balance:授权数额

2. psp37Batch扩展方法

  1. psp37Batch::batchTransfer(toAccountId, idsAndBalance, data)
    作用:
    caller账户批量转账id集合对应的数额给账户A
    参数说明:
    toAccountId:账户A
    idsAndBalance:批量集合要转账的id及对应的数额
    data:附属信息,如备注等内容

  2. psp37Batch::batchTransferFrom(fromAccountId, toAccountId, idsAndBalance, data)
    作用:
    账户A批量转账id集合对应的数额给账户B
    参数说明:
    fromAccountId:账户A
    toAccountId:账户B
    idsAndBalance:批量集合要转账的id及对应的数额
    data:附属信息,如备注等内容

3. psp37Burnable扩展方法

  1. psp37Burnable::burn(fromAccountId, idsAndBalance)
    作用:
    销毁账户A的集合id的对应指定余额
    参数说明:
    fromAccountId:账户A
    idsAndBalance:批量集合要销毁的id及对应的数额

4. psp37Enumerable扩展方法

  1. psp37Enumerable::ownersTokenByIndex(accountId, index)
    作用:
    返回账户A的索引号X拥有的id
    参数说明:
    ccountId: 账户A
    index:索引号X

  2. psp37Enumerable::tokenByIndex(index)
    作用:
    返回索引号X拥有的id
    参数说明:
    index:索引号X

说明:按我理解,一个账户下的索引不能相同;而不同账户的索引,有可能相同

5. psp37Metadata扩展方法

  1. psp37Metadata::getAttribute(id,key)
    作用:
    根据id和key,获取参数
    参数说明:
    id:键1
    key:键2

6. psp37Mintable扩展方法

  1. psp37Mintable::mint(accountId,idsAndBalance)
    作用:
    账户A为集合id铸造指定的数额
    参数说明:
    accountId:账户A
    idsAndBalance:批量集合要铸造的id及对应的数额

总结

本文编辑完毕

参考

[1] openbrush-contracts合约开源框架
[2] openbrush-contracts文档
[3] EIP1155: Multi Token Standard

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信