Skip to main content
Метод RPC getBlockCommitment предоставляет информацию о статусе подтверждения конкретного блока в реестре Solana. Это позволяет оценить степень финализации блока на основе стейка, проголосовавшего за него.

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

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

Параметры

  1. slot (число, обязательный): Номер слота (u64) блока, для которого необходимо запросить информацию о подтверждении.

Ответ

Поле result ответа JSON-RPC содержит объект со следующими полями:
  • commitment (массив целых чисел u64 | null):
    • Массив целых чисел u64, каждое из которых представляет объем стейка кластера (в лампортах), проголосовавшего за блок на определенной глубине подтверждения.
    • Обычно массив содержит 32 элемента, представляющих глубины от 0 до MAX_LOCKOUT_HISTORY, то есть до 31.
    • Элемент массива с индексом i показывает стейк, проголосовавший за блок, с учетом голосов за сам блок и его потомков на глубине до i уровней.
    • Если блок не найден или информация о его подтверждении недоступна — например, блок слишком старый и был удален из системы отслеживания подтверждений, — это поле будет иметь значение null.
  • totalStake (число):
    • Общий активный стейк в кластере (в лампортах) в слоте, в котором был обработан этот блок. Это значение используется для расчета процента стейка, подтвердившего блок.

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

  • Интерпретация массива commitment:
    • Массив commitment показывает стейк (в лампортах), проголосовавший за блок на разных глубинах подтверждения. Более высокие значения у индексов, соответствующих большей глубине, указывают на более надежную финализацию.
    • Значение null для массива commitment часто означает, что узел не располагает данными для этого слота, возможно, потому что слот слишком старый или был пропущен.
    • Вы можете оценить финализацию на глубине i, если commitment[i] / totalStake >= 2/3 (сверхбольшинство).
  • Расширенные сценарии использования: getBlockCommitment предназначен для детального анализа финализации. Для большинства распространенных сценариев проще и достаточно использовать стандартные уровни подтверждения (processed, confirmed или finalized) с другими методами RPC, такими как getTransaction или getBlock.
  • Понимание подтверждения: Чтобы эффективно использовать getBlockCommitment, необходимо хорошо понимать уровни подтверждения Solana. Подробную информацию см. в статье Уровни подтверждения Solana.
  • Удаление старых данных: Учтите, что узлы RPC могут удалять старую информацию о подтверждении, поэтому для старых слотов результатом может быть null.

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

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