getTransactionsForAddress 加载交易历史,并通过 transactionSubscribe 实时流式传输新活动。您将首先以嵌入式演示形式尝试,然后将其构建为完整的 Next.js 应用程序。
实时尝试
粘贴您的 API 密钥和任何钱包地址,以查看投资组合、历史记录和实时供稿三部分如何协同工作。这是您的应用程序将渲染的相同数据。将其构建为 Next.js 应用程序
在 GitHub 上获取完整应用程序
克隆完整的入门应用程序 — 本次演练的完成版 Next.js 应用程序,已准备好
npm install && npm run dev。先决条件: Node.js 18+ 和一个 Helius API 密钥。
1
搭建项目
2
通过路由处理器代理 RPC 调用
这会将您的 API 密钥保留在服务器端。客户端在此处发布一个方法和参数,处理器通过 Helius SDK 运行它们,该 SDK 会附加您的密钥并为您构建请求。
app/api/helius/route.ts
3
通过服务端事件传递实时供稿
浏览器无法在没有密钥的情况下打开 Helius WebSocket。相反,在服务器上打开 WebSocket,并通过 SSE 将签名流式传输到客户端。
app/api/stream/route.ts
4
渲染仪表板
页面通过代理加载投资组合和历史记录,然后订阅 SSE 供稿以获取实时更新。
app/page.tsx
5
运行
发生了什么
一个 DAS 调用即可获取整个投资组合
getAssetsByOwner 与 showFungible: true 和 showNativeBalance: true 会在单个响应中返回可替代代币、NFT(标准和压缩)以及原生 SOL 余额,因此您不需要单独的 getBalance 或 getTokenAccountsByOwner 调用。通过 items 按 interface 分割以对代币和 NFT 进行分组。
每个项目都带有自己的元数据,因此同一调用可以为两个列表提供支持。使用 content.metadata.name 获取名称,使用 content.links.image 获取标识或艺术作品。可替代代币还包括一个 token_info 对象,内含原始 balance,decimals 和 symbol — 将 balance 除以 10 ** decimals 以获得易于理解的金额。并非每种代币都会附带名称或标识,因此在缺失时请优雅地降级处理。
一次请求完成完整历史
getTransactionsForAddress 返回钱包的交易历史,通过 filters.tokenAccounts: "balanceChanged" 它还包括钱包的关联代币账户上的转账,这是普通 getSignaturesForAddress 所遗漏的活动。使用 transactionDetails: "full" 获取完整的交易数据而不仅仅是签名。
无需轮询的实时更新
每当交易触及钱包时,transactionSubscribe 会推送一条消息,因此您无需轮询。在筛选器中添加 tokenAccounts: "balanceChanged" 还可以匹配钱包的代币账户,因此传入的 SPL 转账会出现在供稿中 — 正是历史调用计算的活动。通过服务器端路由处理器中继订阅可防止您的 API 密钥泄露到客户端。
下一步
getAssetsByOwner
所有显示选项、分页和完整资产响应格式。
getTransactionsForAddress
按时间、槽位、代币、方向和金额的高级过滤。
transactionSubscribe
实时 WebSocket 供稿的过滤选项和有效负载格式。
部署您自己的程序
下一步:通过 Helius 将 Solana 程序部署到 devnet。