代理的建议
使用 get_transactions_for_address 替代两步查找
get_transactions_for_address 将签名查找和交易获取结合为一次调用,并进行服务器端过滤。
使用 send_smart_transaction 进行标准发送
它会自动模拟、估算计算单元、获取优先费用并确认。不要手动构建 ComputeBudget 指令——SDK 会自动添加它们。
使用 Helius Sender 实现超低延迟
对于时间敏感的交易(套利、狙击、清算),使用send_smart_transaction_with_sender。它通过 Helius 的多区域基础设施和 Jito 路由。
为多个资产使用 get_asset_batch
在获取多个资产时,将它们批量处理。不要在循环中调用 get_asset。
使用 webhooks 替代轮询
不要在循环中轮询get_transactions_for_address。使用 webhooks 进行服务器到服务器的通知。
分页
基于令牌/游标(RPC V2 方法)
基于页面(DAS API)
token_accounts 过滤器
在查询 get_transactions_for_address 时,token_accounts 过滤器控制是否包括代币账户活动:
| 值 | 行为 | 适用场景 |
|---|---|---|
None | 仅包含直接涉及地址的交易 | 仅关心 SOL 转账和程序调用 |
BalanceChanged | 还包括改变余额的代币交易 | 推荐大多数代理使用 — 显示代币发送/接收而无噪音 |
All | 包括所有代币账户交易 | 需要完整的代币活动(可能返回很多结果) |
changed_since_slot — 增量账户提取
changed_since_slot 仅返回给定槽位后被修改的账户。适用于同步或索引工作流程。支持 get_program_accounts_v2, get_token_accounts_by_owner_v2, get_account_info, get_multiple_accounts, get_program_accounts 和 get_token_accounts_by_owner。
常见错误
-
transaction_details: Some(TransactionDetails::Full)不是默认值 — 默认情况下,get_transactions_for_address仅返回签名。设置TransactionDetails::Full以获取完整的交易数据。 -
不要与
send_smart_transaction添加 ComputeBudget 指令 — SDK 会自动添加。自行添加会导致HeliusError::InvalidInput错误。 -
优先费用以每计算单元的微 lamports 计 — 不是 lamports。来自
get_priority_fee_estimate的值已经在正确的单位中。 -
DAS 分页从 1 开始 —
page: 1是第一页,不是page: 0。 -
async_connection()需要new_async或HeliusBuilder— 在通过Helius::new()创建的客户端上调用helius.async_connection()返回Err(HeliusError::ClientNotInitialized)。 -
get_asset返回Option<Asset>— 如果资产不存在,成功响应可能仍为None。明确处理Option。 -
发送者提示是强制性的 —
send_smart_transaction_with_sender自动确定和附加提示。最低 0.0002 SOL (双模式)或 0.000005 SOL (仅 SWQOS)。 -
TLS 特性标志 —— crate 默认使用
native-tls。当 OpenSSL 不可用时,使用features = ["rustls"](和default-features = false)进行纯 Rust TLS。
错误处理和重试
SDK 通过HeliusError 枚举提供类型化错误变体,因此您可以直接匹配它们:
重试策略
在RateLimitExceeded 和 InternalError 上重试,采用指数退避:
| 错误变体 | HTTP 状态 | 操作 |
|---|---|---|
Unauthorized | 401 | 检查 API 密钥 |
RateLimitExceeded | 429 | 后退并重试 |
InternalError | 5xx | 使用指数退避重试 |
BadRequest | 400 | 修正请求参数 |
NotFound | 404 | 检查资源是否存在 |
Timeout | — | 增加超时或重试 |