Skip to main content

transactionSubscribe là gì?

Phương thức WebSocket transactionSubscribe (một tiện ích mở rộng của Helius dành cho API WebSocket Solana tiêu chuẩn) cho phép nhận các sự kiện giao dịch theo thời gian thực. Để sử dụng, hãy cung cấp một TransactionSubscribeFilter và tùy chọn thêm TransactionSubscribeOptions để tùy chỉnh thêm. transactionSubscribe sử dụng cùng các điểm cuối wss://mainnet.helius-rpc.com và wss://devnet.helius-rpc.com hợp nhất như các phương thức đăng ký Solana tiêu chuẩn.

TransactionSubscribeFilter

  • vote: cờ boolean để bao gồm/loại trừ các giao dịch liên quan đến biểu quyết
  • failed: cờ boolean để bao gồm/loại trừ các giao dịch thất bại
  • signature: lọc các bản cập nhật cho một giao dịch cụ thể dựa trên chữ ký của giao dịch đó
  • accountInclude: danh sách tài khoản mà bạn muốn nhận bản cập nhật giao dịch. Chỉ cần một trong các tài khoản được bao gồm trong bản cập nhật giao dịch (ví dụ: Tài khoản 1 HOẶC 2).
  • accountExclude: danh sách tài khoản mà bạn muốn loại trừ khỏi các bản cập nhật giao dịch
  • accountRequired: giao dịch phải bao gồm tất cả các tài khoản đã chỉ định thì mới được đưa vào bản cập nhật (ví dụ: Tài khoản 1 VÀ 2)
  • tokenAccounts: tùy chọn mở rộng tài khoản token liên kết (ATA) (balanceChanged, all hoặc none). Xem phần Theo dõi ví, bao gồm cả các lượt chuyển token bên dưới.
Bạn có thể thêm tối đa 50.000 địa chỉ vào các mảng accountInclude, accountExclude và accountRequired.

TransactionSubscribeOptions (Không bắt buộc)

  • commitment: mức cam kết để truy xuất dữ liệu (processed, confirmed hoặc finalized)
  • encoding: định dạng mã hóa của dữ liệu được trả về (base58, base64 hoặc jsonParsed)
  • transactionDetails: mức độ chi tiết của dữ liệu được trả về (full, signatures, accounts và none)
  • showRewards: cờ boolean cho biết có nên đưa dữ liệu phần thưởng vào các bản cập nhật hay không
  • maxSupportedTransactionVersion: chỉ định phiên bản giao dịch cao nhất mà bạn muốn nhận bản cập nhật. Đặt giá trị thành 1 để nhận các giao dịch legacy, v0 và v1. Xem Hỗ trợ giao dịch v1.
Cần có maxSupportedTransactionVersion để trả về các tài khoản và thông tin chi tiết ở cấp độ đầy đủ của một giao dịch nhất định (tức là transactionDetails: "accounts" | "full").

Ví dụ về đăng ký giao dịch

Trong ví dụ này, chúng ta đăng ký nhận thông tin về các giao dịch chứa tài khoản Raydium 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8. Khi xảy ra một giao dịch có chứa tài khoản 675k...1Mp8 trong accountKeys của giao dịch, chúng ta sẽ nhận được thông báo WSS. Dựa trên các tùy chọn đăng ký, thông báo giao dịch sẽ được gửi ở mức cam kết processed, mã hóa jsonParsed, thông tin chi tiết giao dịch full và sẽ hiển thị phần thưởng.

Ví dụ về thông báo

Theo dõi ví, bao gồm cả các lượt chuyển token

Khi theo dõi ví bằng accountInclude, bạn chỉ khớp với các giao dịch mà khóa công khai của ví xuất hiện trực tiếp trong các khóa tài khoản. Một trường hợp phổ biến sẽ bị bỏ sót: khi ai đó gửi token SPL (chẳng hạn như USDC) đến ví, lượt chuyển sẽ tác động đến tài khoản token liên kết (ATA) của ví chứ không phải khóa công khai của ví — vì vậy, đăng ký accountInclude: [wallet] thông thường sẽ không bao giờ phát hiện được giao dịch đó. Đặt trường tokenAccounts để mở rộng phạm vi khớp, nhờ đó tài khoản được theo dõi cũng khớp với các giao dịch mà tài khoản đó sở hữu số dư token:
  • balanceChanged: khớp khi ví sở hữu số dư token có số lượng thay đổi (hoặc tài khoản token bị đóng) trong giao dịch. Sử dụng tùy chọn này khi muốn “thông báo cho tôi khi tiền thực sự được chuyển”. Đây là lựa chọn có phạm vi hẹp hơn, lưu lượng thấp hơn và phổ biến nhất.
  • all: khớp với mọi giao dịch tham chiếu đến số dư token mà ví sở hữu, ngay cả khi số dư không thay đổi. Lưu lượng cao hơn.
  • none: không mở rộng. Tương tự như khi bỏ qua trường này (mặc định).
Việc khớp dựa trên chủ sở hữu: tính năng này phát hiện mọi tài khoản token do ví sở hữu, bao gồm cả các tài khoản không chuẩn, chứ không chỉ địa chỉ ATA được dẫn xuất. Giá trị không hợp lệ sẽ trả về lỗi JSON-RPC -32602. Các lượt đăng ký bỏ qua tokenAccounts hoạt động giống hệt như trước đây. Để xem tổng quan đầy đủ về cách hoạt động của tính năng mở rộng ATA, hãy xem Lọc tài khoản token (ATA) qua WebSocket.

Giám sát các DCA Jupiter mới

DCA Jupiter, hay phương pháp trung bình giá, là một cách để lên lịch giao dịch định kỳ trên Solana. Vì các lệnh mua/bán đã lên lịch này được ghi lại trên chuỗi, nhà giao dịch có thể sử dụng phương thức transactionSubscribe và getAsset để theo dõi các lệnh mới.

Ví dụ về thông báo

Terminal tables of new Jupiter DCA orders showing the user wallet, token pair, open time, total input, amount per cycle, and interval

Giám sát các token pump.fun mới

Ví dụ về thông báo

Terminal tables of newly created pump.fun tokens showing the transaction signature, creator wallet, and token mint address

Quản lý lượt đăng ký

ID đăng ký

Khi transactionSubscribe thành công, máy chủ trả về một ID đăng ký trong trường result. Đây cũng là số xuất hiện trong params.subscription trên mọi thông báo từ lượt đăng ký đó:
Lưu ID đăng ký từ phản hồi. Bạn cần ID này để hủy đăng ký.

Hủy đăng ký

Để ngừng nhận thông báo, hãy gọi transactionUnsubscribe với ID đăng ký. Mỗi lệnh gọi transactionSubscribe trên cùng một kết nối sẽ tạo một lượt đăng ký riêng với ID riêng. Vì vậy, hãy nhớ hủy đăng ký trước khi đăng ký lại để tránh nhận thông báo trùng lặp.
Trong ví dụ này, chúng ta đăng ký nhận thông tin về các giao dịch Raydium, lấy ID đăng ký từ phản hồi của máy chủ, sau đó dùng ID đó để hủy đăng ký. Một vài thông báo đang được truyền có thể vẫn đến trong thời gian ngắn sau khi gọi transactionUnsubscribe. Đây là hành vi bình thường.