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

时间:2018-10-15 09:15:35

标签: ethereum solidity web3 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)
}

这里的问题是web3.eth.sendTransaction()方法引发以下异常:Error: Returned error: sender account not recognized

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

我要去哪里错了?在使用它进行交易之前,我应该在某个地方注册新创建的帐户吗?我在这里缺少一些重要信息吗?

谢谢!

2 个答案:

答案 0 :(得分: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.x.x的当前文档。

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

web3.version.api

这应该显示您正在使用的版本。

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

如果您想了解有关Solidity和智能合约创建的更多信息,请查看我专门为此做的课程-Solidity Smart Contracts: Build Dapps In Ethereum Blockchain

以下是折扣券: QAUS8657

答案 1 :(得分:0)

如果要使用Ganache提供的帐户以外的帐户,则必须开始以private_key,initial_balance的形式提供Ganache帐户数据:

示例命令: ganache-cli --account 0xf38b5679751228eab7d9f3aa02bd0b0c0f7b44e448c0cfd410a1d7053efb6c56,123456789

其输出为:

  

Ganache CLI v6.1.8(ganache-core:2.2.1)

     

可用帐户   =================(0)0x44fa41e453654ccb365a358e994c764a37eea91f(〜0 ETH)

     

私钥   =================(0)0xf38b5679751228eab7d9f3aa02bd0b0c0f7b44e448c0cfd410a1d7053efb6c56

     

汽油价格   ================== 20000000000

     

气体极限   ================== 6721975

     

听127.0.0.1:8545