Как я могу взаимодействовать со своим умным контрактом с узла?Я использую трюфель, чтобы развернуть свой контракт в моей частной сети.Но я не получаю экземпляр развернутого контракта в моем коде nodejs.
У меня есть небольшой пример контракта, который выглядит следующим образом
pragma solidity ^0.5.1;
contract MyContract {
uint num;
function someFunction(uint _num) public {
num = _num;
}
}
Затем я компилирую и переносу контракт в свой приватныйцепочка (ganache-cli)
>truffle compile
...
>truffle migrate
...
2_deploy_contracts.js
=====================
Deploying 'MyContract'
----------------------
> transaction hash: 0xa9161613e7c398c5425b3bb7c306d494a657193c965203902c5732192b394979
> Blocks: 0 Seconds: 0
> contract address: 0x93Da9d36ECcd5eeceBe9b469A65cBbA397b6c85E
> account: 0x9576316A79287D03c92F9157056e5BCde1cAEc5C
> balance: 99.99152546
> gas used: 98463
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.00196926 ETH
MyContract Address: 0x93Da9d36ECcd5eeceBe9b469A65cBbA397b6c85E
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00196926 ETH
Summary
=======
> Total deployments: 2
> Final cost: 0.00763398 ETH
>
Пока все в порядке.Но затем я хочу взаимодействовать с моим контрактом в моей частной сети.Поэтому я использую этот код:
const path = require('path');
var MyContractABI = require(path.join(__dirname, '../build/contracts/MyContract'))
var Web3 = require('web3');
var provider = new Web3.providers.HttpProvider("http://localhost:8545");
var contract = require("truffle-contract");
var MyContract = contract(MyContractABI);
MyContract.setProvider(provider);
var deployed;
MyContract.deployed().then(function(instance) {
var deployed = instance;
return instance.someFunction(5);
}).then(function(result) {
// Do something with the result or continue with more transactions.
console.log(result);
});
Но это когда все разваливается.MyContractABI содержит интерфейс jsons контрактов.Но я получаю "UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'apply' of undefined".Сбой на MyContract.deployed ().
Версия узла: версия трюфеля v8.11.3: v5.0.0-beta.2
пример кода здесь: https://github.com/manmountain/truffle-example
Полная трассировка стека
(узел: 5888) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'apply' из undefined в Provider.sendAsync (C: \ Users \ goran \ Documents \ development \ truffle-example\ node_modules \ truffle-contract \ contract.js: 24: 36) в RequestManager.sendAsync (C: \ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ node_modules \ web3 \ lib \ web3 \ requestmanager.js: 80: 19) в Object.get [как getNetwork] (C: \ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ node_modules \ web3 \ lib \ web3 \ property.js: 116: 33) в C: \ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ contract.js: 512: 27 в новом Promise () в Function.detectNetwork (C: \ Users \ goran \ Documents\ development \ truffle-example \ node_modules \ truffle-contract \ contract.js: 503: 14) в Фуnction.deployed (C: \ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ contract.js: 451: 19) в объекте.(C: \ Users \ goran \ Documents \ development \ truffle-example \ example \ example.js: 11: 12) в модуле Module._compile (module.js: 652: 30) в Object.Module._extensions..js (модуль.js: 663: 10) в Module.load (module.js: 565: 32) в tryModuleLoad (module.js: 505: 12) в Function.Module._load (module.js: 497: 3) в Function.Module.runMain (module.js: 693: 10) при запуске (bootstrap_node.js: 191: 16) в bootstrap_node.js: 612: 3 (узел: 5888) UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(идентификатор отклонения: 2) (узел: 5888) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели.В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом выхода.