Skip to main content
Метод RPC getBlock позволяет получить подробную информацию о подтвержденном блоке в реестре Solana. Это необходимо для обозревателей блоков, анализа истории транзакций и изучения состояния сети в определенный момент времени.
Для повышения производительности не объединяйте запросы в пакетыПакетная отправка запросов к архивным методам значительно увеличивает задержку. Пакеты, содержащие более 10 запросов, не допускаются.

Распространенные сценарии использования

  • Просмотр содержимого блока: Просмотрите все транзакции, включенные в определенный блок.
  • Получение хешей блоков: Получите хеш блока для заданного слота, хеш родительского блока и родительский слот.
  • Проверка высоты и времени блока: Узнайте высоту блока (его порядковый номер) и расчетное время его создания.
  • Анализ сведений о транзакциях: С помощью соответствующих параметров можно получить полные данные транзакций, включая метаданные: комиссии, статус, балансы до и после транзакции, а также внутренние инструкции.
  • Получение вознаграждений: При необходимости включите информацию о вознаграждениях блока.

Параметры

  1. slot (число, обязательный): Номер слота блока для запроса (u64).
  2. config (объект, необязательный): Объект конфигурации со следующими полями:
    • commitment (строка, необязательный): Указывает используемый уровень подтверждения. processed не поддерживается этим методом. Значение по умолчанию — finalized.
    • encoding (строка, необязательный): Кодировка данных транзакций. По умолчанию используется json, если transactionDetails имеет значение full или accounts; в противном случае используется base64.
      • json: Возвращает данные транзакций и учетных записей в формате JSON (устарел; вместо него используйте jsonParsed).
      • jsonParsed: Возвращает данные транзакций и учетных записей в виде разобранного JSON. Это рекомендуемый вариант, поскольку он включает все ключи учетных записей транзакции, в том числе полученные из таблиц поиска адресов (Address Lookup Tables).
      • base58 (медленно)
      • base64
      • base64+zstd
    • transactionDetails (строка, необязательный): Указывает возвращаемый уровень детализации транзакций. Значение по умолчанию — full.
      • full: Возвращает полные сведения о транзакциях, включая их метаданные.
      • accounts: Возвращает список учетных записей, указанных в каждой транзакции, но не полные данные или метаданные транзакций.
      • signatures: Возвращает только подписи транзакций.
      • none: Не возвращает сведения о транзакциях.
    • rewards (логическое значение, необязательный): Определяет, следует ли включать массив вознаграждений в ответ. Значение по умолчанию — false.
    • maxSupportedTransactionVersion (число, необязательный): Максимальная возвращаемая версия транзакции. Если блок содержит транзакцию более высокой версии, запрос завершается ошибкой JSON-RPC -32015. Если параметр не указан, возвращаются только устаревшие транзакции, а наличие в блоке любой версионированной транзакции вызывает ошибку. Укажите 1, чтобы включить устаревшие транзакции, транзакции v0 (с таблицами поиска адресов) и v1. См. раздел Поддержка транзакций v1.

Ответ

Если указанный блок подтвержден и найден, поле result будет содержать объект с информацией о блоке. Если блок не найден или не подтвержден, значением result будет null. Основные поля объекта блока:
  • blockhash (строка): Хеш этого блока в кодировке base58.
  • previousBlockhash (строка): Хеш предыдущего блока в кодировке base58. Если родительский блок недоступен из-за очистки реестра, здесь может быть указан идентификатор системной программы.
  • parentSlot (число): Номер слота родительского блока.
  • transactions (массив): Массив объектов транзакций, включенных в блок. Структура этих объектов зависит от параметров encoding и transactionDetails.
    • Каждый объект транзакции обычно содержит meta (метаданные, такие как комиссия, статус, журналы и балансы до и после транзакции) и transaction (фактические данные транзакции, включая сообщение и подписи).
  • rewards (массив, необязательный): Массив объектов вознаграждений, присутствующий, если указано rewards: true. Каждый объект содержит сведения о pubkey, lamports, postBalance, rewardType и, возможно, commission.
  • blockTime (число | null): Расчетное время создания блока в виде временной метки Unix (количество секунд с начала эпохи) или null, если оно недоступно.
  • blockHeight (число | null): Высота этого блока (количество предшествующих ему блоков в цепочке, начинающейся со слота 0) или null, если она недоступна.
Полную и подробную структуру объектов транзакции и метаданных в ответе см. в официальной документации Solana RPC.

Пример: получение информации о блоке

Попробуем получить информацию для условного номера слота в Devnet. Важно: Слоты обрабатываются быстро. Номер слота, используемый ниже (250000000), приведен в качестве заполнителя. При запуске примера замените его номером недавнего подтвержденного слота, который существует в целевой сети, например Devnet или Mainnet. Номера недавних слотов можно найти с помощью обозревателя блоков Solana. Примечание: В приведенных ниже примерах замените YOUR_API_KEY фактическим ключом API Helius.

Рекомендации разработчикам

  • Слот и высота блока: Помните, что getBlock принимает в качестве входных данных номер slot, который не обязательно совпадает с высотой блока. Хотя слоты идут последовательно, лидеры могут пропускать некоторые из них. Поле blockHeight в ответе указывает фактическое количество предшествующих блоков.
  • maxSupportedTransactionVersion имеет критическое значение: Чтобы просматривать блоки с версионированными транзакциями, которые теперь являются стандартными и используют таблицы поиска адресов, необходимо указать maxSupportedTransactionVersion: 1 (или более высокую версию, если появится новый стандарт). Если этого не сделать, для большинства современных блоков будут возникать ошибки.
  • Выбор transactionDetails:
    • full требуется для наиболее подробного анализа, но возвращает наибольший объем данных.
    • signatures полезен, если требуется только перечислить транзакции в блоке.
    • accounts может быть компромиссным вариантом, если нужно увидеть задействованные учетные записи без получения всех данных инструкций.
    • none используется редко, но может быть полезен, если нужны только метаданные уровня блока, например blockhash или rewards.
  • Для кодировки рекомендуется jsonParsed: При запросе сведений о транзакциях jsonParsed возвращает наиболее удобные для разработчиков данные и правильно разрешает учетные записи из таблиц поиска адресов, чего не делает устаревший вариант json.
  • Недоступность блока: Результат null означает, что блок в этом слоте не найден. Это может произойти, если слот был пропущен, блок не подтвержден до уровня, указанного параметром commitment, или узел RPC удалил этот исторический блок из реестра, что часто происходит со старыми слотами.
  • Информация о вознаграждениях: Чтобы увидеть распределение вознаграждений за блок между валидатором и, возможно, стейкерами в зависимости от типа вознаграждения, необходимо указать rewards: true. Это увеличивает размер ответа.
  • Понимание структуры блока: Чтобы подробнее узнать, как блоки вписываются в архитектуру Solana, прочитайте статью Слоты, блоки и эпохи в Solana.