文档

合约中的数据类型

更新时间:

本文介绍 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
      }
  • 本页导读 (0)
文档反馈