Как разобрать ошибку версии при чтении транзакции 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-транзакции.