- Package:
helius-sdk(npm / pnpm / yarn) - Version: 2.x (使用
@solana/kit,而不是@solana/web3.js) - Runtime: 任何JavaScript运行时 — 浏览器、Deno、Bun、edge runtimes(Cloudflare Workers, Vercel Edge), Node.js 20+
- TypeScript: 5.8+ (包含完整类型定义)
- License: ISC
安装
快速开始
客户端选项
命名空间
所有方法通过helius客户端访问。DAS API 方法和标准Solana RPC 方法可直接在helius.*上使用。其他功能组织为命名空间:
| Namespace | 访问 | 目的 |
|---|---|---|
| DAS API | helius.getAsset(), helius.getAssetsByOwner(), 等 | 查询NFTs、代币、压缩资产 |
| RPC V2 | helius.getTransactionsForAddress(), helius.getProgramAccountsV2() | 增强的RPC,支持分页和过滤 |
| Transactions | helius.tx.* | 智能交易和Helius Sender |
| Enhanced | helius.enhanced.* | 将交易解析成人类可读格式 |
| Webhooks | helius.webhooks.* | 创建和管理webhook订阅 |
| WebSockets | helius.ws.* | 实时区块链数据流 |
| Staking | helius.stake.* | 将SOL质押到Helius验证者 |
| ZK Compression | helius.zk.* | 压缩账户和证明 |
| Wallet API | helius.wallet.* | 余额、历史、身份查找 |
| Standard RPC | helius.getBalance(), helius.getSlot(), 等 | 通过代理实现所有标准Solana RPC方法 |
| Raw RPC | helius.raw | 直接访问底层@solana/kit Rpc客户端 |
| Auth | import { makeAuthClient } from "helius-sdk/auth/client" | 代理注册和API密钥管理(独立导入) |
对代理的建议
使用 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 仅返回在给定 slot 之后修改的账户。对同步或索引工作流有用。由 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 | 服务器错误 | 使用指数退避重试 |
编程注册(认证模块)
auth 模块是一个独立的导入,它不在主HeliusClient 上。可用于编程代理注册流程。
API 快速参考
以下是 Helius TypeScript SDK 支持的所有 API 方法的完整列表:DAS API(数字资产标准)
RPC V2 方法
交易
增强交易
Webhooks
WebSockets
质押
钱包 API
ZK 压缩
标准 Solana RPC
所有标准 Solana RPC 方法都可以直接在helius.* 上使用,并通过底层 @solana/kit Rpc 客户端代理:
helius.raw 属性以相同的方式显式公开客户端,对于需要标准 Rpc 对象的第三方库非常有用。