Sözlük / Madencilik ve konsensüs
Blok başlığı
Diğer adları: Başlık.
- Blok başlığı nedir?
- Blok başlığı, bir bloğun 80 baytlık özetidir: sürüm, önceki başlık hash'i, merkle kökü, zaman damgası, nBits ve nonce; madencilerin gerçekte hash'lediği kısım da budur.
Madenciler ödemeleri hiçbir zaman doğrudan hash'lemez. Hash'ledikleri şey bu sabit boyutlu kayıttır; bu kayıt, merkle kökü üzerinden işlem listesine ve önceki başlık hash'i üzerinden de kendinden önceki her bloğa bağlanır. Blok başına seksen bayt o kadar küçüktür ki Ocak 2009'dan bu yana oluşan başlık zincirinin tamamı bir telefona rahatça sığar ve hafif doğrulamayı mümkün kılan da tam olarak bu gerçektir.
Nasıl çalışır
Bir blok başlığı sabit sıradaki altı alandan oluşur ve bu alanların bayt konumları hiçbir zaman değişmez.
Sürüm, 0 ile 3 numaralı baytları kaplar. Önceki blok başlığı hash'i 4 ile 35 numaralı baytları alır. Merkle kökü 36 ile 67 numaralı baytları alır. Unix çağından bu yana geçen saniye cinsinden zaman damgası 68 ile 71 numaralı baytlarda yer alır. Kodlanmış zorluk hedefi olan nBits, 72 ile 75 numaralı baytlarda yer alır. Nonce ise 76 ile 79 numaralı baytları doldurur. Her alan little endian biçiminde saklanır; bir blok gezgininde gördüğünüz onaltılık dizgenin, ham blok dökümündeki onaltılık diziye kıyasla bayt bayt ters görünmesinin nedeni budur.
Blok hash'i bu alanlardan biri değildir. 80 bayt üzerinde SHA-256 işleminin iki kez çalıştırılmasıyla hesaplanır ve düğümler bu değeri olduğu gibi kabul etmek yerine kendileri türetir; bir bloğun kendi kimliği hakkında yalan söyleyememesinin nedeni de tam olarak budur. İş kanıtı (proof of work) aynı işlemin bir karşılaştırmayla birleşmiş hâlidir: ortaya çıkan sayı, nBits'in kodladığı hedefe eşit veya bu hedefin altında olmalıdır.
Bu alanlardan ikisi, insanları şaşırtan kurallar taşır. Zaman damgasının doğru olması gerekmez. Yalnızca kendinden önceki on bir bloğun zaman damgası medyanını aşması ve alıcı düğümün kendi saatiyle iki saatten fazla farklı olmaması yeterlidir; bu yüzden zamanları hafifçe sırasız olan başlıklar olağan ve geçerlidir. Sürüm alanı da artık basit bir sayaç değildir. BIP9 kapsamındaki yumuşak çatal sinyalleşmesi ile BIP320 kapsamındaki sürüm kaydırma (version rolling), bu alandan bit ödünç alır; dolayısıyla modern bir başlıktaki sürüm numarası artık bir yazılım sürümü değil, bir bit alanıdır.
Nerede görülür
Blok başlıkları, yeni bir düğümün indirdiği ilk şeydir ve birçok cüzdanın sakladığı tek şeydir.
Bitcoin Core, Şubat 2015'te yayımlanan 0.10 sürümünden beri önce başlıkları eşitler. Düğüm başlık zincirini indirip doğrular, gerçek iş kanıtı taşıdığını teyit eder ve ancak bundan sonra blok gövdelerini ister; bunu birkaç eşten paralel olarak yapabilir çünkü ne aradığını zaten bilmektedir. Hafif istemciler bu ilk adımda durur: bir SPV veya Neutrino cüzdanı başlıkları saklar ve bir işlemin merkle dalının bu başlıklardan birine bağlandığını kontrol eder. Her biri 80 bayt olan 900.000 başlıktan oluşan bir zincir 72 MB tutar; bunun mobil veriyle çalışabilmesinin nedeni budur.
Genesis başlığı, incelemek için standart örnektir. Sürümü 1, önceki başlık hash'i tamamen sıfır, merkle kökü 4a5e1e4b ve benzeri, zaman damgası 3 Ocak 2009 tarihine karşılık gelen 1231006505, nBits değeri 0x1d00ffff ve nonce değeri 2083236893. Bu 80 baytı kendiniz hash'leyip on sıfırla başlayan tanıdık blok hash'ini elde edebilirsiniz. Başka herhangi bir başlığı görmek isterseniz, Bitcoin Core RPC getblockheader tam olarak bu alanları ve başka hiçbir şeyi döndürür.