合约的基本形式

一个智能合约是 C++ 中的一个类(class),必须继承于 mychain::Contract,其构造函数与析构函数由编译器生成,不得改写。

编写智能合约所需的数据结构和 API 均位于 mychain 命名空间中,方便起见,推荐使用 using namespace mychain;

示例:

#include <mychainlib/contract.h>
using namespace mychain;

CONTRACT_VERSION(0);
class hello: public Contract {
    //...
};

合约版本号

每个合约都有一个版本号,以32位无符号整数表示。在合约代码中使用宏 CONTRACT_VERSION 来定义这个版本号。如果合约代码中没有显式地定义版本号,那么默认版本号为0。

合约升级时,新合约的版本号不能低于旧合约的版本号(可以相等),否则更新合约的交易会失败,错误码为 10206。这样是为了防止用户不慎用旧的合约替换链上的新合约。

某些特殊情况下,例如合约回滚时,您可能希望强行用旧合约替换新合约。此时可以在交易信息中指定扩展字段 EXTENSION_DOWNGRADE_CONTRACT 来关闭合约升级时的版本号检查。交易扩展字段的编号是 5,值可以是任意内容,例如空字符串。交易扩展字段的具体设置方法请参见相应的客户端 SDK 文档