77 / 7362017

Válka o velikost bloků

Spor o kapacitu Bitcoinu a o to, kdo může měnit jeho pravidla

V letech 2015–2017 se Bitcoin přel o to, jak zvládnout více plateb, aniž by lidé ztratili možnost sami ověřovat jeho pravidla. Ze sporu o velikost bloků vyrostla zkouška, zda změnu prosadí vývojáři, těžaři, firmy, nebo až jejich shoda s uživateli.

Block Size War označuje období sporů o kapacitu a změny pravidel Bitcoinu, které vyvrcholilo v roce 2017 aktivací SegWitu, oddělením Bitcoin Cash a pozastavením plánovaného forku SegWit2x. Tyto tři události měly různé příčiny i technický průběh.

Představme si dvě běžné situace. Anna posílá bitcoin a nechce čekat ani platit vysoký poplatek. Pavel provozuje vlastní plný uzel: počítač, který sám kontroluje bloky a transakce. Chce mít možnost ověřovat své peníze i bez drahého vybavení. Obě potřeby jsou rozumné, ale více dat v každém bloku znamená také více dat k přenosu a ověření. Právě kolem této rovnováhy se vedl spor známý jako Block Size War. Blok je dávka transakcí, kterou síť přidává ke společné historii plateb. Anna a Pavel jsou ilustrační postavy. Ve skutečné debatě let 2015–2017 vystupovali vývojáři, provozovatelé těžby, burz, peněženek i samotní uživatelé. Neshodovali se nejen na kapacitě, ale také na tom, jak změnu bezpečně zavést. Bitcoin neměl ředitele, který by vybral jednu variantu a nařídil ostatním přechod. [1] [11] [13]

Před SegWitem omezovala pravidla velikost bloku na 1 MB, tedy 1 000 000 bajtů. Nešlo o pevný počet plateb: různé transakce zabírají různé množství místa. Nový blok vzniká v průměru přibližně po deseti minutách. Když zájem o místo převýší kapacitu, těžaři obvykle dávají přednost transakcím s vyšší sazbou poplatku a ostatní čekají. Zastánci větších bloků chtěli přidat místo přímo v základní síti a zachovat dostupné platby. Oponenti se obávali nároků na připojení, počítače a rychlé šíření bloků: pokud by samostatné ověřování zvládalo méně lidí, více uživatelů by muselo věřit cizím službám. Větší limit přitom sám nezrychluje tvorbu bloků ani nezaručuje trvale nízké poplatky. Záleží také na poptávce a skutečném využití prostoru. [1] [2] [13]

Vývojář může napsat nový program. Těžař může podle něj sestavit blok. Provozovatel Full Node ale sám určuje, jaká pravidla bude jeho uzel ověřovat. Ani většina výpočetního výkonu nemůže přimět nezměněný uzel, aby přijal blok porušující jeho pravidla. Výkon pomáhá vybírat mezi platnými řetězci; sám z neplatného bloku platný neudělá. To neznamená, že má každý uzel jeden hlas v celosvětovém hlasování nebo že jediný člověk zabrání ostatním v odchodu. Firmy rozhodují, co přijímají, těžaři, co těží, a uživatelé, čemu přisuzují hodnotu. Při neslučitelných pravidlech mohou vzniknout dvě sítě. Obchodní dohoda proto mohla změnu podpořit, nemohla však automaticky přepsat programy a rozhodnutí všech účastníků. [11] [12]

Jednotlivé návrhy dostávaly označení BIP, zkratku pro Bitcoin Improvement Proposal. Jde o dokument, který návrh vysvětluje a umožňuje o něm diskutovat; samotné přidělení čísla neznamená, že jej síť přijala. Gavin Andresen navrhl v BIP 101 zvýšit limit na 8 MB s dalším růstem podle předem stanoveného rozvrhu. Návrh počítal s přibližným zdvojnásobením každé dva roky a s podmínkami aktivace. Mike Hearn spolu s Andresenem prosazoval Bitcoin XT, alternativní software, který tento směr nabízel. Zveřejnění programu ale nebylo totéž jako změna pravidel celé sítě. Blok větší než dosavadní limit by staré uzly odmítly. Šlo tedy o Hard Fork, změnu rozšiřující okruh povolených bloků, pro niž by jejich příjemci potřebovali jiná pravidla. Debata se tak přesunula od jednoduché otázky „kolik místa přidat“ k obtížnější: kdo přejde, jak se přechod sladí a co se stane, když významná část účastníků nesouhlasí. [1] [18] [13]

