Bitcoin (BTC) bloklarına ait hash verilerinin bir sürü 0 (sıfır) ile başladığını fark ettiniz mi? Bunun sırrı, bilgisayar bilimlerinde ve özellikle de veri güvenliğinde kullanılan "nonce" değerinde…
Şimdi gelin, "Nonce değeri nasıl hesaplanır?" konusunu masaya yatıralım. Hazırladığımız makalemizde; "Nonce nedir?", "Nonce nerede kullanılır?", "Bitcoin madenciliğinde nonce değeri nedir?", "Nonce değeri ile Proof of Work sisteminin bağlantısı nedir?" gibi soruların cevaplarını bulabileceksiniz.
Nonce nedir?
"Number Only Used Once (Yalnızca Bir Kez Kullanılan Sayı)" ifadesinin kısaltılmış hali olan nonce, yetkilendirme amacıyla kullanılan ve rastgele üretilen sayıdır.
Sadece kripto para madenciliğinde değil, bilgisayar teknolojisinin birçok farklı alanında karşımıza çıkan nonce değeri, belli bir kriterin karşılanması için rastgele oluşturulan sayı şeklinde tarif edilebilir.
Nonce değerinin kullanımı ve oluşturulması hakkında birçok farklı senaryo var. Bizler bu konuyu kripto para cephesinden ele alacağız ve daha kolay anlaşılması için Bitcoin madencilik sistemi üzerinden nonce ifadesini detaylandıracağız.
Bitcoin bloklarındaki "Hash" ve "Nonce" verileri
Bilindiği üzere Bitcoin madenciliği, astronomik ölçekte işlem gücü gerektiriyor. Bitcoin madenciliğindeki bu büyük uğraş, blok ödülünü kazanmak için… Hatırlatma: 11 Mayıs 2020'de gerçekleşen Bitcoin blok ödülü yarılanması (halving) işlemiyle, madenci ödülleri 6,25 BTC'ye indirildi.
Astronomik işlem gücü harcıyor olsalar da, madencilerin yaptıkları iş aslında basit bir sayıyı bulmak, yani nonce değerini…
Blockchain.com sitesi üzerinden, Bitcoin ağında oluşturulmuş herhangi bir bloka ait bilgi ekranına girdiğimizde şuna benzer bir görüntüyle karşılaşıyoruz:
Örnek amaçlı kullanılan 632.276 numaralı bloka ait detaylar. Kaynak: Blockchain.com
Bizim için burada önemli olan iki değer var: "Hash" ve "Nonce"…
Not: Web sitesini Türkçe dilinde açmanız halinde bu değerler "Esrar" ve "Şimdiki Zaman" şeklinde listelenecektir. Çevirmene selam olsun (!)
Dikkat ederseniz hash verisinin ilk 19 hanesi sıfırdan oluşuyor. Bu rastlantı değil. Hatta, Bitcoin madenciliğinin bu denli zor olmasının asıl sebebi bile denilebilir. Çünkü madenciler, farklı "nonce" değerlerini kullanarak, başında bu kadar sıfır bulunan hash kodunu oluşturmak için bu denli uğraşıyorlar.
Yukarıda örneğini verdiğimiz bloku oluşturan madenci (F2Pool), hash verisinin başında 19 adet sıfır oluşturabilmek için nonce değerinin 3.719.213.695 olduğunu belirlemiş.
Madencilerin bulmak için kılı kırk yardıkları "nonce" değerini daha iyi anlayabilmek için öncelikle Bitcoin blok yapısını bilmemiz lazım. Bunun için de blockchain, Proof of Work ve madencilik terimlerini kısaca hatırlayalım:
Blockchain nedir?
Blockchain; şifrelenmiş işlemlerin takibinin tutulduğu, merkezi olmayan kayıt defteridir. Bitcoin’in altyapısını oluşturan blockchain teknolojisi, otoriteye ihtiyaç duymadan işlemleri zaman damgasıyla imzalayarak bloklar halinde listeler. Doğrulanan veri bloku, tıpkı zincir gibi uç uca eklenir. Her blok kendinden önceki bloka şifreli biçimde bağlıdır.
Proof-of-Work (İş İspatı) nedir?
Bilgisayarın, belirlenen bir iş için çalıştığını ve emek sarf ettiğini ispatladığı yönteme Proof-of-Work (PoW) denir. İş ispatı en basit tabirle, çok yüksek işlem gücü veya emek gerektiren bir bulmacayı çözmek gibidir. Bulmaca zor olsa da, çözümün sağlamasını yapmak kolaydır.
Madencilik nedir? Bitcoin madenciliği nasıl yapılır?
Proof-of-Work (İş İspatı) konsensüs algoritmasını kullanan blockchain ağlarında, işlem kayıtlarını onaylama ve transfer işlemlerini içeren blokları ağa ekleme işine madencilik denir. Bitcoin blockchain ağındaki transferlerin doğrulanması ve blok oluşturulması için çok yüksek miktarda işlem gücü gerekmektedir.
Temel bilgilerimizi hatırladıktan sonra şimdi Bitcoin bloklarının yapısına geçebiliriz.
Bitcoin bloklarının içinde ne var?
Kabaca 1 MB büyüklüğündeki Bitcoin bloklarının içinde esas olarak gerçekleşen transfer işlemleri yer alıyor.
Bu transfer işlemlerinin yanı sıra zaman damgası, önceki blokun hash bilgisi ve her blokta bulunan standart tanımlama verileri de bulunuyor.
BITCOIN BLOK İÇERİĞİ | |||
---|---|---|---|
Sihirli sayı | 4 byte | "0xD9B4BEF9" şeklinde sabit değer | |
Yükseklik | 4 byte | Blok numarası | |
BAŞLIK (HEADER) |
Versiyon | 4 byte | Kullanılan güncel sürüm |
Önceki başlık | 32 byte | Önceki blokun başlık özeti (hash) | |
Merkle kökü | 32 byte | İşlemlerin özet değeri (hash) | |
Zaman damgası | 4 byte | 1 Ocak 1970'ten itibaren geçen süre | |
Zorluk | 4 byte | Ağın zorluk bilgisi | |
Nonce | 4 byte | Ağ zorluğuna göre ayarlanmış rastgele sayı | |
İşlem sayısı | 1-9 byte | Belirli uzunlukta tam sayı değeri (integer) | |
İşlemler | - | Bloktaki transferlerin listesi |
Bitcoin blok içeriğine şöyle bir göz atıldığında, işlemin yapıldığı anda verilerin büyük kısmının sabit olduğu, sadece "nonce" değerinin o anda madenci tarafından üretildiği anlaşılabilir.
Zorluk – nonce ilişkisi
Madenciler, yukarıdaki tabloda bulunan değerleri bir araya getirip özetini çıkarırlar, yani SHA-256 formatında hash koduna dönüştürürler.
Detaylı bilgi için: Hash Nedir? Bitcoin SHA-256 Algoritması Nasıl Çalışır?
Blok içinde yer alması gereken tüm verileri SHA-256 formatına dönüştürmek gayet basit bir işlem. Öyle ki, bizler de evlerimizdeki emektar bilgisayarlarımız ile bu işlemi rahatlıkla yapabiliriz. Ancak Proof of Work (İş İspatı) konsensüs mekanizması, önümüze kalın bir set çekiyor ve önemli bir şart koşuyor:
Öyle bir hash kodu oluşturun ki, başında 'n' adet sıfır olsun.
Burada bahsedilen 'n' değeri ağın zorluğuna göre değişiyor. Zorluk seviyesi, Bitcoin madenciliği yapan işlemci miktarına ya da başka ifade ile hash oranına (hash rate) bağlı olarak güncelleniyor. Her 2.106 blokta bir düzeltme yapılan Bitcoin ağ zorluğu, her blokun ortalama 10 dakikada oluşmasını sağlayacak biçimde ayarlanıyor.
İlginizi çekebilir: Bitcoin Hash Rate nedir? Bitcoin Madenciliği için Neden Önemli?
Peki madenciler, başında bu kadar sıfır olan hash kodunu nasıl elde ediyorlar? İşte tam bu noktada "nonce" değeri devreye giriyor.
Nonce değerinin hesaplanması
Eğer özet fonksiyon (hash) oluşturma hakkındaki makalemize göz attıysanız, hash kodunun tek taraflı bir işlem olduğunu fark etmişsinizdir. Yani madenci, verileri bir araya getirince sabit hash elde ediyor.
Eldeki verileri SHA-256 formatında hash koduna dönüştürürken, başında 'n' adet sıfır oluşmasını beklemek inanılmaz derecede düşük bir ihtimal. Art arda on binlerce kez zar atıp her defasında 6 gelmesini beklemek bile daha olası.
Blok içindeki transfer verileri, blok numarası, önceki blokun hash kodu, zorluk seviyesi, işlem adedi gibi veriler sabit olduğundan madencinin elinde tek değişken kalıyor: nonce.
Madenciler; büyük kısmı sabit olan blok içi verileri kendi belirledikleri nonce değeri ile teker teker denemeye başlıyorlar. Burada "brute force" ismi verilen, her değeri tek tek deneme sistemi işliyor. Yani çok yüksek işlem gücü kullanarak sabit verileri, farklı nonce değerleri ile deniyorlar.
Ortaya çıkan hash kodunun başında, PoW mekanizmasının zorluk derecesinde belirlenen adette sıfır yer alıncaya kadar bu hesaplama sürüyor.
Eğer madenci, zorluk seviyesinde belirlenen miktarda sıfırı hash kodunun başlangıcında oluşturmayı başarırsa amacına ulaşıyor. Blok oluşuyor ve node'ların (düğüm) kontrolüne sunuluyor. Blokun onaylanması durumunda madenci, blok ödülünü ve işlem ücretlerini almaya hak kazanıyor.
İlginizi çekebilir: Bitcoin Node (Düğüm) Nedir? Nasıl Çalışır?
Çalışan nonce demosu
Bitcoin madenciliğinde nonce değerinin nasıl hesaplandığını daha net anlamak için buradaki adreste yer alan demoyu kullanabilirsiniz.
Bu demoda, Bitcoin blockchain yapısının basitleştirilmiş hali test edilebiliyor. Bitcoin ağındakine kıyasla çok daha düşük zorluk seviyesine sahip bu sistemde, ilk dört basamağı sıfır olan hash kodu oluşturuluyor.
İlk üç alandaki veriler değiştiğinde otomatik biçimde aşağıdaki hash kodu da değişiyor. Eğer hash kodunun ilk 4 hanesi sıfır değilse, arka plan kırmızıya dönüşerek gerekli şartın sağlanmadığı ifade ediliyor.
"Mine" tuşuna basıldığında ise, yukarıdaki blok numarası ve "Data" alanına girilen veriye uygun biçimde sırayla tüm "nonce" değerleri deneniyor. Hash kodunun ilk dört hanesini sıfır yapan nonce değeri elde edildiğinde arka plan yeşile dönüşüyor.
Nonce hesaplama örneği:
Kendi yaptığım denememde, "Data" alanına üç adet transfer işlemi girdim ve "Mine" tuşuna bastım. Sistem gerekli hesaplamaları yaptı, 1 numaralı bloka ait transfer işlemlerine 109.224 nonce değerini vererek hash kodunun ilk dört hanesini sıfıra dönüştürmeyi başardı.
Daha sonra bu listeye yeni bir transfer işlemi ekledim. 1 numaralı bloka eklediğim bu transfer işlemi, 109.224 nonce değeri ile birleşince hash kodu değişti. Artık ilk 4 hanesi sıfır değil ve PoW mekanizmasına uymuyor.
Yeniden hesaplama yapılması için "Mine" tuşuna bastım. Sistem, sırayla tüm sayıları denemeye başladı ve hash kodunun ilk dört hanesini sıfır yapacak yeni nonce değerini 108.142 olarak hesapladı.
Örneğini verdiğimiz bu hesaplama basit gibi görülse de, hash kodunun başındaki sıfır adedi arttıkça yapılması gereken işlem miktarı da katlanıyor. Hash kodları on altılık sayı sisteminde (heksadesimal) hesaplandığından ve her basamağa 16 farklı değer gelebildiğinden, sıfır sayısı her artırıldığında zorluk da 16 kat artıyor.
Bu yazı hazırlanırken Bitcoin ağında oluşturulan bloklara ait hash verileri 19 adet sıfır ile başlıyordu. Zorluk seviyesi ise 15.138.043.247.082,88 şeklinde belirtilmişti.
Kıyas yapmak gerekirse, 2009 yılında oluşturulan 100 numaralı blok sadece 1,00 zorluk seviyesine sahipti ve hash verisi 8 adet sıfır ile başlıyordu.
Özetlemek gerekirse, Bitcoin ağındaki madencilik işlemleri, kaba tabir yapacak olursak kulağı tersten göstermeye benziyor. Hesaplanması basit transfer dökümlerini, son derece zorlu bir hesaba dönüştürerek astronomik ölçüde işlem gücü harcanmaya dayalı bir sistem. Ancak bunun mantıklı bir açıklaması var: blok ödülü…
Bitcoin blockchain üzerinde blok oluşturma zorluğu. Kaynak: Blockchain.com
Bu yazı hazırlanırken blok başına 6,25 BTC olan madencilik ödülünü, PoW mekanizmasına uygun biçimde hak etmeleri gerekiyor. Ağ zorluğunun, blok oluşturmak için gereken işlem gücünün artması aslında Bitcoin ekosistemi için iyi bir durum. Zorluk ne kadar artarsa, o kadar çok madenci işlem gücünü Bitcoin ağına ayırıyor demektir. Ağın işlem gücünün artması ise Bitcoin'in sağlamlığını ve güvenirliğini artırır.
2009'dan bu yana ağ zorluğuna baktığımızda da, Bitcoin'e duyulan güvenin günbegün arttığını gözlemliyoruz.