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);

И если я только запускаю этот код ниже, я получаю undefined. Тот же код работает в браузере, но не в nodejs с официальным пакетом web3.     

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

console.log(web3.eth.contract);

Возвращает undefined.

Любые идеи? Я запускаю «testrpc» локально.

19 голосов | спросил ErwanLent 25 J000000Tuesday17 2017, 03:23:01

6 ответов


4

Как предположил Исмаэль, настройка версии web3 на 0.20.0 в моем пакете. json позволила мне использовать этот код.

npm install ethereumjs-testrpc [email protected]

В идеале я бы обновил свой код для работы с последним пакетом, но доволен этим решением.

ответил ErwanLent 25 J000000Tuesday17 2017, 21:01:17
17

Решение:

MyContract = new web3.eth.Contract(abi)

Документы https://web3js.readthedocs.io /en/1.0/web3-eth-contract.html#eth-contract

При использовании версии 1.0.x вам необходимо передать в двоичный интерфейс приложения, то есть abi. И используйте ключевое слово new.

ответил David 26 J000000Wednesday17 2017, 01:34:02
2

Я пришел к этой проблеме, когда я использую 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})
ответил Kris Roofe 26 AMpThu, 26 Apr 2018 09:34:39 +030034Thursday 2018, 09:34:39
0

Установка web3 версии 0.20.0 решит проблему. Чтобы установить,

npm install ethereumjs-testrpc [email protected]
ответил Safvan CK 7 MarpmWed, 07 Mar 2018 19:39:54 +03002018-03-07T19:39:54+03:0007 2018, 19:39:54
0

Добавление к ответу @David

Smartcontract с web3 1.0.0-beta.31

В 1.0.0-beta ... большинство из них теперь обрабатывается с помощью Promises , поэтому вы можете сделать:

var MyContract = new web3.eth.Contract({abi}, '0x123....', {
    from: '0x456...', // default from address
    gasPrice: '20000000000' // default gas price in wei, 20 gwei in this case
});

Пример: Получить Баланс токена :

MyContract.methods.balanceOf('0x456...').call()
    .then(function(result){
    //the result holds your Token Balance that you can assign to a var
    var myTokenBalance = result;
    return result;
});
  • Где {abi} - это интерфейс ABI вашего контракта 0x123.....
  • Где 0x123.... - это адрес вашего Контракта.
  • Где 0x456.... - адрес вашей учетной записи Ethereum, которая содержит токены (т. е. учетная запись ETH, с которой вы хотите получить свой токен-баланс)

Примечание: Я использую IPC Провайдер geth.ipc для взаимодействия с моим узлом (поскольку я нахожусь на одном ПК, локальном хосте, а следовательно, больше сохраняю вместо использования HTTP-запроса).

  if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
  } else {
    var net = require('net');
    var web3 = new Web3('/home/yourHomeFolder/.ethereum/geth.ipc', net);
  };

Таким образом, вы больше не должны получать ошибку

  

web3.eth.contract не является функцией

ответил Juergen Fink 26 MarpmMon, 26 Mar 2018 23:42:20 +03002018-03-26T23:42:20+03:0011 2018, 23:42:20
0

Я также ответил на это здесь

Вам просто нужно установить стабильную версию Web3:

npm install [email protected]^0.19.0 --save
ответил f.a.abadi 19 PMpThu, 19 Apr 2018 14:10:45 +030010Thursday 2018, 14:10:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132