本地执行接口

本地执行为了查询或者执行合约计算,仅在合约链节点本地进行执行,而不会进行广播参与共识。本地执行的交易参数与真实参与共识的交易参数完全相同。

与真实交易相比,本地执行交易会更快、效率更高,使用此接口要明确知道此交易类似于模拟合约执行,其执行结果不会参与共识、也不会最终进入存储。

本地执行普通交易

LocalTransaction 接口用于在合约链节点本地执行交易,并不广播参与共识。

请求参数

将以下参数整体封装为 object 传入:

参数 必选 类型 说明
apiName true string 目标执行交易的接口名
block_number true number 目标交易模拟执行所在区块高度。如果是本地执行合约调用,此区块高度需不低于部署合约交易所在区块的高度。
其它参数 true 待定 其他参数按照指定的 apiName 的接口按需传递,例如 CreateAccount,需要按照 CreateAccount 接口的参数传递,可参考使用示例。

示例

本地执行创建账户的交易。

chain.ctr.LocalTransaction({
  apiName: 'CreateAccount',
  block_number: 40,
  from: 'Tester001',
  to: 'Tester001' + Date.now(),
  data: {
    recover_key: '0xf5e50510a04a3f659a0e89f2063f79f8c1aed5ddaab6420ac47700020d9889dc14dae4dc9843c88d8222167095d9e6ce052e8a19cbc737c3f3cddf66409dbb0a',
    auth_key: '0xf5e50510a04a3f659a0e89f2063f79f8c1aed5ddaab6420ac47700020d9889dc14dae4dc9843c88d8222167095d9e6ce052e8a19cbc737c3f3cddf66409dbb0a',
    auth_weight: 100
  }
}, (err, data) => {
  console.log(data)
  console.log(data.receipt.log_entry)

})

本地执行合约相关交易

只需在合约相关操作方法的参数列表中增加配置参数,即可实现本地执行。

需增加的请求参数

参数 必选 类型 说明
apiName true string 目标执行交易的接口名
block_number true number 目标交易模拟执行所在区块高度。如果是本地执行合约调用,此区块高度需不低于部署合约交易所在区块的高度。

示例

本地执行合约方法调用。

myContract.new(bytecode, {
  from: 'Tester001'
}, (err, contract, data) => {
  console.log('contract deploy result:', data)
  myContract.Issue('0xc60a9d48105950a0cca07a4c6320b98c303ad42d694a634529e8e1a0a16fcdb5', 100 , {
        local: true,
        block_number: data.block_number, // 注意:如果此处使用 `data.block_number - 1` 就会调用失败,错误码为:120
        from: 'Tester001'
      }, (err, output, data) => {
        console.log('contract call data:', data)
        console.log('contract call output:', output)
      })
})