Go-Ethereum

如何使用來自 etherscan API 的 ABI 動態載入合約數據?

  • April 11, 2021

我想從我通過 ABI 的使用者地址和 etherscan API 載入的智能合約中提取數據。

但是我將如何以程式方式將 ABI 中的所有功能添加到我的前端?

基本上,假設我想查找加密貓合約並通過 etherscan API 獲取 ABI。

但是我怎麼知道要呼叫或列出哪些函式呢?

假設我想做 etherscan 做的事情,讓你從 abi 呼叫不同的函式?

基本上工作流程:

使用者輸入地址。從 etherscan 中提取 ABI 使用 ABI 載入契約???如何使用 JS 通過 ABI 將所有功能添加到我的前端。???

如何在不知道函式名稱的情況下呼叫函式,例如 getKittyData

您可以通過 get 查詢axios,它可以ABI直接獲取:

rpcEndpoint = `...`;
addressURL = `...`;

const axios = require("axios");
const Web3 = require("web3");
var web3 = new Web3(new Web3.providers.HttpProvider(rpcEndpoint));

async function main() {
 url =
   `http://api-kovan.etherscan.io/api?module=contract&action=getabi&address=` +
   addressURL +
   `&format=raw`;
 console.log("Get request at: ", url);

 res = await axios.get(url);
 console.log(res.data);
}
main();

成功輸出:

[{ inputs: [ [Object], [Object] ],
   name: 'withdraw',
   outputs: [],
   stateMutability: 'nonpayable',
   type: 'function' },
 ...
 { inputs: [],
   name: 'withdrawable',
   outputs: [ [Object] ],
   stateMutability: 'view',
   type: 'function' } ]

輸出失敗:

Contract source code not verified

您可以使用 Etherscan API 來獲取任何經過驗證的合約的 ABI。有關使用範例,請參閱:https ://etherscan.io/apis#contracts 。

為了在您自己的應用程序中顯示可用的方法,您可以遍歷範例中的“MyContract.methods”。

希望這可以幫助。

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