İçeriğe geçin
buybitcoinsmart

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.

Karıştırılmaması gerekenler

Sık sorulan sorular

Her blokta bir witness commitment var mıdır?

Hayır. BIP-141, hiçbir işlemin witness verisi taşımadığı bir blokta commitment'ı isteğe bağlı, taşıdığı her blokta ise zorunlu kılar; bu durumda coinbase işlemi onu barındıran çıktıyı taşımalıdır.

Bir coinbase çıktısındaki aa21a9ed öneki nedir?

0xaa21a9ed, bir coinbase çıktısını witness commitment olarak işaretleyen dört baytlık commitment başlığıdır. OP_RETURN ile 36 baytlık bir yığın itme işleminin ardından gelir ve ondan sonraki 32 bayt commitment hash'idir.

Witness reserved value ne işe yarar?

Witness reserved value, coinbase girdisinin witness alanındaki 32 baytlık bir alandır ve bugün hiçbir konsensüs anlamı taşımaz. BIP-141 onu, gelecekteki bir soft fork'un mevcut commitment'ın içine ek bir commitment yerleştirebilmesi için ayırır ve merge mining gibi konsensüs dışı kullanımların orayı kaplamasını yasaklar.

İlgili terimler

Daha fazlası: Protokol ve güncellemeler

Bu sayfayı İngilizce okuyun