Web3.js sendSignedTransaction выдает ошибку: не удалось проверить получение транзакции

Я использую web3js v1.0.0-beta.34 для отправки подписанных транзакций на узел geth Geth / v1.8.13-unstable-2e0391ea / linux-amd64 / go1.10.3 в петле.

Проблема: на начальных итерациях цикла Node.js выводит хеш транзакции на консоль. Но когда цикл работает более нескольких секунд, мы начинаем получать ошибку:

Error: Failed to check for transaction receipt:
{}
    at Object._fireError (/Users/x/test/node_modules/web3-utils/src/index.js:56:17)
    at /Users/x/test/node_modules/web3-core-method/src/index.js:260:23
    at <anonymous>

В чем может быть причина этой проблемы?

test.js

for (var i = nonce; i < nonce + 1000; i++) {
    nounce = web3.utils.numberToHex(nonce)
    receivingAddr = getRandomWalletAddress()
    var rawTx = {
        nonce: i, 
        gasPrice: gasPriceHex,
        gasLimit: gasLimitHex,
        to: receivingAddr,
        value: txValue,
        data: txData 
    }

    var tx = new Tx(rawTx);
    tx.sign(key);
    var serializedTx = tx.serialize();

    web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
        .on('receipt', (receipt) => {
            console.log(receipt.transactionHash)
        })
}

person Nyxynyx    schedule 18.07.2018    source источник
comment
Предполагая, что ваши значения верны (которые не были опубликованы), в коде нет ничего структурно неправильного. Было бы полезно иметь значения, которые вы устанавливаете в rawTx (особенно то, как вы генерируете txData). Вы сказали, что получаете хэши транзакций ... каковы результаты? Есть одна действительно неприятная проблема с web3js в том, что, поскольку майнинг транзакций обычно занимает так много времени, библиотека выдаст вам ошибки тайм-аута, даже если все в порядке. Но это, похоже, другое.   -  person Adam Kipnis    schedule 19.07.2018
comment
У меня есть клиент, который делает почти то же самое. Он запускает кучу подписанных транзакций в цикле. Я могу опубликовать версию этого в качестве ответа, но я не уверен, что это решит именно эту проблему.   -  person Adam Kipnis    schedule 19.07.2018


Ответы (1)


Это произошло из-за того, что web3.js не смог получить квитанцию ​​о транзакции, вы можете увидеть здесь код: https://github.com/ethereum/web3.js/blob/1.0/packages/web3-core-method/src/index.js#L261

Вы можете просто воспроизвести ошибку, вызвав eth.getTransactionReceipt, и узнать, что произошло.

person Peter Lai    schedule 20.07.2018