Общие структуры данных JSON для методов RPC Solana
Различные методы RPC Solana возвращают более сложные ответы в виде структурированных JSON-объектов, заполненных определёнными значениями с ключами.
Наиболее распространённые из этих структур данных JSON включают:
Транзакции
Транзакции на Solana значительно отличаются от транзакций в других блокчейнах. Обязательно ознакомьтесь с Анатомией транзакции, чтобы узнать больше о транзакциях на Solana.
JSON
Структура JSON для транзакции определяется следующим образом:
message: <object>
- Определяет содержимое транзакции.accountKeys: <array[string]>
- Список публичных ключей, закодированных в base-58, используемых транзакцией, включая те, которые используются в инструкциях и для подписей. Первыеmessage.header.numRequiredSignatures
публичные ключи должны подписать транзакцию.header: <object>
- Описывает типы аккаунтов и подписи, необходимые для транзакции.numRequiredSignatures: <number>
- Общее количество подписей, необходимых для того, чтобы транзакция была действительной. Подписи должны соответствовать первымnumRequiredSignatures
изmessage.accountKeys
.numReadonlySignedAccounts: <number>
- ПоследниеnumReadonlySignedAccounts
подписанные ключи являются аккаунтами только для чтения. Программы могут обрабатывать несколько транзакций, которые загружают аккаунты только для чтения в рамках одной записи PoH, но не могут зачислять или списывать lamports или изменять данные аккаунта. Транзакции, нацеленные на один и тот же аккаунт для чтения и записи, оцениваются последовательно.numReadonlyUnsignedAccounts: <number>
- ПоследниеnumReadonlyUnsignedAccounts
неподписанные ключи являются аккаунтами только для чтения.
recentBlockhash: <string>
- Хэш, закодированный в base-58, недавнего блока в реестре, используемый для предотвращения дублирования транзакций и определения их срока действия.instructions: <array[object]>
- Список программных инструкций, которые будут выполнены последовательно и зафиксированы в одной атомарной транзакции, если все они будут успешными.programIdIndex: <number>
- Индекс в массивеmessage.accountKeys
, указывающий на аккаунт программы, который выполняет эту инструкцию.accounts: <array[number]>
- Список упорядоченных индексов в массивеmessage.accountKeys
, указывающий, какие аккаунты передать программе.data: <string>
- Входные данные программы, закодированные в строке base-58.
addressTableLookups: <array[object]|undefined>
- Список таблиц адресов, используемых транзакцией для динамической загрузки адресов из таблиц адресов в блокчейне. Не определено, еслиmaxSupportedTransactionVersion
не установлен.accountKey: <string>
- Публичный ключ таблицы адресов, закодированный в base-58.writableIndexes: <array[number]>
- Список индексов, используемых для загрузки адресов записываемых аккаунтов из таблицы.readonlyIndexes: <array[number]>
- Список индексов, используемых для загрузки адресов аккаунтов только для чтения из таблицы.
signatures: <array[string]>
- Список подписей, закодированных в base-58, применённых к транзакции. Список всегда имеет длинуmessage.header.numRequiredSignatures
и не пуст. Подпись с индексомi
соответствует публичному ключу с индексомi
вmessage.accountKeys
. Первая подпись используется как идентификатор транзакции.
JSON разобран
Разобранная структура JSON транзакции имеет схожую структуру с обычным форматом JSON, с дополнительным разбором информации об аккаунтах и инструкциях:
message: <object>
- Определяет содержимое транзакции.accountKeys: <array[object]>
- Список информации об аккаунтах, используемых в транзакции.pubkey: <string>
- Публичный ключ аккаунта, закодированный в base-58.signer: <boolean>
- Указывает, является ли аккаунт обязательным подписантом транзакции.writable: <boolean>
- Указывает, можно ли записывать данные в аккаунт.source: <string>
- Источник аккаунта (транзакция или таблица поиска).
recentBlockhash: <string>
- Хэш недавнего блока, закодированный в base-58, используемый для предотвращения дублирования транзакций и задания их срока действия.instructions: <array[object]>
- Список разобранных инструкций программы.program: <string>
- Имя вызываемой программы.programId: <string>
- Публичный ключ программы, закодированный в base-58.stackHeight: <number|null>
- Высота стека инструкции.parsed: <object>
- Разобранные данные, специфичные для программы.type: <string>
- Тип инструкции (например, "transfer").info: <object>
- Разобранная информация об инструкции, специфичная для программы и типа инструкции.
signatures: <array[string]>
- Список подписей, закодированных в base-58, примененных к транзакции.
Метаданные статуса транзакции
err: <object|null>
- Ошибка, если транзакция не удалась, null, если транзакция прошла успешно. Определения ошибок транзакцииfee: <u64>
- комиссия, взимаемая за эту транзакцию, в виде целого числа u64preBalances: <array>
- массив балансов аккаунтов (u64) до обработки транзакцииpostBalances: <array>
- массив балансов аккаунтов (u64) после обработки транзакцииinnerInstructions: <array|null>
- Список вложенных инструкций илиnull
если запись вложенных инструкций не была включена во время этой транзакцииpreTokenBalances: <array|undefined>
- Список балансов токенов до обработки транзакции или отсутствует, если запись балансов токенов еще не была включена во время этой транзакцииpostTokenBalances: <array|undefined>
- Список балансов токенов после обработки транзакции или отсутствует, если запись балансов токенов еще не была включена во время этой транзакцииlogMessages: <array|null>
- массив строковых сообщений журнала илиnull
если запись сообщений журнала не была включена во время этой транзакцииrewards: <array|null>
- награды на уровне транзакции; массив JSON-объектов, содержащих:pubkey: <string>
- Публичный ключ аккаунта, получившего награду, в виде строки, закодированной в base-58lamports: <i64>
- количество лампортов награды, зачисленных или списанных с аккаунта, в виде i64postBalance: <u64>
- баланс аккаунта в лампортах после применения наградыrewardType: <string|undefined>
- тип награды: "fee", "rent", "voting", "staking"commission: <u8|undefined>
- комиссия аккаунта голосования при зачислении награды, присутствует только для наград за голосование и стейкинг
- УСТАРЕЛО:
status: <object>
- Статус транзакции"Ok": <null>
- Транзакция прошла успешно"Err": <ERR>
- Транзакция завершилась с ошибкой TransactionError
loadedAddresses: <object|undefined>
- Адреса транзакции, загруженные из таблиц поиска адресов. Не определено, еслиmaxSupportedTransactionVersion
не установлен в параметрах запроса, или еслиjsonParsed
кодировка установлена в параметрах запроса.writable: <array[string]>
- Упорядоченный список адресов, закодированных в base-58, для записываемых загруженных аккаунтовreadonly: <array[string]>
- Упорядоченный список адресов, закодированных в base-58, для только читаемых загруженных аккаунтов
returnData: <object|undefined>
- самые последние данные возврата, сгенерированные инструкцией в транзакции, с следующими полями:programId: <string>
- программа, сгенерировавшая данные возврата, закодированная в base-58 Pubkeydata: <[string, encoding]>
- сами данные возврата, закодированные в base-64 в виде бинарных данных
computeUnitsConsumed: <u64|undefined>
- количество вычислительных единиц, потребленных транзакциейversion: <"legacy"|number|undefined>
- Версия транзакции. Не определено, еслиmaxSupportedTransactionVersion
не установлен в параметрах запроса.signatures: <array>
- присутствует, если "подписи" запрашиваются для деталей транзакции; массив строк подписей, соответствующих порядку транзакции в блоке
Внутренние инструкции
Среда выполнения Solana фиксирует межпрограммные инструкции, которые вызываются во время обработки транзакций, и предоставляет их для большей прозрачности того, что было выполнено в цепочке для каждой инструкции транзакции. Вызываемые инструкции группируются по исходной инструкции транзакции и перечисляются в порядке обработки.
JSON-структура внутренних инструкций определяется как список объектов в следующей структуре:
index: number
- Индекс инструкции транзакции, из которой произошли внутренние инструкцииinstructions: <array[object]>
- Упорядоченный список внутренних программных инструкций, которые были вызваны в рамках одной инструкции транзакции.programIdIndex: <number>
- Индекс в массивеmessage.accountKeys
, указывающий на аккаунт программы, выполняющий эту инструкцию.accounts: <array[number]>
- Список упорядоченных индексов в массивеmessage.accountKeys
, указывающий, какие аккаунты передать в программу.data: <string>
- Входные данные программы, закодированные в строке base-58.
Балансы токенов
JSON-структура балансов токенов определяется как список объектов в следующей структуре:
accountIndex: <number>
- Индекс аккаунта, для которого предоставлен баланс токенов.mint: <string>
- Pubkey выпуска токена.owner: <string|undefined>
- Pubkey владельца баланса токенов.programId: <string|undefined>
- Pubkey программы Token, которая владеет аккаунтом.uiTokenAmount: <object>
-amount: <string>
- Сырой объем токенов в виде строки, без учета десятичных знаков.decimals: <number>
- Количество десятичных знаков, настроенных для выпуска токена.uiAmount: <number|null>
- Объем токенов в виде числа с плавающей запятой, с учетом десятичных знаков. УСТАРЕЛОuiAmountString: <string>
- Объем токенов в виде строки, с учетом десятичных знаков.
Is this page helpful?