本地执行为了查询或者执行合约计算,仅在合约链节点本地进行执行,而不会进行广播参与共识。本地执行的交易参数与真实参与共识的交易参数完全相同。
与真实交易相比,本地执行交易会更快、效率更高,使用此接口要明确知道此交易类似于模拟合约执行,其执行结果不会参与共识、也不会最终进入存储。
本地执行普通交易
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)
})
})
文档内容是否对您有帮助?