Skip to main content

Обзор

Предварительно обработанные транзакции — это транзакции Solana до выполнения, передаваемые до того, как они достигнут уровня подтверждения processed. Helius объединяет несколько источников данных до выполнения — в основном шреды, декодируемые сразу по мере их поступления на валидатор, а также сигналы предварительного подтверждения — и передает их в виде единого потока без дубликатов. Вам не нужно получать необработанные пакеты шредов или поддерживать собственную инфраструктуру для их декодирования. Транзакции из сигналов предварительного подтверждения поступают в этот поток позже, чем в специализированный продукт Preconfirmations, который по-прежнему предоставляет к ним наиболее ранний доступ. Для получения предварительно обработанных транзакций используйте метод WebSocket preprocessedSubscribe (публичная бета-версия). Он доступен на всех платных тарифах по цене 0,1 кредита за сообщение.

preprocessedSubscribe (WSS)

Рекомендуемый способ потокового получения предварительно обработанных транзакций: фильтрация по аккаунтам, компактные двоичные данные и доступность на всех платных тарифах.

Место предварительно обработанных транзакций в жизненном цикле

В архитектуре Solana транзакции проходят несколько этапов, прежде чем будут полностью обработаны:
  1. Получение шредов → Валидатор получает шреды транзакций (фрагменты данных). ← Необработанные шреды (UDP) передаются на этом этапе.
  2. Декодирование шредов → Шреды декодируются в необработанные транзакции. ← Предварительно обработанные транзакции в основном передаются на этом этапе.
  3. Выполнение транзакции → Среда выполнения исполняет транзакцию.
  4. Создание метаданных → Вычисляются балансы до и после выполнения, журналы и сведения об ошибках.
  5. Подтверждение → Транзакция достигает состояния processed/confirmed/finalized. ← LaserStream gRPC и LaserStream WebSocket передают данные на этом этапе.
Подписки на данные после выполнения передают их на этапе 5 — после полного выполнения и создания метаданных. Предварительно обработанные транзакции передаются на этапе 2 — после декодирования шредов, но до завершения выполнения. Для получения еще более раннего сигнала используйте Preconfirmations, который передает транзакции в потоке до их преобразования в шреды. Компромисс: вы получаете данные транзакции раньше, но без метаданных выполнения, таких как изменения баланса, журналы или сведения об ошибках.
Этот поток содержит только транзакции. Обновления состояния аккаунтов и программ появляются только после выполнения транзакции средой выполнения. Если вам нужны обновления аккаунтов или программ в реальном времени — балансы токенов, состояние кривой привязки, аккаунты программ — вместо этого используйте LaserStream gRPC с уровнем подтверждения processed.

Какие данные доступны?

Предварительно обработанные транзакции содержат полную подписанную транзакцию, но не содержат метаданных выполнения:

Доступные данные

  • ✅ Подпись транзакции — уникальный идентификатор транзакции
  • ✅ Ключи аккаунтов — все аккаунты, на которые ссылается транзакция
  • ✅ Инструкции — полные данные инструкций и вызовы программ
  • ✅ Недавний хеш блока — ориентир для срока действия транзакции
  • ✅ Подписи — все подписи транзакции
  • ✅ Номер слота — слот, в котором наблюдалась транзакция

Отсутствующие данные

  • ❌ Метаданные транзакции — изменения балансов токенов, балансы до и после выполнения, статус транзакции
  • ❌ Ошибки транзакции — невозможно определить, завершилась ли транзакция с ошибкой
  • ❌ Внутренние инструкции — межпрограммные вызовы (CPI) не включены
  • ❌ Сообщения журналов — журналы программ создаются во время выполнения
  • ❌ Израсходованные вычислительные единицы — метрики выполнения недоступны
Предварительно обработанные транзакции можно сравнить с получением «предложения» без «результата». Вы видите, что отправитель пытался сделать, но не то, что произошло в действительности.

Гарантии доставки

Доставка выполняется по мере возможности и не гарантируется; воспроизведение исторических данных отсутствует. Транзакция в потоке — это сигнал до выполнения, а не уровень подтверждения: она может завершиться с ошибкой, быть отброшена или попасть в другую ветвь. Удаляйте дубликаты по подписи и сверяйте данные с потоком уровня processed или confirmed, если важны результаты выполнения. Для критически важных приложений, которым требуются гарантированная доставка и полные данные, используйте LaserStream gRPC.

Когда использовать предварительно обработанные транзакции

Они подходят приложениям, чувствительным к задержке, которым нужны декодированные транзакции до выполнения без поддержки собственного декодера шредов:
  • propAMM
  • Снайперы
  • Боты для копирования сделок
  • Ликвидационные боты
  • Арбитраж
Если важна каждая микросекунда и вы можете декодировать шреды на полной линейной скорости, используйте необработанные шреды (UDP). Если вам нужен самый ранний из возможных сигналов, используйте Preconfirmations.

Цены

preprocessedSubscribe доступен на всех платных тарифах и тарифицируется по ставке 0,1 кредита за сообщение — одно сообщение на каждую доставленную транзакцию. Подробнее см. в разделе «Кредиты».

Часто задаваемые вопросы

Нет, фильтр задается первоначальным preprocessedSubscribe и затем не меняется. Чтобы избежать разрыва, рекомендуем открыть второе соединение с новым фильтром, дождаться подтверждения подписки и затем переключить сервис на новый фильтр.
Ограничение в 10 одновременных соединений применяется отдельно к каждому ключу API. Для каждого ключа API в проекте действует собственное ограничение в 10 соединений.

Дальнейшие действия

Subscribe with preprocessedSubscribe

Конечная точка, фильтрация по аккаунтам, структура двоичных данных и примеры кода.

Preconfirmations

Транзакции передаются в потоке до их преобразования в шреды — это самый ранний сигнал о транзакции.

Raw Shreds (UDP)

Необработанные пакеты шредов через UDP. Декодирование шредов реализуете вы.

Helius Sender

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