SegWit jako soft fork je špinavé řešení

29. března 2017


Jedna z nejkontroverznějších plánovaných změn v Bitcoinu má být nasazena formou soft-forku. Tento článek popisuje, co k návrhu vedlo a proč je to nečistý způsob řešení.

Segregated Witness, krátce SegWit, je návrh technického vylepšení Bitcoinu, které mění formát transakčních dat a způsob jejich digitálního podepisování. Detaily velmi pěkně popisuje v samostatném článku Jan Čapek.

Čistým způsobem nasazení tak velké změny softwaru by byl hard-fork. Tedy situace, která vyžaduje aktualizaci většiny uzlu v síti. Hardforku se však velká část bitcoinové komunity bojí a proto se snaží vždy hledat jiný způsob zavedení změn.

Opakování: soft fork a hard fork

Zopakujeme ještě jednou polopatě, co to je soft-fork, protože označení zpětně kompatibilní je zavádějící. Je to změna pravidel konsenzu, která některé z dříve validních bloků blockchainu vyhodnotí jako neplatné a způsobí jejich ignoraci.

Jinými slovy soft-fork je zpřísňování pravidel, přidávání dalších omezení pro validitu bloku. Zhuštění síta – co dříve prošlo, nyní neprojde.

Příkladem by třeba bylo zavedení nižšího limitu na počet transakcí v bloku, nebo zakázání bitcoinových adres začínajících na řetězec 1YuFTGt....

Hard-fork je naopak rozvolnění pravidel. Nově je validní i blok, který by podle dřívějších pravidel nebyl. A v tom spočívá riziko hard-forku. Pokud po forku aktualizovaný uzel vyprodukuje blok podle nových pravidel, neaktualizované uzly ho odmítnou jako neplatný.

Zpětvzetí softforku je hardfork

Z výše uvedeného vyplývá, že pokud se síť dohodne a provede soft-fork, jediným způsobem jak změnu vrátit zpět je hardfork.

Na první poslech to zní banálně, ale důsledky jsou zásadní. Pokud se cokoli pokazí a bude nutné změny vrátit, získáme všechny problémy, které s sebou nese hardfork. Double spendy, chaos, replay attacky atp.

Způsob aktivace SegWitu

SegWit byl odstartován 15. listopadu 2016 a jeho aktivace podle BIP9 je navržena tak, že do 15. listopadu 2017 se musí vyskytnout jedno okno 2016 bloků, kde bude 95% podpora SegWitu signalizovaná těžaři. Poté se spustí druhé okno o stejné délce (2016 bloků je cca 14 dní) a po jeho uplynutí bude segwit aktivován.

Proč 95 % ?

Je to hodnota v konsensuálních systémech neobvykle vysoká. Jiné návrhy mívají hranici pro aktivaci nejčastěji 75 %, což je dosti daleko od rizikové těsné nadpoloviční většiny (51 %), ale na druhou stranu bezpečně daleko od nutné drtivé podpory napříč sítí.

Důvod pro takto vysokou hranici při aktivaci SegWitu je podstata, jak je aktivace SegWitu pomocí softforku navržena. Aby změna byla implementována cestou zpřísnění pravidel, jak bylo popsáno výše, SegWitové transakce se navenek tváří jako transakce, které může utratit kdokoli. Bitcoin tento typ transakcí zná – lze poslat mince takovým způsobem, že si je může prakticky vzít kdokoli. Říká se tomu anyone-can-spend a samozřejmě, že to v praxi znamená, že nejrychlejší mince hned získá. A přesně tak se segwitové transakce tváří pro neaktualizované uzly bitcoinové sítě.

Pokud by byla nutná hranice pro aktivaci nižší a v síti by zůstalo např. 25 % neaktualizovaných (nebo chcete-li nesouhlasících) uzlů, pak tyto uzly budou zcela jistě šířit transakce, které se budou snažit tyto pro ně zdánlivě utratitelné mince utratit. Pokud bude provozovatelem uzlu těžař, bude dokonce takovou transakci utrácející, resp. kradoucí SegWitové mince moci vytěžit a tím vytvořit sirotčí vybočení blockchainu (orphan). Taková situace by byla dosti chaotická.

Nač zamykat auto...

Použijme příklad z fyzického světa pro definitivní objasnění. Řekněme, že žijeme v zemi, kde jsou lidé zvyklí zamykat auta, protože nechtějí riskovat krádež. Nově se ale 75 % lidí dohodne, že budou nechávat trvale klíčky v zapalování a zároveň že za krádež auta bude udělován trest smrti. Čtvrtina společnosti se o dohodě buď nedozví, nebo ji bude ignorovat a auta bude krást – prostě protože to jde. Tato situace povede k chaosu, neboť stoupne počet krádeží aut o několik řádů a zároveň bude najednou spousty popravených lidí.

Příklad neberte do důsledku, ale pro ilustraci je doufám názorný. Pokud bychom podobnou dohodu chtěli smysluplně uplatnit, potřebovali bychom masivní podporu mezi občany; ze stejného důvodu má SegWit hranici podpory 95 %.

Podpory nepřibývá

Aktuální podpora po více než 4 měsících je ale sotva čtvrtinová. Zlí jazykové už nyní tvrdí, že k aktivaci nikdy nedojde. Svůj podíl má samozřejmě tábor Bitcoin Unlimited, který se snaží aktivaci bránit.

Lze aktualizaci udělat čistě?

SegWit je rozsáhlá fundamentální změna fungování bitcoinu. Čítá stovky změněných nebo přidaných řádků kódu a přestože se testovala zevrubně na testnetu, nikdo nemůže zaručit hladký průběh fungování. To nicméně platí pro všechny zásadní změny kteréhokoli systému.

Z nynější podoby diskuse o segwitu už se úplně vytratila stopa původní motivace. Je zcela jasné, že přinese jen marginální zvýšení transakční propustnosti (maximálně na dvojnásobek, což je prostor pro růst na několik málo měsíců). Vyřešená maleabilita a podepisování částky, které ocení zvlášť výrobci hardwarovýách peněženek, se sice počítá, ale to vše by pravděpodobně šlo vyřešit přímočařeji, pokud by se plánoval nekontroverzní hard-fork.

V situaci, kdy sami tvůrci segwitu přiznávají, že hard-fork bude brzy nutný, je snaha o nasazení celé změny formou soft-forku smysl postrádající iniciativa, která povede jen k zesložitění kódu a dalšímu technologickému dluhu.

Osobně se domnívám, že by v tuto chvíli – v březnu 2017 – bylo bezpečnější i čistší připravit jednoduchou změnu velikosti bloku formou hard forku a ostatní zásadní vylepšení vč. maleability fixu sdružit do dalšího hard-forku s výhledem třeba jeden rok. Dva plánované hardforky s širokou podporou jsou lepší řešení než jeden vzdorovitý nenačasovaný hardfork provedený kvůli bezvýchodnosti přecpaných bloků a jako protest proti SegWitu.


Petr Sobotka

Ing. Petr Sobotka

Bitcoinu a dalším technologiím v oblasti kryptoměn se věnuji od roku 2011.

Před tím, než jsem začal poskytovat poradenství, jsem si prošel těžením (mining), obchodováním na burzách s virtuálními měnami i spekulací s akciemi denominovanými v Bitcoinech.

Vystudoval jsem Softwarové inženýrství na ČVUT.