getRecentPrioritizationFees cung cấp thông tin chuyên sâu về các khoản phí ưu tiên đã trả trong những 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 được xử lý nhanh chóng, đặc biệt là trong những thời điểm mạng có lưu lượng hoạt động 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(arraycủastring, không bắt buộc):- Một mảng gồm các khóa công khai của tài khoản được mã hóa base-58 mà giao dịch của bạn dự định khóa ghi.
- 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 ở trạng thái có thể ghi thanh toán.
- Nếu bỏ qua hoặc truyền vào một mảng trống, phương thức sẽ trả về thông tin tổng quát hơn về các khoản phí ưu tiên được ghi nhận trong 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 của 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 chi tiết về phí từ một slot cụ thể gần đây và có cấu trúc sau:
slot(u64): Số slot mà trong đó 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) được ít nhất một giao dịch trong slot này thanh toán (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í) thanh toán phí ưu tiên bổ sung ngoài phí cơ sở, hoặc nút không ghi nhận khoản phí nào cho 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 thời gian lưu trong bộ nhớ đệm: Các nút RPC thường lưu các khoản phí này trong bộ nhớ đệm cho khoảng 150 khối. Điều này có nghĩa là bạn đang xem một khoảng lịch sử tương đối ngắn (khoảng 30 giây).
- 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 thanh toán, mà có nghĩa là đối với slot và (các) 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 mứ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 khoản phí khác 0) để đưa ra lựa chọn tối ưu về chi phí. Trả phí quá cao không đảm bảo giao dịch được đưa vào nhanh hơn sau một ngưỡng nhất định nếu khối đã chứa đầy các giao dịch có mức ưu tiên cao.
- Đơn vị tính toán: Tổng phí ưu tiên cho giao dịch của bạn 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 khi xác nhận giao dịch trong điều kiện mạng biến động.