Sözlük / Geliştirici başvuru kaynağı
MSG_WITNESS_TX
- MSG_WITNESS_TX nedir?
- getdata olarak gönderilen bir tanık işlem isteği, bir eş düğüme adı geçen işlemi imza verileri çıkarılmadan, imzaları ekli hâlde geri göndermesini söyler.
Tanımlandığı belge: BIP-144.
Bir işlemi txid ile MSG_WITNESS_TX kullanarak isterseniz, imzaların ekli olduğu sürümü geri alırsınız. Bitcoin Core 0.21.0, 14 Ocak 2021 tarihinde yayımlandı, wtxid ile aktarımı ekledi ve bu isteği çoğunlukla, bunun yerine tanık hash'iyle isteyen MSG_WTX ile değiştirdi. Bitcoin gönderen biri için kazanç şudur: değiştirilmiş bir imza artık bir ödemeyi aktarımdan silmiyor.
Nasıl çalışır
Her segwit işleminin iki kimliği vardır ve MSG_WITNESS_TX, bir eş düğüme hangisinin karşılanmasının istendiğinin söylenmesi gerektiği için vardır.
Txid, işlemin tanığı olmadan çift SHA-256 değeridir: sürüm, girdiler, çıktılar, locktime. Wtxid ise tam serileştirme üzerinden alınan aynı hash'tir; marker baytı, bayrak baytı ve tanık yığınları dahildir. Hiç tanığı olmayan bir işlem için ikisi eşittir. Coinbase işlemi için BIP141, wtxid değerini 32 baytlık sıfır olarak tanımlar; bu özel durum, tanık Merkle kökünün asılacağı iyi tanımlı bir şey olsun diye vardır.
İstek kodu 0x40000001'dir: işlem türü 1 üzerine tanık bayrağı 0x40000000 eklenmiştir. Yalın tür 1 içeren bir getdata gönderirseniz eş düğüm, çıkarılmış baytlarla yanıt verir; bu baytlar paranın nereye gittiğini görmeye yeter, harcamanın yetkilendirilip yetkilendirilmediğini kontrol etmeye ise yaramaz.
Eski değiştirilebilirlik sorununu bitiren şey bu ayrımdır. Segwit öncesinde bir üçüncü taraf bir imzayı yeniden kodlayabilir, txid'yi değiştirebilir ve göndereni artık o ad altında var olmayan bir işlemi beklerken bırakabilirdi. İmzaları txid'nin dışına taşımak bu kapıyı kapattı ve bu kapının kapanması, önceden imzalanmış Lightning kanal işlemlerine güvenle dayanılmasını sağlayan şeydir.
BIP339 ise mantığı bir adım ileri taşıdı. verack öncesinde wtxidrelay mesajı gönderen eş düğümler, işlemleri envanter türü 5 ile wtxid üzerinden duyurur ve Bitcoin Core bunu 0.21.0 sürümünden beri yapar. Kazanç, reddetme önbelleğindedir: biçimsiz bir tanığı reddetmiş bir düğüm, aynı işlemin dürüst bir kopyasını artık reddetmez, çünkü ikisinin wtxid değerleri farklıdır. MSG_WITNESS_TX, wtxid aktarımını hiç müzakere etmemiş eş düğümler için varlığını sürdürür; bu da pratikte o sürümden daha eski yazılım demektir.
Nerede görülür
Txid ile wtxid'yi yan yana görmenin en açık yeri, Bitcoin Core yazılımının kendi işlem RPC yanıtlarıdır.
Herhangi bir segwit harcamasında getrawtransaction çağrısını ayrıntılı çıktıyla çalıştırırsanız bir txid alanı ve bir hash alanı alırsınız. Bunlar farklıdır. Hash, wtxid'dir ve bu fark, aksi hâlde sıradan bir JSON nesnesinde tanık verisinin tek görünür izidir. Blok gezginleri txid ile dizinler, yani para çekme işleminizin ulaşıp ulaşmadığını kontrol ederken arama kutusuna yapıştırılacak sayı odur.
Ağ üzerinde getpeerinfo mesajları türe göre sayar ve bu dökümdeki işlem istekleri iyi bağlanmış her düğümde karışıktır: modern eş düğümlere MSG_WTX, geride kalanlara MSG_WITNESS_TX.
Bunların hiçbiri bir alıcının yapılandırdığı bir şey değildir. Dolaylı olarak önemlidir. Bir borsa size bir para çekme işleminin yayımlandığını söylediğinde ve cüzdanınız onu bulamadığında, faydalı soru size verilen txid'nin mempool'a hiç ulaşıp ulaşmadığıdır, eş düğümlerin hangi serileştirmeyi paylaştığı değil.
MSG_WITNESS_TX vs MSG_TX
MSG_TX aynı işlemi adlandırır ve her imzası çıkarılmış olarak geri döndürür. Segwit öncesi düğümlerin anladığı biçim budur ve hâlâ NODE_WITNESS duyurmayan eş düğümlere ulaşır. Ayrım kozmetik değildir: çıkarılmış sürümü alan bir düğüm işlem yapısını teyit edebilir ama işlemi doğrulayamaz, yani onu güvenle bir mempool'a yerleştiremez ya da doğrulanmış olarak ileri aktaramaz. Bitcoin Core, yalnızca eski biçimi konuşan bir eş düğüme segwit işlemi göndermez.