Address、U256、B256、Filter、TransactionRequest,以及类型化的区块、交易、收据与日志——并配备 OrbitFlare 自有的传输层:端点故障转移、带退避的重试与自愈的 WebSocket 订阅。SDK 面向 Robinhood Chain(EVM 兼容 L2),默认连接 OrbitFlare 的生产端点。
安装
Alloy 类型
所有地址、哈希与数量均为 alloy 类型。常用类型在 crate 根部重新导出(Address、U256、B256、Bytes、Filter、TransactionRequest、BlockNumberOrTag 等),完整 crate 也可通过 orbitflare_robinhood_sdk::primitives(alloy-primitives)与 orbitflare_robinhood_sdk::rpc_types(alloy-rpc-types-eth)访问。
RPC 客户端
以下示例启用全部选项:构建器方法
.url(url) — 主端点。解析顺序:构建器上的 .url(),然后是环境变量 ORBITFLARE_ROBINHOOD_RPC_URL,最后是默认值 https://robinhood.rpc.orbitflare.com(rpc::DEFAULT_RPC_URL)。
.urls(&[...]) — 一次设置主端点与所有备用端点。第一个元素为主端点,其余为备用。
.fallback_url(url) / .fallback_urls(&[...]) — 添加故障转移端点。主端点失败时,SDK 按顺序尝试备用端点。失败的端点会被隔离并进入指数冷却(10s、20s、40s,最大 60s),冷却结束后自动重试;健康端点始终优先。
.api_key(key) — 你的 OrbitFlare 许可证密钥。若未设置,SDK 从环境读取 ORBITFLARE_LICENSE_KEY。密钥在请求时附加到端点 URL。
.block_tag(tag) — 状态查询(get_balance、call、get_code 等)使用的默认区块标签。接受任何可转换为 BlockNumberOrTag 的值。默认为 Latest。
.retry(policy) — 控制瞬时错误(5xx、429、连接重置、JSON-RPC 错误码 -32005)的重试策略,采用指数退避,之后故障转移到下一个端点。带 Retry-After 头的 429 响应会被遵守。
.timeout(duration) — 单次 HTTP 请求超时。
可用 RPC 方法
读取链上状态
日志过滤器
get_logs 直接接受 alloy 的 Filter:
合约调用与交易
call 与 estimate_gas 接受 alloy 的 TransactionRequest。要发送交易,先用 alloy(alloy-signer、alloy-network)构建并签名,再通过 SDK 广播:
任意方法
request 按名称调用任意 RPC 方法——SDK 构建 JSON-RPC 信封,处理重试与故障转移,并返回 result 字段。这也覆盖了 Robinhood Chain 作为 Arbitrum Nitro 链提供的 arb_* 扩展方法。request_raw 发送原始 JSON-RPC 请求体字符串。
WebSocket 客户端
启用ws 特性。Robinhood Chain 大约每 100 毫秒出一个块,因此 newHeads 的触发频率远高于以太坊主网和大多数 L2。
.build() 为异步——在返回前会建立 WebSocket 连接。构建器与 RPC 构建器共享 .urls()、.fallback_url(s)()、.api_key() 与 .retry();WebSocket 特有的选项为:
.url(url) — 主 WebSocket 端点。解析顺序:.url(),然后是 ORBITFLARE_ROBINHOOD_WS_URL,最后是默认值 wss://robinhood.rpc.orbitflare.com(ws::DEFAULT_WS_URL)。
.ping_interval_secs(n) — SDK 发送 WebSocket Ping 帧以检测失效连接的频率。默认:10。
.max_missed_pongs(n) — 多少次 Ping 无应答后判定连接失效并重连。默认:3。
订阅
订阅是类型化的——每个订阅产出对应的 alloy 类型,而非原始 JSON:WsSubscription<T>。调用 .next() 获取下一条类型化事件(None 表示订阅已关闭),或调用 .next_raw() 获取未类型化的 serde_json::Value 负载。
sub.unsubscribe().await 显式移除订阅;直接丢弃订阅而不调用也可以——SDK 会检测孤立订阅并自动发送取消订阅消息。
重连
若连接断开,后台任务会以指数退避重连,并自动重新订阅所有活跃订阅。你的.next() 调用会持续工作——连接恢复后事件会继续到达。失效连接通过主动 ping/pong 检测,可用 .ping_interval_secs() 与 .max_missed_pongs() 配置。