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ụngsendTransactionWithSender. 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
-
transactionDetails: "full"không phải là giá trị mặc định — Theo mặc định,getTransactionsForAddresschỉ trả về chữ ký. ĐặttransactionDetails: "full"để nhận đầy đủ dữ liệu giao dịch. -
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. -
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 choSetComputeUnitPrice. -
Phân trang DAS được đánh số từ 1 —
page: 1là trang đầu tiên, không phảipage: 0. -
blockTimelà số giây Unix, không phải mili giây — Sử dụngMath.floor(Date.now() / 1000)khi lọc theoblockTime. -
getAssetẩn các token có thể thay thế theo mặc định — Truyềnoptions: { showFungible: true }để bao gồm chúng. -
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. -
Đặt
maxSupportedTransactionVersion: 1khi truy xuất giao dịch. Nếu không,getTransaction,getBlockvàgetTransactionsForAddressvớitransactionDetails: "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ượngError 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.