NEP-5合约
目的: 学习NEP5的基本概念
要点::
什么是NEP (NEO加强提案)
NEP5的细节
什么是NEP?
NEP代表NEO增强提案。NEP是一种设计文档,用于向NEO社区提供信息,或者描述NEO/流程/环境的新特性。NEP应该提供该特性的简明的技术规范和基本原理。NEP作者负责在社区内建立共识并记录不同意见。在这个 github存储库 中已经有超过10个NEPS。
对于NEO实现者而言,NEPs是跟踪其实现进度的一种简便的方法。理想情况下,每个实现维护者都会列出他们已经实现的NEPs。这将为终端用户提供一种便捷的方法,来了解给定实现或库的当前状态。
如果有人有兴趣提出一个新的NEP,那么可以先查看一下 NEP-1,然后克隆存储库并将你所提出的NEP添加到存储库中。这里有一个模板NEP。然后向这个存储库提交一个Pull-Request请求。
NEP-5介绍
NEP-5标准是一个通证标准,它表示一个通证化的智能合约。该标准可以规范在NEO区块链上发行的通证。提供一个规范的与通证进行交互的方法,可以使生态系统无需去维护一些基本操作的定义,而这些操作是使用了通证的智能合约所必需的。
在NEP-5标准中,提供了一些方法同时可以触发一个事件
方法
totalSupply
public static BigInteger totalSupply()
返回系统中部署的通证的供应总量。
name
public static string name()
返回通证的名称。例如,"MyToken"
。
每次调用此方法时,它都必须返回相同的值。
symbol
public static string symbol()
返回此合约中管理的通证的短字符串符号。例如,"MYT"
。这个符号应该是简短的 (推荐是3-8个字符),没有空格字符或换行符,并且应该限于大写的拉丁字母(即英语中使用的26个字母)。
每次调用此方法时,它都必须返回相同的值。
decimals
public static byte decimals()
返回通证使用的小数位数——例如,8
,表示将通证数量除以100,000,000
,从而得到它的用户表示。
每次调用此方法时,它都必须返回相同的值。
balanceOf
public static BigInteger balanceOf(byte[] account)
返回账户
的通证余额。
参数 account
应该是20字节长的地址。如果不是,这个方法应该抛出
异常。
如果账户
是未使用的地址,则此方法必须返回0
。
transfer
public static bool transfer(byte[] from, byte[] to, BigInteger amount)
从from
账户转数量为amount
的通证至to
账户。
参数 from
和 to
应该是20字节长的地址。如果不是,这个方法应该抛出
异常。
参数 amount
应该大于或等于 0
。如果不是,这个方法应该抛出
异常。
如果from
账户余额没有足够的通证来消费,函数必须返回false
。
如果方法执行成功,它必须触发转账
事件,并且必须返回 true
,即使数量
为0
,或者from
和to
是相同的地址。
函数应该检查from
地址是否等于合约调用者的散列值。如果是,则应处理转账;如果不是,函数应该使用SYSCALL Neo.Runtime.CheckWitness
来对转账操作进行验证。
如果to
地址是已经部署的合约,函数应该检查该合约的payable
标志,从而决定是否应该将通证转到该合约。
如果没有处理转账操作,函数应该返回false
。
事件
transfer
public static event transfer(byte[] from, byte[] to, BigInteger amount)
必须在通证转账(包括零值转账)时触发。
创建新通证的合约必须在通证创建时触发转账
事件,其中地址from
设置为null
。
销毁通证的合约必须在通证销毁时触发转账
事件,其中地址to
设置为null
。
下一步骤
现在让我们实现一个NEP-5通证!