Skip to main content

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 编码后的结果。