Blockchain od začátečníka 1 - úvod

Zdá se mi, že rámcovou znalost blockchain bych měl jako architekt mít a je to téma po všech stránkách zajímavé. Narazil jsem ale na obvyklý problém - většina materiálů na Internetu je příliš mělkých nebo naopak moc teoretických nebo moc daleko. Jako vždy chci postupovat tak, že si vyzkouším krok za krokem klíčové aspekty technologie na primitivních nereálně zjednodušených případech na vlastním kódu a pak stavím nad tím. Nezbývalo tedy, než to takhle zkusit sám a tohle jsou mé poznámky z cesty.

Blockchain a jeho použití z pohledu architekta

Prvním aspektem blockchain je, že jde o kryptografický řetězec důkazů, že data uvnitř dávají smysl a nikdo je zpětně nemodifikoval. Jinak řečeno je to log, sled zaznamenaných událostí, jakási kronika nebo účetní kniha a pokus o její zpětnou úpravu rozboří kryptografické důkazy, takže podvodník je odhalen. To je důvod, proč se používá termín ledger - účetní kniha.

Druhým zásadním atributem je, že jde o distribuovaný systém. V běžné databázi byste použili jeden uzel, který bude všemu šéfovat a bude sbírat všechny zápisy a distribuovat je na ostatní uzle. Následně můžete učinit sadu rozhodnutí o tom, jak namícháte dostupnost, konzistenci, latenci a durabilitu. Tak například - na kolika nodech musí být nová informace zapsaná, abyste zápis prohlásili za trvalý (poslali acknowledge aplikaci)? Dovolíte číst pouze z hlavního nodu (silná konzistence) nebo budete číst z určitého množství nodů najednou a najdete nejnovější verzi záznamu (při quorum na zápis i čtení jste opět na silné konzistenci, ale také můžete při zápisu čekat na všechny nody a pak stačí číst z libovolného jednoho) nebo něco škálovatelnějšího, méně náročného, rychlejšího, ale pouze eventuálně konzistentního? Blockchain je také formou distribuované databáze a rychlost konvergence ke konzistentnímu stavu závisí na použitém algoritmu konzistence (Proof of Work - bezpečně, ale třeba v desítkách minut, Proof of Stake rychleji, Practical Byzantine Fault Tolerance nejrychleji, ale spíše pro ověřené privátní účely). Mechanismus distribuovaného konsensu a jeho schopnost tolerovat nejen výpadky a chyby (to je co dělají distribuované databáze taky), ale i úmyslné záškodníky (v tom je blockchain jiný - není nezbytné všem věřit a nemusí být všichni čestní), je pro blockchain klíčový.

Třetí vlastnost - v rámci účetní knihy lze vytvářet transakce mezi “účty” (adresami, v základní podobě jde o pseodoanonymní řešení) a předmětem těchto transakcí mohou být vzájemně zaměnitelné virtuální věcičky (tokeny - nemají unikátní ID, je jedno jakou konkrétní minci máte, hodnota se nemění - typické pro kryptoměny) nebo věcičky unikátní (NFT čili Non-Fungible Token - každý token je unikátní a má své ID, například digitální umělecké dílo, vstupenka, směnitelný dlužní úpis).

Čtvrtá zajímavost - ve většině databázových systémů můžete používat logiku, která nějakým způsobem ovlivňuje probíhající transakce. Jde třeba o constraints u relačních databází nebo obecněji a flexibilněji nějaká uložená procedura. Do databáze nahrajete kód, který dokáže reagovat na nějakou událost (trigger) a v ten okamžik se vykoná a může například modifikovat nějaká data a tak podobně. Konzistence něčeho takového je samozřejmě obtížná zejména pokud chcete distribuovaný systém, ale je to realizovatelné. Blockchain také podporuje uložené procedury a říká jim Smart Contracts (například v Etherum a většině dalších), takže přímo do databáze dokážete zadrátovat určité požadované chování (např. uvolním finanční prostředky teprve až dojde ke splnění nějaké podmínky).

Pokud bychom čtvrtý bod dotáhli do extrému - máme tady systém, který je schopen konzistentně držet distribuovaný state a provádět byznys logiku, tedy dělat to, co dělají aplikace. Nad blockchain tedy můžeme reálně provozovat distribuovanou aplikaci - dApp. Může jít o finanční produkty (Decentralized Finance - DeFi), obchody s NFT a počítačové hry. Pokud bychom do toho všeho přidali věci jako jednoduchý přístup uživatelů a distribuovaný identitní systém (například Verifiable Credentials), tak mluvíme o Web3 - nové generaci Internetu, která je decentralizovaná, bez cenzury a bez prostředníků.

Kdy tedy blokchain použít?

  • Když potřebujete databázi pro svojí aplikaci, nepoužívejte blockchain - je to pomalé, drahé, složité a pokud nemáte problém věřit jednomu centrálnímu clusteru uzlů, nedává to smysl.
  • Pokud máte problém s nedůvěrou mezi subjekty v okamžiku, kdy chcete společně zpracovávat data, zkoumejte i jiné metody - confidential computing, differential privacy nebo homomorfní šifrování.
  • Pokud potřebujete globálně distribuovanou databázi, můžete se inspirovat i u těch, které 40 let dobře fungují - DNS a BGP v Internetu. Na jejich místě by technicky vzato mohl být blockchain, ale evidentně to šlo i jinak (a možná jednodušeji a s větší škálovatelností - vezměte v úvahu, že tyto protokoly musí udržovat kompatibilitu desítky let).
  • Jakmile stavíte systém, kde se účastníci neshodnou na jedné autoritě, které by byli ochotni věřit, očekáváte, že se najde spousta těch, co budou chtít systém zneužít a potřebujete prokazatelně držet data včetně řekněme logiky jejich zpracování, pak to vede na blockchain. Ve finále tak věci jako samotný Internet, volební hlasování, finanční transakce a obchodování (nemovitosti, umění), zaručená výměna informací či distribuované identity mohou být ideálními kandidáty pro blockchain. A proto mě zajímá.

V příštích dílech si tedy chci vyzkoušet jednotlivé součástky, algoritmy, protokoly a uvidím, kam se s tím dostanu. Za mě je to téma, které si pozornost rozhodně zaslouží a vůbec to není jen o kryptoměnách.



Blockchain od začátečníka 5 - máš to odmakané? (Proof of Work) Blockchain
Blockchain od začátečníka 4 - tak na tom se asi shodneme, ne? (distribuovaný konsenzus) Blockchain
Blockchain od začátečníka 3 - transakce ověřené rostoucím binárním stromem (merkle tree) Blockchain
Blockchain od začátečníka 2 - bloky řetězené za sebou Blockchain