Общие структуры данных 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?