Skip to main content

Что такое Parsed Streams?

Parsed Streams — это сервис WebSocket, который отслеживает каждую подтвержденную транзакцию Solana (кроме транзакций голосования), декодирует ее и отправляет вам транзакции, соответствующие заданному фильтру. Вы указываете: «Меня интересуют инструкции маршрутизации Jupiter» или «Меня интересует все, что затрагивает этот аккаунт», а сервер выполняет отслеживание, декодирование и сопоставление. Вы получаете целые, уже декодированные транзакции: каждую инструкцию с именованными аргументами и аккаунтами, комиссию, полный список ключей аккаунтов, summary уровня транзакции с описанием произошедшего, переводы SOL и токенов, а также ссылки на конкретные инструкции, соответствующие вашему фильтру. Все данные передаются с уровнем подтверждения confirmed.

Ментальная модель

Если вы уже знакомы с внутренним устройством Solana, переходите к следующему разделу. В противном случае изучите модель, на которой построен весь API. Транзакция — это подписанное сообщение. В нем указывается плательщик комиссии, перечисляются все аккаунты, которых оно коснется, и содержится список инструкций. В транзакции можно увидеть подпись (ее уникальный идентификатор), слот, в который она попала, уплаченную комиссию, ключи аккаунтов, статус выполнения и инструкции. Инструкция — это одно действие: выполнить эту программу с указанными входными данными и этими аккаунтами. Например, обмен в Jupiter, перевод токенов или memo. Транзакция обычно содержит несколько инструкций, которые выполняются по порядку. Программы могут вызывать другие программы. Когда Jupiter выполняет обмен, он не перемещает токены самостоятельно. Его инструкция маршрутизации вызывает программу токенов для перемещения токенов и программы бирж, в которых хранится ликвидность. Эти вложенные вызовы также являются инструкциями и называются внутренними инструкциями (или CPI, cross program invocations). Это важно при создании фильтра: значительная часть реальной активности, например фактическое перемещение токенов во время обмена, происходит во внутренних инструкциях, поэтому по умолчанию фильтр также сопоставляет их. Если вам нужны только инструкции, подписанные пользователем, задайте для includeCpi значение false. Аккаунты — это объекты в блокчейне, с которыми работает инструкция: кошельки, балансы токенов, пулы и минты. Каждая инструкция содержит их в виде упорядоченного списка адресов, причем порядок является частью контракта: программа определяет назначение каждой позиции. Например, программа токенов ожидает сначала аккаунт, с которого нужно списать токены, затем аккаунт, который должен их получить, и после этого владельца, разрешающего перевод. Роли присваивают этим позициям имена. Большинство известных программ публикуют машиночитаемое руководство по своему интерфейсу, которое называется IDL. В нем перечислены все инструкции программы, назначение их полей данных и каждой позиции аккаунта. Helius ведет каталог таких руководств для тысяч программ. С его помощью простой список адресов превращается в именованные аккаунты: для перевода токенов позиция 0 становится source, позиция 1 — destination, а позиция 2 — authority. Вместо того чтобы гадать о назначении третьего адреса, вы видите {"name": "authority", "pubkey": "9xQe...", "isSigner": true}. Эти имена являются ролями, по которым можно фильтровать. Декодирование применяет тот же принцип к входным данным инструкции. При передаче эти данные представляют собой непрозрачную последовательность байтов. С помощью руководства программы байты преобразуются в именованные значения: {"in_amount": "1000000", "slippage_bps": 50}. Декодировать можно не каждую инструкцию, поэтому каждая из них относится к одному из трех состояний, которые можно определить непосредственно по ее полям:
  • Декодированная: инструкция содержит объект decoded с именованными args и именованными accounts.
  • Распознанная: помимо decoded, инструкция содержит summary с type (например, swap), удобочитаемым description и структурированной полезной нагрузкой parsedData, например метаданными обмена с суммами и минтами.
  • Недекодированная: программы или инструкции нет в каталоге, значение decoded равно null, а инструкция вместо этого содержит необработанные байты (rawData) и простой список адресов (rawAccounts), поэтому у вас всегда остаются данные для работы.
Это вся модель, и ваш фильтр строится непосредственно на ее основе:
  • programs: какую программу вызывает инструкция
  • instructionNames: как это действие называется в руководстве программы
  • accounts.include: какие адреса оно затрагивает
  • accounts.roles: в какой именованной позиции должен находиться определенный адрес
  • includeCpi и includeFailed: учитывать ли внутренние инструкции и неуспешные транзакции
Фильтры выбирают инструкции, а уведомления доставляют целую транзакцию.

Сравнение

vs Enhanced WebSockets

Enhanced WebSockets передает целые транзакции или обновления аккаунтов без декодирования. Parsed Streams выполняет сопоставление на уровне инструкций и декодирует все за вас.

vs LaserStream gRPC

LaserStream — это высокопроизводительный поток данных gRPC, который вы фильтруете и декодируете на стороне клиента. Parsed Streams — это API WebSocket, который выполняет фильтрацию и декодирование на сервере.

vs Parsed Events

Parsed Events применяет такое же декодирование к историческим транзакциям: анализирует подписи или по запросу постранично перебирает историю адреса через REST. Parsed Streams отправляет новые транзакции по мере их поступления.

Поддерживаемые программы

Parsed Streams декодирует более 3 600 программ с помощью их IDL в блокчейне, а также основные программы, такие как SPL Token, Token-2022 и System Program, с помощью встроенных декодеров. Фильтровать можно по адресу любой программы. Инструкции, которые сервис не может декодировать, передаются в виде необработанных данных инструкций. Некоторые из наиболее часто используемых декодируемых программ:
Не видите нужную программу? Скорее всего, она все равно есть в каталоге. Вызовите describeProgram, указав ее адрес, чтобы просмотреть ее инструкции, события и роли аккаунтов.

Доступ и цены

Parsed Streams доступен на всех тарифах, включая Free. Он заменяет Enhanced Transaction Webhooks для получения разобранных данных транзакций в реальном времени. Получите ключ API на панели управления Helius. Каждое доставленное событие стоит 1 кредит — столько же, сколько событие вебхука. Полный список цен см. в разделе «Кредиты». Parsed Streams доступен через конечную точку Gatekeeper на том же хосте, что и трафик Helius RPC и WebSocket. Отдельного хоста Parsed Streams нет:
Для аутентификации используйте ключ API своего проекта, передавая его в параметре запроса api-key (или заголовке x-api-key). Ключ проверяется при открытии подключения: если ключ отсутствует или недействителен, запрос отклоняется с кодом HTTP 401, а если проект достиг ограничения на количество подключений — с кодом HTTP 429.

Начало работы

Quickstart

Подключитесь, отправьте первый фильтр и прочитайте уведомление.

Track Jupiter Swaps

Создайте реальный фильтр с помощью обнаружения программ и оформите подписку.

Track Pump.fun Mints

Используйте устойчивый к переподключениям обработчик, который регистрирует каждое новое развертывание токена Pump.fun.

Handling Reconnects

Обнаруживайте разрывы подключения, увеличивайте задержку, повторно оформляйте подписку и загружайте пропущенные слоты.