getBlock позволяет получить подробную информацию о подтвержденном блоке в реестре Solana. Это необходимо для обозревателей блоков, анализа истории транзакций и изучения состояния сети в определенный момент времени.
Распространенные сценарии использования
- Просмотр содержимого блока: Просмотрите все транзакции, включенные в определенный блок.
- Получение хешей блоков: Получите хеш блока для заданного слота, хеш родительского блока и родительский слот.
- Проверка высоты и времени блока: Узнайте высоту блока (его порядковый номер) и расчетное время его создания.
- Анализ сведений о транзакциях: С помощью соответствующих параметров можно получить полные данные транзакций, включая метаданные: комиссии, статус, балансы до и после транзакции, а также внутренние инструкции.
- Получение вознаграждений: При необходимости включите информацию о вознаграждениях блока.
Параметры
-
slot(число, обязательный): Номер слота блока для запроса (u64). -
config(объект, необязательный): Объект конфигурации со следующими полями:commitment(строка, необязательный): Указывает используемый уровень подтверждения.processedне поддерживается этим методом. Значение по умолчанию —finalized.encoding(строка, необязательный): Кодировка данных транзакций. По умолчанию используетсяjson, еслиtransactionDetailsимеет значениеfullилиaccounts; в противном случае используетсяbase64.json: Возвращает данные транзакций и учетных записей в формате JSON (устарел; вместо него используйтеjsonParsed).jsonParsed: Возвращает данные транзакций и учетных записей в виде разобранного JSON. Это рекомендуемый вариант, поскольку он включает все ключи учетных записей транзакции, в том числе полученные из таблиц поиска адресов (Address Lookup Tables).base58(медленно)base64base64+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, если она недоступна.
Пример: получение информации о блоке
Попробуем получить информацию для условного номера слота в 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.