Remix

為什麼我需要有完全相同的程式碼才能從 Remix IDE 中的地址載入合約?

  • March 15, 2022

我試圖與已部署的合約進行互動,但我沒有它的程式碼。所以我找到了合約地址並嘗試從 Remix IDE 中的地址載入合約!這不可能嗎?為什麼?

您將需要合約 ABI(至少)從地址載入它。Remix(或任何其他客戶端)應該知道如何在該地址與合約互動:函式名稱、參數格式和返回值

Remix IDE 是一個程序員工具。它的主要目的是幫助你編碼、測試和調試你的智能合約。

我試圖與已部署的合約進行互動,但我沒有它的程式碼。

在這種情況下,您不是開發人員,而是外行使用者。非專家使用者不會使用 Remix 與智能合約進行交易/互動。你必須使用你的 dapp 開發者提供給你的 UI 或 API。因此,由於 Remix 不知道您的智能合約具有哪些功能或 api,因此僅擁有其地址不會幫助您與之互動。您還需要了解它的 ABI。

應用程序二進制介面為您提供公共函式介面。獲取合約 ABI。僅使用公共函式聲明基於其 ABI 構造一個簡單的合約介面,您將準備好與 Remix 中的合約進行互動。

例如,以下是來自未知合約的 ABI:

[
{
   "constant": true,
   "inputs": [
       {
           "name": "a",
           "type": "string"
       }
   ],
   "name": "check",
   "outputs": [
       {
           "name": "",
           "type": "string"
       }
   ],
   "payable": false,
   "stateMutability": "pure",
   "type": "function"
}
]

從 abi 構造的合約介面:

contract Test {
 function check(string a) public pure returns(string);
}

現在,使用實際地址載入合約Test並與合約互動。

引用自:https://ethereum.stackexchange.com/questions/71148