Skip to main content
Sử dụng Sender Max (tiền tip tối thiểu: 0.001 SOL) để hành động dựa trên Preconfirmations. Một preconfirmation chỉ mang lại lợi ích nếu giao dịch của bạn được ghi nhận trước tiên — Sender Max là cách nhanh nhất để làm điều đó. Hãy xây dựng trên Sender Max ngay từ đầu để tận dụng toàn bộ lợi ích của Preconfirmations.

preconfSubscribe là gì?

preconfSubscribe là một phương thức WebSocket của Helius dùng để truyền phát Preconfirmations — các giao dịch được phân phối trước khi chúng được tập hợp thành các entry và chia thành shred. Đây là tín hiệu giao dịch có độ trễ thấp nhất mà Helius cung cấp. Một lượt đăng ký cung cấp cả preconfirmation của Helius, được phát ngay khi leader thực thi giao dịch và chứa trạng thái thực thi của giao dịch, lẫn preconfirmation của BAM từ các validator chạy ứng dụng khách Block Assembly Marketplace của Jito, được phát khi validator cam kết thực thi giao dịch. Quyền truy cập yêu cầu gói Professional trở lên — xem Mức giá.
Luồng không liên tục. Phạm vi bao phủ tăng theo tỷ lệ stake chuyển tiếp đến Helius hoặc chạy BAM, vì vậy có thể sẽ có các slot không có thông báo — hãy xử lý các khoảng trống này một cách phù hợp. Xem Phạm vi bao phủ.
preconfSubscribe được cung cấp từ wss://beta.helius-rpc.com — endpoint Gatekeeper của Helius — thay vì mainnet.helius-rpc.com. Xác thực bằng khóa API của bạn dưới dạng tham số truy vấn.
Tên máy chủ beta đề cập đến quá trình triển khai Gatekeeper, không phải mức độ hoàn thiện của Preconfirmations. Preconfirmations được ra mắt trước tiên trên endpoint Gatekeeper; endpoint này sẽ trở thành endpoint tiêu chuẩn khi Helius di chuyển lưu lượng truy cập sang Gatekeeper.

Đăng ký

Gửi một yêu cầu JSON-RPC bằng phương thức preconfSubscribe. Máy chủ phản hồi bằng ID đăng ký, sau đó truyền phát một thông báo cho mỗi giao dịch. Truyền một bộ lọc tùy chọn làm phần tử params đầu tiên để chỉ nhận các giao dịch khớp; bỏ qua params để nhận toàn bộ luồng từ cả Helius và BAM.

Phản hồi đăng ký

Lưu result — đây là ID đăng ký bạn dùng để hủy đăng ký. Sau thông báo xác nhận này, các thông báo sẽ được truyền phát dưới dạng frame nhị phân (xem bên dưới).

Lọc

Theo mặc định, preconfSubscribe truyền phát mọi giao dịch từ cả hai nguồn. Để thu hẹp luồng, hãy truyền một đối tượng bộ lọc làm phần tử đầu tiên của params. Quá trình lọc diễn ra ở phía máy chủ, vì vậy bạn chỉ trả phí và nhận các giao dịch mình quan tâm.
Mọi trường đều là tùy chọn — trường bị thiếu có nghĩa là “không có ràng buộc” đối với vị từ đó, vì vậy bộ lọc trống (hoặc không có params) sẽ khớp với mọi giao dịch từ cả hai nguồn. Quy tắc lọc:
  • Tất cả vị từ được kết hợp bằng phép AND và được đánh giá theo thứ tự includeBam → failed → regionInclude → accountExclude → accountRequired → accountInclude.
  • Preconfirmation có trạng thái không xác định sẽ bỏ qua bộ lọc trạng thái failed và vẫn được phân phối nếu khớp với các bộ lọc nguồn, khu vực và tài khoản.
  • Tài khoản là các khóa công khai được mã hóa base58. Giá trị không hợp lệ trả về lỗi JSON-RPC -32602 (tham số không hợp lệ).
  • Mỗi danh sách tài khoản bị giới hạn ở 500 mục.
Để chỉ nhận preconfirmation của Helius:

Phân giải bảng tra cứu địa chỉ (ALT)

Bộ lọc tài khoản khớp với nhiều dữ liệu hơn các khóa tài khoản tĩnh của giao dịch — Helius phân giải bảng tra cứu địa chỉ v0 ở phía máy chủ, vì vậy accountInclude, accountExclude và accountRequired cũng khớp với các tài khoản mà giao dịch tải thông qua ALT. Điều này có nghĩa là bạn có thể lọc theo bất kỳ tài khoản nào mà giao dịch tương tác, ngay cả khi tài khoản đó chỉ xuất hiện phía sau bảng tra cứu — bạn không cần tự duy trì ánh xạ ALT hoặc phân giải bảng. Chỉ cần truyền khóa công khai của tài khoản và Helius sẽ xử lý việc phân giải trước khi áp dụng bộ lọc.

Lọc theo vị trí

Sử dụng regionInclude để chỉ nhận các giao dịch bắt nguồn từ những khu vực cụ thể. Truyền một hoặc nhiều mã khu vực; giao dịch được chấp nhận khi khu vực nguồn khớp với bất kỳ mã nào trong số đó.
Khu vực nguồn phụ thuộc vào nguồn dữ liệu. Đối với preconfirmation của Helius, đó là khu vực Helius đã tiếp nhận giao dịch. Đối với preconfirmation của BAM, đó là endpoint BAM theo khu vực đã phát preconfirmation, không phải nơi Helius tiếp nhận giao dịch. Các endpoint Singapore và Dallas của BAM ánh xạ tới sgp và dal. Các mã khu vực hợp lệ:
Khi regionInclude được đặt, các giao dịch không chứa thông tin khu vực sẽ bị loại bỏ. Mã khu vực không được nhận dạng sẽ trả về lỗi JSON-RPC -32602 (tham số không hợp lệ).

