Публичная бета-версия.
preprocessedSubscribe доступен на всех платных тарифах
и тарифицируется по ставке 0,1 кредита за сообщение (одно сообщение на каждую
доставленную транзакцию).Что такое preprocessedSubscribe?
preprocessedSubscribe — это метод WebSocket от Helius, который передает поток предварительно обработанных транзакций — транзакций Solana до выполнения, доставляемых до достижения ими уровня подтверждения processed. Helius объединяет несколько источников данных до выполнения — главным образом шреды, декодируемые непосредственно по мере их поступления валидатору и дополненные сигналами предварительного подтверждения, — и доставляет их в виде единого дедуплицированного потока компактных бинарных сообщений. Вам не требуется собственная инфраструктура сборки шредов.
Транзакции, полученные из сигналов предварительного подтверждения, поступают в этот поток позже, чем в специализированный продукт Preconfirmations, который по-прежнему обеспечивает самый ранний доступ к ним.
Этот метод пришел на смену предыдущему продукту предварительно обработанных данных LaserStream (gRPC). Если сейчас вы получаете предварительно обработанные транзакции через gRPC, перейдите на этот метод: он доставляет тот же класс данных через обычное соединение WebSocket с меньшей задержкой, а доставка через gRPC будет объявлена устаревшей.
Конечная точка
preprocessedSubscribe обслуживается через wss://beta.helius-rpc.com — конечную точку Helius Gatekeeper, — а не через mainnet.helius-rpc.com. Для аутентификации передайте ключ API в качестве параметра запроса:
Подписка
Отправьте запрос JSON-RPC с методомpreprocessedSubscribe. Обязательный параметр params содержит фильтры аккаунтов: в accountInclude и accountRequired должен быть указан хотя бы один аккаунт (см. раздел Фильтрация):
Фильтрация
Область каждой подписки определяется фильтрами аккаунтов вparams. Фильтрация выполняется на стороне сервера, поэтому вы получаете только нужные вам транзакции:
Правила фильтрации:
- Три фильтра объединяются логическим оператором AND.
- В
accountIncludeиaccountRequiredдолжен быть указан хотя бы один аккаунт — полный поток без фильтрации недоступен. - Аккаунты указываются как публичные ключи в кодировке base58. Каждый список может содержать до 5 000 адресов.
Разрешение таблиц поиска адресов (ALT)
Фильтры аккаунтов сопоставляются не только со статическими ключами аккаунтов транзакции: Helius разрешает таблицы поиска адресов на стороне сервера, поэтомуaccountInclude, accountExclude и accountRequired также сопоставляются с аккаунтами, которые транзакция загружает через ALT. Просто передайте публичный ключ аккаунта. Вам не нужно вести сопоставления ALT или самостоятельно разрешать таблицы.
Полезные данные уведомления
Уведомления доставляются в виде бинарных кадров WebSocket, а не JSON. Каждый кадр содержит одну транзакцию в упакованной структуре байтов:
Последовательно прочитайте фиксированный 73-байтовый префикс, а затем декодируйте оставшиеся байты, чтобы получить инструкции, аккаунты и обращения к таблицам адресов. Подпись включена в префикс, поэтому вы можете идентифицировать и дедуплицировать транзакцию, не декодируя ее полное тело.
Всегда сначала считывайте и проверяйте байт
version. Если Helius потребуется обновить формат полезных данных, номер версии увеличится. Добавьте ветвление по нему, чтобы декодер продолжал работать после изменений схемы.
Декодирование транзакции
Байты транзакции передаются в точности в том виде, в котором они наблюдались в сети, в стандартной сетевой кодировке соответствующей версии транзакции. Транзакции устаревшего формата и v0 используют структуру с подписями в начале, которую создаетbincode. Транзакции v1 (SIMD-0385) используют структуру с сообщением в начале и подписями в конце, поэтому bincode не может обработать полезные данные v1. Используйте декодер, поддерживающий все версии:
- Rust:
agave-transaction-viewвыполняет разбор транзакций устаревшего формата, v0 и v1 на месте, без промежуточного копирования. Это рекомендуемый вариант.wincode, совместимый с bincode сериализатор, который используется текущими SDK Solana, также декодирует v1 вVersionedTransaction. - JavaScript / TypeScript: убедитесь, что версия вашей библиотеки поддерживает транзакции v1. Более старые реализации
VersionedTransaction.deserializeподдерживают только устаревший формат и v0. Используйте@solana/kit8.0+ или@solana/web3.jsv3. См. раздел Поддержка транзакций v1.
Пример
Какие данные доступны?
Каждое уведомление содержит подписанную транзакцию, ее первую подпись и слот. Поскольку доставка происходит до выполнения, поток не содержит:- Статус выполнения или ошибки
- Балансы до и после выполнения или изменения балансов токенов
- Сообщения журналов или внутренние инструкции
- Количество использованных вычислительных единиц
processed.
Обратное давление
Поток не буферизует данные для медленных потребителей бесконечно. Если ваш клиент читает слишком медленно и на стороне сервера накапливается более 4 000 сообщений, Helius закрывает соединение — вы получаете корректный кадр закрытия WebSocket. Обрабатывайте кадры быстрее, чем они поступают: вынесите ресурсоемкие операции, такие как декодирование транзакций и логика стратегии, за пределы цикла приема. После отключения повторно подключитесь и оформите подписку заново.Гарантии доставки
Доставка выполняется без гарантий, а воспроизведение исторических данных недоступно. Клиентам следует:- Повторно подключаться и оформлять подписку заново после закрытия соединения.
- Выполнять дедупликацию по подписи транзакции.
- Считать слот наблюдением, а не окончательным результатом.
- Сопоставлять данные с обработанным или подтвержденным потоком, когда важны результаты выполнения.
Тарификация
preprocessedSubscribe доступен на всех платных тарифах и тарифицируется по ставке 0,1 кредита за сообщение — одно сообщение на каждую доставленную транзакцию, со списанием в рамках вашего тарифа. Подробности см. в разделе Кредиты.
Связанные материалы
Preconfirmations
Транзакции, передаваемые в потоке до их преобразования в шреды, — самый ранний сигнал о транзакции.
Raw Shreds (UDP)
Необработанные пакеты шредов через UDP. Сборку шредов реализуете вы.
transactionSubscribe
Транзакции после выполнения с расширенной фильтрацией и метаданными выполнения.