Skip to main content
Единый Rust-клиент для EVM-сетей OrbitFlare - Polygon, BNB Smart Chain и Robinhood Chain - плюс любая EVM-сеть, которую вы определите сами. Повсюду построен на типах alloy (Address, U256, B256, Filter, TransactionRequest, типизированные блоки, транзакции, квитанции и логи), с собственным транспортом OrbitFlare: failover эндпоинтов, повторные попытки с backoff и самовосстанавливающиеся WebSocket-подписки. Клиенты обобщены по сети (RpcClient<C>, WsClient<C>); приведённые ниже алиасы - это удобные сокращения. gRPC пока доступен только для Polygon (Bor).

Поддерживаемые сети

Переходите с orbitflare-robinhood-sdk? Robinhood Chain теперь покрывается здесь через RobinhoodRpcClient / RobinhoodWsClient. Поверхность RPC и WebSocket та же самая; отдельный крейт устарел.

Установка

По умолчанию включён только RPC-клиент. Включите то, что нужно:

RPC

Встроенных эндпоинтов по умолчанию нет: задайте URL через .url() или переменную окружения (см. Эндпоинты), а API-ключ - через .api_key() или ORBITFLARE_LICENSE_KEY.

Методы билдера

.url(url) - основной эндпоинт. Порядок разрешения: .url() в билдере, затем переменная окружения ORBITFLARE_RPC_URL. .urls(&[...]) - задать основной эндпоинт и все резервные за один вызов. Первый элемент - основной, остальные - fallback. .fallback_url(url) / .fallback_urls(&[...]) - добавить эндпоинты для failover. Сбоящие эндпоинты помещаются в карантин с экспоненциальным периодом ожидания (10 с, 20 с, 40 с, максимум 60 с) и автоматически пробуются снова по его истечении; здоровые эндпоинты всегда в приоритете. .api_key(key) - ваш лицензионный ключ OrbitFlare. Если не задан, SDK читает ORBITFLARE_LICENSE_KEY. Ключ подставляется в URL эндпоинта как ?api_key=<key> в момент запроса. .block_tag(tag) - тег блока по умолчанию для запросов состояния (get_balance, call, get_code, …). По умолчанию Latest. .retry(policy) - управляет повторами при временных ошибках (5xx, 429, обрывы соединения, код ошибки JSON-RPC -32005) с экспоненциальным backoff перед переключением на следующий эндпоинт. .timeout(duration) - HTTP-таймаут каждого отдельного запроса.

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

Фильтры логов

get_logs принимает Filter из alloy напрямую:

Вызовы контрактов и транзакции

call и estimate_gas принимают TransactionRequest из alloy. Чтобы отправить транзакцию, соберите и подпишите её с помощью alloy (alloy-signer, alloy-network), затем разошлите через SDK:

Произвольные методы

request вызывает любой RPC-метод по имени - SDK собирает JSON-RPC-обёртку, применяет retry и failover и возвращает поле result. request_raw отправляет сырое тело JSON-RPC строкой.

WebSocket

Включите фичу ws. .build() асинхронный - соединение устанавливается перед возвратом.
Билдер разделяет .urls(), .fallback_url(s), .api_key() и .retry() с RPC-билдером; специфичные для WebSocket опции - это .ping_interval_secs(n) (по умолчанию 10) и .max_missed_pongs(n) (по умолчанию 3).

Подписки

Подписки типизированы - каждая выдаёт соответствующий тип alloy вместо сырого JSON: Все подписки возвращают WsSubscription<T>. Вызовите .next() для следующего типизированного события (None означает, что подписка закрыта) или .next_raw() для нетипизированного serde_json::Value. sub.unsubscribe().await удаляет подписку явно; если дропнуть подписку, тоже сработает.

Переподключение

Если соединение обрывается, фоновая задача переподключается с экспоненциальным backoff и автоматически заново оформляет все активные подписки. Ваши вызовы .next() продолжают работать. Мёртвые соединения обнаруживаются активным ping/pong.

Polygon gRPC

Polygon предоставляет gRPC-интерфейс Bor для низкозатратного доступа к блокам, заголовкам и квитанциям. Включите фичу grpc. gRPC работает поверх plaintext HTTP/2; аутентификация выполняется токеном через .api_key() (отправляется как x-token) либо через IP-whitelisting.
Значения H160/H256 конвертируются в alloy Address/B256 через трейт ToAlloy.

Пользовательские сети

Работает любая EVM-сеть: реализуйте Chain для маркерного типа и направьте обобщённый RpcClient<C> на её URL. CHAIN_ID - это метаданные (доступны как RpcClient::<C>::chain_id_const()); они не ограничивают запросы.

Поля блоков Arbitrum и Nitro

Robinhood Chain - это Arbitrum Nitro, поэтому её блоки несут дополнительные поля (l1BlockNumber, sendRoot, sendCount), которые стандартные типы блоков EVM отбрасывают. SDK сохраняет их и предоставляет типизированные аксессоры через NitroBlockExt. Любое другое нестандартное поле по-прежнему доступно в block.other.
Прекомпилы Arbitrum (ArbSys, ArbGasInfo, …) доступны через call(), как и любой контракт.

Эндпоинты

Эндпоинтов по умолчанию нет. Задайте URL для каждого клиента через .url() или через переменную окружения. Порядок разрешения: .url() в билдере, затем переменная окружения. Используйте точные эндпоинты из вашей панели OrbitFlare.

Переменные окружения

Исходный код

SDK с открытым исходным кодом: github.com/orbitflare/orbitflare-evm-sdk-rs