EOS智能合约内置数据类型
松果·2020-06-30 阅读 3

EOSIO为智能合约实现了许多内置类型(Built-in Types),内置类型无需在ABI的types字段中进行描述,EOSIO的内置类型定义在eos/libraries/chain/abi_serializer.cpp的configure_built_in_types函数中


这些内置数据类型可以分为8大类:整数、浮点数、时间、名称、字符、哈希算法、密钥和签名、资产。


整数
built_in_types.emplace("bool",                      pack_unpack<uint8_t>());
built_in_types.emplace("int8",                      pack_unpack<int8_t>());
built_in_types.emplace("uint8",                     pack_unpack<uint8_t>());
built_in_types.emplace("int16",                     pack_unpack<int16_t>());
built_in_types.emplace("uint16",                    pack_unpack<uint16_t>());
built_in_types.emplace("int32",                     pack_unpack<int32_t>());
built_in_types.emplace("uint32",                    pack_unpack<uint32_t>());
built_in_types.emplace("int64",                     pack_unpack<int64_t>());
built_in_types.emplace("uint64",                    pack_unpack<uint64_t>());
built_in_types.emplace("int128",                    pack_unpack<int128_t>());
built_in_types.emplace("uint128",                   pack_unpack<uint128_t>());
built_in_types.emplace("varint32",                  pack_unpack<fc::signed_int>());
built_in_types.emplace("varuint32",                 pack_unpack<fc::unsigned_int>());

EOSIO配置了13种整数内置类型,实际是12种(bool和uint8都是uint8_t类型),如下表

内置类型 实际类型 说明
int8_t char 字符型
int16_t short 短整型
int32_t int 整型
int64_t long long 长整型
int128_t __int128 128位整型
signed_int struct 可变长度32位整型
uint8_t unsigned char 无符号字符型
uint16_t unsigned short 无符号短整型
uint32_t unsigned int 无符号整型
uint64_t unsigned long long 无符号长整型
uint128_t unsigned __int128 128位无符号整型
unsigned_int struct 可变长度32位无符号整型

signed_int和unsigned_int是可变长度类型(varint | varuint),使用尽可能少的字节序列化32位整型和无符号整型。


浮点数
built_in_types.emplace("float32",                   pack_unpack<float>());
built_in_types.emplace("float64",                   pack_unpack<double>());
built_in_types.emplace("float128",                  pack_unpack<float128_t>());

EOSIO配置了3种浮点数内置类型,如下表

内置类型 实际类型 说明
float float 单精度浮点数(32位)
double double 双精度浮点数(64位)
float128_t struct 128位浮点数

时间
built_in_types.emplace("time_point",                pack_unpack<fc::time_point>());
built_in_types.emplace("time_point_sec",            pack_unpack<fc::time_point_sec>());
built_in_types.emplace("block_timestamp_type",      pack_unpack<block_timestamp_type>());

EOSIO配置了3种时间内置类型,如下表

内置类型 实际类型 说明
time_point class 时间点(微秒)
time_point_sec class 时间点(秒)
block_timestamp_type class 区块时间戳

名称
built_in_types.emplace("name",                      pack_unpack<name>());

EOSIO配置了1种名称内置类型,如下表

内置类型 实际类型 说明
name struct 名称

字符
built_in_types.emplace("bytes",                     pack_unpack<bytes>());
built_in_types.emplace("string",                    pack_unpack<string>());

EOSIO配置了2种字符内置类型,如下表

内置类型 实际类型 说明
bytes vector 字符数组
string std::string 字符串

哈希算法
built_in_types.emplace("checksum160",               pack_unpack<checksum160_type>());
built_in_types.emplace("checksu**56",               pack_unpack<checksu**56_type>());
built_in_types.emplace("checksum512",               pack_unpack<checksum512_type>());

EOSIO配置了3种哈希算法内置类型,如下表

内置类型 实际类型 说明
checksum160_type class ripemd160 RIPEMD160算法
checksu**56_type class sha256 SHA256算法
checksum512_type class sha512 SHA512算法

密钥和签名
built_in_types.emplace("public_key",                pack_unpack_deadline<public_key_type>());
built_in_types.emplace("signature",                 pack_unpack_deadline<signature_type>());

EOSIO配置了2种密钥和签名内置类型,如下表

内置类型 实际类型 说明
public_key_type class public_key 公钥
signature_type class signature 签名

资产
built_in_types.emplace("symbol",                    pack_unpack<symbol>());
built_in_types.emplace("symbol_code",               pack_unpack<symbol_code>());
built_in_types.emplace("asset",                     pack_unpack<asset>());
built_in_types.emplace("extended_asset",            pack_unpack<extended_asset>());

EOSIO配置了4种资产内置类型,如下表

内置类型 实际类型 说明
symbol class 代币符号
symbol_code struct 代币符号数值
asset struct 资产
extended_asset struct 带合约名的资产
EOS智能合约EOS智能合约内置数据类型
本文仅代表作者观点,不代表本站立场,若侵犯了您的合法权益,请点击联系我们。