初始化合约

如果您想在部署合约时执行特定的初始化操作,可以在合约中专门实现一个方法来实现初始化逻辑,并且在部署合约时显式地调用该合约方法。智能合约平台本身在部署合约时不会执行默认初始化。

该方法的使用示例如下:

#include<mychainlib/contract.h>
using namespace mychain;
class DemoContract : public Contract {
public:
  INTERFACE void DemoInit(int32_t a, std::string b) {
    //do something...
  }
};
INTERFACE_EXPORT(DemoContract,(DemoInit))

在部署该合约时,可以通过SDK指定DemoInit方法作为初始化方法并指定参数a和b的值。DemoInit方法也是普通的合约接口,您可以进行调用。

  • 如果部署时DemoInit执行出现了异常,那么交易回执的内容是异常信息。

  • 如果部署时DemoInit执行成功,那么交易回执的内容是该合约字节码。所以请不要定义DemoInit的返回值,因为你无法获取到返回值。

注意:当您每次发起交易调用合约方法时都会构造一个新的合约实例,进而调用该合约的构造函数。因此不要把部署时的初始化操作实现在合约构造函数中,否则初始化操作会被重复执行。