Ethereum 在专用以太坊网络上无法识别发件人帐户

Ethereum 在专用以太坊网络上无法识别发件人帐户,ethereum,solidity,web3,web3js,Ethereum,Solidity,Web3,Web3js,我目前正在Solidity中开发一个dApp,并正在开发一个web3库来处理与它的通信 我在web3中挣扎于创建新帐户和交易签名的过程。在我继续之前,值得注意的是,我正在运行自己的本地私有区块链(目前与Ganache合作) 我的代码如下所示: try{ let a = web3.eth.accounts.create() let dataTx = someContract.methods.someMethod().encodeABI() let rawTx = {

我目前正在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()
方法引发了以下异常:
错误:返回的错误:无法识别发件人帐户

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

我哪里做错了?在使用新创建的帐户运行事务之前,我是否应该在某处注册该帐户?这里有我遗漏的重要信息吗


谢谢

您指的是web3 1.0.0中尚未完全发布的功能。 如果你去 您将看到,它们声明如下:

web3.version.api
此文档正在编写中,web3.js 1.0尚未发布!您可以在上找到web3 0.x.x的当前文档

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

web3.version.api
这将显示您正在使用的版本

我认为没有办法直接使用web3js0.20.x创建帐户,但您可以尝试将web3js更新为1.0.0-beta,然后再次尝试运行代码。您可以在这里的NPM中找到它-

如果你想了解更多关于稳健性和智能合约创建的信息,请查看我的课程,我专门在这方面做了-


这是一张折扣优惠券:QAUS8657

如果您想使用提供给您的Ganache以外的帐户,您必须启动Ganache,以
私钥、初始余额
的形式提供您的帐户数据:

示例命令:
ganache cli--帐户0xF38B5679751228EAB7D9F3AA02BD0B0C0F7B44E448C0CFD410A1D7053EFB6C56123456789

及其输出:

Ganache CLI v6.1.8(Ganache核心:2.2.1)

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

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

天然气价格 =====================================200000000

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

收听127.0.0.1:8545