Skip to main content

已接受并不代表已上链

成功的响应表示 Apex 端点已持有您的交易,并正在将其竞速送达领导者,直到交易上链或其 blockhash 过期。这并不表示交易已上链。请在 Solana RPC 上使用 getSignatureStatuses 确认每一次发送。参见最佳实践 Apex 按以下顺序检查交易:API 密钥、速率限制、交易有效性和大小,最后是小费。第一个未通过的检查决定返回的错误。在所有检查通过之前,交易不会发送到任何地方,因此被拒绝的交易不产生任何费用。

JSON-RPC 错误

普通 HTTP 错误

/send/send-bin 上,成功时返回 HTTP 200{"signature": "..."}/send-batch 返回 200{"attempted": n, "accepted": n, "rejected": n, "results": [...]},其中每个结果按帧顺序排列,要么是 {"signature": "..."},要么是 {"error": "<label>", "message": "..."}/send-bundle 返回 200{"bundle_id": "...", "signatures": ["...", "..."]} 错误为 JSON 格式,包含一个机器可读的标签和一条人类可读的消息:
请先根据 HTTP 状态码进行分支处理。它是接口约定中稳定的部分。对于 400 下您不认识的标签,请按“修正交易”处理。
只要请求本身格式正确,/send-batch 就会返回 200,并在 results 中分别报告每一帧的结果。请检查 rejected 和每个条目,而不要只看状态码。参见 POST /send-batch bundle 标签(HTTP 400)表示捆绑包被整体拒绝:成员超过 4 个、存在重复成员、此密钥或端点不支持捆绑包,或者区块引擎拒绝了它。单个成员的问题仍使用各自的标签。超过 1232 字节的成员会返回 malformed,消息中会指明 1232 字节的限制;有两个成员带小费时返回 multiple_tips;没有成员带小费时返回 no_tip

小费错误详解

QUIC 准入码

双向 QUIC 流会返回一个准入码。单向流不返回任何内容,因此在集成阶段请使用双向流。 如果 QUIC 握手本身被拒绝,连接会以应用层错误 1(无客户端证书)、2(未知密钥)或 3(连接数过多)关闭。参见身份验证 在 Rust 客户端中,send_transaction_with_response 会将拒绝转换为 Error::Rejected { code, message },超过 4096 字节的交易会在发送任何内容之前在本地以 Error::TooLarge 失败。

哪些错误可以重试

您无需重新发送已接受的交易。Apex 已经在重试,直到它上链或 blockhash 过期。如果届时仍未上链,请使用新的 blockhash 重新构建,并发送新交易。

速率限制

速率限制按 API 密钥计算,并由密钥的等级决定。该限制统计所有传输方式上每秒的交易数:JSON-RPC、HTTP 路由和 QUIC 共用同一额度,批量请求中的每一帧计为一笔交易。 超出限制时,您会收到 -32029、HTTP 429 或准入码 2。被拒绝的交易不会进入队列,因此如果它仍然重要,请稍后重新发送。 您所在等级的限制和小费下限显示在 OrbitFlare 控制台Dashboard > Apex 下,位于密钥旁边。如需提高限制,请通过 Discord 联系团队。

限制一览