Obtížnost a čas bloku

Jak se síť sama reguluje na deset minut bez centrálního plánovače.

Co se naučíš: Budeš vědět, jak se síť sama reguluje na konstantní odstup bloků bez jakéhokoli plánovače.

5 min čtení + cvičeníNavazuje na:⛏️ Proof of work

Výpočetní výkon bitcoinové sítě vzrostl od roku 2009 řádově o třináct řádů. Přesto bloky chodí pořád zhruba po deseti minutách. Nikdo to neřídí. Tahle kapitola vysvětluje, jak se to dělá jedním pravidlem na pár řádků.


Regulace bez regulátora

Pravidlo je triviální: každých 2016 bloků se uzly podívají, jak dlouho ten úsek trval, a porovnají to s cílem, tedy dvěma týdny.

Nová obtížnost = stará krát (skutečná doba / cílová doba), s omezením na čtyřnásobek v každém směru, aby náhlý výkyv nezpůsobil chaos.

Podstatné je, že to počítá každý uzel sám ze stejných dat a všem vyjde totéž. Není žádný výbor, který by o obtížnosti rozhodl.


Proč zrovna deset minut

Není v tom nic magického, je to kompromis mezi dvěma nepříjemnostmi:

  • Kratší bloky znamenají víc forků. Než se blok rozšíří po světě, uplyne pár sekund. Kdyby bloky chodily po pěti sekundách, značná část z nich by vznikala paralelně a musela by se zahazovat, což by plýtvalo prací a zvýhodňovalo velké minery s lepším připojením.
  • Delší bloky znamenají delší čekání. Deset minut je pro platbu v obchodě nepoužitelné.

Deset minut bylo zvolené tak, aby doba šíření bloku byla proti odstupu zanedbatelná. Novější sítě mají odstupy v sekundách, ale platí za to složitějšími pravidly pro forky.


Co když výkon náhle spadne

Tady je zajímavá slabina, kterou má hodně malých sítí. Obtížnost se přepočítá až za 2016 bloků, takže když z minuty na minutu odejde devadesát procent výkonu, zbylá desetina bude bloky hledat desetkrát déle. A protože bloky chodí pomalu, trvá i to, než se dojde k přepočtu.

U Bitcoinu se to stalo po zákazu minování v Číně v roce 2021 a chvíli byly bloky výrazně pomalejší. U malých sítí to může znamenat, že se řetěz prakticky zastaví, a existují sítě, které kvůli tomu zmizely. Novější protokoly proto obtížnost upravují po každém bloku.


Obtížnost není totéž co cíl

Drobnost, na které se dá naučit něco obecného: v bloku není uložená obtížnost jako číslo typu „19 nul". Je tam cíl, tedy hodnota, pod kterou musí hash spadnout, když se čte jako číslo. Nuly na začátku jsou jen názorný způsob, jak si to představit.

Rozdíl je praktický: cíl se dá měnit plynule, po malých krocích, kdežto počet nul skáče šestnáctkrát. Kdyby se regulovalo počtem nul, byla by regulace hrubá jako sekyra.


Cvičení

  1. Posledních 2016 bloků trvalo 10 dní místo 14. Jak se změní obtížnost a proč zrovna takhle?
  2. Proč se obtížnost neupravuje po každém bloku, když by to bylo přesnější?
  3. Malá síť ztratí přes noc 95 % výkonu. Popiš, co se stane, a proč je to horší než u velké sítě.
Náčrt řešení: rozbal, až si cvičení zkusíš sám
  1. Zvýší se zhruba o 40 procent, konkrétně vynásobením poměrem 14 ku 10. Bloky chodily rychleji, než mají, takže se musí ztížit hledání. Pravidlo je záměrně lineární a bez paměti: nepokouší se dohnat zpoždění z minulosti, jen nastaví obtížnost tak, aby při současném výkonu vycházel cíl. Omezení na čtyřnásobek v každém směru chrání proti manipulaci s časovými značkami.
  2. Kvůli odolnosti proti manipulaci a proti šumu. Doba jednoho bloku silně kolísá, takže úprava po každém bloku by reagovala hlavně na náhodu. Navíc časové značky si píší mineři sami a mají omezenou volnost; průměr přes 2016 bloků tuhle volnost rozmělní, kdežto při úpravě po jednom bloku by se dala zneužít k umělému snižování obtížnosti. Novější sítě to řeší klouzavým průměrem přes desítky bloků, což je kompromis mezi obojím.
  3. Bloky se najednou hledají dvacetkrát déle a přepočet obtížnosti je daleko. Protože se přepočítává po 2016 blocích a ty teď trvají dvacetkrát déle, může úprava přijít až za měsíce místo dvou týdnů. Síť je mezitím prakticky nepoužitelná, transakce se nepotvrzují a další mineři odcházejí, což problém prohlubuje. U velké sítě je náhlý odchod takového podílu méně pravděpodobný a zbylý výkon je pořád dost velký na to, aby síť fungovala.

Shrnutí

  • Obtížnost se přepočítává podle toho, jak dlouho trval předchozí úsek bloků.
  • Počítá ji každý uzel sám ze stejných dat, takže není potřeba žádná autorita.
  • Deset minut je kompromis mezi počtem forků a použitelností, ne magické číslo.
  • V bloku je uložený cíl, ne počet nul, aby šla obtížnost ladit plynule.
  • Náhlý odchod výkonu je pro malé sítě vážné riziko, protože přepočet přijde pozdě.
Kdo v Bitcoinu rozhoduje o obtížnosti?

Nikdo. Každý uzel ji spočítá sám podle toho, jak dlouho trvalo posledních 2016 bloků, a protože všichni počítají ze stejných dat stejným vzorcem, vyjde všem totéž. Cílem je udržet průměrný odstup deset minut bez ohledu na to, jak se změnil výkon sítě.

Proč nejsou bloky co nejkratší, když by to zrychlilo potvrzování?

Protože blok se po světě šíří několik sekund a při velmi krátkých odstupech by značná část bloků vznikala paralelně. Vznikaly by časté forky, práce by se zahazovala a zvýhodnění by měli mineři s nejlepším připojením. Deset minut bylo zvoleno tak, aby byla doba šíření proti odstupu zanedbatelná.

Co hrozí malé síti, ze které náhle odejde většina výpočetního výkonu?

Bloky se začnou hledat úměrně déle a přepočet obtížnosti přichází až po pevném počtu bloků, takže může trvat měsíce místo týdnů. Síť je mezitím prakticky nepoužitelná, což odrazuje další minery a problém se prohlubuje. Proto novější protokoly upravují obtížnost průběžně, ne skokově.