getBlockCommitment предоставляет информацию о статусе подтверждения конкретного блока в реестре Solana. Это позволяет оценить степень финализации блока на основе стейка, проголосовавшего за него.
Распространенные сценарии использования
- Оценка финализации блока: Определите достигнутый блоком уровень консенсуса, анализируя взвешенные по стейку голоса на разных глубинах подтверждения.
- Оценка состояния кластера:
totalStakeпозволяет узнать общий активный стейк в кластере на момент обработки блока. - Расширенная логика подтверждения: Подходит для приложений, которым требуются строго определенные гарантии финализации блока помимо стандартных уровней подтверждения (
confirmed,finalized).
Параметры
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.