运行合同

您可以使用区块链应用程序构建器查询已部署的令牌或账户/身份代理,或者调用状态更改的合同函数。

编译项目后,您可以使用部署/执行表单中的执行选项卡来查询或调用函数。扩展可读取所选合同 ABI,显示可用功能,对参数进行编码,并通过适合所选环境的传输发送请求。对于组合项目,请在尝试状态更改令牌操作之前部署并激活令牌和账户代理。

“Execute(执行)”工具从编译的构件中搜索函数。对于组合项目,生成的清单还标识所选令牌的兼容账户/身份 ABI。访问“执行”工具:
  1. 打开合同视图。
  2. 选择 Hardhat 项目,然后打开部署/执行。
  3. 选择 Execute 选项卡。
  4. 如果表单包含项目选择器,请选择拥有合同及其编译的对象的项目。

在运行调用之前,必须填写以下字段才能选择目标和函数。

  • 令牌:要使用其 ABI 的已编译令牌合同。
  • 调用目标:选择令牌以调用令牌代理,或选择账户/身份以调用配对的账户代理。选择 Token(令牌)作为令牌行为的调用目标,例如余额、铸造、转移、配置和资产类别操作。为配套账户合同的身份、权限或策略功能选择账户/身份。
  • 目标 ABI:用于列出和编码函数的 ABI。生成的清单会锁定配对的帐户 ABI;否则,请手动选择一个。
  • toAddress:所选目标的已部署代理地址。请勿输入辅助磁带库或实施地址。
  • 环境:部署该代理的环境。
  • 函数:用于查询或调用的 ABI 函数。该列表包含有助于区分继承功能的函数源。

执行路径

该扩展根据您选择的环境选择或限制可用模式。

环境和 API 模式 查询行为 调用行为 必需的签署人信息
使用 JSON-RPC Hardhat Local Node 或 Other EVM 使用所选本地私钥 from 调用节点。 通过 JSON-RPC 直接签名和广播。 配置的呼叫者账户或手动输入的 32 字节私钥。
带有 JSON-RPC API 的 Oracle Blockchain Platform Besu 使用所选 Wallet 服务账户地址 from 调用 Oracle Blockchain Platform JSON-RPC 端点。 构建事务处理,请求 wallet 服务签名,然后通过 Oracle Blockchain Platform JSON-RPC 广播它。 Wallet 服务签名 URL、账户 JSON、授权令牌和所选 wallet 账户。
Oracle Blockchain Platform Besu ,带有 REST rpc-proxy API 发布到 Oracle Blockchain Platform 查询 API。 发布到 Oracle Blockchain Platform 事务处理 API。 发件人地址;可选气体和接收等待设置。在此模式下未输入本地私有密钥或 Wallet 服务签名者。

REST rpc-proxy 模式仅适用于 Oracle Blockchain Platform Besu 环境。环境的 RPC URL 主机、验证令牌和 TLS 设置用于 REST 调用。其他 EVM 和本地 Hardhat 环境使用带有本地签名的 JSON-RPC。

查询函数

使用 Query 进行读取调用或根据当前链状态模拟函数。

  1. 选择目标、环境、函数和参数。
  2. 配置所选执行路径所需的调用方或 wallet 信息。
  3. 选择查询。
  4. 查看输出字段。JSON-RPC 输出包括原始调用结果,并在解码成功时解码 ABI 结果。REST 输出包括 API 响应。

查询使用呼叫请求;它们不广播事务处理或持久状态。如果所选函数的条件、调用方权限或提供的参数对当前合同状态无效,查询仍可以恢复。

调用函数

将调用用于更改状态的事务处理。
  1. 选择目标、环境、函数和参数。
  2. 配置所需的签名方法。
    • 对于 Other EVM 或 Hardhat Local Node(硬性本地节点),选择配置的调用方帐户或输入授权的私钥。
    • 对于 Oracle Blockchain Platform Wallet Service ,提供签名 URL、账户 JSON、授权令牌,然后选择 wallet 账户。
    • 对于 REST rpc-proxy ,输入发件人地址,并在需要时输入气体限制和接收等待设置。
  3. 选择调用。
  4. 等待输出中的结果。成功的 JSON-RPC 和 Wallet 服务调用包括事务处理散列、块编号、已用气体、发件人、目标和接收状态。
