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 Rust SDK. Để cài đặt và bắt đầu, hãy xem phần tổng quan.

Đề xuất cho tác nhân

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

get_transactions_for_address kết hợp việc tra cứu chữ ký và truy xuất giao dịch trong một lệnh gọi duy nhất, đồng thời lọc ở phía máy chủ.

Sử dụng send_smart_transaction cho các thao tác gửi tiêu chuẩn

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ự tạo các chỉ thị ComputeBudget — SDK sẽ tự động thêm chúng.

Sử dụng Helius Sender để đạt độ 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á, săn lệnh, thanh lý), hãy sử dụng send_smart_transaction_with_sender. 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 get_asset_batch 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 get_asset trong vòng lặp.

Sử dụng webhook thay vì thăm dò

Không thăm dò get_transactions_for_address trong vòng lặp. Hãy sử dụng webhook cho các thông báo giữa máy chủ với máy chủ.

Phân trang

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 token_accounts

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

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

changed_since_slot 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 get_program_accounts_v2, get_token_accounts_by_owner_v2, get_account_info, get_multiple_accounts, get_program_accounts và get_token_accounts_by_owner.

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

  1. transaction_details: Some(TransactionDetails::Full) không phải là giá trị mặc định — Theo mặc định, get_transactions_for_address 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 send_smart_transaction — SDK tự động thêm chúng. Việc tự thêm sẽ gây ra lỗi HeliusError::InvalidInput.
  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ừ get_priority_fee_estimate đã sử dụng đúng đơn vị.
  4. Phân trang DAS được đánh số từ 1 — page: 1 là trang đầu tiên, không phải page: 0.
  5. async_connection() yêu cầu new_async hoặc HeliusBuilder — Việc gọi helius.async_connection() trên một máy khách được tạo bằng Helius::new() sẽ trả về Err(HeliusError::ClientNotInitialized).
  6. get_asset trả về Option<Asset> — Một phản hồi thành công vẫn có thể là None nếu tài sản không tồn tại. Hãy xử lý Option một cách tường minh.
  7. Tiền boa cho Sender là bắt buộc — send_smart_transaction_with_sender tự động xác định và thêm tiền boa. Tối thiểu 0.0002 SOL (chế độ Dual) hoặc 0.000005 SOL (chỉ SWQOS).
  8. Cờ tính năng TLS — Crate mặc định sử dụng native-tls. Sử dụng features = ["rustls"] (và default-features = false) để dùng TLS thuần Rust khi OpenSSL không khả dụng.
  9. Đặt phiên bản giao dịch tối đa được hỗ trợ thành 1 khi truy xuất giao dịch. Nếu không, get_transaction, get_block và get_transactions_for_address với TransactionDetails::Full sẽ gặp lỗi -32015 trên giao dịch v1. Trên giao dịch v1, phí ưu tiên là transactionConfig.priorityFee của thông điệp, 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 cung cấp các biến thể lỗi có kiểu thông qua enum HeliusError, nhờ đó bạn có thể đối sánh trực tiếp với chúng:

Chiến lược thử lại

Thử lại khi gặp RateLimitExceeded và InternalError với thời gian chờ tăng theo cấp số nhân: