安装
构建客户端
下面是设置了所有选项的客户端:ORBITFLARE_GRPC_URL 环境变量。
构建器方法
.URL(url) - 主 gRPC 端点。回退读取 ORBITFLARE_GRPC_URL。明文 HTTP/2 使用 http://,TLS 使用 https://。
.URLs(urls...) - 一次设置主端点与回退端点。第一个为主端点。
.FallbackURL(url) / .FallbackURLs(urls...) - 添加回退端点。连接失败时,SDK 会轮换尝试。
.Retry(policy) - 控制重连退避。连接断开时,SDK 等待 InitialDelay,随后每次尝试按倍数增长(上限为 MaxDelay)。将 MaxAttempts 设为 0 表示无限重试。默认:100ms 初始、30s 上限、2 倍系数、无限次。
.Timeout(duration) - 连接/拨号超时。默认 30s。
.Keepalive(duration) - TCP/HTTP2 keepalive 间隔,用于在传输层检测死连接。默认 60s。
.PingInterval(duration) - SDK 向服务器发送协议级 Ping 消息的频率。服务器应回以 Pong。默认 10s。
.MaxMissedPongs(n) - 连续多少次 ping 未获响应后,SDK 判定连接已死并重连。默认 3。在默认值下,死连接会在 30 秒内被检测到。
.ChannelCapacity(n) - 后台 goroutine 与你的代码之间的有界通道容量。若你的代码消费事件较慢,此通道满时后台 goroutine 会阻塞,而非无限占用内存。默认 4096。
.Logger(logger) - 用于连接生命周期事件的 *slog.Logger。未设置时由 ORBITFLARE_LOG 控制。
构建订阅
过滤器通过SubscribeRequestBuilder 与类型化过滤器类型以编程方式构建。交易只要涉及任一 AccountInclude 地址即匹配;AccountExclude 排除匹配;AccountRequired 要求全部所列地址都出现。
过滤器类型
NewTransactionFilter()-Vote(bool)、Failed(bool)、Signature(string)、AccountInclude(...)、AccountExclude(...)、AccountRequired(...)。NewAccountFilter()-Account(...)、Owner(...)、Datasize(uint64)、TokenAccountState(bool)、Memcmp(...)、Lamports(...)、NonemptyTxnSignature(bool)。NewSlotFilter()-FilterByCommitment(bool)、InterslotUpdates(bool)。NewBlockFilter()-AccountInclude(...)、IncludeTransactions(bool)、IncludeAccounts(bool)、IncludeEntries(bool)。NewDeshredTransactionFilter()-Vote(bool)、AccountInclude(...)、AccountExclude(...)、AccountRequired(...)。
Memcmp 通过 geyser.MemcmpBytes(offset, []byte)、geyser.MemcmpBase58(offset, string) 或 geyser.MemcmpBase64(offset, string) 构建。Lamports 通过 geyser.LamportsEq/Ne/Lt/Gt(uint64) 构建。Commitment 为 geyser.Processed、geyser.Confirmed、geyser.Finalized 之一。
若你更愿意手动构建,Subscribe 也接受原始的 *geyser.SubscribeRequest(proto 类型的再导出)。
读取流
Subscribe 返回一个 *geyser.Stream。调用 Next(ctx) 获取下一条更新:
Next(ctx) 会阻塞直到有事件到达。流结束后(包括 Close 之后)返回 io.EOF;任何其他非 nil 错误对该流都是致命的。若 context 被取消,它还会返回 ctx.Err()。Pong 消息在内部消费,绝不会出现在你的流中。
关闭
client.Close() 会停止该客户端启动的每一个流。