无法从 ganache 提供商处获取帐户
Posted
技术标签:
【中文标题】无法从 ganache 提供商处获取帐户【英文标题】:Unable to get accounts from ganache provider 【发布时间】:2019-07-03 19:15:49 【问题描述】:我正在尝试按照一些关于以太坊区块链的 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 run test,我遇到了这个问题:
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 不是函数”,通过更新到 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:这里的建议或建议都没有奏效: - https://github.com/trufflesuite/ganache-core/issues/15 - https://github.com/trufflesuite/ganache-cli/issues/246
【问题讨论】:
我完成了相同的 udemy 课程。这是我完成收件箱教程后的repo。看看有没有帮助。我还在我的项目中使用了您的package.json
和Index.test.js
,但无法重现错误。
【参考方案1】:
我遇到了同样的问题,我通过将我的 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"
【讨论】:
成功了!非常感谢,我想是摩卡版的。关于为什么会发生这种情况的任何想法?再次以上是关于无法从 ganache 提供商处获取帐户的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 FirebaseAuth 从 Google 提供商处获取性别和生日?