Ringkasan
Transaksi durable nonce menggantikan blockhash terkini dengan nilai nonce yang tersimpan, menghilangkan jendela kedaluwarsa 150 slot untuk sebuah transaksi. Ini memungkinkan penandatanganan offline dan pengiriman tertunda.
Durable nonces mungkin akan dihapus dalam rilis mendatang. Lihat diskusi SIMD untuk detail lebih lanjut.
Durable nonces
Transaksi durable nonce menggantikan blockhash terkini dengan nilai nonce yang tersimpan, menghilangkan jendela kedaluwarsa 150 slot. Ini memungkinkan penandatanganan offline dan pengiriman tertunda.
Cara kerja transaksi nonce
Akun nonce adalah akun yang dimiliki oleh System Program yang menyimpan nilai
State::Initialized yang berisi tiga field: sebuah authority pubkey
(yang dapat memajukan nonce), sebuah nilai durable nonce (hash yang
diturunkan dari blockhash terkini), dan lamports per signature (tarif biaya
saat nonce terakhir kali dimajukan).
Untuk menggunakan durable nonce:
- Buat dan inisialisasi akun nonce menggunakan
CreateAccount+InitializeNonceAccount - Bangun transaksi dengan
AdvanceNonceAccountsebagai instruksi pertama dan nilai nonce sebagairecent_blockhash - Tandatangani transaksi (dapat dilakukan secara offline, karena nonce tidak kedaluwarsa)
- Kirim saat siap
Deteksi nonce
Runtime mendeteksi transaksi nonce dengan memeriksa apakah instruksi pertama
(indeks
NONCED_TX_MARKER_IX_INDEX
= 0) adalah panggilan ke System Program dengan instruksi
AdvanceNonceAccount. Akun nonce harus menjadi akun pertama dari instruksi
tersebut dan harus dapat ditulis. Lihat
get_durable_nonce.
Alur validasi nonce
Ketika recent_blockhash transaksi tidak ditemukan dalam BlockhashQueue,
validator memeriksa apakah itu adalah transaksi nonce yang valid melalui
check_transaction_age:
durable_nonceyang tersimpan pada nonce harus berbeda dari nonce durable berikutnya (diturunkan dari blockhash saat ini). Ini memastikan nonce belum digunakan dalam blok ini- Akun nonce harus dimuat dan harus diurai sebagai
State::Initialized durable_nonceyang tersimpan harus cocok denganrecent_blockhashtransaksi
Pemeriksaan penandatanganan otoritas nonce dilakukan kemudian
(validate_transaction_nonce).
Jika semua pemeriksaan berhasil, nonce dimajukan ke nilai nonce durable berikutnya sebelum eksekusi dimulai. Pada kegagalan eksekusi, nonce yang telah dimajukan dan fee payer yang telah dikurangi biaya tetap di-commit (mencegah replay sambil mengumpulkan biaya).
Perilaku kegagalan nonce
Jika transaksi nonce gagal validasi (nonce sudah digunakan, otoritas tidak menandatangani, akun tidak ditemukan), seluruh transaksi dibatalkan. Tidak ada biaya yang dikumpulkan, tidak ada perubahan state.
Jika transaksi nonce lolos validasi tetapi eksekusi gagal (sebuah instruksi mengembalikan error), nonce tetap dimajukan dan biaya tetap dikumpulkan. Ini mencegah transaksi diulang sambil memastikan validator mendapat kompensasi.
Is this page helpful?