Web3js
web3.eth.contract 在製作合約時不是一個函式
每當我嘗試簽訂契約時,我都會得到:
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})