Ethereum 在专用以太坊网络上无法识别发件人帐户
我目前正在Solidity中开发一个dApp,并正在开发一个web3库来处理与它的通信 我在web3中挣扎于创建新帐户和交易签名的过程。在我继续之前,值得注意的是,我正在运行自己的本地私有区块链(目前与Ganache合作) 我的代码如下所示: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 = {
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