Segregated Witness – část druhá

První část miniseriálu o Segregated Witness se zabývala tím, jak tato technická konstrukce pracuje. Ve druhé části se zaměříme na to, co umí.

Zvýšení efektivní velikosti bloku bez zvýšení limitu

Velikost blokuHlavním přínosem Wuilleho SegWitu, který také přitáhl nejvíce pozornosti, je skutečnost, že díky odstranění podpisů z 1MB bloků může být efektivně zvětšen prostor pro ostatní data v bloku, zatímco jeho velikost bude zachována. To znamená větší množství transakcí za sekundu (nyní jedeme rychlostí kolem 3/s, maximální teoretická propustnost je kolem 7), jinými slovy větší kapacitu sítě a nižší poplatky. A toho všeho lze dosáhnout bez porušení existujících konsenzuálních pravidel – včetně zachování velikosti bloku na jednom megabajtu.

Wuilleho návrh představuje nový typ maximální velikosti bloku. Vzorec pro výpočet jeho velikosti je tak trochu vratký: Blok bez Segregated Witness plus ¼ Segregated Witness nesmí být větší, než 1MB. Takto se budou všechny bloky starým uzlům jevit jako menší než 1MB, protože ¼ zápisů v SegWitu (které staré uzly nevidí) se musí vejít do stejného megabajtu. Nové uzly mezitím zjistí, že velikost bloku přesahuje 1MB, protože skutečná velikost SegWitu je čtyřnásobkem této čtvrtiny.

Přesná velikost dodatečného prostoru, který SegWit nabízí, záleží na druhu transakcí, které nový blok obsahuje. Pokud se bude do SegWitu ukládat více dat, jako například při vícepodpisových (multisig) transakcích, celková velikost nových bloků se zvýší. To povede ke zvětšení na 1,75MB, budou-li v bloku jen jednopodpisové transakce, případně až na nepřekročitelný limit 4MB, pokud by téměř všechna data byla nacpána do Segregated Witness.

Sbohem „Transaction malleability“

Nejprve je třeba vysvětlit, v čem spočívá tzv. transaction malleability. Jde o chybu v návrhu Bitcoinu (nebo spíše trochu nešťastné Satoshiho rozhodnutí), kdy je součástí dat transakce, ze kterých se počítá ID i samotný podepisovací skript (scriptSig). V tomto skriptu je možné udělat změny, které způsobí, že výsledné ID transakce je jiné a zároveň nový podpis zůstává stále platným.

Transaction malleability (doslova přeloženo jako tvárnost transakcí) může způsobovat dva hlavní problémy. Za prvé dělá problémy softwaru, který používá ID transakce, aby se přesvědčil, že byla validována a konfirmována. Zejména ale tento problém hodně omezuje potenciál různých technických upgradů, které se zakládají na ID nekonfirmovaných transakcí, jako jsou například platební kanály, nebo Lightning network.

Což je pochopitelné, když SegWit odnímá části transakce, které slouží k výpočtu ID. Zatímco tedy podpisy v SegWitu mohou být změněny, neovlivní to BTC software založený na ID transakce, ani to nebude vadit upgradům typu platebních kanálů, nebo Lightning Network. Tím je připravena scéna pro nástup dalších upgradů bitcoinového protokolu, které mohou umožnit jeho další škálování.

Bitcoin se může naučit téměř cokoli

Třetí výhod SegWitu probouzí ve vývojářích stejné nadšení jako první dvě – ne-li větší. Je to verzování skriptů.

Jak už bylo vysvětleno v prvním článku miniseriálu, Segregated Witness obsahuje scriptSigy, které umožní odemčení daných BTC. Obsahují ale také něco jiného – verzovací bajty. Ty předcházejí vlastnímu scriptSigu a určují, o kterou verzi scriptSigu jde. Pokud uzel, který čte verzovací bajty rozezná jejich typ, odvodí z toho, co je třeba k odemčení BTC v scriptSigu. Pokud je nerozezná, pak považuje scriptSig za typ „žádný podpis není třeba“.

