isBlockhashValid проверяет, считается ли ранее полученный хеш блока действительным в сети. Срок действия хешей блоков ограничен (примерно 2 минуты, или 150 блоков), после чего ссылающиеся на них транзакции будут отклонены.
Этот метод критически важен для приложений, которые некоторое время хранят хеши блоков перед отправкой транзакции. Он позволяет убедиться, что транзакция не завершится ошибкой из-за истечения срока действия хеша блока.
Примечание о версии: этот метод доступен в solana-core версии 1.9 и новее. Для узлов с solana-core версии 1.8 или более ранней используйте getFeeCalculatorForBlockhash. Помимо информации о комиссии, этот метод также косвенно указывает, действителен ли хеш блока: если он слишком старый, метод вернет ошибку.
Распространенные сценарии использования
- Повторная отправка транзакции: перед повторной отправкой транзакции, завершившейся ошибкой, проверьте, действителен ли ее исходный хеш блока. Если нет, необходимо получить новый хеш блока.
- Отложенное подписание транзакции: если транзакция подготовлена, но будет подписана и отправлена позднее, проверьте действительность хеша блока непосредственно перед отправкой.
- Оптимистичная обработка транзакций: определите, будет ли хеш блока принят сетью, если отправить транзакцию немедленно.
Параметры запроса
blockhash(строка, обязательный): проверяемый хеш блока в виде строки, закодированной в base-58.options(объект, необязательный): необязательный объект конфигурации, который может содержать:commitment(строка, необязательный): задает уровень подтверждения для запроса (например,"finalized","confirmed","processed"). Если параметр не указан, используется уровень подтверждения узла по умолчанию.minContextSlot(u64, необязательный): минимальный слот, на котором можно обработать запрос. Это гарантирует, что узел RPC не вернет состояние из слота, предшествующегоminContextSlot.
Структура ответа
Полеresult в ответе JSON-RPC представляет собой объект RpcResponse, содержащий:
context(объект): объект, содержащий:slot(u64): слот, на котором узел RPC оценивал действительность хеша блока.
value(логическое значение):true, если хеш блока все еще действителен, иначеfalse.
Примеры кода
Рекомендации для разработчиков
- Срок действия хешей блоков истекает: хеши блоков действительны только в течение ограниченного времени — около 150 слотов, или примерно 1–2 минут. Всегда получайте новый хеш блока, если не уверены в его актуальности или если прошло значительное время.
- Использование
minContextSlot: используйтеminContextSlotдля защиты от запросов к неактуальному узлу RPC, который может вернуть устаревший ответ «действителен» для хеша блока, фактически уже слишком старого с точки зрения остальной части кластера. - Альтернатива для старых узлов: для узлов с версиями Solana ниже 1.9 используйте
getFeeCalculatorForBlockhash("<YOUR_BLOCKHASH>"). Если этот метод выполнен успешно, хеш блока действителен. Если он возвращает ошибку — обычно потому, что хеш блока не найден или слишком стар, — хеш блока недействителен. - Подтверждение сетью: даже если
isBlockhashValidвозвращаетtrue, транзакция считается окончательно подтвержденной только после того, как после отправки достигнет в сети требуемого уровня подтверждения.
isBlockhashValid при разработке приложений Solana.
Связанные методы
getLatestBlockhash
Получите новый хеш блока для новых транзакций