Sözlük / Düğümler ve yazılım
Blocks-first eşitleme
- Blocks-first eşitleme nedir?
- Blocks-first eşitleme, Bitcoin'in özgün yetişme yöntemiydi: bloklar tek bir eşten birer birer isteniyor ve bir sonraki istenmeden önce her biri doğrulanıyordu.
Artık kimse bu şekilde eşitleme yapmıyor ve bunun nedeni aritmetik. Kesinlikle sıralı bir indirme, tek bir eşin yükleme hızından fazlasını kullanamaz ve 2015 yılına gelindiğinde zincir, bunun makul bir sürede bitemeyeceği kadar büyümüştü. Teknik, protokolde bir yedek yol olarak ve eski belgelerde bir kafa karışıklığı kaynağı olarak varlığını sürdürüyor.
Nasıl çalışır
Durum: blocks-first eşitlemenin yerini, 16 Şubat 2015 tarihinde yayımlanan Bitcoin Core 0.10.0 sürümündeki headers-first eşitleme aldı. Kullandığı mesajlar hâlâ eşler arası protokolün parçası ve hâlâ yanıtlanıyor, ancak güncel hiçbir istemci yetişmek için bunlara güvenmiyor.
Mesaj alışverişi, iki makine arasında bir döngüydü. Düğümünüz, elinde zaten bulunan blokların hash değerlerini taşıyan bir getblocks mesajı gönderiyordu. Eş, ardından gelen en fazla 500 blok hash değerini listeleyen bir envanterle yanıt veriyordu. Düğümünüz bu blokları getdata ile istiyor, alıyor, her birini tam olarak doğruluyor ve ardından sırada ne olduğunu sormak için bir getblocks daha gönderiyordu. Bu, birkaç bin kez tekrarlanıyordu.
Bu tasarımdan üç sorun çıktı. Paralellik yoktu, çünkü var olduğu size henüz söylenmemiş blokları ikinci bir eşten istemek mantıklı değildi, dolayısıyla eşitlemenin tamamı o anda konuştuğunuz eşin hızında ilerliyordu. Ne kadar yol kaldığını bilmenin bir yolu yoktu, çünkü zincir kendini her seferinde 500 hash değeri kadar açıyordu; eski istemcilerin anlamlı bir ilerleme çubuğu gösterememesinin nedeni buydu. Ve yavaş ya da kötü niyetli bir eş size blokları damla damla verebiliyordu; düğümünüzün başka bir yerde daha iyi bir zincir bulunduğunu anlamasının ucuz bir yolu yoktu.
Headers-first, ucuz kanıtı pahalı olandan ayırarak üç sorunu da çözdü. Önce başlık zincirini indirin ve doğrulayın; Aralık 2014 itibarıyla tüm geçmiş için bu 27 megabayttı, ve tek bir işlem indirmeden önce hem en iyi zincirin biçimini hem de uzunluğunu bilirsiniz. Ardından blok gövdeleri aynı anda birçok eşten istenebilir. Yan etkisi, blokların sırasız gelmeye ve diske sırasız yazılmaya başlamasıydı; 0.10.0 sürümünün oluşturduğu veri dizinini bu yüzden daha eski hiçbir yazılım okuyamaz.
Nerede karşılaşırsınız
Blocks-first eşitlemeyle yazılımda değil, belgelerde karşılaşırsınız.
2015 yılından önce yazılmış referans malzemesi, hâlâ dolaşımda olan geliştirici malzemesinin hatırı sayılır bir kısmı dahil, sıralı döngüyü sanki Bitcoin böyle çalışıyormuş gibi anlatıyor. Öyle değil ve ilk eşitlemeyi tek eşten sıralı bir indirme olarak anlatan sayfalar düpedüz eskimiştir. Bitcoin Core, çok eski ya da alışılmadık istemcilerin yararına getblocks isteklerini yanıtlamayı sürdürüyor, bu yüzden mesajlar paket kayıtlarında ve protokol şartnamelerinde görünür.
Bugün bir düğüm çalıştıran herkes için yapılandırılacak bir şey ve seçilecek bir şey yok. İstemciniz önce başlıkları indirir, çünkü bakımı sürdürülen her uygulama bunu yapar.
Blocks-first eşitleme vs headers-first eşitleme
Blocks-first eşitleme ile headers-first eşitleme, önce neyi istedikleri bakımından ayrılır ve geri kalan her şey bundan doğar. Blocks-first tam blokları sırayla istiyor ve zincirin biçimini ilerledikçe öğreniyordu, dolayısıyla en iyi zinciri keşfediyor ve aynı yavaş geçişte indiriyordu. Headers-first işi böler: 80 bayt/blok kullanarak hangi zincirin en fazla iş kanıtı taşıdığını belirler, ardından blok gövdelerini kim göndermek isterse ondan paralel olarak toplar. Her bloğa uygulanan doğrulama ikisinde de aynıdır. Değişen, işlemlerin sırasıydı ve yalnızca bu, ilk eşitlemeyi haftalardan saatlere indirdi.