传输可以接受调用,但仍会在链上恢复调用。将除 1 之外的接收状态或错误响应视为失败的操作,并检查输出中的已解码自定义错误或 RPC 错误详细信息。

请输入参数

选择 Parameters(参数)旁边的 … 按钮以打开参数编辑器。它显示 ABI 参数名称、嵌套属性、类型和输入字段。选择编辑器的应用操作以生成将由 Execute 函数使用的 JSON 参数数组。

参数以与所选函数的 ABI 输入相同的顺序作为一个 JSON 数组发送。

ABI 输入 可粘贴参数 JSON
没有输入 []
balanceOf(address) ["0x1111111111111111111111111111111111111111"]
transfer(address,uint256) ["0x1111111111111111111111111111111111111111", "1000"]
单个元组 [{"fieldA":"value","fieldB":"1000"}]
独立 tuple[] 输入 [[{"userAddress":"0x1111111111111111111111111111111111111111","approvalSequence":1}]]

对于整数 ABI 字段,输入十进制字符串(例如 "1000"),以避免 JavaScript 数字精度丢失。将 JSON true 或 false 用于布尔值。地址必须是有效的 0x 地址。

对于元组和元组数组输入,使用其属性名称与 ABI 组件名称匹配的命名 JSON 对象。请勿在参数编辑器中使用 Solidity 位置元组语法。

例如,当编辑器显示包含 userAddress 和 approvalSequence 组件的 approverDetails tuple[] 属性时,请将以下值粘贴到该属性的 JSON 编辑器中:

[
  {
    "userAddress": "0x1111111111111111111111111111111111111111",
    "approvalSequence": 1
  }
]

参数编辑器将该值放置在外部函数参数数组中。对于完整元组,输入所选 ABI 显示的每个组件。确切字段因合同版本而异,因此请使用参数编辑器中显示的属性,而不是从其他令牌项目复制元组配置。

Wallet 服务输入格式

对于 Oracle Blockchain Platform JSON-RPC 模式,以 JSON 数组形式输入 wallet 服务账户。每个条目都必须有一个地址,并且可以包含 Wallet ID,如以下示例所示。

[
  {
    "address": "0x1111111111111111111111111111111111111111",
    "walletId": "0x1111111111111111111111111111111111111111"
  }
]

在 Wallet 账户中选择一个已解析的账户。查询将地址用作 from;调用将要求 wallet 服务为该账户签名。wallet 服务授权令牌未存储在表单的已保存草稿中。

保存并重用输入

选择保存输入可保留项目的当前非秘密执行选择和参数 JSON。选择清除已保存输入可删除已保存表单状态。在调用之前重新检查代理地址、所选函数和参数;保存的输入不会证明目标仍部署在当前所选环境中。

故障排除

条件 解决方法
升级后,新添加的方法不会列在 Execute(执行)页的 ABI 列表中 更新 Blockchain App Builder 清单文件 (generated.manifest.json) 以将 contractClassName 和 contractRelativePath 更改为指向新升级的合同。
未找到 ABI 功能 编译项目并确认所选令牌/帐户对象存在。对于没有清单的账户目标,请手动选择正确的账户 ABI。
目标地址没有合同代码 检查选定的环境并输入已部署的代理地址,而不是帮助程序库或实施地址。
参数 JSON 无效 使用 … 编辑器重新生成参数数组。确保数组和对象使用带双引号的属性名的有效 JSON。
需要选择 Wallet 服务账户 输入有效的帐户 JSON 数组并选择 Wallet 帐户。
REST rpc-proxy API 需要 Oracle Blockchain Platform 环境 切换到具有仅主机 RPC URL 的 Oracle Blockchain Platform Besu 环境,或者将 JSON-RPC 用于其他 EVM/Hardhat。
未授权的呼叫者或解码的自定义错误 验证所选调用方/钱包账户、目标代理、活动监管状态、角色/策略先决条件和 ABI 参数。
查询或调用仍然不可用 为所选 API 模式填写所需的目标、环境、功能和签署者字段。