LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > eosio.token合约关键数据类型

eosio.token合约关键数据类型

2020-06-20 松果 来源:区块链网络

上一篇文章介绍了eosio.token合约,这个系统合约有几个比较重要的数据类型,这些类型是定义在eosio.cdt中的。

这里先简单介绍一下name、symbol、asset类型,它们都位于eosio.cdt的eosiolib库下的core分组中。

name.hpp

name用来表示EOS智能合约编程中的名称,如EOS的账户名。

name类有一个uint64_t类型的成员:value,它是name的核心

uint64_t value = 0;

name的内部逻辑,比如操作符重载也是value进行的;

uint64_t是基本类型(unsigned long long),更便于系统处理,且可作为Multi-Index表的主键;

使用string构造name时,传入的字符串,也会通过char_to_value函数转换成value。

name的命名规则

name类的一个构造函数定义了name的命名规则


可以得出如下命名规则

最多13个字符允许的字符有:abcdefghijklmnopqrstuvwxyz.12345第13个字符不能是"j"之后的字符

这里是name类型的命名规则,注意和账户名(account_name)的命名规则区分,EOS账户名的命名规则在系统合约eosio.system中确定

最多12个字符允许的字符有:abcdefghijklmnopqrstuvwxyz.12345普通账户名固定为12个字符短账户名可小于12个字符,通过竞拍获得短账户名账户可以创建带有"."符号的账户名,短账户名作为后缀,可以小于12个字符

_n操作符

name.hpp还重载了 _n 操作符,可以使用 "myname"_n 这种形式获取name对象, _n 操作符可以使用字符串构造一个name对象。


symbol.hpp

symbol的意思是“符号”,常见的数字货币简称如BTC、ETH、EOS等都是“symbol”。

symbol.hpp定义了3个符号相关的类:symbol_code、symbol、extended_symbol。

symbol_code

symbol_code类用于定义一个符号,和上面介绍的name类似,symbol_code的核心也是一个uint64_t类型的value成员变量。

可以使用uint64_t类型的value,或一个string构造symbol_code,使用string构造symbol_code时,会进行一些检查


可以得到symbol的命名规则

最多7个字符允许的字符有:ABCDEFGHIJKLMNOPQRSTUVWXYZ

可以通过is_valid()函数检查symbol名称是否可用。

symbol

symbol类在symbol_code的基础上增加了精度(precision),表示(代币)可以精确到的小数点后的位数。

通常使用一个字符串和一个精度来构造symbol:

symbol("EOS", 4);

或使用symbol_code和精度构造symbol:

symbol(symbol_code("KEY"), 4);

asset.hpp

asset的意思是“资产”,EOS转账时转出的就是asset,asset可以理解为一定数量的symbol。

构造asset的方法如下

asset(5000000, symbol("EOS", 4));

注意,这里的5000000是带上精度的,即这笔asset是500.0000个EOS。

在eosio.token合约源码中有这样的用法

auto to = to_acnts.find( value.symbol.code().raw() );

这里的value是一个asset类型的对象,asset类型持有两个成员变量

int64_t amount = 0;symbol symbol;

这个表达式的每部分的类型如下

表达式类型valueassetvalue.symbolsymbolvalue.symbol.code()symbol_codevalue.symbol.code().raw()uint64_t

最终返回的uint64_t的值被用作查询accounts表的主键。

—-

编译者/作者:松果

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...