Sözlük / Protokol ve güncellemeler
Witness commitment
- Witness commitment nedir?
- Witness commitment, bir bloğun içindeki her wtxid'yi başlığın var olan merkle ağacına bağlayan ve coinbase işleminin bir çıktısında yer alan 32 baytlık bir hash'tir.
Tanımlandığı belge: BIP-141.
Segregated witness, blok başlığına dokunmadan ikinci bir merkle kökünü kaydetmek için gerekiyordu ve BIP-141 bunu bir coinbase çıktısına koyar, böylece değişiklik bir soft fork olarak yayımlanabildi. Script en az 38 bayt uzunluğunda olmalı ve 0x6a24aa21a9ed ile başlamalıdır. Bu witness commitment, bitcoinlerinizi yetkilendiren imzaları onları çıkaran bloğa bağlar, çünkü bir txid yapısı gereği witness verilerini dışarıda bırakır.
Nasıl çalışır
BIP-141 witness commitment'ı opcode düzeyine kadar tanımlar ve bir düğüm bloğu kabul etmeden önce değeri yeniden hesaplar.
Düğümler blok üzerinde ikinci bir merkle ağacı kurar, yaprak olarak txid yerine wtxid kullanır ve bunları başlığın kendi ağacının kurulduğu şekilde birleştirir. Coinbase işleminin kendi yaprağı gerçek wtxid'si değildir: BIP-141 bu değerin 32 sıfır bayt olduğunu varsayar, çünkü hesaplanan sayı tam da o işlemin içinde yaşar ve hiçbir şey kendisini hash'leyemez. Çıktıya yazılan şey, witness kök hash'inin 32 baytlık bir witness reserved value ile birleştirilmesinin çift SHA-256 değeridir ve bu reserved value coinbase girdisinin kendi witness alanında tek öğe olarak yer almalıdır.
Bayt bayt çıktı script'i şöyle okunur: bir bayt OP_RETURN (0x6a), sonraki 36 baytı yığına iten bir bayt (0x24), dört baytlık bir commitment başlığı (0xaa21a9ed) ve ardından 32 baytlık hash. Bunlar toplamda 38 bayt eder ve 39. bayttan itibaren gelen her şey, konsensüs anlamı taşımayan isteğe bağlı veridir.
İki sınır kuralı, bu kalıbın kötüye kullanılmasını veya gereğinden fazla uygulanmasını engeller. Birden çok çıktı eşleştiğinde, en yüksek çıktı dizininde olan geçerlidir, böylece daha önce yerleştirilmiş bir yem gerçek değeri yerinden edemez. Bir blokta hiçbir işlem witness verisi taşımıyorsa witness commitment isteğe bağlıdır. Kural, BIP9 sürüm bitleri aracılığıyla segwit adıyla bit 1 üzerinde yayımlandı; ana ağdaki sinyal penceresi 15 Kasım 2016 UTC gece yarısından 15 Kasım 2017 UTC gece yarısına kadar sürdü.
Nerede görülür
Witness commitment, bir blok gezgininde script'i OP_RETURN ile başlayan coinbase işleminin bir çıktısı olarak görünür.
Son dönemdeki herhangi bir bloğun ilk işlemini açtığınızda çıktılar iki türe ayrılır: havuz ile müşterilerine ödeme yapanlar ve script onaltılık gösterimi 6a24aa21a9ed ile başlayan bir tanesi. Bu önekin ardından gelen 32 bayt witness commitment'ın kendisidir ve ilk 38 baytın ötesindeki her şey boş alandır.
Madencilik yazılımı bu alanla herkesten daha sık karşılaşır. Değer, bloktaki her wtxid üzerinden hesaplanan bir hash'tir, dolayısıyla aday işlem kümesi her değiştiğinde yeniden hesaplanmalı ve başlık hash'lenmeden önce coinbase'e geri yazılmalıdır.
İzlenmeye değer kısım reserved value'dur. BIP-141 ona bugün hiçbir konsensüs anlamı vermez ve onu bilerek ayırır, böylece gelecekteki bir soft fork, yeni değeri önce reserved value ile birlikte hash'leyerek mevcut witness commitment'ın içine ek bir witness commitment yerleştirebilir. Belge, merge mining gibi konsensüs dışı kullanımların bu alanı kaplamasını yasaklar ve bu alanın ne için saklandığını adlandırır: ücretler üzerinden toplam ağaçları, blok boyutu ve sigops sayaçları ve bir işlemin harcadığı çıktılara geri bağlantılar. Bunlar birlikte, hafif bir istemciye bloğun kendisi yerine bloğun geçersiz olduğuna dair kısa bir kanıt verirdi.
Witness commitment vs merkle kökü
Witness commitment ile merkle kökü iki ayrı ağacın kökleridir ve bunlardan yalnızca biri blok başlığında yer tutar.
Merkle kökü, yaprakları txid olan bir başlık alanıdır ve bir txid yapısı gereği witness verilerini dışlar. Witness commitment bir işlem çıktısında yaşar, yaprakları o verileri içeren wtxid'lerdir ve coinbase yaprağı sıfırlanmıştır. İşin bütün hilesi iç içe yerleştirmedir. Coinbase işlemi eski ağaçta herhangi bir yaprak gibi durur, dolayısıyla witness commitment'ı değiştirmek coinbase'i değiştirir, başlığın merkle kökünü değiştirir ve bloğu, segregated witness diye bir şey hiç duymamış yazılımlar için bile bozar.