Sözlük / Geliştirici başvuru kaynağı
MSG_BLOCK
- MSG_BLOCK nedir?
- MSG_BLOCK, bir düğümün bir eşe tam bir bloğu hash değeriyle istemek için getdata mesajına koyduğu kod olan 2 envanter türüdür.
Dört baytlık tür etiketi, birkaç blok biçiminden hangisinin geleceğine karar verir. 2 türü özgün olanı ifade eder: bir bloğun taşıyabileceği dört milyon ağırlık birimine kadar, 80 baytlık bir başlığın ardından tanık verisi çıkarılmış halde tüm işlemlerin eksiksiz gelmesi. Zincire yetişen bir düğüm bu türden binlerce istek gönderir ve çok az başka şey gönderir.
Nasıl çalışır
MSG_BLOCK bir mesaj değil bir sayıdır ve anlamını yalnızca inv ile getdata mesajlarının kurulduğu 36 baytlık girdilerin içinde taşır.
Bir girdi, dört baytlık bir tür ile onu izleyen 32 baytlık bir hash değerinden oluşur ve tür, alıcıya hash değerinin neyi adlandırdığını söyler. 2 türünde bir girdiyle getdata göndermek şunu demektir: bu bloğun hash değeri bende, bloğu bana gönderin. Eş, tek bir block mesajıyla ya da sağlayamıyorsa notfound ile yanıt verir. Budanmış bir düğüm, zaten sildiği her şey için notfound döndürür; bu yüzden budanmış bir eş, sıfırdan eşitleme yapan birine yaramaz.
2 türü tek başına artık eskisinden daha dar bir anlam taşır. Ayrık tanık 2017 yılında etkinleştiğinden beri bu yolla istenen bir blok, eski serileştirmeyle tanık verisi çıkarılmış olarak gelir; bu, daha eski yazılımlara hâlâ hizmet verilebilmesi için gerekliydi. Bloğu doğrulamak isteyen her düğümün bu tanıklara ihtiyacı vardır, bu yüzden 0x40000000 bitini ayarlar ve bunun yerine tanıklı sürümü ister. İki modern eş arasında düz kod, çoğunlukla kimsenin güncellemediği yazılımlardan gelen isteklerde görünür.
Duyuru da ilerledi. BIP130 doğrudan başlık duyurusunu getirdi ve Bitcoin Core 0.12.0 sürümünden beri yeni bir blok normalde inv yerine headers mesajıyla duyurulur, dolayısıyla bu tür kodu artık çoğunlukla konuşmanın istekte bulunan tarafında yaşar.
Bitcoin Core indirme sırasında sınırsız biçimde öne geçmez. Doğruladığı son bloğun 1.024 blok ötesine bir pencere tutar, böylece tek bir takılan eş düğümü, bağlayamayacağı sınırsız bir blok kuyruğuyla bırakamaz.
Nerede görülür
Blok istekleri bir düğümün trafiğine tam olarak bir kez, ilk eşitlemesi sırasında egemen olur ve sonra neredeyse hiç tekrar etmez.
Zincir, 20 Nisan 2024'teki halving sırasında 840.000 bloğu geçti ve günde yaklaşık 144 blok büyür, dolayısıyla sıfırdan başlayan bir makine güncel hale gelmeden önce bir milyona yakın blok indirir. Bunu, her eş için mesaj türü başına bayt sayan getpeerinfo ile ya da -debug=net ile günlükte izleyebilirsiniz. Düğüm zincirin ucuna ulaştığında bu sayaçlar susar ve kompakt blok trafiği devralır.
MSG_BLOCK vs MSG_CMPCT_BLOCK
MSG_BLOCK ve MSG_CMPCT_BLOCK, neyi getirdikleri kadar nerede izinli olduklarıyla da ayrılır. 2 türü bir inv içinde ve bir getdata içinde geçerlidir, önceden bir anlaşma olmadan herhangi bir eşe gönderilebilir ve her yaştan blok için çalışır. 4 türü yalnızca bir getdata içinde geçerlidir, yalnızca zaten bir sendcmpct mesajıyla kompakt blok önermiş bir eşe gönderilebilir ve Bitcoin Core yazılımında yalnızca en son beş blok için sunulur. 4 türüyle daha derin bir blok isteyin, yine de tam bir block mesajı gelir.