invokecontractverify 方法
调用合约的验证(Verify)方法。该方法与 invokefunction 不同, invokefunction 是通过 Application 触发器执行智能合约,而 invokecontractverify 方法是通过 Verification 触发器执行智能合约。并且可以传入 Verify 的参数(params)、签名账户列表(signers)。具体参数类型和数量取决于所调用的智能合约。
note
- 此方法用于测试你的虚拟机脚本,调用时只是在 RPC 对应的节点试运行脚本并返回结果,不会对区块链数据产生影响。
- 此方法由插件提供,需要安装 RpcServer 插件才可以调用
#
参数说明scripthash:智能合约脚本哈希。
params:传递给智能合约操作的参数。
signers: 签名账户列表,可选。
- account: 签名账户
- scopes: 签名的作用域,允许的值: FeeOnly, CalledByEntry, CustomContracts, CustomGroups, Global
- allowedcontracts: 如果 scopes 是 CustomContracts,该字段是签名生效的合约 Hash 列表
- allowedgroups: 如果 scopes 是 CustomGroups,该字段是签名生效的公钥列表。
note
你需要根据传入地址的数据类型,使用正确的字节序格式。如果数据类型为 Hash160,输入大端序 scripthash;如果数据类型为 ByteArray,则输入小端序 scripthash。
例如:
{ "type": "String", "value": "Hello"}
{ "type": "Hash160", "value": "0xf621168b1fce3a89c33a5f6bcf7e774b4657031c" }
{ "type": "ByteArray", "value": "7472616e73666572" }
#
调用示例请求正文:
部署合约如下:
{ "jsonrpc": "2.0", "method": "invokecontractverify", "params": [ "0x92f5c79b88560584a900cfec15b0e00dc4d58b54", [ ], [ { "account": "NTpqYncLsNNsMco71d9qrd5AWXdCq8YLAA", "scopes": "CalledByEntry" } ]], "id": 1}
响应正文:
{ "jsonrpc": "2.0", "id": 1, "result": { "script": "VgEMFFbIjRQK0swPKQN90Qp/AGCitShcYEBXAANAQZv2Z84MBWhlbGxvDAV3b3JsZFNB5j8YhEBXAQAMFFbIjRQK0swPKQN90Qp/AGCitShcQfgn7IxwaEA=", "state": "HALT", "gasconsumed": "1017810", "exception": null, "stack": [ { "type": "Boolean", "value": true } ] }}
响应说明:
- script:合约的调用脚本,参考 Neo 数据转换 页面,可以将脚本转为 OpCode
- state:虚拟机状态,
HALT
表示虚拟机执行成功,FAULT
表示虚拟机执行时遇到异常退出。 - gasconsumed:调用智能合约时消耗的系统手续费。
- stack:合约执行结果,其中 value 如果是字符串或 ByteArray,则是 Base64 编码后的结果。