Witness Data jsou údaje připojené ke vstupům transakce pro ověření podmínek utracení u SegWitu. Vstup odkazuje na dříve přijaté mince, které se nyní používají. Witness může obsahovat podpisy, veřejné klíče nebo skript. Je součástí transakce, ne dalším místem, kde leží vaše peníze.
Anna dříve přijala Bitcoin a teď z něj chce zaplatit Petrovi. Původní platba vytvořila výstup: záznam o částce a podmínkách jejího dalšího utracení. Nová transakce na tento výstup odkáže svým vstupem. Nestačí ale napsat, že mince patří Anně. U běžné platby peněženka vytvoří podpis, který lze ověřit bez zveřejnění soukromého klíče. Peněženka je aplikace nebo zařízení pro přijímání a odesílání bitcoinů. Soukromý klíč je tajný číselný údaj, kterým se takový podpis vytváří. Ve formátu SegWit se takové ověřovací údaje předkládají jako witness daného vstupu. Samotná přítomnost podpisu ještě neznamená, že je správný. [1] [4] [5]
Představte si rozdíl mezi podmínkou „předlož platný doklad“ a dokladem, který skutečně předložíte. U Bitcoinu není rozhodčí člověk: vztah mezi nimi kontrolují pravidla. Witness program je součást podmínky uložené v dřívějším výstupu; jeho verze určuje způsob vyhodnocení. Witness dodá až nová utrácející transakce. Technicky jde o uspořádaný seznam datových položek pro každý vstup. Není automaticky spustitelným programem ani kopií všech neutracených mincí. [1] [7]
Witness může odhalit podpis, veřejný klíč nebo použitý skript, tedy program popisující podmínky utracení. Veřejný klíč slouží k ověřování podpisů a nemusí se držet v tajnosti. Není to šifrovaná schránka. Soukromý klíč zůstává u vás: podepisuje se jím, ale neposílá se místo podpisu do sítě. Witness ani zveřejněný podpis nenahrazují Seed Phrase, slova pro obnovu peněženky. Pokud ztratíte klíče i zálohu, veřejná historie plateb vám sama nevrátí možnost podepisovat další převody. [1] [3] [4]
Průzkumník bloků je aplikace, ve které lze vyhledat transakce a bloky dané sítě. Průzkumník může vedle txid ukazovat wtxid. Oba jsou hashe, krátké otisky vypočtené z přesného zápisu dat pomocí dvojího použití SHA-256. txid vychází ze zápisu bez witness, wtxid z úplného zápisu s witness. Nejsou to adresy příjemce ani dvě různé platby. Pokud transakce witness nemá, používá se původní zápis a oba identifikátory se shodují. V Bitcoin Core v29.0 je úplný identifikátor ve výsledku decoderawtransaction uveden v poli hash; údaje vstupu lze najít v txinwitness. [1] [7] [8]
Další transakce může odkazovat na předchozí ještě před jejím potvrzením. Kdyby někdo změnil její identifikátor pouhou úpravou podpisových údajů, takový odkaz by přestal sedět. Změna samotného witness nemění txid, což pomáhá protokolům s navazujícími transakcemi, například Lightning Network. Není to ale slib, že nelze změnit celou transakci. Jiná pole nebo starší vstupy bez SegWitu mohou stále ovlivnit txid a upravený witness musí dál splnit příslušná ověřovací pravidla. [1] [6]
Witness se při úplném zápisu transakce přenáší spolu s ní a po zařazení patří k datům bloku. Není to bezplatná úschovna mimo řetězec. Pro výpočet váhy přispívá bajt přidaný witness zápisem hodnotou 1 WU, základní bajt hodnotou 4 WU; WU je jednotka váhy. Full Node, uzel samostatně kontrolující pravidla, potřebuje příslušná data pro ověření utracení. Menší započítaná váha není svolení kontroly vynechat ani tvrzení, že data nezabírají úložiště. [1] [7]
Ve starším formátu se doklady pro utracení zapisovaly do pole scriptSig. Nativní SegWit verze 0 vyžaduje toto pole prázdné: potřebné údaje jsou ve witness. Existuje také varianta obalená P2SH, starším způsobem placení na podmínku určenou hashem skriptu. Tam scriptSig musí obsahovat právě vložení příslušného witness programu, nikoli libovolné další pokyny. Důkazy utracení jsou nadále ve witness. Stejný účel tedy může mít odlišný zápis; nestačí soudit podle jediného názvu pole. [1] [5]
P2WPKH předkládá podpis a veřejný klíč. Uzel ověří, že otisk klíče odpovídá původní podmínce a že podpis platí. P2WSH umožňuje podmínku určenou otiskem celého skriptu. Poslední položka witness se jmenuje witnessScript: její hash musí odpovídat programu ve výstupu. Předchozí položky slouží jako vstupní data pro vykonání skriptu, například podpisy. BIP 143 stanoví způsob sestavení podepisované zprávy pro tuto verzi; zahrnuje i hodnotu utráceného výstupu. Samotné úspěšné přečtení dat ještě neprokazuje splnění podmínek. [1] [2] [5]
Taproot používá nativní witness verze 1 a rozlišuje utracení klíčovou nebo skriptovou cestou. Při rozhodování se nejprve odloží případný annex, zvláštní doplňkové pole; jeho data však zůstávají započtena do váhy a pokryta podpisem. Zbývá-li jedna položka, jde o podpis pro klíčovou cestu. Skriptová cesta odhaluje použitý skript a control block, kontrolní údaje dokazující jeho vazbu na původní výstup, nikoli nový blok blockchainu. Případné předchozí položky dodávají data skriptu. Pravidla verze 0 se na tuto variantu nedají jednoduše přenést. [3] [5]
Kryptografický commitment je otisk, který váže údaje k jejich konkrétnímu obsahu. Když je potřeba commitment k witness datům, BIP 141 je svazuje se zbytkem bloku přes Coinbase Transaction, první transakci určenou pro odměnu těžaři. Z wtxid se vytvoří strom hashů, jehož kořen shrnuje zahrnuté údaje. Pro odměnovou transakci se v tomto stromu používá nulový wtxid. Kořen se spojí s rezervovanou hodnotou o velikosti 32 bajtů a dvojím hashováním vznikne commitment zapsaný v jejím výstupu. Pokud žádná transakce witness nemá, commitment je volitelný. Jde o provázání veřejných důkazů, ne zálohu klíčů ani náhradu samotného ověření. [1]
Pro nejúplnější obraz čtěte toto heslo společně s SegWit, Block Weight, Bitcoin Script, Taproot, Bitcoin, Seed Phrase. Opačným směrem na něj odkazují také Block Weight, Miniscript, Compact Block Filters.