Nonce Nedir, Ne Demek?
Nonce, “bir kez kullanılan sayı” anlamına gelen ve kripto paralarda iki ayrı görevi olan değerdir: Bitcoin madenciliğinde hash denemesi için değiştirilen sayı, Ethereum’da ise bir hesabın işlemlerini sıraya koyan sayaç.
Bu sayfada 5
Nonce, İngilizce “number used once” yani “bir kez kullanılan sayı” ifadesinden türeyen ve kriptografide yalnızca bir kez kullanılması amaçlanan değerdir. Kripto paralarda iki farklı anlamda karşınıza çıkar: Bitcoin madenciliğinde madencilerin hash bulmak için değiştirdiği sayı ve Ethereum’da bir hesabın gönderdiği işlemlerin sıra numarası. Hangisinden söz edildiğini ayırt etmek, özellikle cüzdanda bekleyen işlemleri anlamak için önemlidir.
Bitcoin madenciliğinde nonce ne işe yarar?
Bitcoin’in blok başlığında 32 bitlik bir nonce alanı bulunur. Proof of Work sürecinde madenci bu alana farklı sayılar yazarak blok başlığını tekrar tekrar hash’ler. Amaç, ağın belirlediği hedeften küçük bir sonuç bulmaktır. Her yeni nonce tamamen farklı bir hash ürettiği için hangi sayının işe yarayacağını önceden bilmenin yolu yoktur; tek yöntem denemektir.
32 bitlik alan yaklaşık 4,3 milyar farklı değer alabilir. Günümüz madencilik cihazları bu aralığı bir saniyeden çok daha kısa sürede tüketir. Bu yüzden madenciler ayrıca coinbase işlemindeki “extranonce” alanını ve zaman damgasını da değiştirir; her değişiklik Merkle kökünü değiştirerek yeni bir deneme alanı açar. Uygun hash bulununca nonce, bloğun herkes tarafından doğrulanabilmesi için başlıkta kalır.
Kısacası madencilikteki nonce, kazanan bir şifre değil, deneme yanılma sürecinin sayaç değeridir. Hedefin ne kadar zor olduğunu madencilik zorluğu belirler.
Ethereum’da işlem nonce’u nedir?
Ethereum’da her kullanıcı hesabının bir nonce değeri vardır. Hesaptan gönderilen ilk işlemin nonce’u 0, ikincisinin 1’dir ve her işlemde bir artar. Bu sayaç iki iş görür:
- Sıralama: Aynı hesabın işlemleri nonce sırasıyla işlenir. Nonce 5 onaylanmadan nonce 6 bloğa giremez.
- Tekrar saldırısını önleme: İmzalanmış bir işlem ağa ikinci kez gönderilse bile aynı nonce bir kez kullanıldığı için tekrar işlenmez.
Akıllı sözleşme hesaplarının nonce’u ise farklı bir anlam taşır; sözleşmenin oluşturduğu yeni sözleşmelerin sayısını tutar.
Cüzdanlar nonce’u normalde otomatik belirler; bazıları gelişmiş ayarlardan elle girmeye de izin verir. Aynı hesabı iki farklı cüzdan uygulamasında aynı anda kullanmak, iki uygulamanın aynı nonce’u atamasına ve işlemlerden birinin geçersiz kalmasına yol açabilir.
Takılan bir işlem nonce ile nasıl çözülür?
Düşük ücretle gönderdiğiniz bir işlem mempool’da beklerse, aynı hesaptan sonra gönderdiğiniz bütün işlemler de onun arkasında sıraya girer. Cüzdanların “hızlandır” ve “iptal et” düğmeleri bu noktada nonce’u kullanır:
- Hızlandırma: Cüzdan aynı nonce ile, aynı içerikte ama daha yüksek ücretli yeni bir işlem gönderir. Doğrulayıcılar genellikle yüksek ücretli olanı seçer.
- İptal: Cüzdan aynı nonce ile kendi adresinize 0 ETH gönderen, daha yüksek ücretli bir işlem yayınlar. Bu işlem önce onaylanırsa asıl işlem geçersiz olur.
Hangi işlemin onaylanacağı garanti değildir; ilk işlem o arada bloğa girmiş olabilir. Nonce’u elle değiştirmeden önce gezginde hesabın son onaylanan nonce değerini kontrol edin. Aynı adrese ikinci bir transfer göndermek ilk işlemi iptal etmez, iki ayrı ödeme yapmanıza yol açabilir.
Sık sorulan sorular
Bitcoin işlemlerinde nonce var mı?
Hayır. Bitcoin hesap modeli yerine UTXO modeli kullandığı için işlemlerde sıra numarası yoktur; takılan bir işlem RBF veya CPFP gibi yöntemlerle hızlandırılır. Nonce yalnızca blok başlığında bulunur.
Nonce boşluğu (nonce gap) nedir?
Örneğin nonce 7 hiç gönderilmeden nonce 8 gönderilirse, nonce 8 sonsuza kadar bekler. Eksik sıra numarası doldurulana kadar sonraki işlemler onaylanmaz.