Skip to main content
apex-sender-client 是 Apex 的参考客户端。它为每个 Apex 端点保持一个持久 QUIC 连接,使用由您的 API 密钥派生的客户端证书进行身份验证,每个流发送一笔序列化后的交易,并在连接断开时以 0-RTT 重连。

安装

该 crate 即将发布到 crates.io,名称为 apex-sender-client。在发布之前,请从 OrbitFlare 的 GitHub 仓库安装:
发布到 crates.io 之后:
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:7001region.rpc_url() 返回 http://<code>.apex.orbitflare.com。参见端点与区域

传输方式

传输方式不会改变优先级或路由。起作用的是小费。

API

客户端的 Clone 开销很低,克隆出的副本共享同一个连接。创建一次,然后将克隆分发给您的各个任务。
该 crate 目前还没有捆绑包辅助工具。请通过 HTTP 使用 sendBundlePOST /send-bundle 发送捆绑包

选项

ClientOptions 实现了 Default,因此只需设置您需要的字段:

保活与重连

连接通过每秒一次的 QUIC PING 保持打开,而 Apex 端点的空闲超时为 30 秒。在预热的连接上,一次发送就是打开一个流并写入一次。 如果连接断开:
  • 后台任务会发现并立即重新握手(proactive_reconnect),因此下一次发送通常能找到一个可用的连接。
  • 重连会使用缓存的会话票据,并在握手的首批数据包中发送等待中的交易(0-RTT)。如果端点拒绝早期数据,客户端会在握手完成后重新发送。
  • 因连接已断开而失败的发送会重新连接并重试一次(auto_reconnect)。将其设为 false 可自行处理这种情况。
health()reconnects_total()zero_rtt_resumptions_total() 会显示发生了什么。请将它们导出到您的指标中。

错误

HTTP 辅助工具返回 rpc::RpcErrorHttp 表示传输失败,Rpc { code, message } 表示 JSON-RPC 或普通 HTTP 拒绝,另有 BadResponse

仓库中的示例

所有示例都读取 APEX_API_KEYKEYPAIR_PATH(默认 payer.json)、SOLANA_RPC_URL,以及可选的 APEX_REGIONAPEX_QUICAPEX_RPCTIP_LAMPORTSAPEX_TX_VERSIONlegacyv1)。每个示例都会发送一笔带小费的 memo 交易,并报告其上链的 slot。
主网上的典型输出,来自一个紧邻 Apex 端点的客户端:

客户端不做的事

  • 构建或签名交易,或为您选择优先费。
  • 模拟或运行预检。在您和领导者之间,没有任何环节会这样做。