AIOU Chain Docs

AIOU Chain Docs

  • Docs
  • Languages icon中文
    • English

›Smart Contract

Getting started

  • Overview
  • Quickstart

AIOU Design and Concepts

  • Account
  • Economic model

Smart Contract

  • Smart Contract Quick Start
  • AIOU Blockchain API
  • Update Contract
  • Generate Receipt in Smart Contract
  • Create IRC20 Token

Running AIOU node

  • Join AIOU Network
  • Become Servi Node

Reference

  • API
  • System Contract
  • Economic Contract
  • Token Contract
  • Gas Charge Table

AIOU Javascript SDK

  • AIOU
  • Blockchain
  • KeyPair
  • Transaction

AIOU Tech Internals

  • VM
  • Database
  • Network layer

Create IRC20 Token

IRC20

IRC20 是我们在 aiou 区块链上实现 Token 的标准。它包括除转账之外的几个实用功能, 例如冻结 Token,销毁 Token 并且可以详细配置。

token.aiou是 IRC20 的实现,所有 IRC20 Token 必须由token.aiou创建。 aiou也是根据基于内置系统合约token.aiou的 IRC20 标准实现的。

如果要自定义 Token,请参阅创建自定义 Token以获取更多详细信息。

token.aiou的接口表述如下:

//创建tokenSymbol
create(tokenSymbol, issuer, totalSupply, configJson); // string, string, number, json
issue(tokenSymbol, to, amountStr); // string, string, string
transfer(tokenSymbol, from, to, amountStr, memo); // string, string, string, string, string
transferFreeze(tokenSymbol, from, to, amountStr, unfreezeTime, memo); // string, string, string, string, number, string
destroy(tokenSymbol, from, amountStr); // string, string, string
// query interfaces
balanceOf(tokenSymbol, from); // string, string
supply(tokenSymbol); // string
totalSupply(tokenSymbol); // string

create(tokenSymbol,issuer,totalSupply,configJson)

要求权限:发行人

tokenSymbol 是特定 Token 的唯一标识符,也就是说,你不能在token.aiou合约中使用重复的 tokenSymbol 创建 Token。 它是一个长度在 2 到 16 之间的字符串,只包含字符a-z, 0-9和_.

发行人是 Token 的发行者,只有发行人才有权向任意账户发行 Token。 通常,Token 的发行者是一个帐户,但它也可以是合约。 当发行者是合约 ID 时,这意味着只有这个合约才有权调用issue方法向其他人发放 Token。 比如,Tokenmytoken的发行人是合约Contractabc,那么Contractabc就可以调用issue来发行mytoken,Contractabc 也可以调用Contractdef中的函数,因此Contractdef也有权发行mytoken。 也就是说,合约的许可可以传递给它所调用的合约,但是你需要使用系统函数blockchain.callWithAuthority而不是blockchain.call来传递发行权限给调用的另一个合约。

totalSupply 是一个 int64 整数,发行者不能发出数量超过 totalSupply 的 Token。

ConfigJson 是 Token 的配置 json 格式文件。以下是所有支持的配置属性:

{
    "decimal": 0~19之间的数字,
    "canTransfer": true/false, 如果canTransfer为false,则无法转移Token,
    "fullName": token全名的字符串
}

issue(tokenSymbol,acc,amountStr)

所需权限:tokenSymbol的发行者

发行 tokenSymbol 至acc帐户,amountStr 是发行数额的字符串,数额必须是十进制正数,比如“100”,“100.999”

transfer(tokenSymbol,accFrom,accTo,amountStr,memo)

所需权限:accFrom

使用 amountStr 和 memo 将 tokenSymbol 从accFrom转移到accTo, amount 必须是正定点十进制,memo 是此传输操作的附加字符串消息,长度不超过 512 个字节。

transferFreeze(tokenSymbol,accFrom,accTo,amountStr,unfreezeTime,memo)

所需权限:accFrom

使用 amountStr 和 memo 将 tokenSymbol 从accFrom传送到accTo,并将这部分 Token 冻结到 unfreezeTime。 unfreezeTime 是 unix 时间的纳秒数,之后 Token 将被解冻。

destroy(tokenSymbol,accFrom,amountStr)

所需权限:accFrom

在accFrom帐户中销毁 数量为 amountStr 的 Token。在销毁之后,此 Token 的供应将减少相同的数量,这意味着, 你可以通过销毁一些 Token 在现有的 totalSupply 中发出更多 Token。

balanceOf(tokenSymbol,acc)

所需权限:null

查询一个账户中的特定 Token 余额。

supply(tokenSymbol)

所需权限:null

查询特定 Token 的供应量。

totalSupply(tokenSymbol)

所需权限:null

查询特定 Token 的 totalSupply。

分步示例

在 aiou 区块链上创建一个IRC20 Token 非常简单,只是调用token.aiou合约。

下面是一个分步示例,介绍如何使用bank帐户创建 Token 并在帐户之间转移 Token,你需要首先创建帐户bank,user0,user1。

iwallet call token.aiou create '["mytoken", "bank", 21000000000, {"decimal": 8, "fullName": "token for test"}]' --account bank
iwallet call token.aiou issue  '["mytoken", "bank", "1000"]' --account bank
iwallet call token.aiou issue  '["mytoken", "user0", "100.00000001"]' --account bank
iwallet call token.aiou transfer        '["mytoken", "user0", "user1", "10", "user0 pay coffee"]' --account user0
iwallet call token.aiou transferFreeze  '["mytoken", "user1", "user0", "0.1", 1544880864601648640, "voucher"]' --account user1
iwallet call token.aiou destroy '["mytoken", "bank", "1000"]' --account bank
← Generate Receipt in Smart ContractJoin AIOU Network →
  • IRC20
    • create(tokenSymbol,issuer,totalSupply,configJson)
    • issue(tokenSymbol,acc,amountStr)
    • transfer(tokenSymbol,accFrom,accTo,amountStr,memo)
    • transferFreeze(tokenSymbol,accFrom,accTo,amountStr,unfreezeTime,memo)
    • destroy(tokenSymbol,accFrom,amountStr)
    • balanceOf(tokenSymbol,acc)
    • supply(tokenSymbol)
    • totalSupply(tokenSymbol)
  • 分步示例
AIOU Chain Docs
Community
BlogGitHubStar
Facebook Open Source
Copyright © 2021 Your Name or Your Company Name