Skip to main content
一个 Rust 客户端,服务于 OrbitFlare 的各条 EVM 链——Polygon、BNB Smart Chain 与 Robinhood Chain——以及你自己定义的任意 EVM 链。全程构建于 alloy 类型之上(AddressU256B256FilterTransactionRequest,以及类型化的区块、交易、收据与日志),并配备 OrbitFlare 自有的传输层:端点故障转移、带退避的重试与自愈的 WebSocket 订阅。 客户端对链是泛型的(RpcClient<C>WsClient<C>);下文的别名是便捷简写。gRPC 目前仅支持 Polygon(Bor)。

支持的链

正从 orbitflare-robinhood-sdk 迁移?Robinhood Chain 现已在此通过 RobinhoodRpcClient / RobinhoodWsClient 覆盖。其 RPC 与 WebSocket 接口完全一致;独立 crate 已弃用。

安装

默认仅启用 RPC 客户端。按需启用其他特性:

RPC

没有内置的默认端点:用 .url() 或环境变量设置 URL(参见 端点),用 .api_key()ORBITFLARE_LICENSE_KEY 设置 API 密钥。

构建器方法

.url(url) — 主端点。解析顺序:构建器上的 .url(),然后是环境变量 ORBITFLARE_RPC_URL .urls(&[...]) — 一次设置主端点与所有备用端点。第一个元素为主端点,其余为备用。 .fallback_url(url) / .fallback_urls(&[...]) — 添加故障转移端点。失败的端点会被隔离并进入指数冷却(10s、20s、40s,最大 60s),冷却结束后自动重试;健康端点始终优先。 .api_key(key) — 你的 OrbitFlare 许可证密钥。若未设置,SDK 会检查 ORBITFLARE_LICENSE_KEY。密钥在请求时以 ?api_key=<key> 附加到端点 URL。 .block_tag(tag) — 状态查询(get_balancecallget_code 等)使用的默认区块标签。默认为 Latest .retry(policy) — 控制瞬时错误(5xx、429、连接重置、JSON-RPC 错误码 -32005)的重试,采用指数退避,之后故障转移到下一个端点。 .timeout(duration) — 单次 HTTP 请求超时。

可用方法

日志过滤器

get_logs 直接接受 alloy 的 Filter

合约调用与交易

callestimate_gas 接受 alloy 的 TransactionRequest。要发送交易,先用 alloy(alloy-signeralloy-network)构建并签名,再通过 SDK 广播:

任意方法

request 按名称调用任意 RPC 方法——SDK 构建 JSON-RPC 信封,处理重试与故障转移,并返回 result 字段。request_raw 发送原始 JSON-RPC 请求体字符串。

WebSocket

启用 ws 特性。.build() 为异步——在返回前会建立连接。
构建器与 RPC 构建器共享 .urls().fallback_url(s).api_key().retry();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 显式移除某个订阅;直接丢弃订阅也可以。

重连

若连接断开,后台任务会以指数退避重连,并自动重新订阅所有活跃订阅。你的 .next() 调用会持续工作。失效连接通过主动 ping/pong 检测。

Polygon gRPC

Polygon 暴露了一个 Bor gRPC 接口,用于低开销地访问区块、区块头与收据。启用 grpc 特性。gRPC 运行于明文 HTTP/2;通过 .api_key() 用令牌认证(作为 x-token 发送),或使用 IP 白名单。
H160/H256 值可通过 ToAlloy trait 转换为 alloy 的 Address/B256

自定义链

任意 EVM 链都可使用:为一个标记类型实现 Chain,并让泛型 RpcClient<C> 指向其 URL。CHAIN_ID 是元数据(可通过 RpcClient::<C>::chain_id_const() 获取);它不会限制请求。

Arbitrum 与 Nitro 区块字段

Robinhood Chain 是 Arbitrum Nitro,因此其区块携带额外字段(l1BlockNumbersendRootsendCount),而标准 EVM 区块类型会丢弃这些字段。SDK 会保留它们,并通过 NitroBlockExt 暴露类型化的访问器。其他任何非标准字段仍可在 block.other 上获取。
Arbitrum 预编译合约(ArbSys、ArbGasInfo 等)可像任何合约一样通过 call() 访问。

端点

没有默认端点。用 .url() 为每个客户端设置 URL,或通过环境变量设置。解析顺序:构建器上的 .url(),然后是环境变量。 请使用你 OrbitFlare 控制台中的确切端点。

环境变量

源码

SDK 为开源:github.com/orbitflare/orbitflare-evm-sdk-rs