Dayanıklı nonce'lar

Özet

Dayanıklı nonce işlemleri, son blok hash'ini saklanan bir nonce değeriyle değiştirerek işlem için 150 slot'luk son kullanma penceresini kaldırır. Bu, çevrimdışı imzalama ve gecikmeli gönderimi mümkün kılar.

Dayanıklı nonce'lar gelecekteki bir sürümde kullanımdan kaldırılabilir. Ayrıntılar için SIMD tartışmasına bakın.

Dayanıklı nonce'lar

Dayanıklı nonce işlemi, son blok hash'ini saklanan bir nonce değeriyle değiştirerek 150 slot'luk son kullanma penceresini kaldırır. Bu, çevrimdışı imzalama ve gecikmeli gönderimi mümkün kılar.

Nonce işlemleri nasıl çalışır

Nonce hesabı, üç alan içeren bir State::Initialized değerini saklayan System Program'a ait bir hesaptır: bir authority pubkey (nonce'u ilerletebilecek kişi), bir dayanıklı nonce değeri (son blok hash'inden türetilen bir hash) ve imza başına lamport (nonce'un son ilerletildiği andaki ücret oranı).

Dayanıklı nonce kullanmak için:

  1. CreateAccount + InitializeNonceAccount kullanarak bir nonce hesabı oluşturun ve başlatın
  2. İşlemi ilk talimat olarak AdvanceNonceAccount ve recent_blockhash olarak nonce değeri ile oluşturun
  3. İşlemi imzalayın (nonce'un süresi dolmadığı için çevrimdışı yapılabilir)
  4. Hazır olduğunuzda gönderin

Nonce algılama

Runtime, ilk talimatın (indeks NONCED_TX_MARKER_IX_INDEX = 0) AdvanceNonceAccount talimatıyla System Program'a yapılan bir çağrı olup olmadığını kontrol ederek nonce işlemlerini algılar. Nonce hesabı, bu talimatın ilk hesabı olmalı ve yazılabilir olmalıdır. Bkz. get_durable_nonce.

Nonce doğrulama akışı

Bir işlemin recent_blockhash değeri BlockhashQueue içinde bulunamadığında, validator bunun geçerli bir nonce işlemi olup olmadığını check_transaction_age aracılığıyla kontrol eder:

  1. Nonce'un depolanmış durable_nonce değeri, bir sonraki dayanıklı nonce'tan (mevcut blockhash'ten türetilen) farklı olmalıdır. Bu, nonce'un bu blokta zaten kullanılmamış olmasını garanti eder
  2. Nonce hesabı yüklenmiş olmalı ve State::Initialized olarak ayrıştırılabilmelidir
  3. Depolanmış durable_nonce, işlemin recent_blockhash değeriyle eşleşmelidir

Nonce yetkisi imza kontrolü daha sonra (validate_transaction_nonce) gerçekleştirilir.

Tüm kontroller başarılı olursa, nonce yürütme başlamadan önce bir sonraki dayanıklı nonce değerine ilerletilir. Yürütme başarısız olursa, ilerletilmiş nonce ve ücreti düşülmüş ücret ödeyici yine de kaydedilir (tekrar oynatmayı önlerken ücretleri toplar).

Nonce hata davranışı

Bir nonce işlemi doğrulamada başarısız olursa (nonce zaten kullanılmış, yetki imzalanmamış, hesap bulunamadı), işlemin tamamı düşürülür. Hiçbir ücret toplanmaz, hiçbir durum değişikliği olmaz.

Bir nonce işlemi doğrulamayı geçer ancak yürütme başarısız olursa (bir talimat hata döndürür), nonce yine de ilerletilir ve ücretler yine de toplanır. Bu, işlemin tekrar oynatılmasını önlerken validator'ın tazmin edilmesini sağlar.

Is this page helpful?

İçindekiler

Sayfayı Düzenle

Yönetici

© 2026 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın