本文介绍 C++ 合约支持的数据类型,主要分为 基本类型 和 合约平台内置数据类型。
基本类型(POD)
支持 C++ 标准中的所有基本类型,包括:
int8_t
uint8_t
int16_t
uint16_t
int32_t
uint32_t
int64_t
uint64_t
bool
以上基本类型的四则运算与逻辑运算(布尔运算、比较符等)与 C++ 标准基本一致。不一致行为如下:
除零错。如果除法中除数是0,则合约会异常终止。
浮点数。仅支持32位和64位的标量浮点数。参见WASM官网。
合约平台内置数据类型
合约平台定义了一些内置的数据类型,下面是编写合约过程比较常见的数据类型:
ACCOUNT_STATUS
示例:
namespace mychain { //账户状态 enum ACCOUNT_STATUS : uint32_t { NORMAL = 0, //正常状态 FREEZE, //冻结状态 RECOVERING //恢复状态 };
Identity
Identity
是合约或账户的唯一标识,内容为32个字节,其定义如下:class Identity { public: Identity(const std::string& id) ;//从字符串构造Identity,16进制或非16进制字符串均可 Identity(const Identity& rl) ; //拷贝构造函数 Identity(Identity&& rl); //移动构造函数 Identity& operator=(const Identity& rl) ; //赋值运算符 Identity& operator=(Identity&& rl); //赋值运算符 inline bool operator<(const Identity& x) ; //小于运算 inline bool operator==(const Identity& x) ; //等于运算 inline bool operator!=(const Identity& x); //不等于运算 inline const std::string& get_data() ; //获取其内容 inline std::string to_hex(bool upppercase = false); //其16进制字符串形式 }
示例:
//16进制字符串构造Identity对象 Identity id("2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"); //不带前缀,合法 Identity id2 = "0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"; //带0x前缀,也合法 //判断Identity对象地址是否相等 if(id == "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") { //xxxxx } if(id == id2 ) { //xxx } //非法的id会造成合约异常终止 Identity id3 = "abcdefg"; //获取其data if(id.get_data() == Hex2Bin("2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824")) { //xxxxx } //获取其16进制格式字符串 if(id.to_hex() == "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") { //xxx }
文档内容是否对您有帮助?