运行合同
您可以使用区块链应用程序构建器查询已部署的令牌或账户/身份代理,或者调用状态更改的合同函数。
编译项目后,您可以使用部署/执行表单中的执行选项卡来查询或调用函数。扩展可读取所选合同 ABI,显示可用功能,对参数进行编码,并通过适合所选环境的传输发送请求。对于组合项目,请在尝试状态更改令牌操作之前部署并激活令牌和账户代理。
- 打开合同视图。
- 选择 Hardhat 项目,然后打开部署/执行。
- 选择 Execute 选项卡。
- 如果表单包含项目选择器,请选择拥有合同及其编译的对象的项目。
在运行调用之前,必须填写以下字段才能选择目标和函数。
- 令牌:要使用其 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 进行读取调用或根据当前链状态模拟函数。
- 选择目标、环境、函数和参数。
- 配置所选执行路径所需的调用方或 wallet 信息。
- 选择查询。
- 查看输出字段。JSON-RPC 输出包括原始调用结果,并在解码成功时解码 ABI 结果。REST 输出包括 API 响应。
查询使用呼叫请求;它们不广播事务处理或持久状态。如果所选函数的条件、调用方权限或提供的参数对当前合同状态无效,查询仍可以恢复。
调用函数
- 选择目标、环境、函数和参数。
- 配置所需的签名方法。
- 对于 Other EVM 或 Hardhat Local Node(硬性本地节点),选择配置的调用方帐户或输入授权的私钥。
- 对于 Oracle Blockchain Platform Wallet Service ,提供签名 URL、账户 JSON、授权令牌,然后选择 wallet 账户。
- 对于 REST rpc-proxy ,输入发件人地址,并在需要时输入气体限制和接收等待设置。
- 选择调用。
- 等待输出中的结果。成功的 JSON-RPC 和 Wallet 服务调用包括事务处理散列、块编号、已用气体、发件人、目标和接收状态。
请输入参数
选择 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 模式填写所需的目标、环境、功能和签署者字段。 |