Получаете ошибки «транзакции замены по заниженной цене» при отправке транзакций Ethereum в сеть Rinkeby?

1

Я получаю прерывистую "заниженную транзакцию транзакций" в сети Rinkeby на стороне сервера моего Node.JS dApp. Я использую точную сумму для оцененного газа в вызове транзакции send(), возвращенном мне вызовом estimateGas(). В моих опциях gasLimit я добавляю как поле для gas и gasLimit месторождение только для того, чтобы быть в безопасности с оцененным значением газа, возвращаемым методом gasLimit estimateGas() в объекте options. Кто-нибудь знает, как это исправить?

О несвязанной проблеме. К моему большому разочарованию, просто отправка транзакции через Metamask в сеть Rinkeby занимает около 16-30 секунд. Заметьте, я имею в виду с того момента, когда расширение Metamask появляется до того момента, когда мой код на стороне клиента восстановит контроль. Я не говорю о времени, которое требуется, чтобы получить транзакцию, подтвержденную/добытую сетью. Сказав это, я начинаю задаваться вопросом, не будет ли Metamask возвращать вам контроль до тех пор, пока транзакция не будет добыта. Это так?

Вот фрагмент кода кода, который я использую для отправки транзакции в Rinkeby (или в любую другую сеть, на которую я тестирую):

contractMethodToCall.estimateGas(
    { from: publicAddr, gasPrice: 20000000000, gas: 1500000})
.then(function(estimatedGas) {
    if (estimatedGas <= 0)
        throw new Error("The estimated gas for the transaction is zero.");

    const rawTx = {
        nonce: fromNonce,
        gasPrice: gasPriceGwei,
        // Use the estimated gas.
        gasLimit: estimatedGas,
        // Adding both gas and gasLimit just in case.
        gas: estimatedGas,
        to: contractAddr,
        value: '0x00',
        data: encodedAbiForCall
    }

    let tx = new Tx(rawTx);

    // Sign the transaction using our server private key in Buffer format.
    tx.sign(privateKeyBuffer);

    let serializedTx = '0x' + tx.serialize().toString('hex');

    return web3.eth.sendSignedTransaction(serializedTx);
});
  • 1
    Возможно, транзакция недооценена из-за того, что стоимость транзакции равна «0x00», также функция в вашем контракте должна быть «подлежащей оплате».
  • 0
    @EduardoPereira Это неловкое сообщение об ошибке. Фактическая проблема - дубликат одноразового номера.
Теги:
ethereum
web3js
solidity

1 ответ

2

Похоже, вы нашли причину своей проблемы из своего комментария. Но, чтобы добавить ясность для других, которые видят ту же проблему, ошибка возникает не только из-за дублирования nonce. Эта ошибка возникает, когда транзакция отправляется с помощью nonce, которая уже используется в другой ожидающей транзакции, и цена на газ равна (или меньше) ожидающей транзакции.

Вы можете отправить транзакцию с использованием того же nonce, если вы используете более высокую цену на газ. Шахтеры всегда будут выбирать более дорогостоящую транзакцию для ожидающей работы, поэтому это способ отменить ожидающую транзакцию или повторно отправить транзакцию, которая игнорируется из-за низких цен на газ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню