Как избежать повторного 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 и сделать первый номер устаревшим.

Сохраните хеш подписанной транзакции рядом с выданным номером. При неоднозначном сетевом тайм-ауте проверьте результат по хешу и обновите состояние ключа до повторного подписания операции.

Источники