Skip to main content

Что такое transactionSubscribe?

Метод WebSocket transactionSubscribe (расширение Helius для стандартного WebSocket API Solana) позволяет получать события транзакций в реальном времени. Чтобы использовать его, укажите TransactionSubscribeFilter и при необходимости добавьте TransactionSubscribeOptions для дополнительной настройки. transactionSubscribe доступен на тех же унифицированных конечных точках wss://mainnet.helius-rpc.com и wss://devnet.helius-rpc.com, что и стандартные методы подписки Solana.

TransactionSubscribeFilter

  • vote: логический флаг для включения или исключения транзакций, связанных с голосованием
  • failed: логический флаг для включения или исключения неуспешных транзакций
  • signature: фильтрует обновления для конкретной транзакции по ее подписи
  • accountInclude: список аккаунтов, для которых вы хотите получать обновления транзакций. В обновлениях транзакций должен присутствовать хотя бы один из аккаунтов (например, аккаунт 1 ИЛИ 2).
  • accountExclude: список аккаунтов, которые вы хотите исключить из обновлений транзакций
  • accountRequired: транзакции должны включать все указанные аккаунты, чтобы попасть в обновления (например, аккаунт 1 И 2)
  • tokenAccounts: включаемое расширение связанного аккаунта токена (ATA) (balanceChanged, all или none). См. раздел Отслеживание кошелька, включая переводы токенов ниже.
В массивы accountInclude, accountExclude и accountRequired можно добавить до 50 000 адресов.

TransactionSubscribeOptions (необязательно)

  • commitment: уровень подтверждения для получения данных (processed, confirmed или finalized)
  • encoding: формат кодирования возвращаемых данных (base58, base64 или jsonParsed)
  • transactionDetails: уровень детализации возвращаемых данных (full, signatures, accounts и none)
  • showRewards: логический флаг, указывающий, следует ли включать данные о вознаграждениях в обновления
  • maxSupportedTransactionVersion: задает максимальную версию транзакций, для которых вы хотите получать обновления. Установите значение 1, чтобы получать транзакции устаревшего формата, v0 и v1. См. раздел Поддержка транзакций v1.
maxSupportedTransactionVersion необходим для возврата аккаунтов и полной информации о заданной транзакции (то есть transactionDetails: "accounts" | "full").

Пример подписки на транзакции

В этом примере мы подписываемся на транзакции, содержащие аккаунт Raydium 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8. Когда происходит транзакция, содержащая аккаунт 675k...1Mp8 в accountKeys транзакции, мы получаем уведомление WSS. Согласно параметрам подписки, уведомление о транзакции будет отправлено с уровнем подтверждения processed, кодированием jsonParsed и уровнем детализации транзакции full, а также будет содержать вознаграждения.

Пример уведомления

Отслеживание кошелька, включая переводы токенов

При отслеживании кошелька с помощью accountInclude учитываются только транзакции, в которых публичный ключ кошелька непосредственно присутствует среди ключей аккаунтов. Один распространенный случай остается незамеченным: когда кто-либо отправляет на кошелек токен SPL (например, USDC), перевод затрагивает связанный аккаунт токена (ATA) кошелька, а не публичный ключ кошелька, поэтому обычная подписка accountInclude: [wallet] его не обнаруживает. Задайте поле tokenAccounts, чтобы расширить условия сопоставления: отслеживаемый аккаунт также будет соответствовать транзакциям, в которых он владеет балансом токена:
  • balanceChanged: сопоставлять, если кошелек владеет балансом токена, сумма которого изменилась в транзакции (или аккаунт токена был закрыт). Используйте этот вариант, чтобы узнавать, когда средства действительно перемещаются. Это наиболее узкий, распространенный вариант с наименьшим объемом данных.
  • all: сопоставлять любую транзакцию, ссылающуюся на принадлежащий кошельку баланс токена, даже если он не изменился. Объем данных выше.
  • none: без расширения. Аналогично отсутствию поля (значение по умолчанию).
Сопоставление выполняется по владельцу: оно охватывает все принадлежащие кошельку аккаунты токенов, включая неканонические, а не только производный адрес ATA. Недопустимое значение приводит к ошибке JSON-RPC -32602. Подписки без tokenAccounts работают точно так же, как и раньше. Полное описание расширения ATA см. в разделе Фильтрация аккаунтов токенов (ATA) через WebSocket.

Мониторинг новых DCA Jupiter

DCA Jupiter, или усреднение долларовой стоимости, — это способ запланировать повторяющиеся сделки в Solana. Поскольку такие запланированные ордера на покупку и продажу записываются в блокчейне, трейдеры могут использовать метод transactionSubscribe и getAsset, чтобы отслеживать новые ордера.

Пример уведомления

Terminal tables of new Jupiter DCA orders showing the user wallet, token pair, open time, total input, amount per cycle, and interval

Мониторинг новых токенов pump.fun

Пример уведомления

Terminal tables of newly created pump.fun tokens showing the transaction signature, creator wallet, and token mint address

Управление подписками

Идентификаторы подписок

При успешном вызове transactionSubscribe сервер возвращает идентификатор подписки в поле result. Это то же число, которое отображается в params.subscription каждого уведомления этой подписки:
Сохраните идентификатор подписки из ответа. Он понадобится для отмены подписки.

Отмена подписки

Чтобы прекратить получать уведомления, вызовите transactionUnsubscribe с идентификатором подписки. Каждый вызов transactionSubscribe в рамках одного подключения создает отдельную подписку с собственным идентификатором. Поэтому перед повторной подпиской обязательно отмените предыдущую, чтобы не получать дублирующиеся уведомления.
В этом примере мы подписываемся на транзакции Raydium, получаем идентификатор подписки из ответа сервера, а затем отменяем подписку с помощью этого идентификатора. В течение короткого времени после вызова transactionUnsubscribe могут поступать уже отправленные сообщения. Это ожидаемое поведение.