无法从 ganache 提供商处获取帐户

Unable to get accounts from ganache provider

我正在尝试 运行 按照一些关于以太坊区块链的 udemy 课程中描述的步骤在 mocha 上进行测试。

这是我目前拥有的 package.json 文件:

{
  "name": "inbox",
  "version": "1.0.0",
  "description": "",
  "main": "index",
  "typings": "index",
  "scripts": {
    "test": "mocha"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ganache-cli": "^6.3.0",
    "mocha": "^5.2.0",
    "solc": "^0.4.17",
    "web3": "^1.0.0-beta.37"
  }
}

当我 运行: npm 运行 测试时,我遇到了这个问题:

 Inbox contract
Error: No callback provided to provider's send function. As of web3 1.0, provider.send is no longer synchronous and must be passed a callback as its final argument.
    at b.send (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\ganache-cli\build\ganache-core.node.cli.js:25:90931)
    at GetAccountsMethod._callee$ (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\web3-core-method\dist\web3-core-method.cjs.js:454:55)
    at tryCatch (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\regenerator-runtime\runtime.js:62:40)
    at Generator.invoke [as _invoke] (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\regenerator-runtime\runtime.js:288:22)
    at Generator.prototype.(anonymous function) [as next] (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\regenerator-runtime\runtime.js:114:21)
    at asyncGeneratorStep (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\@babel\runtime\helpers\asyncToGenerator.js:3:24)
    at _next (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\@babel\runtime\helpers\asyncToGenerator.js:25:9)
    at C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\@babel\runtime\helpers\asyncToGenerator.js:32:7
    at new Promise (<anonymous>)
    at GetAccountsMethod.<anonymous> (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\@babel\runtime\helpers\asyncToGenerator.js:21:12)
    at GetAccountsMethod.execute (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\web3-core-method\dist\web3-core-method.cjs.js:477:25)
    at Proxy.anonymousFunction (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\web3-core-method\dist\web3-core-method.cjs.js:228:25)
    at Context.beforeEach (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\test\Inbox.test.js:9:14)
    at callFn (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\mocha\lib\runnable.js:372:21)
    at Hook.Runnable.run (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\mocha\lib\runnable.js:364:7)
    at next (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\mocha\lib\runner.js:317:10)
    at Immediate.<anonymous> (C:\Users\bsimperc\Desktop\SCOMP\blockchain-projects\Inbox\node_modules\mocha\lib\runner.js:347:5)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
    √ deploys a contract


  1 passing (27ms)

我最初使用的是 web3@1.0.0-beta.26,因为那是课程中使用的版本。但是我收到错误 "addProviders is not a function",通过更新到版本 beta.37

解决了这个问题

最后,这是我的代码部分,如本库实现承诺的课程所述:

const assert = require("assert");
const ganache = require("ganache-cli");
const Web3 = require("web3");

const web3 = new Web3(ganache.provider()); //Crea una instancia de web3 y le indica que debe conectarse a la red local de pruebba de ganache 


beforeEach(() => {
    web3.eth.getAccounts()
        .then(accounts => {
            console.log(accounts);
        })
        .catch(err => {
            console.log(err);
        });
    // Obtenemos las cuentas que genera ganache

    //Usamos una de las cuentas para desplegar el contrato

});

describe("Inbox contract", () => {
    it("deploys a contract", () => {

    });
})

我非常感谢任何帮助,因为这是一个实习项目,而且这是我第一次使用任何区块链环境。

PS:None 来自此处的建议或建议有效: - https://github.com/trufflesuite/ganache-core/issues/15 - https://github.com/trufflesuite/ganache-cli/issues/246

我遇到了同样的问题,我通过将我的 mocha、ganache-cli、solc 和 web3 设置为以下版本解决了这个问题

{
  "name": "inbox",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ganache-cli": "^6.0.3",
    "mocha": "^4.0.1",
    "solc": "^0.4.19",
    "web3": "^1.0.0-beta.37"
  }
}