- Crate:
helius(crates.io) - Version: 1.x (使用
solana-client3.0,solana-sdk3.0) - Runtime: 异步 (
tokio1.x) - Rust: 1.85+ (edition 2021)
- HTTP Client:
reqwest - License: MIT
安装
native-tls。对于纯Rust TLS(在OpenSSL不可用时有用),使用:
快速入门
客户端构造器
Helius::new — 基本同步客户端
.await。提供RPC方法、webhook、增强型交易、智能交易和钱包API。不支持异步Solana客户端或WebSocket。
Helius::new_async — 功能齐全的异步客户端
.await,因为它建立了WebSocket连接。
Helius::new_with_url — 自定义RPC端点
HeliusBuilder — 高级配置
HeliusFactory — 多集群
访问嵌入式Solana客户端
对代理的建议
使用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进行服务器到服务器的通知。
分页
基于Token/Cursor(RPC V2方法)
基于页面(DAS API)
token_accounts过滤器
查询get_transactions_for_address时,token_accounts过滤器控制是否包含代币账户活动:
| Value | 行为 | 适用场景 |
|---|---|---|
None | 仅包括直接涉及该地址的交易 | 仅关心 SOL 转账和程序调用时使用 |
BalanceChanged | 还包括改变余额的代币交易 | 建议大多数代理使用 — 显示代币发送/接收而无杂音 |
All | 包括所有代币账户交易 | 需要完整的代币活动时使用(可能返回大量结果) |
changed_since_slot — 增量账户获取
changed_since_slot 仅返回在给定 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 | — | 增加超时或重试 |