Подписка с помощью ethrereumjs-tx и отправка с помощью HttpProvider дает "Превышение лимита газа блока" независимо от gasLimit
Я пытаюсь написать сервер, который содержит закрытые ключи и подписывает транзакции. Я использую ethereumjs-wallet / hdkey для создания учетных записей и личных ключей, ethereumjs-tx для подписания транзакций и web3js с помощью Httprovider для отправки транзакций.
К сожалению, когда я пытаюсь отправить транзакцию, я всегда получаю сообщение об ошибке "Превышен лимит блокировки газа" (хотя я установил свой gasLimit на 21000, что значительно ниже лимита блокировки газа моего экземпляра ganache-cli).
Я подозреваю, что необработанная закодированная транзакция сформирована неправильно.
Есть идеи, что такое настоящая проблема и как я могу это исправить?
ура
const hdkey = require('ethereumjs-wallet/hdkey');
const Transaction = require('ethereumjs-tx');
const walletHdpath = "m/44'/60'/0'/0/";
const hdwallet = hdkey.fromMasterSeed(bip39.mnemonicToSeed(process.env.KEYSTORE_SEED));
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
async function generateAccount() {
const wallet = hdwallet.derivePath(walletHdpath + nextAccountIndex).getWallet();
nextAccountIndex += 1;
const addr = '0x' + wallet.getAddress().toString('hex');
accounts[addr] = wallet;
await fundAccount(addr);
return addr;
}
async function fundAccount(address) {
const txParams = {
gasPrice: '20000000000',
gasLimit: '21000',
from: process.env.KEYSTORE_ADDRESS_0,
to: address,
value: web3.utils.toWei('0.1', 'ether'),
data: ''
}
const signed = signTransaction(txParams);
// this line throws exception: "exceeds block gas limit"
await web3.eth.sendSignedTransaction(signed.signed_transaction);
}
function signTransaction(txParams) {
const from = txParams.from.toLowerCase();
const wallet = accounts[from];
if (wallet === undefined) {
return {sucess: false, message: "unknown from account" }
}
const tx = new Transaction(txParams);
const pkey = wallet.getPrivateKey();
tx.sign(pkey);
const rawTx = '0x' + tx.serialize().toString('hex');
return { success: true, signed_transaction: rawTx }
}
1 ответ
Проблема заключалась в том, что значения в txParams должны быть в шестнадцатеричном коде и иметь префикс 0x