
Nonce'lar: Ethereum işlemleri neden sırada bekler
Bitcoin'de aynı cüzdandan yapılan, birbiriyle ilgisiz iki ödeme herhangi bir sırayla onaylanabilir. Ethereum'da bu mümkün değildir: bir adresten gönderilen her işlemin bir numarası vardır ve ağ bunları kesinlikle sırayla işler. Bu numara nonce'tur ve bir Ethereum cüzdanındaki en kafa karıştırıcı anların bazılarını açıklar: onaylanmayan bir işlem ve ardından gelen her işlemin onun arkasında takılıp kalması.
Nonce nedir
Sıradan bir Ethereum hesabında nonce bir sayaçtır: o adresin gönderdiği işlem sayısı. İlk işlem nonce 0'ı, bir sonraki 1'i kullanır ve bu böyle devam eder. İmzaladığınız her işlem kendi nonce'unu içerir ve ağ, nonce n'yi ancak nonce n − 1 bloğa dahil edildikten sonra kabul eder.
İki görevi vardır:
- Tekrar oynatma koruması. İmzalanmış bir işlem iki kez gönderilemez; çünkü nonce 5 kullanıldığında, o adresten nonce 5 taşıyan başka her işlem geçersiz olur.
- Sıralama. Bir hesabın işlemleri tam olarak istediğiniz sırayla yürütülür. Bu, bir işlem diğerine bağlı olduğunda önemlidir: önce onay, sonra takas.
Takılan tek bir işlem neden diğerlerini engeller
Sıralama kuralının bir yan etkisi vardır. Nonce 5, işlenmeye yetmeyecek kadar düşük bir ücretle mempool'da bekliyorsa nonce 6, 7 ve 8 de ne kadar ücret öderlerse ödesinler bloğa dahil edilemez. Onun arkasında sırada beklerler.
Bu yüzden ücreti düşük tek bir işlem, bir cüzdanın donmuş gibi görünmesine yol açabilir. Hiçbir şey kaybolmaz; kuyruk yalnızca bir noktada tıkanmıştır.
Kuyruğu açmak
Her nonce yalnızca bir kez kullanılabildiği için takılan bir işlemi onun yerine yenisini koyarak düzeltirsiniz:
- Hızlandırmak: aynı nonce ve daha yüksek bir ücretle yeni bir işlem imzalayın. Düğümler eski sürümü değiştirir ve hangisi önce bloğa girerse o geçerli olur.
- İptal etmek: aynı nonce ile kendinize hiçbir şey göndermeyen bir işlemi daha yüksek bir ücretle imzalayın. Bu işlem onaylandığında asıl işlem artık asla onaylanamaz.
Yerine geçen işlemlerin kabul edilmesi için genellikle asıl işlemden belirgin biçimde daha yüksek bir ücret gerekir. Takılan işlemler ve replace-by-fee Bitcoin'deki karşılık gelen araçları ele alır.
Yaygın nonce sorunları
- "Nonce too low" (nonce çok düşük). Bu nonce'a sahip bir işlem zaten kullanılmıştır; çoğunlukla başka bir cüzdan veya cihaz aynı adresten gönderim yaptığı için.
- Boşluklar. Hesap henüz 7'deyken nonce 9 taşıyan bir işlem, 7 ve 8 oluşana kadar bekler. Genellikle bir şeyin düşürüldüğünün ya da başka bir yerde imzalandığının işaretidir.
- İki cihaz, tek hesap. İki uygulama aynı anda aynı adresten gönderim yaparsa ikisi de aynı nonce'u seçebilir; işlemlerden biri başarısız olur.
Diğer zincirler bunu nasıl ele alır
- Bitcoin ve diğer UTXO zincirlerinde hesap nonce'u yoktur. Her işlem belirli coin'leri harcar ve bir coin yalnızca bir kez harcanabilir; tekrar oynatmayı ve çifte harcamayı önleyen budur.
- Solana bunun yerine yakın tarihli bir blockhash kullanır: bir işlem yalnızca kısa bir süre geçerlidir. İki cihazda onay toplamak gibi daha uzun süren imzalamalar için özel bir hesapta saklanan kalıcı nonce'lar sunar.
Akıllı hesapların da nonce'u vardır
ERC-4337 üzerine kurulu akıllı sözleşme hesapları sıradan işlemler göndermez. Bir bundler'ın ortak bir EntryPoint sözleşmesi aracılığıyla gönderdiği kullanıcı işlemlerini imzalarlar. Her hesabın yine EntryPoint tarafından takip edilen bir nonce'u vardır ve aynı tekrar oynatma korumasını sağlar. Standart ayrıca hesap başına birden fazla bağımsız nonce dizisine izin verir; böylece birbiriyle ilgisiz işlemler birbirini beklemek zorunda kalmaz. Temel ilkelerden hesap soyutlaması genel resmi açıklar.
SSP'de nonce'lar
Ethereum'da ve SSP'nin desteklediği diğer EVM zincirlerinde SSP hesabınız, 2'de 2 multisig'iniz tarafından kontrol edilen bir ERC-4337 akıllı hesabıdır. Her işlem kendi nonce'unu içerir ve hem SSP Wallet hem de SSP Key bunu imzalar; böylece onaylanmış bir işlem tekrar oynatılamaz ve geçmişinizde başka bir konumda yeniden kullanılamaz.
Pratik bir sonuç: hesap sözleşmeniz, ondan gönderdiğiniz ilk işlemle dağıtılır. Bu ilk gönderim dağıtımı da içerdiğinden sonraki gönderimlere göre belirgin biçimde daha fazla gas kullanır. Bu beklenen bir durumdur ve her zincirde hesap başına yalnızca bir kez olur.
Dürüst özet
Nonce, her Ethereum hesabının işlemlerini yalnızca bir kez ve sırayla işlemesini sağlayan bir sayaçtır. Bu sizi tekrar oynatmalara karşı korur ve birbirine bağlı işlemleri doğru sırada tutar; bunun bedeli ise ücreti düşük tek bir işlemin arkasındaki her şeyi bekletebilmesidir.
Bu olduğunda üstüne daha fazla işlem göndermeyin. Takılan işlemi aynı nonce ve daha yüksek bir ücretle değiştirin ya da iptal edin; kuyruk açılacaktır.