Další cestu popsali Eric Lombrozo, Johnson Lau a Pieter Wuille v BIP 141. SegWit změnil uspořádání dat transakcí a zavedl váhu bloku, omezenou na 4 000 000 weight units. Část zvaná witness obsahuje zejména údaje potřebné k ověření oprávnění utrácet. Ty se neztratily ani nepřestaly kontrolovat; při výpočtu váhy dostaly jiné zacházení. Výsledná kapacita závisí na skladbě transakcí, nejde o prosté povolení běžných čtyřmegabajtových bloků. Váha je způsob, jak započítat data do limitu bloku: bajt základních dat se počítá za 4 jednotky, bajt dodatečných dat souvisejících s witness za 1. Stejně velké transakce v bajtech tak mohou spotřebovat různou část povolené váhy. Proto je pro kapacitu důležité i to, jaké transakce lidé používají. SegWit také u vhodných transakcí odstranil možnost měnit jejich identifikátor úpravou podpisových dat. To usnadnilo stavbu platebních kanálů, na nichž stojí Lightning Network. Byl připraven jako Soft Fork: nové platné bloky zapadají do starých pravidel, ale starší uzly nekontrolují všechna nová omezení. Bitcoin Core 0.13.1 přinesl aktivační mechanismus; samotné vydání programu ještě neznamenalo zapnutí SegWitu. [2] [3]

Dne 23. května 2017 zveřejnila Digital Currency Group New York Agreement, dohodu firem a těžařů. Spojovala podporu SegWitu s příslibem Hard Forku na 2 MB do šesti měsíců. Tento druhý krok se stal známým jako SegWit2x; implementaci představoval projekt btc1. Pro část účastníků to byl přijatelný kompromis: každý tábor měl dostat něco ze svého návrhu. Jiní odmítali jak druhou změnu, tak způsob jejího prosazování. Podpora firmy nebyla automaticky souhlasem všech jejích zákazníků. Bitcoin Core později výslovně upozornil, že btc1 není povinná aktualizace jeho programu a že podpora SegWitu neznamená podporu SegWit2x. To je důležité i pro čtení dobových zpráv: dvě změny v jedné dohodě stále zůstávaly dvěma odlišnými změnami pravidel. [6] [7] [11]

Pseudonymní autor Shaolin Fry navrhl BIP 148, podobu UASF neboli uživateli aktivovaného Soft Forku. Uzly s tímto pravidlem měly od 1. srpna 2017 podle Median Time Past odmítat bloky, které nesignalizují SegWit, pokud ještě nebyl uzamčen nebo aktivní. Pokud by se těžba a přijímání bloků rozešly, hrozilo rozdělení sítě. Nebyl to bezrizikový přepínač ovládaný všemi uživateli najednou. Median Time Past je prostřední hodnota po seřazení časových značek posledních 11 bloků, nikoli čas z hodin každého uživatele. Signalizace tu znamenala značku v hlavičce bloku, kterou těžař vyjadřoval podporu danému nasazení; sama ještě nezapínala nová pravidla. James Hilliard v BIP 91 popsal koordinaci těžařů s nižším prahem: 269 z 336 bloků, přibližně 80 %. Po spuštění měli účastníci odmítat bloky bez signalizace pro původní nasazení SegWitu. Červencová koordinace snížila nebezpečí konfliktu kolem srpnového termínu. Neznamenala ale, že se už v červenci uzamkl nebo aktivoval samotný SegWit. Ten dál procházel vlastním mechanismem BIP 9. [4] [5] [9] [19]

Dne 1. srpna 2017 se oddělil Bitcoin Cash. Software Bitcoin ABC pro tuto větev podporoval větší bloky, tehdy s výchozím limitem 8 MB. Od rozdělení měly sítě odlišná pravidla i vlastní mince. Společná historie před rozdělením neznamenala, že lze pozdější platby volně posílat mezi BTC a BCH. Bitcoin Cash nebyl SegWit2x a Bitcoin ABC nebyl btc1. Záměna těchto názvů spojuje srpnové rozdělení s jiným, později pozastaveným plánem. Lišilo se i zacházení s opakováním transakcí na druhém řetězci, označované jako replay protection. Pro uživatele měla tato technická otázka praktický dopad: práce s jednou větví neměla nechtěně utratit prostředky i na druhé. Sdílené klíče navíc nebylo bezpečné zadávat do libovolného nástroje slibujícího nové mince. [8] [15] [11]

