İçeriğe geçin
buybitcoinsmart

Sözlük / Geliştirici başvuru kaynağı

MSG_WITNESS_BLOCK

MSG_WITNESS_BLOCK nedir?
Tanık bloğu (witness block) envanter türü, SegWit destekli bir düğümün, her imza çıkarılmak yerine eklenmiş haldeyken genişletilmiş serileştirmede bir bloğu nasıl istediğini gösterir.

Tanımlandığı belge: BIP-144.

İki düğüm aynı bloğu tutabilir ve bunun kaç bayt olduğu konusunda anlaşamaz. MSG_WITNESS_BLOCK, 0x40000002 kodudur; tanık biti eklenmiş sıradan bir blok isteğidir ve ayrık tanık, 24 Ağustos 2017'de 481.824 numaralı blokta etkinleştiğinden beri vardır. Kendi düğümünüzü çalıştırıyorsanız, makinenizin zincire güvenmeden önce ihtiyaç duyduğu imzaları getiren istek budur.

Nasıl çalışır

Bitcoin Core, aynı bloğu yazmanın iki yolunu tutar ve kimin istediğine göre aralarında seçim yapar.

Tanık bayrağı tek bir yüksek bittir: 0x40000000. Bunu, 2 olan blok envanter türüne eklediğinizde 0x40000002 elde edilir. BIP144 hem bu bayrağı hem de düğümün sürüm mesajında daha eksiksiz veriyi sunabileceğini belirtmek için duyurduğu, değeri 8 olan NODE_WITNESS hizmet bitini tanıttı. Bayrak yalnızca bir getdata isteğinde görünür. Duyurular sade blok envanterleri olarak dolaşır, çünkü bir duyuru yalnızca bir hash'tir ve hash her iki durumda da aynıdır.

İki serileştirmenin bir arada var olabilmesinin nedeni tam da bu son noktadır. Bir blok başlığı, txid'lerden oluşturulan bir merkle köküne bağlanır ve bir txid, işlemin tanığı çıkarılmış hali üzerinden hesaplanır. Her imzayı çıkarın, blok yine de aynı 32 baytlık tanımlayıcıya hash'lenir. Tanık verisi ayrıca bağlanır: coinbase işleminin, betiği en az 38 bayt uzunluğunda olan ve dört baytlık 0xaa21a9ed etiketi ile ardından 32 baytlık bir tanık merkle köküyle başlayan bir çıktısında.

Farkın hissedildiği yer boyuttur. Bir bloktaki sınır 4.000.000 ağırlık birimidir; çıkarılmış boyutun üç katı artı tam boyut olarak sayılır ve bu, tanık verisiyle dolu bir bloğun ağ üzerinde 4 MB'a yaklaşmasına izin verir. 1 Şubat 2023'te çıkarılan 774.628 numaralı blok yaklaşık 3,96 MB olarak geldi ve neredeyse tamamı tanık alanında oturan tek bir yazıttı. Bu ağırlık formülünü geriye doğru uygulayın, o kadar büyük bir bloğun çıkarılmış halinde neredeyse hiçbir şey kalmaz. Eski serileştirmeyi isteyen eski bir eş, iskeleti alır ve yükün hiçbirini almazdı; bu tür eşlerin güncel blokları doğrulayamaz sayılmasının nedeni tam olarak budur.

Nerede görürsünüz

MSG_WITNESS_BLOCK'u hiç kaynak kodu okumadan görünür kılan iki yer vardır: bir düğümün kendi günlükleri ve eş istatistikleri.

bitcoind'i net hata ayıklama kategorisiyle başlatın, ilk blok indirmesi boyunca getdata satırları akıp geçer; hepsi tanık bayraklıdır, çünkü modern bir düğüm blokları yalnızca tanık destekli eşlerden indirir. getpeerinfo RPC çağrısı gönderilen ve alınan baytları mesaj türüne göre ayırır, böylece blok trafiğinin bir eşitlemeye egemen olduğunu izlemek kolaydır. Bitcoin Core 23.0 sürümü, adı verilen tek bir eşten hash ile belirli tek bir bloğu isteyen getblockfrompeer çağrısını ekledi ve bu çağrı tanık biçimini getirir.

Budanmış düğümler tabloyu karmaşıklaştırır. Budama etkin çalışan ve izin verilen en küçük ayarı 550 MiB olan bir düğüm, NODE_NETWORK_LIMITED duyurur ve yalnızca en son 288 bloğa, yaklaşık iki günlük geçmişe hizmet eder. Ondan daha eski bir şey isterseniz hiçbir şey gelmez.

Bitcoin satın alan ve elinde tutan biri için anlamı nettir. Zinciri kendiniz doğrulamak, her imzayı indirip kontrol etmek demektir. Bir sunucuya sorgu gönderen telefon cüzdanı bu isteği hiç göndermez, hiçbir tanık görmez ve ekranınızdaki bakiyeyi başkasının sözüne dayanarak kabul eder.

MSG_WITNESS_BLOCK vs MSG_BLOCK

MSG_BLOCK aynı bloğu imzalar çıkarılmış halde ister ve artık eski bir istektir. Her iki tür de bir bloğu aynı hash ile adlandırır ve ikisine de bir blok mesajıyla yanıt verilir. Fark, işaretçi ve bayrak baytlarının ve tanık yığınlarının her işlemin içinde bulunup bulunmamasıdır. Yakın tarihli bir blok için MSG_BLOCK isteyen bir düğüm, o bloktaki tek bir segwit harcamasını bile doğrulayamaz; bu yüzden Bitcoin Core bu biçimi NODE_WITNESS sinyali hiç vermemiş eşlere ayırır.

Karıştırılmaması gerekenler

Sık sorulan sorular

Bir bloğun neden iki farklı boyutu vardır?

Çünkü ayrık tanık serileştirmeyi ikiye ayırdı. Çıkarılmış biçim her tanık yığınını atar, genişletilmiş biçim onları tutar ve her ikisi de aynı blok tanımlayıcısına hash'lenir, çünkü başlık tanık hash'lerinden değil txid'lerden oluşturulan bir merkle köküne bağlanır.

Sıradaki okuma

İlgili terimler

Daha fazlası: Geliştirici başvuru kaynağı

Bu sayfayı İngilizce okuyun