基于ETH区块链开发待办清单dapp新增任务报invalid address错误
问题原因
invalid address错误触发的核心原因是调用合约写入类方法时,truffle-contract没有获取到交易发起方的地址,无法构造合法的交易 payload。
修复步骤
- 修正账户获取逻辑
web3 1.0+ 版本中web3.eth.accounts已废弃,需使用异步的getAccounts方法获取账户列表,修改loadAccount方法:
- 修正账户获取逻辑
loadAccount: async () => { // Set the current blockchain account const accounts = await web3.eth.getAccounts() App.account = accounts[0]; console.log(App.account); }
- 合约调用显式传入发送方地址
所有修改链上状态的合约方法调用,都需要显式传入from参数指定交易发起地址,分别修改createTask和toggleCompleted方法:
- 合约调用显式传入发送方地址
// 修改createTask方法内的合约调用 await App.todoList.createTask(content, { from: App.account });
// 修改toggleCompleted方法内的合约调用 await App.todoList.toggleCompleted(taskId, { from: App.account });
- 如上述修改后仍报错,可重置Metamask本地缓存
如果Ganache重启过,Metamask本地缓存的账户nonce会和链上实际nonce不一致,也会触发地址相关错误。操作路径:Metamask > 设置 > 高级 > 重置账户,该操作仅清除本地交易缓存,不会影响账户资产。
- 如上述修改后仍报错,可重置Metamask本地缓存
额外检查项
确认Metamask添加的本地网络链ID和Ganache的链ID完全一致,Ganache默认链ID为1337或5777,两者不匹配也会导致交易构造失败。
内容的提问来源于stack exchange,提问作者S. N
相关产品推荐
相关产品推荐

