Отправить взаимную подписанную необработанную транзакцию

Мне нужно отправить несколько подписанных транзакций и с определенной учетной записи с одноразовым номером через web3.eth.getTransactionCount. Поскольку звонок может идти параллельно, я либо получаю

замещающая сделка по заниженной цене

или

Транзакция не была добыта в пределах 50 блоков, убедитесь, что ваша транзакция была отправлена ​​правильно.

Как лучше всего рассчитать одноразовый номер и сделать каждую транзакцию уникальной?

я использую веб3

Ответы (1)

У меня была аналогичная проблема, и я использовал глобальную переменную, чтобы запомнить последний использованный одноразовый номер. Если одноразовый номер, который вы получаете от web3.eth.getTransactionCount, меньше этого, вы можете соответствующим образом настроить одноразовый номер. В коде это выглядит как-то так:

var curnonce = web3.eth.getTransactionCount(account);
while (curnonce <= lastnonce) curnonce++;
lastnonce = curnonce;

Работает отлично и очень надежно в моем сценарии.

да, может работать для одной учетной записи, но если нам нужно использовать несколько учетных записей, мы должны поддерживать карту.
правильно, так как одноразовый номер зависит от учетной записи.
каким-то образом, если транзакция не заминирована, предстоящая транзакция завершается сбоем, не уверен, как ее разрешить, даже не уверен, почему транзакция не заминирована
Какое сообщение об ошибке вы получаете, когда предстоящая транзакция завершается неудачно?
нет ошибки, но транзакция не заминирована, я отправляю 10 транзакций за раз с одноразовым номером, увеличенным 1 на 1
Похоже, вы все делаете хорошо в отношении одноразового номера. Проблема видимо в другом. Возможно, низкая цена на газ. Если вы предоставите хэш транзакции, я проверю.