apex-sender-client 是 Apex 的参考客户端。它为每个 Apex 端点保持一个持久 QUIC 连接,使用由您的 API 密钥派生的客户端证书进行身份验证,每个流发送一笔序列化后的交易,并在连接断开时以 0-RTT 重连。
安装
该 crate 即将发布到 crates.io,名称为apex-sender-client。在发布之前,请从 OrbitFlare 的 GitHub 仓库安装:
rpc 特性会添加 HTTP 辅助工具:getTipAccounts、JSON-RPC sendTransaction、二进制路由,以及适用于任意 Solana RPC 的 blockhash 和确认辅助工具。单独的 QUIC 路径没有 HTTP 依赖,因此如果您只需要 QUIC,请不要启用该特性。
该 crate 需要 Rust 1.92 或更高版本。
快速开始
Cargo.toml 的完整程序,参见快速入门的 Rust 标签页。
区域
Region 为每个 Apex 端点命名。Region::parse("fra") 和 Region::code() 用于与短代码相互转换,Region::ALL 列出全部区域。
region.quic_endpoint() 返回 <code>.apex.orbitflare.com:7001,region.rpc_url() 返回 http://<code>.apex.orbitflare.com。参见端点与区域。
传输方式
传输方式不会改变优先级或路由。起作用的是小费。
API
客户端的
Clone 开销很低,克隆出的副本共享同一个连接。创建一次,然后将克隆分发给您的各个任务。
该 crate 目前还没有捆绑包辅助工具。请通过 HTTP 使用
sendBundle 或 POST /send-bundle 发送捆绑包。选项
ClientOptions 实现了 Default,因此只需设置您需要的字段:
保活与重连
连接通过每秒一次的 QUIC PING 保持打开,而 Apex 端点的空闲超时为 30 秒。在预热的连接上,一次发送就是打开一个流并写入一次。 如果连接断开:- 后台任务会发现并立即重新握手(
proactive_reconnect),因此下一次发送通常能找到一个可用的连接。 - 重连会使用缓存的会话票据,并在握手的首批数据包中发送等待中的交易(0-RTT)。如果端点拒绝早期数据,客户端会在握手完成后重新发送。
- 因连接已断开而失败的发送会重新连接并重试一次(
auto_reconnect)。将其设为false可自行处理这种情况。
health()、reconnects_total() 和 zero_rtt_resumptions_total() 会显示发生了什么。请将它们导出到您的指标中。
错误
HTTP 辅助工具返回
rpc::RpcError:Http 表示传输失败,Rpc { code, message } 表示 JSON-RPC 或普通 HTTP 拒绝,另有 BadResponse。
仓库中的示例
所有示例都读取APEX_API_KEY、KEYPAIR_PATH(默认 payer.json)、SOLANA_RPC_URL,以及可选的 APEX_REGION、APEX_QUIC、APEX_RPC、TIP_LAMPORTS 和 APEX_TX_VERSION(legacy 或 v1)。每个示例都会发送一笔带小费的 memo 交易,并报告其上链的 slot。
客户端不做的事
- 构建或签名交易,或为您选择优先费。
- 模拟或运行预检。在您和领导者之间,没有任何环节会这样做。