Skip to main content
Запустите подписку на Preconfirmations — транзакции, доставляемые до их объединения в записи и преобразования в shreds. Это сигнал о транзакциях с минимальной задержкой, который предлагает Helius. Одна подписка передает как предподтверждения Helius, отправляемые сразу после выполнения транзакции лидером и содержащие статус ее выполнения, так и предподтверждения BAM, отправляемые, когда валидатор обязуется выполнить транзакцию. Установите includeBam: false, чтобы получать только предподтверждения Helius.

Конечные точки

preconfSubscribe доступен через конечную точку Helius Gatekeeper:
  • wss://beta.helius-rpc.com/?api-key=<API_KEY>
Имя хоста beta относится к развертыванию Gatekeeper, а не к степени готовности Preconfirmations. По мере переноса трафика на Gatekeeper эта конечная точка станет стандартной.
Поток не является непрерывным. Покрытие зависит от доли стейка сети, перенаправляемой в Helius или использующей BAM, поэтому в некоторых слотах сообщений не будет — корректно обрабатывайте такие пропуски. См. раздел «Покрытие».

Авторизация

string
обязательно
Ваш ключ API Helius, передаваемый в параметре запроса api-key. Требуется тариф Professional или выше.

Тело запроса

array
Необязательно. Не указывайте params, чтобы получать каждую транзакцию как от Helius, так и от BAM. Чтобы сузить поток, передайте объект фильтра первым элементом. Фильтрация выполняется на стороне сервера, поэтому вы получаете и оплачиваете только нужные вам транзакции.
Недопустимый публичный ключ, подпись, фильтр инструкций или код региона приводит к ошибке JSON-RPC -32602 (недопустимые параметры). Фильтры инструкций проверяют только инструкции верхнего уровня. Они не сопоставляются с инструкциями, вызванными посредством межпрограммного вызова (CPI). Конечное смещение memcmp и dataSize не должны превышать 4 096 байт. Фильтры аккаунтов сопоставляются не только со статическими ключами аккаунтов транзакции. Helius разрешает v0 таблицы поиска адресов на стороне сервера, поэтому accountInclude, accountExclude и accountRequired также сопоставляются с аккаунтами, которые транзакция загружает через ALT.

Коды регионов

Для предподтверждений Helius указывается регион, в котором Helius получил транзакцию. Для предподтверждений BAM указывается региональная конечная точка BAM, отправившая предподтверждение, а не место получения транзакции системой Helius. Конечные точки BAM в Сингапуре и Далласе соответствуют sgp и dal.

Ответ

integer
Идентификатор подписки (необходим для отмены подписки)

Уведомления

После подтверждения JSON уведомления доставляются в виде двоичных кадров WebSocket, а не JSON. Предподтверждения Helius и BAM используют одинаковую структуру. Каждый кадр представляет собой упакованную последовательность байтов, содержащую одну транзакцию: Полезная нагрузка не содержит поля источника. Не определяйте происхождение из BAM по tx_index = 0, поскольку другие источники также могут сообщать 0.
Всегда сначала считывайте и проверяйте байт version. Сейчас он равен 1. Если Helius потребуется обновить формат полезной нагрузки, номер версии увеличится. Создайте отдельную ветвь обработки для каждой версии, чтобы декодер продолжал работать при изменениях схемы.
Предподтверждение — это ранний сигнал, а не гарантия. Транзакция еще не попала в блокчейн и все еще может завершиться ошибкой или быть отброшена. Прежде чем считать ее окончательной, подтвердите ее включение с помощью стандартных проверок уровня подтверждения.

Декодирование транзакции

Байты транзакции пересылаются точно в том виде, в котором их сериализовал валидатор, со стандартной сетевой кодировкой для соответствующей версии транзакции. Транзакции Legacy и v0 используют структуру с подписями в начале, которую создает bincode. Транзакция v1 (SIMD-0385) использует структуру с сообщением в начале и подписями в конце, поэтому bincode не может обработать полезную нагрузку v1. Используйте декодер, поддерживающий все версии. В Rust agave-transaction-view разбирает транзакции Legacy, v0 и v1 на месте и является рекомендуемым вариантом. Также подойдет wincode с актуальным VersionedTransaction SDK Solana. При использовании JavaScript убедитесь, что версия вашей библиотеки поддерживает транзакции v1. Пример для Rust приведен в руководстве.

Дублирующиеся уведомления

Предподтверждения Helius и BAM дедуплицируются отдельно для каждого источника, но не между источниками. Небольшая доля транзакций достигает Helius обоими путями, поэтому вы можете дважды получить одну и ту же подпись, причем две копии могут содержать разные слоты. Выполняйте дедупликацию по подписи на стороне клиента и обеспечьте идемпотентность действий, запускаемых транзакциями. См. руководство.

Стоимость

Минимум в 300 кредитов за слот вступает в силу 14 октября 2026 года. До этой даты Preconfirmations оплачиваются из расчета 10 кредитов за сообщение без минимальной платы.
Для Preconfirmations требуется тариф Professional или выше. Стоимость составляет 10 кредитов за сообщение, при этом для каждой подписки действует минимум в 300 кредитов за слот. Подробности см. в разделе «Кредиты». Минимальная плата применяется только к слотам с покрытием Preconfirmations. В каждом покрытом слоте за подписку списывается большая из двух сумм: 10 кредитов за каждое доставленное сообщение или 300 кредитов. Слоты без покрытия не оплачиваются. Информацию о том, какие слоты учитываются при расчете минимума, см. в разделе «Стоимость». Минимальная плата рассчитывается отдельно для каждой подписки, поэтому за каждую открытую подписку preconfSubscribe списывается не менее 300 кредитов за покрытый слот. Закрывайте ненужные подписки с помощью preconfUnsubscribe. Оплата начисляется за каждое сообщение, а не за каждую уникальную подпись. Транзакция, доставленная как Helius, так и BAM, учитывается дважды. Установите includeBam: false, если хотите получать только предподтверждения Helius.

Связанные материалы

Preconfirmations Overview

Что такое Preconfirmations и какое место они занимают в конвейере валидатора.

preconfUnsubscribe

Остановите подписку по ее идентификатору.