Подписка с помощью ethrereumjs-tx и отправка с помощью HttpProvider дает «Превышение лимита газа блока» независимо от gasLimit - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь написать сервер, который хранит закрытые ключи и подписывает транзакции.Я использую 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 Ответ

0 голосов
/ 11 февраля 2019

Проблема заключалась в том, что значения в txParams должны быть в шестнадцатеричном коде с префиксом 0x

...