Skip to main content
Các phương pháp hay nhất và mẫu được đề xuất cho tác nhân sử dụng Helius TypeScript SDK. Để biết cách cài đặt và bắt đầu, hãy xem phần tổng quan.

Khuyến nghị cho tác nhân

Sử dụng getTransactionsForAddress thay vì tra cứu hai bước

getTransactionsForAddress kết hợp việc tra cứu chữ ký và truy xuất giao dịch vào một lệnh gọi duy nhất có khả năng lọc phía máy chủ. Phương thức này hỗ trợ phạm vi thời gian/slot, lọc tài khoản token và phân trang.

Sử dụng sendSmartTransaction cho các lần gửi thông thường

Phương thức này tự động mô phỏng, ước tính đơn vị tính toán, truy xuất phí ưu tiên và xác nhận. Không tạo thủ công các chỉ thị ComputeBudget — SDK sẽ tự động thêm chúng.

Sử dụng Helius Sender để có độ trễ cực thấp

Đối với các giao dịch nhạy cảm về thời gian (kinh doanh chênh lệch giá, sniping, thanh lý), hãy sử dụng sendTransactionWithSender. Phương thức này định tuyến qua cơ sở hạ tầng đa khu vực của Helius và Jito.

Sử dụng getAssetBatch cho nhiều tài sản

Khi truy xuất nhiều tài sản, hãy xử lý chúng theo lô. Không gọi getAsset trong vòng lặp.

Sử dụng webhook hoặc WebSocket thay vì thăm dò

Không thăm dò getTransactionsForAddress trong vòng lặp. Sử dụng webhook cho thông báo giữa các máy chủ hoặc WebSocket để truyền dữ liệu theo thời gian thực ở phía máy khách.

Phân trang

SDK sử dụng các chiến lược phân trang khác nhau tùy theo phương thức.

Dựa trên token/con trỏ (các phương thức RPC V2)

Dựa trên trang (DAS API)

Bộ lọc tokenAccounts

Khi truy vấn getTransactionsForAddress, bộ lọc tokenAccounts kiểm soát việc có bao gồm hoạt động của tài khoản token hay không:

changedSinceSlot — Truy xuất tài khoản tăng dần

changedSinceSlot chỉ trả về các tài khoản được sửa đổi sau một slot nhất định. Hữu ích cho quy trình đồng bộ hóa hoặc lập chỉ mục. Được hỗ trợ bởi getProgramAccountsV2, getTokenAccountsByOwnerV2, getAccountInfo, getMultipleAccounts, getProgramAccounts và getTokenAccountsByOwner.

Các lỗi thường gặp

  1. transactionDetails: "full" không phải là giá trị mặc định — Theo mặc định, getTransactionsForAddress chỉ trả về chữ ký. Đặt transactionDetails: "full" để nhận đầy đủ dữ liệu giao dịch.
  2. Không thêm các chỉ thị ComputeBudget khi sử dụng sendSmartTransaction — SDK sẽ tự động thêm chúng. Việc tự thêm sẽ tạo ra các chỉ thị trùng lặp và khiến giao dịch thất bại.
  3. Phí ưu tiên được tính bằng microlamport trên mỗi đơn vị tính toán — Không phải lamport. Các giá trị từ getPriorityFeeEstimate đã ở đúng đơn vị dành cho SetComputeUnitPrice.
  4. Phân trang DAS được đánh số từ 1 — page: 1 là trang đầu tiên, không phải page: 0.
  5. blockTime là số giây Unix, không phải mili giây — Sử dụng Math.floor(Date.now() / 1000) khi lọc theo blockTime.
  6. getAsset ẩn các token có thể thay thế theo mặc định — Truyền options: { showFungible: true } để bao gồm chúng.
  7. Các luồng WebSocket cần được dọn dẹp — Luôn sử dụng tín hiệu AbortController và gọi helius.ws.close() khi hoàn tất để tránh rò rỉ kết nối.
  8. Đặt maxSupportedTransactionVersion: 1 khi truy xuất giao dịch. Nếu không, getTransaction, getBlock và getTransactionsForAddress với transactionDetails: "full" sẽ thất bại với lỗi -32015 đối với giao dịch v1. Trên giao dịch v1, phí ưu tiên là message.transactionConfig.priorityFee, tức tổng số tính bằng lamport; không có chỉ thị ComputeBudget nào để quét. Xem Hỗ trợ giao dịch v1.

Xử lý lỗi và thử lại

SDK đưa ra các đối tượng Error gốc với mã trạng thái HTTP được nhúng trong chuỗi thông báo (ví dụ: "API error (429): ..."). Đối tượng lỗi không có thuộc tính .status, vì vậy việc phát hiện trạng thái yêu cầu phân tích thông báo.