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
Проверьте, действителен ли хеш блока