SegWit vstoupil do stavu LOCKED_IN od bloku 479 808 dne 9. srpna 2017. Znamenalo to dokončené rozhodovací období a ještě jedno čekací období před vynucováním nových pravidel. Aktivní byl od bloku 481 824 dne 24. srpna. Mezi oběma výškami je 2 016 bloků. Červencový BIP 91, srpnové uzamčení a samotná aktivace tedy nejsou jedno datum. Zbýval slíbený druhý krok SegWit2x, plánovaný na výšku 494 784. Dne 8. listopadu oznámili jeho organizátoři v čele s Mikem Belshem pozastavení: podle jejich sdělení se nepodařilo získat dostatečnou shodu pro hladký přechod. Bitcoin tím nepřišel o už aktivní SegWit a nezmizel ani samostatný Bitcoin Cash. Skončil konkrétní pokus spojit podporu firem a těžařů s tímto navýšením limitu Bitcoinu. [9] [10] [12] [14] [16] [17]

Spor ukázal, že Bitcoin lze měnit, ale napsat kód, získat podpisy firem a dosáhnout přijetí pravidel jsou rozdílné věci. Neprokázal, že vývojáři nemají vliv, těžaři nejsou důležití nebo že každé budoucí rozhodnutí dopadne stejně. Kapacita, dostupné ověřování a shoda účastníků zůstávají otázkami, které se nedají vyřešit pouhým přejmenováním aktualizace. Když dnes čtete o novém návrhu, ptejte se nejdřív, co konkrétně mění, které uzly by po změně nesouhlasily a jak má proběhnout aktivace. Pak rozlište text návrhu, vydaný software a skutečně účinná pravidla. Dobové návrhy BIP a kód dokládají mechanismy; prohlášení jednotlivých táborů zase jejich stanoviska. Ani jedno vyjádření účastníka samo nepředstavuje nestranný popis celé historie. [1] [6] [11] [12]

Pro nejúplnější obraz čtěte toto heslo společně s SegWit, Soft Fork, Hard Fork, Full Node, Bitcoin, Konsensuální pravidla. Opačným směrem na něj odkazují také Soft Fork, Hard Fork, Block Weight, Jeff Garzik.

DOC · 001BIP 101 — Increase maximum block sizeDokumentace DOC · 002BIP 141 — Segregated WitnessDokumentace DOC · 003Bitcoin Core 0.13.1 — Segregated witness releaseDokumentace DOC · 004BIP 148 — Mandatory activation of SegWitDokumentace DOC · 005BIP 91 — Reduced threshold SegWit activationDokumentace DOC · 006Digital Currency Group — Bitcoin Scaling Agreement at Consensus 2017Dokumentace DOC · 007btc1 — SegWit2x implementation repositoryDokumentace DOC · 008Bitcoin ABC — 0.14.6 releaseDokumentace DOC · 009BIP 9 — Version bits with timeout and delayPrimární zdroj DOC · 010BIP 9 — Deployment assignmentsPrimární zdroj DOC · 011Bitcoin Core — Correcting misinformation on Segwit2x and btc1, 18 August 2017Primární zdroj DOC · 012bitFlyer — Policy and stance regarding SegWit2x postponement, 9 November 2017Primární zdroj DOC · 013Mike Hearn — Why is Bitcoin forking? Author essay reprinted by Ars Technica, 18 August 2015Primární zdroj DOC · 014Mike Belshe et al. — Segwit2x suspension, 8 November 2017; message reproduced by BlockTribunePrimární zdroj DOC · 015Bitcoin ABC v0.14.6 — Consensus limitsPrimární zdroj DOC · 016Bitcoin block 479808 — Header and timestamp via mempool.spacePrimární zdroj DOC · 017Bitcoin block 481824 — Header and timestamp via mempool.spacePrimární zdroj DOC · 018BIP 1 — Purpose and GuidelinesPrimární zdroj DOC · 019BIP 113 — Median time-pastPrimární zdroj
Revidováno: Primární zdroje · Nejde o investiční doporučení