Я пытаюсь взаимодействовать со своим смарт-контрактом, но получаю сообщение об ошибке: Uncaught TypeError: MyContract.at не является функцией
Мой код:
var web3 = require('ethereum.js');
web3.setProvider(new web3.providers.HttpProvider());
var MyContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"type":"function"}]);
var result = MyContract.at("MyContractAddress").get();
console.log(result);
Когда я запрашиваю функциональность Geth по умолчанию, я получаю правильный ответ:
var version = web3.version.api;
console.log(version); "0.2.4"
Вам нужно предоставить адрес вашего узла geth конструктору HttpProvider, чтобы ваш клиент web3 был подключен к узлу. Некоторые функции web3, такие как contract.at(), работают, только если вы подключены к узлу. Для работы web3.version.api не требуется подключение к эфириуму.
web3.setProvider(new web3.providers.HttpProvider('http://geth-node-ip:8545'));
Если вы установили адрес для HttpProvider, проверьте правильность IP-адреса и номера порта. (в качестве примера я использую 8545, так как это порт RPC по умолчанию)
var Web3 = require('web3'); var web3 = new Web3();
Вам нужно создать экземпляр этого контракта, как описано здесь . Вы правильно создали объект контракта (подумайте о том, чтобы поместить свой ABI в отдельный файл), но затем вам нужно создать экземпляр через
var MyContract = web3.eth.contract(ABI);
var contractInstance = MyContract.at(address);
Если вы не развернули свой контракт, вы должны сделать это в первую очередь (это даст вам то, address
что вы можете повторно использовать с этого момента:
var contractInstance = MyContract.new([contructorParam1] [, contructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000});
Более полное пошаговое руководство я разместил у себя на гитхабе .
console.log(JSON.stringify(MyContract))
.
евро10
var web3 = require('ethereum.js');
ты уверен, что этого не должно бытьvar web3 = require('web3.js');