執行合約
您可以使用區塊鏈 App 產生器查詢已部署的權杖或帳戶 / 識別代理主機,或呼叫狀態變更的合約功能。
編譯專案之後,您可以使用部署 / 執行表單中的執行頁籤來查詢或呼叫函數。延伸會讀取選取的合約 ABI、顯示可用功能、將參數編碼,以及透過適用於所選環境的傳輸傳送要求。對於組合的專案,請在嘗試狀態變更權杖作業之前,先部署並啟用權杖和帳戶代理主機。
- 開啟合約檢視。
- 選取 Hardhat 專案,然後開啟部署 / 執行。
- 選取執行頁籤。
- 如果表單包含專案選取器,請選擇擁有合約的專案及其編譯物件。
您必須完成下列欄位以選取目標與函數,才能執行呼叫。
- 記號:您要使用其 ABI 的已編譯記號合約。
- 呼叫目標:選取記號以呼叫記號代理主機,或選取帳戶 / 識別以呼叫配對的帳戶代理主機。選取記號作為記號行為的呼叫目標,例如餘額、探勘、傳輸、組態以及資產類別作業。選取帳戶 / 身分識別以作為伴隨帳戶合約的身分識別、權限或原則功能。
- 目標 ABI:用於列出和編碼函式的 ABI。產生的清單會鎖定配對的帳戶 ABI;否則請手動選取一個。
- toAddress:為所選目標建置的代理主機位址。請勿輸入協助程式程式庫或實行位址。
- 環境:建置代理主機的環境。
- 函數:查詢或呼叫的 ABI 函數。此清單包含函數來源,以協助區分繼承的功能。
執行路徑
擴充功能會根據您選取的環境來選擇或限制可用的模式。
| 環境和 API 模式 | 查詢行為 | 呼叫行為 | 必要的簽署者資訊 |
|---|---|---|---|
| 使用 JSON-RPC Hardhat 本機節點或其他 EVM | 使用選取的本機私密金鑰作為 from 來呼叫節點。
|
直接透過 JSON-RPC 簽署和廣播。 | 設定的來電者帳戶或手動輸入 32 位元組的私密金鑰。 |
| 使用 JSON-RPC API Oracle Blockchain Platform Besu | 使用選取的公事包服務帳戶位址作為 from 來呼叫 Oracle Blockchain Platform JSON-RPC 端點。
|
建立交易、要求公事包服務簽章,然後透過 Oracle Blockchain Platform JSON-RPC 進行廣播。 | 公事包服務簽署 URL、帳戶 JSON、授權權杖以及選取的公事包帳戶。 |
| 使用 REST rpc-proxy API 的 Oracle Blockchain Platform Besu | 張貼至 Oracle Blockchain Platform 查詢 API。 | 張貼至 Oracle Blockchain Platform 交易 API。 | 寄件人地址;選擇性地設定氣體與收貨等候設定。未在此模式中輸入本機私密金鑰或公事包服務簽署者。 |
REST rpc-proxy 模式僅適用於 Oracle Blockchain Platform Besu 環境。REST 呼叫會使用環境的 RPC URL 主機、認證權杖及 TLS 設定值。其他 EVM 和本機 Hardhat 環境則使用 JSON-RPC 與本機簽署。
查詢函數
針對讀取呼叫使用查詢,或根據目前的鏈結狀態模擬函數。
- 選取目標、環境、函數和參數。
- 設定所選執行路徑所需的呼叫者或公事包資訊。
- 選取查詢。
- 複查輸出欄位。解碼成功時,JSON-RPC 輸出包括原始呼叫結果和解碼的 ABI 結果。REST 輸出包含 API 回應。
查詢會使用呼叫要求;它們不會廣播交易或保存狀態。如果選取的功能條件、呼叫者權限或提供的參數對目前的合約狀態無效,查詢仍然可以回復。
呼叫函數
- 選取目標、環境、函數和參數。
- 設定必要的簽署方法。
- 針對其他 EVM 或硬體本機節點,選取已設定的呼叫者帳戶或輸入授權的私密金鑰。
- 對於 Oracle Blockchain Platform Wallet Service ,請提供簽署 URL、帳戶 JSON、授權權杖,然後選取公事包帳戶。
- 對於 REST rpc-proxy ,請輸入「寄件者地址」,並在需要時輸入燃氣限制和接收等待設定值。
- 選取呼叫。
- 等待結果產生輸出。成功的 JSON-RPC 和公事包服務呼叫包括交易雜湊、區塊編號、使用的氣體、寄件者、目標以及接收狀態。
請輸入參數
選取參數旁的 … 按鈕,開啟參數編輯器。它會顯示 ABI 參數名稱、巢狀特性、類型和輸入欄位。選取編輯器的套用動作以產生 Execute 函數將使用的 JSON 參數陣列。
參數的傳送順序與所選函數之 ABI 輸入的順序相同。
| 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 所顯示的每個元件。實際的欄位會因合約版本而異,因此請使用參數編輯器中顯示的特性,而不是從不同的記號專案複製元組形狀。
公事包服務輸入格式
若為 Oracle Blockchain Platform JSON-RPC 模式,請輸入公事包服務帳戶作為 JSON 陣列。每個項目都必須有一個位址,而且可以包含一個公事包 ID,如下列範例所示。
[
{
"address": "0x1111111111111111111111111111111111111111",
"walletId": "0x1111111111111111111111111111111111111111"
}
]在公事包帳戶中選取其中一個已剖析的帳戶。查詢會使用其位址作為 from;呼叫會要求公事包服務簽署該帳戶。公事包服務授權權杖未儲存在表單的已儲存草稿中。
儲存並重複使用輸入
選取儲存輸入以保留專案目前的非機密「執行」選項和 JSON 參數。選取清除已儲存的輸入以移除已儲存的表單狀態。在呼叫之前重新檢查代理主機位址、選取的函數和參數;已儲存的輸入不會證明目標仍部署在目前選取的環境中。
疑難排解
| 條件 | 解決方式 |
|---|---|
| 升級之後,新增的方法不會列在執行頁面的 ABI 清單中 | 更新 Blockchain App Builder 資訊清單檔案 (generated.manifest.json) 以變更 contractClassName 和 contractRelativePath 以指向新升級的合約。
|
| 找不到 ABI 函數 | 編譯專案並確認選取的權杖 / 帳戶使用者自建物件存在。對於沒有資訊清單的帳戶目標,請手動選取正確的帳戶 ABI。 |
| 目標地址沒有合約代碼 | 檢查選取的環境,然後輸入建置的代理主機位址,而非協助程式程式庫或實行位址。 |
| 無效的參數 JSON | 使用 … 編輯器重新產生引數陣列。確定陣列和物件使用具有雙引號特性名稱的有效 JSON。 |
| 必須選取公事包服務帳戶 | 輸入有效的帳戶 JSON 陣列,然後選取公事包帳戶。 |
| REST rpc-proxy API 需要 Oracle Blockchain Platform 環境 | 使用僅主機的 RPC URL 切換至 Oracle Blockchain Platform Besu 環境,或使用其他 EVM/Hardhat 的 JSON-RPC。 |
| 未授權的呼叫者或解碼的自訂錯誤 | 請檢查選取的呼叫者 / 公事包帳戶、目標代理主機、作用中治理狀態、角色 / 原則先決條件以及 ABI 參數。 |
| 查詢或呼叫仍然無法使用 | 完成所選 API 模式的必要目標、環境、函數以及簽署者欄位。 |