Tóm tắt
Giao dịch durable nonce thay thế blockhash gần đây bằng giá trị nonce được lưu trữ, loại bỏ cửa sổ hết hạn 150 slot cho giao dịch. Điều này cho phép ký ngoại tuyến và gửi trễ.
Durable nonces có thể bị loại bỏ trong phiên bản tương lai. Xem thảo luận SIMD để biết chi tiết.
Durable nonces
Giao dịch durable nonce thay thế blockhash gần đây bằng giá trị nonce được lưu trữ, loại bỏ cửa sổ hết hạn 150 slot. Điều này cho phép ký ngoại tuyến và gửi trễ.
Cách hoạt động của giao dịch nonce
Tài khoản nonce là tài khoản thuộc sở hữu của System Program lưu trữ giá trị
State::Initialized chứa ba trường: một authority pubkey (người có thể
nâng cấp nonce), một giá trị durable nonce (hash được tạo từ blockhash gần
đây), và lamports per signature (tỷ lệ phí khi nonce được nâng cấp lần
cuối).
Để sử dụng durable nonce:
- Tạo và khởi tạo tài khoản nonce bằng
CreateAccount+InitializeNonceAccount - Xây dựng giao dịch với
AdvanceNonceAccountlà lệnh đầu tiên và giá trị nonce làrecent_blockhash - Ký giao dịch (có thể thực hiện ngoại tuyến, vì nonce không hết hạn)
- Gửi khi sẵn sàng
Phát hiện nonce
Runtime phát hiện giao dịch nonce bằng cách kiểm tra xem lệnh đầu tiên (chỉ số
NONCED_TX_MARKER_IX_INDEX
= 0) có phải là lời gọi đến System Program với lệnh AdvanceNonceAccount
hay không. Tài khoản nonce phải là tài khoản đầu tiên của lệnh đó và phải có thể
ghi. Xem
get_durable_nonce.
Quy trình xác thực nonce
Khi recent_blockhash của giao dịch không được tìm thấy trong BlockhashQueue,
validator sẽ kiểm tra xem đó có phải là giao dịch nonce hợp lệ hay không thông
qua
check_transaction_age:
durable_nonceđược lưu trữ của nonce phải khác với durable nonce tiếp theo (được tạo ra từ blockhash hiện tại). Điều này đảm bảo nonce chưa được sử dụng trong block này- Tài khoản nonce phải được tải và phải phân tích được dưới dạng
State::Initialized durable_nonceđược lưu trữ phải khớp vớirecent_blockhashcủa giao dịch
Việc kiểm tra chữ ký của nonce authority được thực hiện sau đó
(validate_transaction_nonce).
Nếu tất cả các kiểm tra đều thành công, nonce sẽ được nâng cấp lên giá trị durable nonce tiếp theo trước khi bắt đầu thực thi. Khi thực thi thất bại, nonce đã được nâng cấp và phí đã được khấu trừ từ fee payer vẫn được cam kết (ngăn chặn replay trong khi thu phí).
Hành vi khi nonce thất bại
Nếu giao dịch nonce thất bại xác thực (nonce đã được sử dụng, authority không ký, tài khoản không tìm thấy), toàn bộ giao dịch sẽ bị loại bỏ. Không thu phí, không có thay đổi trạng thái.
Nếu giao dịch nonce vượt qua xác thực nhưng thực thi thất bại (một instruction trả về lỗi), nonce vẫn được nâng cấp và phí vẫn được thu. Điều này ngăn chặn giao dịch bị replay trong khi đảm bảo validator được bồi thường.
Is this page helpful?