Ö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:
CreateAccount+InitializeNonceAccountkullanarak bir nonce hesabı oluşturun ve başlatın- İşlemi ilk talimat olarak
AdvanceNonceAccountverecent_blockhasholarak nonce değeri ile oluşturun - İşlemi imzalayın (nonce'un süresi dolmadığı için çevrimdışı yapılabilir)
- 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:
- Nonce'un depolanmış
durable_noncedeğ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 - Nonce hesabı yüklenmiş olmalı ve
State::Initializedolarak ayrıştırılabilmelidir - Depolanmış
durable_nonce, işleminrecent_blockhashdeğ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?