NEP-5合约

目的: 学习NEP5的基本概念

要点::

  1. 什么是NEP (NEO加强提案)

  2. 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账户。

参数 fromto 应该是20字节长的地址。如果不是,这个方法应该抛出异常。

参数 amount 应该大于或等于 0。如果不是,这个方法应该抛出异常。

如果from账户余额没有足够的通证来消费,函数必须返回false

如果方法执行成功,它必须触发转账事件,并且必须返回 true,即使数量0,或者fromto是相同的地址。

函数应该检查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通证!