Technicky za páteční rozdvojení etherového blockchainu mohlo selhání uživatelů, kterým se nepodařilo aktualizovat své nody využívající software Geth. Ten původně využívalo asi 75 procent sítě (aktuálně 72 %), zbytek pak běží hlavně na software OpenEthereum a dalších implementacích, jako třeba na pomalu ustupujícím Parity. Geth plní v síti dvě hlavní funkce, funguje jako těžební klient a umožňuje stavět další aplikace nad ethereovým blockchainem. Na rozdíl od Bitcoinu, kde dnes silně převládá jedna referenční implementace klientského software (Bitcoin Core), u Etherea se v praxi můžeme setkat s více kompatibilními programy založenými na takzvaném yellow paperu.
V úterý 24. srpna vydal vývojářský tým stojící za nejpopulárnějším etherovým softwarovým klientem, který reprezentuje právě Geth, nouzovou opravu chyby s označením CVE-2021–39137, která by mohla části minerů zabránit ve vytváření nových bloků. Protože jde o konsensus bug, představuje oprava faktický hard fork. Vývojářský tým Go Ethereum, což je softwarová knihovna, jejíž samostatnou implementací je právě klient Geth, zareagoval na chybu poměrně rychle. Nouzová oprava, která je obsažena v softwaru verze 1.10.8, se objevila jen šest dní po odhalení zranitelnosti.
Tým nicméně nespecifikoval přesnou povahu zranitelnosti ve snaze zabránit jejímu zneužití (k ojedinělým pokusům nakonec stejně došlo, ale to není podstatné). „Přesný vektor útoku bude poskytnut později, chceme dát provozovatelům nodů a na jejich chodu závislým projektům čas na aktualizaci softwaru,“ napsal Ethereum team leader Péter Szilágyi 24. srpna do poznámek k aktualizaci na GitHubu. „Zranitelné jsou všechny verze Geth podporující London hard fork (chyba je starší než London fork), aktualizace se tak týká všech,“ dodal.
Aby toho ale nebylo málo, ukázalo se, že chyba, kterou hot fix opravuje, je zavrtána hluboko v základech samotné Ethereum Virtual Machine, takže se dotýká i dalších kompatibilních chainů (chyba byla detekována například v Binance Smart Chainu nebo Huobi ECO Chainu).
Když se uživatelům nechce aktualizovat
Ačkoli Go Ethereum tým okamžitě vyzval všechny uživatele software k rychlé aktualizaci, v první fázi se k ní mělo jen asi 30 % uživatelů. Ukázalo se, že na staré verzi Geth nodů běží dokonce i velké pooly jako Flexpool, BTC.com nebo Binance pool. Rozdíl mezi verzemi softwaru 1.10.8 a staršími představuje nekompatibilní změnu. Pokud tedy uživatel nic zlého netuše nadále využívá starou verzi klienta, zapisuje transakce na starou verzi blockchainu, čímž vznikne rozdělení sítě. Je-li jen krátkodobé, v designu je s ním počítáno a nic tragického se neděje. Problém nastává u déletrvajícího chain splitu. Na síti za takové situace panuje značně schizofrenní situace, která může vyústit ve výpadky, problémy s transakcemi a s výběry kryptoměn.
Ke splitu z pohledu sítě dochází tehdy, když se různé verze klientského softwaru již nedokáží domluvit, co představuje platnou transakci a co ne. Klient jedné verze sítě tak může vnímat druhou síť jako fork a naopak. V Ethereu kanonický stav záznamů udržuje virtuální počítač jménem Ethereum Virtual Machine (EVM), každý node si proto udržuje a průběžně od sousedních nodů aktualizuje vlastní kopii EVM. V případě chain splitu ale budou různé nody a služby ukazovat odlišné stavy EVM, což negativně ovlivní integritu a spolehlivost sítě jako celku.
Za normálních okolností se díky pravidlu nejdelšího chainu poměrně rychle rozhodne, která síť je právoplatným nástupcem a která reprezentuje osiřelý řetěz. Situace z pátku minulého týdne ale eskalovala tak daleko, že na obou větvích těžilo velmi podobné množství klientů, takže vnikl chain split. Vedle nepříjemností typu nespolehlivosti sítě visí ve vzduchu ještě jedna hrozba. Split je totiž teoreticky možné zneužít k provedení dvojité útraty. Útočník v takovém případě utratí transakci nejprve na jednom chainu a ta je následně přepsána na alternativním chainu.
Konec dobrý, všechno dobré?
Aktuálně situace vypadá tak, že větší část klientů sítě (66 %), kteří využívají Geth, již běží na novější, opravené verzi, potenciální krize je tedy již zažehnána a zdá se bez závažnějších následků.
Technický i sociální konsensus jsou pro jednou opět za jedno a preferovaný chain, tedy chain s klienty po provedené opravě, je delší než verze produkovaná starými klienty. Jinými slovy většina těžařů používá aktualizovanou verzi softwaru.
Podobný dočasný split kvůli nečekané aktualizaci Gethu síť již dříve zažila. V říjnu roku 2020 byla publikována bezpečnostní aktualizace Post Mortem (v1.9.17). Tehdy Go Ethereum nezvládlo zařídit dostatečnou komunikaci opravy, takže větší část validátorů zůstala používat starého klienta, což také způsobilo dočasný chain split sítě. Situace tehdy vyústila ve výpadky sítě a problémy s výběry kryptoměn.