一个智能合约是 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 文档。
文档内容是否对您有帮助?