Address、U256、B256、Filter、TransactionRequest,以及类型化的区块、交易、收据与日志),并配备 OrbitFlare 自有的传输层:端点故障转移、带退避的重试与自愈的 WebSocket 订阅。
客户端对链是泛型的(RpcClient<C>、WsClient<C>);下文的别名是便捷简写。gRPC 目前仅支持 Polygon(Bor)。
支持的链
正从
orbitflare-robinhood-sdk 迁移?Robinhood Chain 现已在此通过 RobinhoodRpcClient / RobinhoodWsClient 覆盖。其 RPC 与 WebSocket 接口完全一致;独立 crate 已弃用。安装
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_balance、call、get_code 等)使用的默认区块标签。默认为 Latest。
.retry(policy) — 控制瞬时错误(5xx、429、连接重置、JSON-RPC 错误码 -32005)的重试,采用指数退避,之后故障转移到下一个端点。
.timeout(duration) — 单次 HTTP 请求超时。
可用方法
日志过滤器
get_logs 直接接受 alloy 的 Filter:
合约调用与交易
call 与 estimate_gas 接受 alloy 的 TransactionRequest。要发送交易,先用 alloy(alloy-signer、alloy-network)构建并签名,再通过 SDK 广播:
任意方法
request 按名称调用任意 RPC 方法——SDK 构建 JSON-RPC 信封,处理重试与故障转移,并返回 result 字段。request_raw 发送原始 JSON-RPC 请求体字符串。
WebSocket
启用ws 特性。.build() 为异步——在返回前会建立连接。
.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,因此其区块携带额外字段(l1BlockNumber、sendRoot、sendCount),而标准 EVM 区块类型会丢弃这些字段。SDK 会保留它们,并通过 NitroBlockExt 暴露类型化的访问器。其他任何非标准字段仍可在 block.other 上获取。
call() 访问。
端点
没有默认端点。用.url() 为每个客户端设置 URL,或通过环境变量设置。解析顺序:构建器上的 .url(),然后是环境变量。
请使用你 OrbitFlare 控制台中的确切端点。