Skip to main content
Метод RPC getLatestBlockhash необходим для подготовки и отправки транзакций в сети Solana. Он получает последний хеш блока, обработанный узлом, а также последнюю высоту блока, до которой этот хеш блока будет действителен. Подробнее об эффективном использовании хешей блоков и успешном включении транзакций в блок читайте в нашем подробном руководстве. Каждая транзакция в Solana должна ссылаться на недавний хеш блока. Этот механизм помогает предотвратить некоторые типы атак, например повторное воспроизведение транзакции в ответвлении цепочки. Примечание о версии: этот метод доступен в solana-core версии 1.9 или новее. Для узлов, использующих solana-core версии 1.8 или старше, вместо него используйте метод getRecentBlockhash.

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

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

Параметры запроса

Метод может принимать необязательный объект конфигурации со следующими параметрами:
  • commitment (строка, необязательный): задает уровень подтверждения для запроса. Если параметр не указан, используется уровень подтверждения узла по умолчанию. Для транзакций обычно используют confirmed или finalized, чтобы получить хеш блока из достаточно стабильной части цепочки.
  • minContextSlot (целое число, необязательный): минимальный слот, на котором может быть выполнен запрос. Это гарантирует, что запрос выполняется к состоянию реестра, обработавшему данные как минимум до этого слота.

Структура ответа

Поле result ответа JSON-RPC будет объектом RpcResponse. Поле value этого объекта содержит:
  • blockhash (строка): строка в кодировке base58, представляющая последний хеш блока.
  • lastValidBlockHeight (u64): высота блока, на которой истекает срок действия blockhash. Транзакция, ссылающаяся на этот blockhash, действительна, пока сеть не достигнет lastValidBlockHeight.
Ответ также содержит объект context со значением slot, на котором была получена информация.

Примеры

1. Получение последнего хеша блока с уровнем подтверждения по умолчанию

В этом примере последний хеш блока запрашивается с уровнем подтверждения узла по умолчанию.

2. Получение последнего хеша блока с уровнем подтверждения ‘confirmed’

В этом примере последний хеш блока явно запрашивается с уровнем подтверждения confirmed.

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

  • Срок действия хеша блока: хеш блока действителен в течение ограниченного времени — примерно 2 минут, хотя это значение может меняться. Транзакции должны быть подтверждены сетью до достижения их lastValidBlockHeight. Всегда запрашивайте новый хеш блока, если с момента получения предыдущего прошло значительное время.
  • Выбор уровня подтверждения: для критически важных транзакций уровень подтверждения finalized дает наиболее надежную гарантию того, что хеш блока относится к основному ответвлению цепочки, но сам хеш может быть немного старее. confirmed обеспечивает хороший баланс. Подробности см. в материале об уровнях подтверждения.
  • Комиссии за транзакции: не забудьте также рассчитать и указать подходящую комиссию за транзакцию. Сам хеш блока не определяет размер комиссии.
  • Логика повторных попыток: если срок действия транзакции истек из-за достижения lastValidBlockHeight, необходимо повторно подписать ее с новым, более свежим хешем блока и отправить снова.
В этом руководстве описано, как эффективно использовать getLatestBlockhash — один из ключевых компонентов для взаимодействия с сетью Solana посредством транзакций.

Связанные методы

simulateTransaction

Выполните симуляцию транзакции перед отправкой

isBlockhashValid

Проверьте, действителен ли хеш блока