Как избежать повторного nonce у параллельных обработчиков NEAR
Два обработчика могут прочитать один и тот же nonce, пока оба формируют транзакции. Последовательность номеров привязана к ключу доступа.
Найдите конфликтующую последовательность
Подставьте публичный ключ и аккаунт из сбойной операции. Объедините сеть, аккаунт и ключ в идентификатор очереди. У разных ключей доступа одного аккаунта собственные счётчики.
{
"jsonrpc": "2.0",
"id": 1,
"method": "query",
"params": {
"request_type": "view_access_key",
"finality": "final",
"account_id": "worker.testnet",
"public_key": "ed25519:PUBLIC_KEY"
}
}
Упорядочьте отправку и разберите тайм-аут
При прочитанном nonce 500 два независимых обработчика могут выбрать 501. Единый отправитель выделяет 501 и дожидается принятия перед использованием 502. Одной блокировки при выдаче номеров мало: 502 может попасть в цепочку раньше 501 и сделать первый номер устаревшим.
Сохраните хеш подписанной транзакции рядом с выданным номером. При неоднозначном сетевом тайм-ауте проверьте результат по хешу и обновите состояние ключа до повторного подписания операции.