getLatestBlockhash đóng vai trò thiết yếu trong việc chuẩn bị và gửi giao dịch trên mạng Solana. Phương thức này truy xuất blockhash mới nhất mà nút đã xử lý, cùng với độ cao khối cuối cùng mà tại đó blockhash này vẫn còn hiệu lực. Để biết thêm chi tiết về cách sử dụng blockhash hiệu quả và đảm bảo giao dịch được ghi nhận, hãy tham khảo hướng dẫn toàn diện của chúng tôi.
Mọi giao dịch trên Solana đều phải tham chiếu đến một blockhash gần đây. Cơ chế này giúp ngăn chặn một số loại tấn công, chẳng hạn như phát lại giao dịch trên một chuỗi đã phân nhánh.
Lưu ý về phiên bản: Phương thức này khả dụng trong solana-core v1.9 trở lên. Đối với các nút chạy solana-core v1.8 trở xuống, hãy sử dụng phương thức getRecentBlockhash thay thế.
Các trường hợp sử dụng phổ biến
- Xây dựng giao dịch: Lấy một blockhash gần đây để đưa vào giao dịch mới trước khi ký và gửi giao dịch.
- Quản lý thời hạn giao dịch: Sử dụng
lastValidBlockHeightđể xác định khoảng thời gian mà một giao dịch tham chiếu đến blockhash đã lấy dự kiến vẫn còn hiệu lực. - Kiểm tra trước khi thực thi: Mặc dù
simulateTransactioncó thể ngầm thực hiện việc này, ứng dụng có thể lấy một blockhash để chuẩn bị giao dịch theo cách thủ công nhằm phục vụ mô phỏng.
Tham số yêu cầu
Phương thức này có thể nhận một đối tượng cấu hình không bắt buộc với các tham số sau:commitment(chuỗi, không bắt buộc): Chỉ định mức cam kết cho truy vấn. Nếu bỏ qua, mức cam kết mặc định của nút sẽ được sử dụng. Nên dùngfinalizedcho mã mới; trong Alpenglow,confirmedtrả về cùng một trạng thái vĩnh viễn và vẫn khả dụng để đảm bảo khả năng tương thích.minContextSlot(số nguyên, không bắt buộc): Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá. Điều này đảm bảo truy vấn được thực hiện dựa trên trạng thái sổ cái đã xử lý ít nhất đến slot này.
Cấu trúc phản hồi
Trườngresult của phản hồi JSON-RPC sẽ là một đối tượng RpcResponse. Trường value trong đối tượng này chứa:
blockhash(chuỗi): Chuỗi được mã hóa base-58 đại diện cho blockhash mới nhất.lastValidBlockHeight(u64): Độ cao khối mà tại đóblockhashsẽ hết hạn. Một giao dịch tham chiếu đếnblockhashnày có hiệu lực cho đến khi mạng đạt đếnlastValidBlockHeight.
context chứa slot mà tại đó thông tin được truy xuất.
Ví dụ
1. Lấy blockhash mới nhất với commitment mặc định
Ví dụ này truy xuất blockhash mới nhất bằng commitment mặc định của nút.2. Lấy blockhash mới nhất với mức cam kết finalized
Ví dụ này yêu cầu rõ ràng blockhash mới nhất với mức cam kết finalized.
Mẹo dành cho nhà phát triển
- Hiệu lực của blockhash: Một blockhash có hiệu lực trong thời gian giới hạn, khoảng 30 giây (mặc dù thời gian này có thể thay đổi). Giao dịch phải được mạng xác nhận trước khi vượt quá
lastValidBlockHeightcủa giao dịch. Luôn lấy một blockhash mới nếu đã qua một khoảng thời gian đáng kể kể từ lần lấy gần nhất. - Chọn mức cam kết: Trong Alpenglow,
confirmedvàfinalizedtrả về cùng một trạng thái được cam kết vĩnh viễn tại cùng một thời điểm. Nên dùngfinalizedcho mã mới vìconfirmedsẽ bị loại bỏ trong một bản phát hành sau này. - Phí giao dịch: Hãy nhớ tính toán và bao gồm cả phí giao dịch phù hợp. Bản thân blockhash không quyết định mức phí.
- Logic thử lại: Nếu giao dịch hết hạn do đã vượt quá
lastValidBlockHeight, bạn phải ký lại giao dịch bằng một blockhash mới hơn, gần đây hơn rồi gửi lại.
getLatestBlockhash hiệu quả, một nền tảng cốt lõi để tương tác với mạng Solana thông qua các giao dịch.
Các phương thức liên quan
simulateTransaction
Mô phỏng giao dịch trước khi gửi
isBlockhashValid
Kiểm tra xem blockhash còn hợp lệ hay không