To otevírá nové cesty, jak BTC v transakci uzamknout. V podstatě se tak dá Bitcoin uzamknout jakýmkoli způsobem, který programátory napadne. Je tedy velmi nepředvídatelné, jak může být tato vlastnost využita v budoucnu, protože mnoho těchto vlastností musí být ještě vynalezeno. Počáteční nápady zahrnují například Schnorrovy podpisy, které jsou mnohem rychlejší při ověřování, než ty v současnosti používané. Jsou také mnohem komplexnějším druhem multisigu – možná až tak komplexní, jako skripty Etherea. A co je důležité: stejně jako Segregated Witness sám, tyto typy upgradu neporušují existující konsenzuální pravidla bitcoinového protokolu. Adaptovat na novou technologii se musí pouhá velká většina těžařů, nikoli všichni, což usnadňuje její zavedení.

Ochrana před podvody: dokončení Satoshiho vize o zjednodušeném ověřování plateb

Ještě nejsme hotovi. Segregated Witness představil také funkci zvanou Fraud proofs. To byla původní vize Satoshiho Nakamota, představená v jeho popisu bitcoinového protokolu pod jménem Single Payment Verification (zjednodušené ověřování plateb), neboli SPV. Fraud proofs mohou zásadně zlepšit zabezpečení SPV uzlů („light“ peněženek, chcete-li). Ty neukládají na lokálním disku celý blockchain (ten má mimochodem přes 100GB) a neověřují veškeré transakce na síti.

Aby tyto light peněženky ověřily, že k transakci došlo, tak prostě proskenují blockchain a vyhledají ID konkrétní transakce. Najdou-li toto ID, znamená to, že těžař zahrnul transakci do bloku. Ale light uzly nevalidují transakci jako takovou, takže neřeší, jestli vyhovuje konsenzuálním pravidlům. To také znamená, že tyto light peněženky prostě věří těžařům, místo toho, aby si data ověřily. V nejhorším případě může dojít k tomu, že těžaři pošlou do light peněženky Bitcoiny stvořené z ničeho, například pomocí transakce bez vstupů, nebo si naúčtují poplatky vyšší, než které uživatel určil.

Tento druh problémů může být vyřešen požadavkem na těžaře, aby do Merkle Tree Segregated Witness zapsali data navíc, která určí, odkud BTC z transakcí v daném bloku pochází. Tím pádem obsahuje-li blok neplatné transakce, může kterýkoli plnohodnotný uzel sítě vytvořit fraud proof. Tento plnohodnotný uzel pak pošle fraud proof light uzlu, takže ten ví, že má daný blok odmítnout.

I když vezmeme v úvahu již řečené, ani tak nebudou light uzly dosahovat bezpečnosti uzlů plnohodnotných. A navíc toto řešení vyžaduje, aby light uzly mohly komunikovat se sítí bez jakékoli cenzury. Je tím míněna například cenzura poskytovateli internetu, kteří by jinak byli potrestáni pokutou od oficiálních autorit. Light uzly také musí mít v síti alespoň jeden plnohodnotný uzel, který pro ně bude schopen vytvářet fraud proofs.

Úložiště

V neposlední řadě je SegWit také schopen snížit množství dat, které je třeba ukládat na disku daného uzlu. To samozřejmě snižuje nároky na běh plnohodnotného uzlu a snižuje dobu potřebnou k synchronizaci sítě po prvotní instalaci.

Zatímco plnohodnotné uzly typicky ukládají všechna data transakcí za celou historii Bitcoinu, podpisy jsou typicky považovány za zbytečné, když uplyne určitá doba od jejich zapsání do blockchainu. Jakmile je transakce platná, konfirmovaná a uložená do bloku v blockchainu – řekněme jeden rok – není už zachování podpisu nutné, protože kdyby nebyl podpis platný, stavělo by se na špatném bloku řetězce. To by nemohlo zůstat neodhaleno.

Zbavit se starších podpisů by asi příliš nevonělo konzervativním uživatelům, protože mohou chtít ověřovat i data starších transakcí. Ani to ovšem nebude žádný problém. Úplně stačí, když jeden jediný konzervativec bude udržovat kompletní data v SegWitu, aby si je všichni ostatní mohli stahovat.

Související

A máme zde další z nekonečné řady článků o škálovacích řešeních v oblasti Bitcoinu....

PŘIDEJTE SE DO DISKUZE