В настоящее время я разрабатываю приложение dApp в Solidity и работаю над библиотекой 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, но возникает это исключение.
Где я ошибаюсь?Должен ли я регистрировать вновь созданные учетные записи где-нибудь перед выполнением транзакций с ним?Есть ли какая-то важная информация, которую я здесь упускаю?
Спасибо!