Ethereum Nonce Management.слишком низкая ошибка - PullRequest
0 голосов

Я использую web3 и провайдера mainnet. Я делаю 2 сделки по контракту. Сначала утверждается метод, а другая транзакция является мультитрансферной. Я храню вторую подпись в базе данных. если первая транзакция успешна, я отправляю вторую транзакцию /. вторая транзакция почти всегда ошибка nonce too low`. как я могу решить эту проблему

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Для правильного управления nonce у вас есть 2 варианта:

  • Запрос № транзакций подтверждено для вашего адреса с web3.eth. getTransactionCount (ethAddress), увеличение, отправка и ожидание получения до обработки следующего. Это очень медленно, если вам нужна высокая пропускная способность и вы полагаетесь на определенный узел, который будет доступен и синхронизирован.

  • Ваш собственный локальный счетчик сохраняется на уровне базы данных. Используйте доступ БД lock для обработки возможных одновременных запросов и возврата правильных значений каждый раз. Вы не хотите сохранить эти счетчики в памяти, так как они будут потеряны в случае сбоя или перезапуска вашего приложения. Это очень эффективно, так как вам не нужен узел, и вы можете отправлять столько транзакций, сколько сможете разбить. Если что-то идет не так ... (не слишком низкий) сбросьте значение web3.eth.getTransactionCount (ethAddress).

Важное примечание. Вы можете спросить, почему бы не использовать web3.eth.getTransactionCount (ethAddress, 'pending'). Это связано с тем, что опция 'pending' делает вызов ненадежным, так как узлам сложно иметь точное количество транзакций в очереди и пуле памяти.

Для лучшего понимания того, как узлы смотрят на одноразовый номер вашего сообщения. Проверьте этот ответ здесь: https://ethereum.stackexchange.com/questions/2808/what-happens-when-a-transaction-nonce-is-too-high/2809#2809

И этот тоже: Отправить необработанную транзакцию Ethereum infura nodejs npm

0 голосов
/ 08 июня 2019

Здесь могут быть две проблемы (решения) из моего понимания;1) Возможно, вам придется вручную увеличивать одноразовый номер для оценки газа в мультитрансферных операциях.2) В наши дни некоторые серверы работают довольно медленно, так что вы либо выбираете транзакциюReceipt (опрос) первой транзакции, прежде чем делать вторую, чтобы убедиться, что она была добыта.Таким образом, у вас, скорее всего, будет право на второй транзакции.Однако, если вам лень это делать, просто разумная задержка между двумя транзакциями.

...