私人以太坊网络无法识别发件人帐户

Kar*_*urg 7 ethereum solidity web3js

我目前正在 Solidity 中开发一个 dApp,并正在开发一个 web3 库来处理与其通信。

我在 web3 中创建新帐户和签署交易的过程中遇到了困难。在继续之前,值得注意的是,我正在运行自己的本地私有区块链(目前使用 Ganache)。

我的代码如下所示:

try{
    let a = web3.eth.accounts.create()
    let dataTx = someContract.methods.someMethod().encodeABI()
    let rawTx = {
        to: someContract._address,
        from: account.address,
        data: dataTx,
        gas: 10000000000
    }


    const transaction = web3.eth.accounts.signTransaction(rawTx, util.toBuffer(account.privateKey))
    web3.eth.sendTransaction(rawTx).then(console.log)
}
catch(e){
    console.log(e)
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是该web3.eth.sendTransaction()方法引发以下异常:

错误:返回错误:无法识别发件人帐户。

我的理解是web3.eth.accounts用于管理本地帐户并web3.eth.personal用于与客户端(例如 Geth)进行通信。我希望保留我的应用程序在 web3 客户端设备上本地创建的帐户的私钥,但它引发了此异常。

我哪里错了?我应该在运行交易之前在某个地方注册新创建的帐户吗?我在这里遗漏了一些重要信息吗?

Ran*_*lov 0

您指的是web3 1.0.0中的功能,该功能尚未完全发布。如果您访问https://web3js.readthedocs.io/en/1.0/getting-started.html 您会看到他们声明以下内容:

该文档正在开发中,web3.js 1.0 尚未发布!您可以在github.com/ethereum/wiki/wiki/JavaScript-API找到 web3 0.xx 的最新文档。

您很可能使用的是0.20.x版本或类似版本,因此请先检查一下。要检查这一点,请在浏览器中打开 dApp,然后在控制台中键入以下内容:

web3.version.api
Run Code Online (Sandbox Code Playgroud)

这应该会显示您正在使用哪个版本。

我认为没有办法直接使用 web3js 0.20.x创建帐户,但您可以尝试将 web3js 更新到1.0.0-beta并尝试再次运行您的代码。您可以在 NPM 中找到它 - https://www.npmjs.com/package/web3