使用Ganache提供的地址调用vote方法仍提示sender account not recognized如何解决
错误原因
你调用vote方法时给from参数传入的是web3.eth.getAccounts()返回的Promise对象,而非实际的账户地址。即使这个Promise最终返回的是Ganache的有效地址,web3/truffle在执行交易时无法自动解析异步Promise作为发送方地址,因此抛出「sender account not recognized」错误。
解决方法
方法1:先异步获取账户再调用方法
在truffle console中可以直接用await处理异步操作,写法如下:
// 先获取账户列表 const accounts = await web3.eth.getAccounts() // 再调用合约方法,传入实际的地址 await app.vote(1, {from: accounts[1]})
方法2:在Promise回调内调用合约方法
如果你习惯用then链式调用,也可以写为:
web3.eth.getAccounts().then(accounts => { return app.vote(1, {from: accounts[1]}) }).then(txReceipt => { console.log("交易成功,收据:", txReceipt) }).catch(err => { console.error("交易失败:", err) })
异常排查(如果上述操作仍报错)
- 检查你当前连接的链是否确实是你运行的Ganache实例:在truffle console中执行
web3.eth.getChainId(),确认返回的ID和你Ganache配置的链ID一致 - 检查Ganache中的对应账户是否处于解锁状态:Ganache默认所有账户都是解锁的,如果你手动修改过配置需要确认目标账户没有被锁定
- 检查truffle-config.js(或truffle.js)中development网络的配置,是否和你Ganache的IP、端口、链ID完全匹配
内容的提问来源于stack exchange,提问作者Haris Nabeel
相关产品推荐
相关产品推荐

