Как разобрать ошибку версии при чтении транзакции Solana

Индексатор может получить ошибку неподдерживаемой версии даже при правильной подписи. Запрос объявляет максимальную версию транзакций, с которой умеет работать клиент.

Укажите фактические возможности декодера

Если декодер поддерживает legacy и v0, подставьте подпись и выполните этот запрос. Храните ошибку RPC отдельно от успешного ответа с null. Последний означает, что транзакцию не удалось получить на выбранном уровне подтверждения.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getTransaction",
  "params": [
    "TRANSACTION_SIGNATURE",
    {
      "encoding": "json",
      "commitment": "finalized",
      "maxSupportedTransactionVersion": 0
    }
  ]
}

Разберите индексы аккаунтов для v0

При кодировании JSON соберите список сначала из message.accountKeys, затем из meta.loadedAddresses.writable и meta.loadedAddresses.readonly при их наличии. Если статические ключи — A и B, загруженный для записи — C, а для чтения — D, индекс аккаунта 2 указывает на C. Декодер, который рассматривает только два статических ключа, такую инструкцию разберёт неверно.

Если формат новее объявленного предела, сохраните подпись для повторной обработки и реализуйте поддержку формата перед повышением лимита запроса. Проверьте декодирование и на транзакции с таблицей адресов, и на обычной legacy-транзакции.

Документация