Признавая слишком высокий одноразовый номер
Эта проблема:
У нас есть кластер серверов, на которых запущен сервис. Эти сервисы транслируют транзакции с одного адреса на множество разных адресов. Проблема сейчас в том, что они работают в параллельном режиме. Это означает, что им всегда нужно знать следующий действительный одноразовый номер. Иногда случается, что служба пытается передать транзакцию с одноразовым номером, который слишком высок. Например, допустим, что последняя транзакция с адресом "0xabc..." имеет одноразовый номер 100. Теперь один сервис пытается передать необработанную транзакцию с одноразовым номером 102 вместо действительного значения 101, например так:
web3j.ethSendRawTransaction(rawMessageWithNonce102).send();
Вопрос:
Есть ли способ обнаружения проблемы? web3j, конечно, не делает здесь ошибку, потому что изначально tx попадает в пул tx. Но через некоторое время его удалили оттуда. Как я могу обнаружить "слишком высокую проблему nonce" в моем Java-приложении? Есть идеи? Заранее спасибо!
1 ответ
Не уверен, как вы можете обнаружить это, но вы можете кешировать текущий одноразовый номер, т.е. в Redis, а затем проверяйте это значение при отправке транзакции. После отправки транзакции обновите одноразовый номер, и каждый сервер будет использовать один и тот же экземпляр кэша.