getRecentPrioritizationFees cung cấp thông tin chuyên sâu về phí ưu tiên đã trả trong các khối gần đây trên mạng Solana. Bằng cách xem xét các khoản phí này, nhà phát triển có thể đưa ra quyết định sáng suốt hơn về khoản phí bổ sung (phí ưu tiên) cần đính kèm vào giao dịch để tăng khả năng giao dịch được xử lý kịp thời, đặc biệt trong những giai đoạn mạng hoạt động ở mức cao.
Các nút thường lưu dữ liệu phí ưu tiên vào bộ nhớ đệm cho tối đa 150 khối gần đây.
Các trường hợp sử dụng phổ biến
- Ước tính phí động: Xác định mức phí ưu tiên có tính cạnh tranh cho một giao dịch bằng cách quan sát các mức phí đã được xử lý thành công gần đây.
- Phân tích tình trạng tắc nghẽn: Hiểu trạng thái tắc nghẽn hiện tại của mạng bằng cách xem xét mức phí ưu tiên đang được trả.
- Tích hợp ví: Cho phép ví đề xuất mức phí ưu tiên phù hợp cho người dùng dựa trên điều kiện mạng gần đây.
- Bot chênh lệch giá: Đối với các hoạt động nhạy cảm về thời gian như giao dịch chênh lệch giá, việc đặt mức phí ưu tiên tối ưu đóng vai trò rất quan trọng để thực thi kịp thời.
Tham số yêu cầu
lockedWritableAccounts(arraygồmstring, không bắt buộc):- Một mảng gồm các khóa công khai của những tài khoản mà giao dịch dự định khóa để ghi, được mã hóa bằng base-58.
- Có thể cung cấp tối đa 128 địa chỉ.
- Nếu được cung cấp, phương thức sẽ trả về các khoản phí ưu tiên do những giao dịch đã khóa tất cả tài khoản được chỉ định ở chế độ có thể ghi trả.
- Nếu bỏ qua hoặc truyền một mảng rỗng, phương thức sẽ trả về góc nhìn tổng quát hơn về các khoản phí ưu tiên được quan sát trên những khối gần đây, không dành riêng cho bất kỳ tập hợp tài khoản cụ thể nào.
Cấu trúc phản hồi
Trườngresult trong phản hồi JSON-RPC là một mảng các đối tượng phí ưu tiên. Mỗi đối tượng cung cấp thông tin chi tiết về phí từ một slot cụ thể gần đây và có cấu trúc như sau:
slot(u64): Số slot mà các giao dịch đóng góp vào dữ liệu phí này được xử lý.prioritizationFee(u64): Phí ưu tiên tối thiểu (tính bằng micro-Lamport trên mỗi Đơn vị tính toán) mà ít nhất một giao dịch đã trả trong slot này (và khớp với bộ lọclockedWritableAccounts, nếu có). Giá trị0thường có nghĩa là không có giao dịch nào trong slot đó (khớp với tiêu chí) trả thêm phí ưu tiên ngoài phí cơ sở, hoặc nút không quan sát thấy giao dịch nào đối với các tài khoản đã cho.
Ví dụ
1. Lấy phí ưu tiên toàn mạng gần đây
Ví dụ này truy xuất danh sách tổng quát về các khoản phí ưu tiên gần đây mà không chỉ định bất kỳ tài khoản bị khóa nào.2. Lấy phí ưu tiên gần đây cho các tài khoản có thể ghi cụ thể
Ví dụ này truy xuất các khoản phí ưu tiên liên quan đến một giao dịch cần khóa hai tài khoản cụ thể để ghi.Mẹo dành cho nhà phát triển
- Đơn vị phí: Phí ưu tiên được biểu thị bằng micro-Lamport (0,000001 Lamport) trên mỗi Đơn vị tính toán (CU).
- Khoảng lưu vào bộ nhớ đệm: Các nút RPC thường lưu những khoản phí này vào bộ nhớ đệm trong khoảng 150 khối. Điều này có nghĩa là bạn đang xem một khoảng thời gian lịch sử tương đối ngắn (khoảng 1–2 phút).
- Phí bằng 0: Giá trị
prioritizationFeebằng0không nhất thiết có nghĩa là không có khoản phí nào được trả. Thay vào đó, đối với slot và tài khoản đã cho, các giao dịch được lấy mẫu không bao gồm phí ưu tiên hoặc phí thấp hơn ngưỡng mà nút coi là đáng kể. - Sử dụng có chiến lược: Đừng chỉ chọn mức phí cao nhất gần đây. Hãy phân tích phân phối (ví dụ: trung vị, phân vị thứ 75 của các mức phí khác 0) để đưa ra lựa chọn tối ưu về chi phí. Trả quá nhiều không đảm bảo giao dịch được đưa vào nhanh hơn sau một mức nhất định nếu khối đã chứa đầy các giao dịch có độ ưu tiên cao.
- Đơn vị tính toán: Tổng phí ưu tiên cho giao dịch sẽ là
prioritizationFee_per_CU * your_transaction_compute_units. Bạn cũng cần đặt giới hạn đơn vị tính toán cho giao dịch (ComputeBudgetProgram.setComputeUnitLimit) và mức giá (ComputeBudgetProgram.setComputeUnitPrice).
getRecentPrioritizationFees hiệu quả có thể cải thiện đáng kể độ tin cậy của quá trình xác nhận giao dịch trong điều kiện mạng biến động.