İçeriğe geçin
buybitcoinsmart

Sözlük / Düğümler ve yazılım

Headers-first eşitleme

Headers-first eşitleme nedir?
Headers-first eşitleme, bir düğümün herhangi bir blok gövdesi istemeden önce 80 baytlık başlık zincirinin tamamını indirip doğruladığı, ardından bu gövdeleri paralel olarak getirdiği başlangıç stratejisidir.

İndirmeyi ikiye bölmek, ilk eşitlemeyi uygulanabilir kılan şeydir. Bitcoin Core, Şubat 2015'te yayımlanan 0.10.0 sürümünden bu yana bu şekilde çalışıyor; o sürüm, blok getirmeyi tek bir sıralı kuyruktan bağlı tüm eşlere yayılan bir işe dönüştürdü. Kendi bakiyenizi doğrulamak için kendi düğümünüzü çalıştırıyorsanız, ilk eşitlemenin günler yerine saatler içinde bitmesinin nedeni budur.

Nasıl çalışır

Headers-first eşitleme, eşlerden blok değil başlık isteyerek başlar.

Düğüm, o anda nerede olduğunu düşündüğünü anlatan kompakt bir hash listesi olan blok konumlandırıcısı taşıyan bir getheaders mesajı gönderir. Bir eş, her biri 80 bayt olan en fazla 2.000 başlık içeren bir headers mesajıyla yanıt verir, böylece tek bir yanıt kabaca iki haftalık zinciri kapsar. Düğüm her başlık için, onun zaten sahip olduğu bir üst bloğu işaret ettiğini ve hash'inin nBits alanının iddia ettiği zorlukla uyuştuğunu kontrol eder, ardından hiçbir eşte daha yeni bir şey kalmayana kadar yeni uçtan yeniden sorar.

Gövde indirmesi ancak bu iskelet yerine oturduktan sonra başlar. Düğüm istediği her bloğun hash'ini zaten bildiği için, tek bir bağlantının arkasında sıraya girmek yerine aynı anda birkaç eşten farklı kesitler isteyebilir. Bitcoin Core, tek bir eşle açık bıraktığı blok isteği sayısını sınırlar, mevcut kodda on altı, ve pencereyi tıkayan eşin bağlantısını keser. Üst bloklarından önce gelen bloklar yalnızca bekletilir; bu da doğrulanmamış veriyi diskte tutma alışkanlığını ortadan kaldırdı.

Başlıklarla birlikte iki koruma da gelir. Yazılım, elindeki başlıkların toplam iş kanıtı sürüme derlenmiş asgari bir rakamı aşana kadar bir zinciri benimsemez, böylece bir eş yeni bir düğümü kolay bloklardan oluşan ucuz bir yan zincire çekemez. Ayrıca assumevalid ayarı, her sürümle birlikte gelen yakın tarihli bir blok hash'ini belirtir: onun altında kalan bloklardaki imzalar yeniden kontrol edilmez, bu da saatler süren eliptik eğri hesaplamasını ortadan kaldırırken mevcut zincir durumuna bağlı her kural hâlâ uygulanır.

Nerede görülür

Headers-first eşitleme, bir düğüm yetişirken birbiriyle uyuşmayan iki sayaç olarak görünür.

İlk eşitleme sırasında getblockchaininfo çağrısını yapın; headers alanı blocks alanının çok önünde kalır, çoğu zaman yüz binlerce blok kadar. Grafik istemci de aynı şeyi sade bir dille söyler: bitiş zamanını ancak başlıklar geldikten sonra tahmin edebilir, çünkü o zamana kadar ne kadar yol kaldığını bilmez. Bu iki sayının birbirine yaklaşmasını izlemek dürüst ilerleme çubuğudur.

Hafif yazılım, bilerek ilk yarıdan sonra durur. Bir SPV cüzdanı, bir kompakt filtre istemcisi veya kendi zincir arka ucunu çalıştırmayan bir Lightning düğümü yalnızca başlıkları tutar ve bunların üzerine Merkle kanıtları veya filtreler ekler. Bir telefon cüzdanının kendi geçmişini mobil veriyle kontrol edebilmesinin tek nedeni budur: başlıklar küçük ve sabit boyuttadır, blok gövdeleri ise ikisi de değildir.

Headers-first eşitleme vs blocks-first eşitleme

Headers-first eşitleme zincirin içeriğini indirmeden önce şeklini öğrenirken, blocks-first eşitleme ikisini aynı anda yapmaya çalışıyordu. Eski yöntem bir getblocks mesajı gönderiyor, en fazla 500 blok hash'i içeren bir inv alıyor ve bunları yanıt veren eşten teker teker çekiyordu, bu yüzden tek bir yavaş bağlantı arkasındaki her şeyi yavaşlatıyordu. Sıra dışı gelen hiçbir şeyin, bir saldırganın çöp veriyle doldurabileceği bellekteki bir bekleme havuzundan başka yeri yoktu. Bitcoin Core 0.10.0 sürümünden beri bu şekilde eşitleme yapmıyor, ancak eski yazılımın onunla konuşabilmesi için bu mesajları hâlâ anlıyor.

Karıştırılmaması gerekenler

Sık sorulan sorular

Düğümüm neden bloklardan daha fazla başlığı olduğunu söylüyor?

Çünkü tasarım gereği önce başlıklar gelir. Düğüm, blok gövdelerini indirmeden önce 80 baytlık başlık zincirinin tamamını doğrular, bu yüzden ilk eşitleme sırasında başlık sayacı blok sayacının çok önünde gider. Gövdeler geldikçe bu açık kapanır.

Headers-first eşitleme herhangi bir doğrulamayı atlıyor mu?

Hayır, kendi başına atlamaz. Blok gövdesi geldiğinde her mutabakat kuralı hâlâ kontrol edilir. Ayrı assumevalid ayarı ise sürümle birlikte gelen bir hash'in altında kalan bloklardaki imzaların yeniden kontrol edilmesini atlar; her imzanın doğrulanmasını istiyorsanız bunu assumevalid=0 ile kapatabilirsiniz.

Sıradaki okuma

İlgili terimler

Daha fazlası: Düğümler ve yazılım

Bu sayfayı İngilizce okuyun