Blok başı (block header), tüm blok zincirindeki belirli bir bloğu tanımlamak için kullanılır ve madencilik ödülleri için kanıt oluşturmak adına tekrar hash edilmektedir. Blok zinciri, blok zinciri ağında yapılmış olan işlemlerle ilgili bilgileri depolamak için kullanılan bir dizi çeşitli bloktan oluşmaktadır.
Blokların her biri benzersiz bir başlık içerir ve her bir blok, ayrı ayrı hash fonksiyonu ile tanımlanmaktadır. Blok başı, bir bloğun geri kalanı hakkında bilgi sağlayan blok kısmıdır. Bu kısım bloğun çıkarıldığı zamanı ve zorluğunu, blokta yapılan işlemlerin Merkle kökü (veya Merkle ağacı) ve nonce gibi verileri içeren metadatalardan oluşmaktadır. Ayrıca, blokları kullanarak zincirlerin oluşturulmasını sağlayan önceki bloğun hash'ini de içermektedir. Yani kısacası blok başı, ham alışverişlerin listesi dışında tüm verileri içermektedir.
Block Header Nasıl İşler?
Blok başı, madencilerin bloğun doğruluğunu kontrol etmek için hash’ledikleri kısımdır. Bu, binlerce işlemden oluşabilen bloğun tamamını hashlemeye çalışmaktan çok daha etkilidir. Bir madencinin her deneme için nonceu değiştirmesi ve her denemede 2 MB'lık bir bloğu yeniden hashlemesi çok zahmetli bir işlem olmaktadır.
Bir bloğun tamamını Bitcoin’in 80 baytlık bir blok başı ile karşılaştırıldığında işlemin ne kadar kolaylaştığı anlaşılabilmektedir. Block header, Bitcoin geliştirme belgelerinde yaygın olarak kullanılır ve görevleri hızlı ve daha kolay bir şekilde kaydetmeye yardımcı olmaktadır. Blok zincirleri basit bir veritabanında veya düz bir dosya halinde saklanabilir.
Blok zincirleri bir bütün olarak ele alındığında, onları dikey bir dizi (vertical stack) olarak resmetmek doğru olmaktadır. Bloklar, ilk blok temel halinde üst üste katman haline gelerek blok zincirinin sonuna ulaşıp, bir dizi tamamlanana kadar katmanları büyümektedir.
Genesis Bloğu
Zincirdeki ilk blok aynı zamanda “genesis bloğu” olarak da bilinir. Bu dizilerin katmanları ve köklü geçmişi, Bitcoin'i bu kadar güvenli yapan şeylerden biridir. Standart bir madencilik işlemlerinin bir parçası olarak blok başlığı, nonce değerini değiştirerek madenciler tarafından tekrar tekrar hash edilmektedir. Bu işlemler sayesinde, madencilerin blok zinciri sisteminin sorunsuz ve verimli bir şekilde çalışmasını sağlamak için yaptıkları katkılardan dolayı ödüllendirilmesine yardımcı olan bir çalışma şekli oluşmaktadır.
Blok başlıkları mining açısından idealdir, bunun yanında küçük boyutları nedeniyle light client’lar için de idealdir. Bitcoin blok zinciri, akıllı telefonlar gibi cihazlarda depolanamayacak kadar büyüktür. Eğer bir zincirde tanesi 1 MB olan 100.000 adet blok olsaydı, 100 GB depolama alanı kullanılmış olurdu. Bunun yerine 80 baytlık blok başlıkları kullanıldığı zaman ise yalnızca 8 MB depolama alanı kullanılmış olurdu. Bu şekilde, daha az bant genişliğine veya depolama alanına sahip cihazlar yine de bir dereceye kadar blok doğrulama işlemini gerçekleştirebilir.
Merkle kökü tüm işlemleri kapsadığından, daha sonra bir işlemin belirli bir bloğa dahil edilip edilmediğini kontrol edebilmektedir. Ancak bunun bir bedeli vardır; kullanıcı, gerekli bilgileri sağlamak için yine de üçüncü bir tarafa güvenmek zorunda kalacaktır. Dolayısıyla, kullanıcıların hiç doğrulama yapmadığı bir sistem yerine light client’lar tercih edilmektedir.
Block Header Gereksinimleri
Block header, üç set blok meta verisi (üst veri) içermektedir. 80 bayt uzunluğunda bir dize olan block header, 4 bayt uzunluğunda Bitcoin sürüm numarası, 32 bayt önceki blok hash, 32 bayt uzunluğunda Merkle ağacı, 4 bayt uzunluğunda bloğun zaman damgası, 4 bayt uzunluğunda bloğun hedef zorluğu ve madenciler tarafından kullanılan 4 baytlık uzun nonce şeklinde oluşmaktadır.
Block Header Bileşenleri
Block header bileşenlerinin her biri, doğru ve güvenilir bir header oluşturmak için hayati önem taşımaktadır. Her bir bloğun temel tanımlayıcısı, içerdiği kriptografik hashe bağlıdır (cryptographic hash). Aslında bu tanımlayıcı dijital bir parmak izidir ve blok başlığının uygulanabilir algoritma aracılığıyla iki kez özetlenmesi ile oluşturulmaktadır. Bitcoin sürüm numarası, değişiklikleri ve güncellemeleri takip etmek için kullanışlıdır. Önceki blok özeti, önceki bloğa veya üst bloğa bağlanır ve zinciri etkin bir şekilde korur.
Merkle ağacı ise, transfer içindeki tüm özet transferlerin özetlerinden oluşur. Bu durum aslında göründüğü kadar karmaşık değildir, her bir özetleme ile daha fazla hash edilir. Zaman damgası, proje üzerinde çalışan herkesin belli bir olayın ne zaman gerçekleştiğine dair kalıcı, kodlanmış bir kaydı görebilmesi için dahildir.
Zorluk hedefi, madencilerin bloğu çözerken ne kadar zorlanacaklarını ayarlamak için kullanılır. Son olarak nonce, madencilerin farklı permütasyonlar oluşturmak ve dizide doğru bir hash oluşturmak için kullanabilecekleri değerdir.