跳到正文
← 使用教程

Nodit Sui gRPC 余额排查:HTTP 200 还要检查 trailers

链小知 · 进阶 · 核验 · 依官方文档整理

对照 Sui v2 StateService/GetBalance 的既有记录,检查 proto、owner/coin_type、认证和 grpc-status,避免空对象误判零余额。

开始前准备

  • 准备 Sui Mainnet 完整公开 owner 地址、完整 coin type、已脱敏的 gRPC 请求/响应和 trailers。
  • 记录使用的 proto/SDK 版本与原生 gRPC 或 gRPC-Web 类型;本任务不需要恢复材料或签名。

1. 确认 gRPC 协议、服务与版本

当前官方入口为 sui-mainnet.nodit.io:443,方法为 sui.rpc.v2.StateService/GetBalance。原生 gRPC 使用 TLS/HTTP2;grpcurl 的主机写 HOST:443,不能把 REST URL、JSON-RPC method 或 gRPC-Web 线协议混入。核对本地 proto 根目录与 sui/rpc/v2/state_service.proto 路径,字段随所用版本确认。

检查结果:主机、v2 服务方法、传输类型和 proto 路径都匹配。

2. 核对项目 key 的 metadata

Sui 原生 gRPC 文档要求 x-api-key metadata。检查已脱敏请求是否包含正确项目 key 的位置及是否属于目标项目;项目 key 具有该项目 API 权限,应遮盖值。HTTP RPC 的路径 key/header 二选一规则属于另一种接口,不能据此把 key 追加到 gRPC 主机。

检查结果:认证走 gRPC metadata,凭据只留脱敏位置说明,项目和网络可追踪。

3. 使用 owner 和完整 coin_type

GetBalance 需要 owner 与 coin_type 两个字段。例如原生 SUI 的 coin type 为 0x2::sui::SUI,其他资产用自己的完整类型;简称不足以识别资产。对照既有请求的 owner,不能用某个 coin object ID 代替收款账户。缺少任一字段先修正输入,不从错误响应推断余额。

检查结果:owner 是预期完整地址,coin_type 是实际资产完整类型,两字段均存在。

4. 同时查看 trailers 与余额消息

原生 gRPC 的 grpc-status/grpc-message 在 HTTP/2 trailers 中返回,所以 HTTP 200 只是传输状态的一部分。先确认客户端报告 RPC 成功,再读取 balance 消息内的 coin_type、balance、address_balance、coin_balance。保留整数原值,不用浮点数猜精度;文档示例 balance:{} 不足以证明账户余额为零。

检查结果:有客户端完成状态/trailers,响应 coin_type 匹配;字段缺失、失败与明确零值分开。

5. 整理证据缺口和服务用量

若日志只保存 HTTP 状态没有 trailers,结论写为 gRPC 结果待补;若 owner/coin_type 或 proto 不一致,先标参数或版本问题。当前方法文档列 Request CU 10,它是 Nodit 用量,不是 Sui 网络 Gas。项目支持范围和套餐权限按控制台既有记录核查,不能从多链平台介绍推导所有网络都支持这个方法。

检查结果:报告含网络、版本、字段、传输/业务状态及待补项,CU 与 Gas 不混淆。

怎样确认完成

  • 输出同 owner/coin_type 的明确余额原值或失败/未知状态,附 gRPC 完成证据及 proto 版本。
  • 本教程只经官方正文核验,未执行认证 gRPC 调用或钱包操作。

常见错误与边界

  • HTTP 200 加空 balance 对象不能单独判零余额。
  • 原生 gRPC 的错误 trailers 与 gRPC-Web 返回方式不同。
  • 余额整数需要资产精度才能显示数量,coin_type 简称不可代替完整标识。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据