Общие структуры данных 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> - комиссия, взимаемая за эту транзакцию, в виде целого числа u64
  • preBalances: <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-58
    • lamports: <i64>- количество лампортов награды, зачисленных или списанных с аккаунта, в виде i64
    • postBalance: <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 Pubkey
    • data: <[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?

Содержание

Редактировать страницу