Payload thông báo

Thông báo được phân phối dưới dạng frame WebSocket nhị phân (không phải JSON). Preconfirmation của Helius và BAM có cùng bố cục. Mỗi frame là một bố cục byte được đóng gói, chứa một giao dịch duy nhất: Payload không có trường nguồn. Không suy luận nguồn BAM từ tx_index = 0 vì preconfirmation của Helius có thể chứa các giá trị tương tự.

Phân biệt hai nguồn

Vì không có trường nguồn, bạn không thể gắn nhãn tùy ý cho một thông báo là Helius hay BAM. Byte status cung cấp một bộ phân loại một chiều:
  • status là 0 hoặc 1 — thông báo là preconfirmation của Helius và giao dịch đã được thực thi. BAM không bao giờ báo cáo các giá trị này.
  • status là 2 — nguồn không rõ ràng: có thể là preconfirmation của BAM hoặc preconfirmation của Helius không có trạng thái thực thi.
Không có trường nào khác có thể phân biệt nguồn. ID trình tự và vị trí bundle của BAM không được truyền trên luồng này, vì vậy không có siêu dữ liệu thứ tự BAM để làm khóa; còn regionInclude là bộ lọc đăng ký chứ không phải trường payload, nên không thể đọc riêng cho từng thông báo. Nếu cần mọi thông báo trên một luồng chứa cùng một loại bằng chứng, hãy đặt includeBam: false — khi đó chỉ còn preconfirmation của Helius, tất cả đều được phát khi leader thực thi. Không có bộ lọc chỉ dành cho BAM.
Luôn đọc và kiểm tra byte version trước tiên. Hiện byte này là 1. Nếu Helius cần cập nhật định dạng payload, phiên bản sẽ tăng — hãy phân nhánh theo phiên bản để bộ giải mã của bạn tiếp tục hoạt động khi lược đồ thay đổi.
Preconfirmation là tín hiệu sớm, không phải sự bảo đảm. Giao dịch chưa được ghi nhận onchain và vẫn có thể bị loại bỏ — trạng thái thực thi của preconfirmation Helius phản ánh kết quả cục bộ của leader, kết quả này chưa phải cuối cùng cho đến khi block được xác nhận. Hãy xác nhận việc ghi nhận bằng các bước kiểm tra commitment tiêu chuẩn trước khi coi giao dịch là cuối cùng.

Giải mã giao dịch

Các byte giao dịch được chuyển tiếp chính xác như cách validator tuần tự hóa chúng, theo mã hóa wire tiêu chuẩn dành cho phiên bản giao dịch. Giao dịch legacy và v0 sử dụng bố cục chữ ký trước do bincode tạo ra. Giao dịch v1 (SIMD-0385) sử dụng bố cục thông điệp trước với chữ ký ở cuối, vì vậy bincode không xử lý được payload v1. Hãy sử dụng bộ giải mã hỗ trợ mọi phiên bản:
  • Rust: agave-transaction-view phân tích trực tiếp các giao dịch legacy, v0 và v1 mà không cần bản sao trung gian. Đây là lựa chọn được khuyến nghị. wincode, trình tuần tự hóa tương thích với bincode được các Solana SDK hiện tại sử dụng, cũng giải mã v1 thành VersionedTransaction.
  • JavaScript / TypeScript: hãy bảo đảm phiên bản thư viện của bạn hỗ trợ giao dịch v1. Các bản triển khai VersionedTransaction.deserialize cũ chỉ xử lý legacy và v0. Sử dụng @solana/kit 8.0+ hoặc @solana/web3.js v3. Xem Hỗ trợ giao dịch v1.

Thông báo trùng lặp

Preconfirmation của Helius và BAM được loại bỏ trùng lặp theo từng nguồn, không phải giữa các nguồn. Một tỷ lệ nhỏ giao dịch đến Helius qua cả hai nguồn, vì vậy bạn có thể nhận cùng một chữ ký hai lần và hai bản sao có thể báo cáo các slot khác nhau. Loại bỏ trùng lặp theo chữ ký ở phía ứng dụng khách và thiết kế các hành động do giao dịch kích hoạt theo hướng idempotent để thông báo thứ hai không kích hoạt cùng một hành động hai lần. Xác nhận việc thực thi và ghi nhận bằng các bước kiểm tra commitment tiêu chuẩn.

Ví dụ

Hủy đăng ký

Để ngừng nhận thông báo, hãy gọi preconfUnsubscribe bằng ID đăng ký do preconfSubscribe trả về.

Mức giá

Preconfirmations yêu cầu gói Professional trở lên và có giá 10 credit cho mỗi thông báo — một thông báo cho mỗi giao dịch được truyền phát — được tính vào gói của bạn. Xem Credit để biết chi tiết. Phí được tính theo từng thông báo, không phải theo từng chữ ký duy nhất. Một giao dịch được cả Helius và BAM phân phối sẽ được tính hai lần. Đặt includeBam: false nếu bạn chỉ muốn nhận preconfirmation của Helius.
Preconfirmations là sản phẩm mới và mức giá có thể thay đổi.

Nội dung liên quan

Preconfirmations Overview

Preconfirmations là gì và nằm ở đâu trong pipeline của validator.

transactionSubscribe

Truyền phát các giao dịch ở mức commitment confirmed với khả năng lọc nâng cao.

preconfSubscribe API reference

Tham số yêu cầu, trường bộ lọc và bố cục thông báo nhị phân.