blockchain tutorial Error: The send transactions "from" field must be defined

blockchain tutorial Error: The send transactions "from" field must be defined

我正在关注 dappuniversity 的区块链教程。

当我在行中创建任务时

await App.todoList.createTask(content)

来自行 https://github.com/dappuniversity/eth-todo-list/blob/e3ed9a2cefb581c09730250c56c9d30a19cc63c8/src/app.js#L115

我收到以下错误:

Uncaught (in promise) Error: The send transactions "from" field must be defined!
    at Method.inputTransactionFormatter (truffle-contract.js:50747)
    at truffle-contract.js:51228
    at Array.map (<anonymous>)
    at Method.formatInput (truffle-contract.js:51226)
    at Method.toPayload (truffle-contract.js:51261)
    at Eth.send [as sendTransaction] (truffle-contract.js:51551)

我需要在某处定义一个 'from' 字段吗?

我使用的是最新的truffle/contract。我需要在我的 createTask 方法中指定来自帐户,如下所示:

await App.todoList.createTask(content,  { from:  web3.eth.defaultAccount})        

这有效。

由于最近的 Metamask 更新以及从 web3.currentProvider 移动到 window.ethereum

,我 运行 遇到了上述答案的问题

我能够使用 await App.todoList.createTask(content, {from: App.account})

使用最新的依赖项,上述答案中的 none 对我有用。 我必须编辑 loadAccount 方法:

loadAccount: async () => {
    // Set the current blockchain account
    const accounts = await web3.eth.getAccounts();
    App.account = accounts[0];
},

然后将App的账号传给createTask方法:await App.todoList.createTask(content, { from: App.account })

我在 Remix 上与部署在 Rinkeby 上的合约交互时发生了同样的事情。我为环境选择了 injected web3,但是 account 字段是空的。

发生这种情况是因为我先拒绝了与 metamask 的连接,然后没有收到任何其他与 metamask 连接的请求。所以我刷新了 remix,锁定和解锁了 metamask。它发送了连接到元掩码的请求