Выбор Webhooks, WebSocket или RPC-опроса

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

Используйте адресные Webhooks для доставки на HTTPS-приемник, WebSocket — для поддерживаемых подписок в реальном времени, а ограниченный опрос — когда рабочему процессу требуется собственный курсор и механизм восстановления.

Создание слушателей ончейн-событий для разработчиков и AI Agent требует сопоставления архитектуры приложения с возможностями сети, гарантиями доставки, ограничениями приемника и эксплуатационными затратами.

Матрица принятия решений

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

ИзмерениеАдресные WebhooksПодписки WebSocketОграниченный RPC-опрос
Основной механизмPush-уведомление, доставляемое через HTTPS POST на публичный эндпоинтПотоковая подписка через постоянное TLS-соединение (wss://)Инициируемые клиентом пакетные или периодические запросы HTTP JSON-RPC
Доступность в сетяхВсе поддерживаемые сети, объявленные в GET /v1/push/chainsПоддерживается в Robinhood Chain (robinhood_mainnet и robinhood_testnet); неподдерживаемые сети имеют ws: false и возвращают HTTP 404Все поддерживаемые сети в GET /v1/chains через публичный RPC без ключа или аутентифицированный JSON-RPC
Требования к приемникуПублично доступный HTTPS-URL, действующий TLS-сертификат, ответ 2xx в пределах тайм-аута, проверка подписи HMAC SHA-256 исходного тела запросаИсходящее клиентское TCP/TLS-соединение (wss://); обработка ping/pong heartbeats и задержек при переподключенииНе сохраняющий состояние HTTP-клиент или периодический воркер; хранит локальный курсор блоков
Доставка и порядокДоставка по модели как минимум один раз (at least once) с экспоненциальной задержкой повторов; приемник должен выполнять дедупликацию по id события или по ref + type между подпискамиСтрого упорядоченные фреймы в рамках одного активного сокета; уведомления сбрасываются во время отключенийДетерминированные ответы на запросы для подтвержденных высот блоков; клиент сам задает темп выполнения
Реорганизации сетиОтправка управляющих уведомлений для chain.reorg; приемник отбрасывает замененные события перед применением канонических повторов (replay)Уведомления о логах содержат "removed": true для реорганизованных логов; newHeads требует проверки parent hashКлиент отслеживает непрерывность цепочки по parentHash между тактами опроса для обнаружения реорганизаций
Восстановление после сбоевОкно хранения на сервере позволяет выполнять replay через POST /v1/push/subscriptions/{id}/replay; пропуски до блока активации требуют довыгрузки через eth_getLogsОчередь на стороне сервера отсутствует; клиент переподключается и довыгружает пропущенные диапазоны через eth_getLogs с дедупликацией по (blockHash, transactionHash, logIndex)Возобновление запросов с сохраненного last_synced_block; разбиение на фрагменты по параметру сети max_logs_block_range из GET /v1/chains
Модель тарификацииЕжедневная плата за группу адресов на основе наибольшего количества адресов в статусе online в течение дня по UTC, плюс CU за доставленные события данных; см. тарификацию WebhookРукопожатие и heartbeat-сообщения не тарифицируются; eth_subscribe / eth_unsubscribe и отправленные в сокет единицы уведомлений тарифицируются в CUУчет за каждый запрос в Compute Units: eth_blockNumber, eth_call, eth_getLogs; веса методов и количество CU за $1 из GET /v1/plans, показанные ниже
Оптимально дляМониторинга депозитов пользователей, отслеживания адресов горячих кошельков, платежей мерчантов, асинхронных вебхуков событийПотока newHeads и отфильтрованных логов logs в реальном времени, реактивных ботов, интерактивных интерфейсов в поддерживаемых сетяхПакетной сверки, cron-задач, ETL-конвейеров, сетей без поддержки WebSocket (таких как HyperEVM)

Действующие параметры конвертации

1 USD = 10,000 расчетных единиц, 1 расчетная единица = 1,000 CU (1 USD = 10,000,000 CU).

Формула: Вес в CU × 1,000,000 ÷ (10,000 × 1,000) USD.

МетодCU за вызовЦена за 1M вызовов (USD)
eth_blockNumber1$0.10
eth_call15$1.50
eth_getLogs30$3.00
debug_traceTransaction100$10.00
data.block5$0.50

Когда выбирать адресные Webhooks

Выбирайте Blockchain Webhook API, если ваш бэкенд работает как стандартный веб-сервис, способный принимать входящие HTTPS-запросы:

  • Большие списки адресов: мониторинг депозитов или выводов средств по тысячам адресов клиентов без необходимости поддерживать постоянные сокеты для каждого кошелька.
  • Бессерверные или контейнеризированные приемники: serverless-функции (AWS Lambda, Cloudflare Workers) запускаются при поступлении вебхуков и не требуют постоянного поддержания активных соединений.
  • Автоматические повторные попытки и replay: временные сбои приемника сглаживаются автоматической экспоненциальной задержкой повторов. В пределах серверного окна хранения пропущенные доставки могут быть отправлены повторно с помощью эндпоинта replay.
  • Учет границы активации: сопоставление начинается только после применения изменений подписки (applied_from_block). События, произошедшие до добавления адреса или во время нахождения подписки в статусе offline, необходимо запрашивать через исторические логи RPC.

Ознакомьтесь с процессами проверки подписи и повтора (replay) перед развертыванием производственных приемников вебхуков.

Когда выбирать подписки WebSocket

Выбирайте подписки WebSocket, когда требуется низкая задержка и ваш процесс способен поддерживать долгоживущий исходящий сокет:

  • Заголовки блоков в реальном времени: получение потока newHeads по мере добавления каждого блока к вершине цепочки.
  • Фильтры событий контрактов: получение потока логов контрактов logs в реальном времени, соответствующих адресу или конкретному topic0.
  • Закрытые среды: идеально для локальных скриптов, CLI-агентов или бэкенд-сервисов за NAT или фаерволами, которые не могут предоставить входящий публичный HTTPS-порт.
  • Проверка доступности сети: WebSocket поддерживается в Robinhood Chain (слаг сети robinhood_mainnet, Chain ID 4663 и robinhood_testnet). В HyperEVM в настоящее время поддержка WebSocket отсутствует (ws: false); попытка подключения по WebSocket к неподдерживаемой сети возвращает HTTP 404 (unknown_chain).
  • Дисциплина при отключении: уведомления WebSocket не сохраняются на сервере во время отключений. При обрыве сокета клиенты должны переподключаться со случайной экспоненциальной задержкой и довыгружать пропущенные блоки через eth_getLogs.

Ознакомьтесь с руководством по подпискам WebSocket для изучения лимитов фильтров, ограничений на подключения (20 на ключ, 50 на аккаунт) и примеров подключения с помощью viem.

Когда выбирать ограниченный RPC-опрос

Выбирайте ограниченный опрос JSON-RPC при запуске периодических воркеров, конвейеров данных или при работе в сетях, где WebSocket недоступен:

  • Сети без WebSocket: HyperEVM (hyperevm_mainnet) в настоящее время предоставляет доступ по JSON-RPC HTTP, но не имеет WebSocket (ws: false). Опрос eth_blockNumber и отправка запросов eth_getLogs в поддерживаемых диапазонах блоков обеспечивают обработку событий HyperEVM.
  • Контролируемый темп запросов: опрос позволяет разработчикам и AI Agent регулировать частоту запросов, управлять расходом Compute Units в пределах лимитов частоты запросов на ключ и избегать разрывов сокетов во время длительных задач. Лимиты на ключ — по умолчанию 400 CU/s и всплеск (burst) 1,600 CU.
  • Лимиты диапазона блоков: аутентифицированные запросы eth_getLogs ограничены параметром сети max_logs_block_range из GET /v1/chains. Превышение этого лимита возвращает код ошибки -32602 (logs_range_too_large). Разделяйте более широкие интервалы на последовательные фрагменты, не превышающие max_logs_block_range целевой сети.
СетьСлаг сетиmax_logs_block_range (блоков)
Arbitrum Onearb_mainnet1,000
Basebase_mainnet1,000
BNB Smart Chainbsc_mainnet1,000
Ethereumeth_mainnet1,000
Ethereum Sepoliaeth_sepolia1,000
HyperEVMhyperevm_mainnet1,000
Polygonpolygon_mainnet1,000
Robinhood Chainrobinhood_mainnet1,000
Robinhood Chain Testnetrobinhood_testnet1,000

Алгоритмы разбиения на фрагменты см. в руководстве по выгрузке логов HyperEVM и руководстве по диапазону блоков eth_getLogs.

Полный контрольный список рабочих нагрузок и тесты для самопроверки см. в руководстве Как выбрать RPC-провайдера.

При выборе провайдера для небольшого объема опроса сравните провайдеров по стандартной тарификации и охвату RPC. Сравните тарификацию по фактическому использованию со стоимостью пробных версий и подписок; расходы на уведомления и довыгрузку рассчитываются по другим метрикам, чем чтение через RPC.

Руководства по реализации

WebSocket в Robinhood Chain

Для получения newHeads или отфильтрованных логов logs в реальном времени в Robinhood Chain следуйте руководству по подпискам WebSocket для настройки аутентификации и запросов на подписку. После отключения выполните повторное подключение с задержкой, подпишитесь заново и выполните довыгрузку пропущенных блоков с сохраненного курсора с помощью eth_getLogs; дедуплицируйте логи по кортежу (blockHash, transactionHash, logIndex).

Ограниченный опрос в HyperEVM

Для HyperEVM (hyperevm_mainnet) следуйте руководству по выгрузке логов HyperEVM для настройки ограниченного опроса и восстановления. Выполняйте запросы с сохраненного курсора фрагментами в пределах max_logs_block_range, сохраняйте события и прогресс вместе после успешной обработки и повторяйте запросы для неполных диапазонов. Проверяйте непрерывность цепочки и сканируйте перекрывающиеся диапазоны для обработки реорганизаций.

Следующие шаги

Последнее обновление:

На этой странице