Как мне взаимодействовать с умными контрактами Ethereum от Node с помощью трюфельной среды? - PullRequest
0 голосов
/ 18 декабря 2018

Как я могу взаимодействовать со своим умным контрактом с узла?Я использую трюфель, чтобы развернуть свой контракт в моей частной сети.Но я не получаю экземпляр развернутого контракта в моем коде 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 с ненулевым кодом выхода.

1 Ответ

0 голосов
/ 18 декабря 2018

Поскольку это ваша частная сеть, вы сказали, что вам нужно указать, какая сеть находится в консоли трюфеля - network testnet (укажите имя сети, которое есть в файле truffle.config). Вы должны иметь возможность попасть в оболочку трюфеля.соответствует вашей сети.По умолчанию трюфельная консоль будет принимать локальную сеть, т. Е. Разработку сети по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...