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ứcpreconfSubscribe. 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ý
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.
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
failedvà 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.
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ậyaccountInclude, 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ụngregionInclude để 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ố đó.
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. Bytestatus cung cấp một bộ phân loại một chiều:
statuslà0hoặc1— 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.statuslà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.
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.
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 dobincode 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-viewphâ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ànhVersionedTransaction. - 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.deserializecũ chỉ xử lý legacy và v0. Sử dụng@solana/kit8.0+ hoặc@solana/web3.jsv3. 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ọipreconfUnsubscribe 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. ĐặtincludeBam: 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.