Skip to main content
Trong hướng dẫn này, bạn sẽ xây dựng một bảng điều khiển hiển thị tài sản mà bất kỳ địa chỉ Solana nào đang nắm giữ và hoạt động hiện tại của địa chỉ đó. Bạn sẽ truy xuất toàn bộ danh mục token, NFT và SOL trong một lệnh gọi DAS, tải lịch sử giao dịch bằng getTransactionsForAddress độc quyền của Helius và truyền phát trực tiếp hoạt động mới qua transactionSubscribe. Trước tiên, bạn sẽ dùng thử dưới dạng bản demo nhúng, sau đó xây dựng thành một ứng dụng Next.js hoàn chỉnh.

Dùng thử trực tiếp

Dán khóa API và địa chỉ ví bất kỳ để xem ba phần hoạt động cùng nhau: danh mục đầu tư, lịch sử và nguồn cấp dữ liệu trực tiếp. Đây chính là dữ liệu mà ứng dụng của bạn sẽ hiển thị.

Xây dựng dưới dạng ứng dụng Next.js

Grab the full app on GitHub

Sao chép toàn bộ dự án khởi đầu — ứng dụng Next.js hoàn chỉnh từ hướng dẫn này, sẵn sàng để npm install && npm run dev.
Tiện ích ở trên gọi trực tiếp Helius từ trình duyệt, làm lộ khóa API của bạn. Trong ứng dụng thực tế, bạn cần giữ khóa trên máy chủ. Hướng dẫn này sử dụng Next.js App Router với hai trình xử lý tuyến để khóa của bạn không bao giờ được gửi đến máy khách: một trình xử lý làm proxy cho các lệnh gọi RPC, trình xử lý còn lại chuyển tiếp nguồn cấp WebSocket dưới dạng Server-Sent Events.
Điều kiện tiên quyết: Node.js 18+ và một khóa API Helius.
1

Scaffold the project

Bạn sẽ sử dụng Helius SDK cho các lệnh gọi RPC và ws cho nguồn cấp WebSocket trực tiếp.Thêm khóa của bạn vào .env.local:
.env.local
2

Proxy RPC calls through a route handler

Cách này giữ khóa API của bạn ở phía máy chủ. Máy khách gửi một phương thức và các tham số đến đây, sau đó trình xử lý chạy chúng thông qua Helius SDK. SDK sẽ đính kèm khóa và tạo yêu cầu cho bạn.
app/api/helius/route.ts
3

Relay the live feed over Server-Sent Events

Trình duyệt không thể mở WebSocket Helius nếu không có khóa. Thay vào đó, hãy mở WebSocket trên máy chủ và truyền phát các chữ ký đến máy khách bằng SSE.
app/api/stream/route.ts
4

Render the dashboard

Trang tải danh mục đầu tư và lịch sử thông qua proxy, sau đó đăng ký nguồn cấp SSE để nhận các bản cập nhật trực tiếp.
app/page.tsx
5

Run it

Mở http://localhost:3000, dán địa chỉ ví rồi nhấn Tải. Danh mục đầu tư và lịch sử sẽ xuất hiện ngay lập tức, còn nguồn cấp trực tiếp sẽ được cập nhật khi có giao dịch mới liên quan đến ví.

Cơ chế hoạt động

Một lệnh gọi DAS cho toàn bộ danh mục đầu tư

getAssetsByOwner với showFungible: true và showNativeBalance: true trả về token có thể thay thế, NFT (cả loại tiêu chuẩn và nén) cùng số dư SOL gốc trong một phản hồi duy nhất, vì vậy bạn không cần thực hiện các lệnh gọi getBalance hoặc getTokenAccountsByOwner riêng biệt. Phân tách items theo interface để nhóm token và NFT riêng biệt. Mỗi mục chứa siêu dữ liệu riêng, vì vậy cùng một lệnh gọi có thể cung cấp dữ liệu cho cả hai danh sách. Sử dụng content.metadata.name cho tên và content.links.image cho biểu trưng hoặc hình minh họa. Token có thể thay thế cũng bao gồm một đối tượng token_info với balance thô, decimals và symbol — chia balance cho 10 ** decimals để nhận số lượng ở dạng con người có thể đọc được. Không phải token nào cũng có tên hoặc biểu trưng, vì vậy hãy xử lý dự phòng phù hợp khi thiếu các dữ liệu này.

Toàn bộ lịch sử trong một yêu cầu

getTransactionsForAddress trả về lịch sử giao dịch của ví. Khi dùng cùng filters.tokenAccounts: "balanceChanged", nó cũng bao gồm các giao dịch chuyển trên những tài khoản token liên kết của ví, tức hoạt động mà getSignaturesForAddress thông thường sẽ bỏ sót. Sử dụng transactionDetails: "full" để nhận dữ liệu giao dịch đầy đủ thay vì chỉ có chữ ký.

Cập nhật theo thời gian thực mà không cần thăm dò

transactionSubscribe gửi một thông báo mỗi khi có giao dịch liên quan đến ví, vì vậy bạn không bao giờ phải thăm dò. Việc thêm tokenAccounts: "balanceChanged" vào bộ lọc cũng sẽ khớp với các tài khoản token của ví, nhờ đó các giao dịch chuyển SPL đến sẽ xuất hiện trong nguồn cấp dữ liệu — chính là hoạt động được tính trong lệnh gọi lịch sử. Chuyển tiếp đăng ký thông qua trình xử lý tuyến phía máy chủ giúp khóa API không bị gửi đến máy khách.

Các bước tiếp theo

getAssetsByOwner

Tất cả tùy chọn hiển thị, phân trang và cấu trúc phản hồi tài sản đầy đủ.

getTransactionsForAddress

Bộ lọc nâng cao theo thời gian, slot, token, hướng và số lượng.

transactionSubscribe

Các tùy chọn bộ lọc và cấu trúc payload cho nguồn cấp WebSocket trực tiếp.

Deploy your own program

Hướng tiếp theo: triển khai một chương trình Solana lên devnet thông qua Helius.