web3.js: функция web3.eth.Contract (abi, address) не смогла инициировать экземпляр контракта - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь взаимодействовать с умным контрактом, развернутым на локальном узле Ethereum с помощью библиотеки web3.js.К сожалению, web3.eth.Contract(abi, address), похоже, не в состоянии инициировать экземпляр контракта.


【Фрагменты】 Весь файл app.js выглядит следующим образом:

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

const abi = [{"anonymous": false,"inputs": [{"indexed": false,"name": "add","type": "int256"},{"indexed": false,"name": "name","type": "string"},{"indexed": true,"name": "id","type": "uint256"},{"indexed": true,"name": "checked","type": "bool"}],"name": "globalValueChanged","type": "event"},{"constant": false,"inputs": [{"name": "add","type": "int256"},{"name": "name","type": "string"},{"name": "id","type": "uint256"},{"name": "checked","type": "bool"}],"name": "modifyGlobalValue","outputs": [{"name": "","type": "int256"}],"payable": false,"stateMutability": "nonpayable","type": "function"},{"inputs": [],"payable": false,"stateMutability": "nonpayable","type": "constructor"},{"constant": true,"inputs": [],"name": "getGlobalValue","outputs": [{"name": "","type": "int256"}],"payable": false,"stateMutability": "view","type": "function"},{"constant": true,"inputs": [{"name": "times","type": "int256"}],"name": "testGlobalValue","outputs": [{"name": "","type": "int256"}],"payable": false,"stateMutability": "view","type": "function"}]
const address = '0x9f6c4e63cbca51dea852a579c907317a0eac138c';
const contractInstance = new web3.eth.Contract(abi, address);

// to test if initialized web3 works fine
web3.eth.getAccounts().then((results) => {
    console.log("***web3.eth.getAccounts()***:")
    console.log(results)
})

// to test if web3.eth.Contract works
console.log("***contractInstance.abi***:")
console.log(contractInstance.abi)

【Выходы】 Выходы работы node app.js.

**contractInstance.abi***:
undefined
***web3.eth.getAccounts()***:
[ '0x135B02baD443C1073C14F8a7f13cEc8661d3eC3d',
  '0x69890d19B6eb060cA47e1ca41d93256E46bb7195' ]

web3.eth.getAccounts() возвращает правильные значения, в то время как web3.eth.Contract(abi, address), похоже, не может инициировать экземпляр контракта.


【Дополнительная информация】

  1. npm list web выходы web3@1.0.0-beta.52.

  2. Другие функции web3, такие как web3.eth.getAccounts () работает нормально.

  3. В консоли geth с одинаковыми значениями abi и address, eth.contract(abi).at(address) отлично работает.

...