Web3js

web3.eth.contract 在製作合約時不是一個函式

  • January 11, 2022

每當我嘗試簽訂契約時,我都會得到:

web3.eth.contract 不是函式

我正在使用這段程式碼:

const path = require('path');
const fs = require('fs');
const solc = require('solc');
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// Compile the source code
let input = fs.readFileSync('./contracts/ProofOfExistence3.sol', 'utf8');
let output = solc.compile(input, 1);

let abi = JSON.parse(output.contracts[':ProofOfExistence3'].interface);
let bytecode = output.contracts[':ProofOfExistence3'].bytecode;

let gasEstimate = web3.eth.estimateGas({data: bytecode}).then(console.log);

// Contract object
let MyContract = web3.eth.contract(abi);

如果我只在下面執行這段程式碼,我會得到未定義的。相同的程式碼在瀏覽器中有效,但在帶有官方 web3 包的 nodejs 中無效。

const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

console.log(web3.eth.contract);

返回未定義。

有任何想法嗎?我在本地執行“testrpc”。

解決方案:

MyContract = new web3.eth.Contract(abi)

文件https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#eth-contract

使用版本時1.0.x,您需要傳入應用程序二進制介面,即abi. 並使用new關鍵字。

我在使用 web3 0.19 時遇到了這個問題。

對於 web3 1.0:

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:8545/'));

new web3.eth.Contract(abiArray, contract_address, {from: address})

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