Durable nonces

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:

  1. Buat dan inisialisasi akun nonce menggunakan CreateAccount + InitializeNonceAccount
  2. Bangun transaksi dengan AdvanceNonceAccount sebagai instruksi pertama dan nilai nonce sebagai recent_blockhash
  3. Tandatangani transaksi (dapat dilakukan secara offline, karena nonce tidak kedaluwarsa)
  4. 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:

  1. durable_nonce yang tersimpan pada nonce harus berbeda dari nonce durable berikutnya (diturunkan dari blockhash saat ini). Ini memastikan nonce belum digunakan dalam blok ini
  2. Akun nonce harus dimuat dan harus diurai sebagai State::Initialized
  3. durable_nonce yang tersimpan harus cocok dengan recent_blockhash transaksi

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?

Daftar Isi

Edit Halaman

Dikelola oleh

© 2026 Yayasan Solana.
Semua hak dilindungi.
Terhubung