Я использую web3 и сеть провайдера. Делаю 2 сделки по контракту. во-первых, это метод утверждения, а другая транзакция - мультитрансфер. Я храню вторую подпись в базе данных. если первая транзакция прошла успешно, я отправляю вторую транзакцию/. вторая транзакция почти всегда выдает ошибку nonce too low`. как я могу решить эту проблему
Управление одноразовыми номерами Ethereum. ошибка одноразового номера слишком мала
Ответы (2)
Для правильного управления nonce у вас есть 2 варианта:
Запросить количество транзакций подтвержденных для вашего адреса с помощью web3.eth.getTransactionCount(ethAddress), увеличить, отправить и дождаться получения до обработки следующего. Это очень медленно, если вам нужна высокая пропускная способность, и вы полагаетесь на доступность и синхронизацию определенного узла.
Вы поддерживаете свой собственный локальный счетчик persisted на уровне базы данных. Используйте блокировки доступа к БД для обработки возможных одновременных запросов и каждый раз возвращайте правильные значения. Вы не хотите хранить эти счетчики в памяти, так как они будут потеряны, если ваше приложение выйдет из строя или перезапустится. Это очень эффективно, так как вам не нужен узел, и вы можете отправлять столько транзакций, сколько сможете. Если что-то пойдет не так... (один раз слишком низкий) сбросьте значение web3.eth.getTransactionCount(ethAddress).
Важное примечание. Вы можете задаться вопросом, почему бы не использовать web3.eth.getTransactionCount(ethAddress, 'ожидание'). Это связано с тем, что параметр «ожидание» делает вызов ненадежным, поскольку узлам сложно иметь точное количество транзакций в очереди и пуле памяти.
Для лучшего понимания того, как узлы смотрят на одноразовый номер вашего сообщения. Проверьте этот ответ здесь: https:/ /ethereum.stackexchange.com/questions/2808/what-happens-when-a-transaction-nonce-is-too-high/2809#2809
И это тоже: Отправить необработанную транзакцию Ethereum infura nodejs npm а>
Насколько я понимаю, здесь может быть две проблемы (решения); 1) Возможно, вам придется вручную увеличить одноразовый номер для оценки газа операций мультипередачи. 2) Некоторые серверы в наши дни работают довольно медленно, поэтому либо вы получаете транзакцию (опрос) первой транзакции, прежде чем выполнять вторую, чтобы убедиться, что она была добыта. Таким образом, у вас, вероятно, будет правильный одноразовый номер для второй транзакции. Однако, если вам лень это делать, просто разумны задержки между двумя транзакциями.
nonce too low
- person Максаткалиулы Адилет; 09.06.2019