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 客户端设备上本地创建的帐户的私钥,但它引发了此异常。
我哪里错了?我应该在运行交易之前在某个地方注册新创建的帐户吗?我在这里遗漏了一些重要信息吗?
您指的是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
| 归档时间: |
|
| 查看次数: |
6771 次 |
| 最近记录: |