Признавая слишком высокий одноразовый номер

Эта проблема:

У нас есть кластер серверов, на которых запущен сервис. Эти сервисы транслируют транзакции с одного адреса на множество разных адресов. Проблема сейчас в том, что они работают в параллельном режиме. Это означает, что им всегда нужно знать следующий действительный одноразовый номер. Иногда случается, что служба пытается передать транзакцию с одноразовым номером, который слишком высок. Например, допустим, что последняя транзакция с адресом "0xabc..." имеет одноразовый номер 100. Теперь один сервис пытается передать необработанную транзакцию с одноразовым номером 102 вместо действительного значения 101, например так:

web3j.ethSendRawTransaction(rawMessageWithNonce102).send();

Вопрос:

Есть ли способ обнаружения проблемы? web3j, конечно, не делает здесь ошибку, потому что изначально tx попадает в пул tx. Но через некоторое время его удалили оттуда. Как я могу обнаружить "слишком высокую проблему nonce" в моем Java-приложении? Есть идеи? Заранее спасибо!

1 ответ

Не уверен, как вы можете обнаружить это, но вы можете кешировать текущий одноразовый номер, т.е. в Redis, а затем проверяйте это значение при отправке транзакции. После отправки транзакции обновите одноразовый номер, и каждый сервер будет использовать один и тот же экземпляр кэша.

Другие вопросы по тегам