признавая слишком высокий одноразовый номер - PullRequest
0 голосов
/ 02 февраля 2019

Проблема:

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

web3j.ethSendRawTransaction(rawMessageWithNonce102).send();

Вопрос:

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

1 Ответ

0 голосов
/ 04 февраля 2019

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

...