Sözlük / Madencilik ve konsensüs
Önceki blok başlığı hash değeri
- Önceki blok başlığı hash değeri nedir?
- Önceki blok başlığı hash değeri, her blok başlığında üst bloğunu adlandıran 32 baytlık alandır ve bir yığın bloğu zincire dönüştüren tek bağlantı budur.
Her blok geriye bakar, asla ileriye bakmaz. İşaretçi hash değeri hesaplanan 80 baytın içinde durduğu için, eski bir bloktaki herhangi bir şeyi düzenlemek o bloğun hash değerini değiştirir ve üzerine inşa edilmiş her bloğu bozar; bu nedenle bir yıl önceki bir ödemeyi geri almak kabaca 52.000 blokluk iş kanıtını yeniden yapmak anlamına gelir. İnsanların Bitcoin değiştirilemez derken kastettiği budur, veri silmeyle ilgili herhangi bir kural değil.
Nasıl çalışır
Önceki blok başlığı hash değeri, üst bloğun 80 baytlık başlığı üzerinde SHA-256 işleminin iki kez çalıştırılmasıyla üretilir ve bir bloğun kendi dışındaki herhangi bir şeye tuttuğu tek referanstır.
Üst bloğun başlığı kendi üst bloğunun hash değerini, o da kendi üst bloğununkini ve böylece başlangıca kadar içerdiği için, tek bir 32 baytlık alan kendisinden önceki tüm geçmişi taahhüt eder. Zincirin ucunu doğrulamış bir düğüm, ona götüren zincirin kendi içinde tutarlı olduğunu örtük olarak doğrulamış olur. Geçen yaz çıkarılmış bir bloktaki bir işlemi kurcalarsanız o bloğun başlık hash değeri değişir; bu, alt bloğun elindeki kopyanın artık eşleşmediği, dolayısıyla alt bloğun geçersiz olduğu ve ondan sonraki her şeyin de geçersiz olduğu anlamına gelir. Hasarı onarmak, o blokların her birinde yeniden madencilik yapmak demektir: kabaca günde 144 blok, yılda 52.560 blok.
Genesis bloğu istisnadır ve olmak zorundadır: ondan önce hiçbir şey yoktur, bu yüzden alan 32 sıfır bayttır.
Bir blokta hiçbir şey ileriye işaret etmez. Bitcoin Core bir nextblockhash bildirdiğinde kendi dizinini okuyordur, bloğu değil; önceki blok başlığı hash değeri asla değişmezken bu değerin bir yeniden düzenleme sırasında değişebilmesinin nedeni tam olarak budur. İki bloğun aynı üst bloğu adlandırması da bir hata değildir. Verinin bakış açısından bir çatal böyle görünür ve ağ bunu iki işaretçiden birini yanlış ilan ederek değil, birikmiş işi en fazla olan dalı tercih ederek çözer.
Nerede görürsünüz
Önceki blok başlığı hash değeri, neye baktığınıza bağlı olarak biraz farklı adlarla karşınıza çıkar.
Bitcoin Core bunu getblockheader ve getblock çağrılarında previousblockhash olarak döndürür. Blok 0 için alan yanıtta hiç bulunmaz, çünkü adlandırılacak bir üst blok yoktur. Blok gezginleri genellikle bunu Previous Block olarak etiketler ve bir bağlantıya dönüştürür; geçmişte geriye doğru tıklayarak ilerleme böyle çalışır.
Aynı zamanda bir başlık zinciri eşitlemesinin bütün özü de budur. Başlık indiren bir düğüm her başlıkta iki şeyi kontrol eder: bunun bir öncekini adlandırdığını ve hash değerinin hedefi karşıladığını. Ancak bu zincir bir arada durduktan sonra blok gövdelerini istemeye başlar. Hafif cüzdanlar bunun ötesine hiç geçmez; bağlantıları ve işi tutar, başka bir şey tutmaz.
Alanı bir gün elle kurarsanız kendi gözlerinizle tartışmaya hazır olun, çünkü başlıktaki baytlar hash değerinin normalde alıntılandığı sırada yazılmamıştır.
Önceki blok başlığı hash değeri vs iç bayt sırası
Önceki blok başlığı hash değeri, herkesin alıntıladığı sıranın tersi bayt sırasında saklanır ve bir başlığı elle doğrulamaya çalışan neredeyse herkesin takıldığı nokta budur. Blok 1, üst bloğunun hash değerini 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000 olarak taşır. Bu, bilinen genesis hash değeri olan 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f değerinin bayt bayt tersten yazılmış halidir. İş kanıtının ürettiği baştaki sıfırlar ham alanda sona düşer. İkisi göze görünür biçimde eşleşmediğinde yanlış giden bir şey yoktur: baytları ters çevirin, eşleşirler.