Contract-Development

如何使用 web3 和 abi 從智能合約中獲取變數?

  • February 3, 2022

我使用 web3.js 並嘗試從智能合約中獲取變數的值。

我的程式碼是:

var contract = web3.eth.contract(abi).at(address);

其中 abi - json 數組和地址 - 有效的工作地址。

abi json對象的一部分是

{
     "constant": true,
     "inputs": [],
     "name": "weiRaised",
     "outputs": [
       {
         "name": "",
         "type": "uint256"
       }
     ],
     "payable": false,
     "type": "function"
},

當我使用此程式碼時:

console.log(contract.abi[0].abi[6].name);

我在控制台中看到“weiRaised”。

但是如果我使用

console.log(contract.abi[0].abi[6].inputs);

我看到’未定義’。

我做錯了什麼?如何從基於 abi 和 web3.js 的智能合約中獲取變數?

在控制台上列印完東西後,上帝讓我高興地睡覺=)

var contract = web3.eth.contract(abi).at(address);
async function getContractPublicVariable() {
   const weiRaised = await contract.methods.weiRaised.call().call();
}

所以這個想法是contract.methods.VARIABLENAME.call().call();

Web3.js 會自動將 ABI 函式映射到您從web3.eth.contract(abi).at(address).

這意味著您可以通過執行以下操作來訪問變數的值:

let weiRaisedValue = contract.weiRaised.call()

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