Вызов метода смарт-контракта с использованием библиотеки web3.js - PullRequest
0 голосов
/ 27 января 2019

Я новичок в web3.js и пытаюсь вызвать метод из умного контракта omesigo, но получаю странную ошибку. Я уже прочитал документ web3 и попробовал его.

package.json

{
  "name": "web3-learn",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "@babel/runtime": "^7.3.1",
    "babel-cli": "^6.26.0",
    "web3": "^1.0.0-beta.38"
  }
}

node version: 10.15.0

index.js похожие строки:

let contract = web3.eth.Contract(abi, address);
contract.methods.name().call((err, res) => {console.log(res)});
/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/nonIterableSpread.js:2
  throw new TypeError("Invalid attempt to spread non-iterable instance");
  ^

TypeError: Invalid attempt to spread non-iterable instance
    at _nonIterableSpread (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/nonIterableSpread.js:2:9)
    at _toConsumableArray (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/toConsumableArray.js:8:60)
    at CallContractMethod.set (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-core-method/dist/web3-core-method.cjs.js:405:34)
    at MethodsProxy.executeMethod (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:525:26)
    at Function.anonymousFunction.(anonymous function) [as call] (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:497:27)
    at Object.<anonymous> (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/index.js:34:25)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)

Должно быть напечатано имя токена Omisego. Заранее благодарим за помощь.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я столкнулся с той же проблемой, и единственным отличием от вашего подхода является версия web3 api, которая для меня 1.0.0-beta.46.Решение проблемы кажется надуманным.

0 голосов
/ 28 января 2019

Я столкнулся с той же ошибкой и решил ее, обновив библиотеку Web3 до "web3": "^1.0.0-beta.39"

Если заглянуть глубже в эту ошибку, она, похоже, связана с глубоким клонированием contract.method arguments.После нескольких часов бесполезной отладки я наткнулся на релизы Web3 и увидел, что это был рекомендуемый релиз beta.39.(выпущено день назад)

...