代理的建议
使用 getTransactionsForAddress 代替两步查找
getTransactionsForAddress 将签名查找和交易获取合并为一个调用,并带有服务器端过滤。它支持时间/插槽范围、代币账户过滤和分页。
使用 sendSmartTransaction 进行标准发送
它会自动模拟、估算计算单元、获取优先费用并确认。不要手动构建 ComputeBudget 指令——SDK 会自动添加。
使用 Helius Sender 实现超低延迟
对于时间敏感的交易(套利、狙击、清算),使用sendTransactionWithSender。它通过 Helius 的多区域基础设施和 Jito 路由。
对多个资产使用 getAssetBatch
在获取多个资产时,将它们批量处理。不要在循环中调用 getAsset。
使用 webhooks 或 WebSockets 代替轮询
不要在循环中轮询getTransactionsForAddress。使用 webhooks 进行服务器到服务器的通知或 WebSockets 进行实时客户端流。
分页
SDK 根据方法使用不同的分页策略。基于令牌/游标(RPC V2 方法)
基于页面(DAS API)
tokenAccounts 过滤器
当查询 getTransactionsForAddress 时,tokenAccounts 过滤器控制是否包括代币账户活动:
| 值 | 行为 | 使用时机 |
|---|---|---|
省略 / "none" | 仅涉及地址的交易 | 只关心 SOL 转账和程序调用时使用 |
"balanceChanged" | 还包括改变余额的代币交易 | 推荐大多数代理使用 — 显示代币发送/接收而无噪音 |
"all" | 包括所有代币账户交易 | 需要完整代币活动时使用(可能返回大量结果) |
changedSinceSlot — 增量账户获取
changedSinceSlot 仅返回在给定插槽后修改的账户。对于同步或索引工作流很有用。由 getProgramAccountsV2、getTokenAccountsByOwnerV2、getAccountInfo、getMultipleAccounts、getProgramAccounts 和 getTokenAccountsByOwner 支持。
常见错误
-
transactionDetails: "full"不是默认设置 — 默认情况下,getTransactionsForAddress仅返回签名。设置transactionDetails: "full"以获取完整的交易数据。 -
不要使用
sendSmartTransaction添加 ComputeBudget 指令 — SDK 会自动添加。自己添加会导致重复指令和交易失败。 -
优先费用单位是每计算单元的微 lamports — 不是 lamports。
getPriorityFeeEstimate的值已经是SetComputeUnitPrice的正确单位。 -
DAS 分页从 1 开始 —
page: 1是第一页,而不是page: 0。 -
blockTime是 Unix 秒,不是毫秒 — 过滤时使用Math.floor(Date.now() / 1000)。 -
getAsset默认隐藏可替代代币 — 传递options: { showFungible: true }以包括它们。 -
WebSocket 流需要清理 — 使用 AbortController 信号并在完成时调用
helius.ws.close()以避免连接泄漏。
错误处理和重试
SDK抛出包含HTTP状态码的原生Error对象在消息字符串中(例如,"API error (429): ...")。错误对象上没有.status属性,因此状态检测需要解析消息。
| 状态 | 含义 | 操作 |
|---|---|---|
| 401 | API密钥无效或缺失 | 检查API密钥 |
| 429 | 速率限制或超出信用额度 | 后退并重试 |
| 5xx | 服务器错误 | 使用指数回退重试 |