Jak blockchain funguje

Dokončeno

Když jsme si teď prošli základy blockchainu, podívejme se na to, jak funguje uvnitř. Tyto informace by vám měly pomoct při rozhodování, jestli blockchain funguje pro váš scénář.

Jak jsou data distribuovaná?

Náš scénář zahrnuje několik firem. Ve zpracovatelské mlékárně bychom mohli mít centralizovanou databázi. Žádný účastník se ale nechce stát centrální autoritou. Mohli bychom tedy použít blockchainový distribuovaný registr. Použití blockchainu eliminuje nutnost stanovit centrální autoritu. Navíc platí, že každý účastník s blockchainovým uzlem má kopii registru, aby mohl provádět vlastní auditování a integraci se svými systémy. Ale není nezbytně nutné, aby každá firma měla svůj vlastní uzel. Uzly je možné mezi partnery sdílet.

Každý uzel je k jiným uzlům připojen prostřednictvím blockchainové sítě. Například společnost Dalia Pelayo Farms, výrobce zmrzliny i jednotlivá zmrzlinářství mají své vlastní uzly, které si sami spravují. Contoso West a Contoso East jsou samostatní partneři, kteří spadají pod stejnou mateřskou společnost. Contoso má jeden uzel. Vztahy uzlů s jednotlivým společnostem nemusí být v relaci 1:1.

Several participant blockchain nodes connected by a network.

Změny stavu

Data v blockchainu reprezentují stav. To je důvod, proč blockchain dobře funguje s digitálními tokeny, jako jsou kryptoměny. Pokud si to představíme na příkladu fyzické měny, tak mince může být v jednom okamžiku v kapse jen jedné osoby. Pokud máte minci v kapse vy, je z hlediska aktuálního stavu ve vašem vlastnictví. Pokud ji dáte kamarádovi, stav se změní tak, že jejím vlastníkem se stane tento člověk. V našem scénáři se přesunují dodávky v rámci dodavatelského řetězce. Odpovědnost za produkt je nutné přenášet. Údaj, který nás zajímá, je odpovědný účastník, teplota a to, jestli je produkt vyhovující.

Blockchain používá transakce ke změně stavu dat z jedné hodnoty na jinou. Potřebujeme třeba vědět, jestli se zmrzlina skladuje při teplotě pod bodem mrazu. Při přepravě zmrzliny teplotní senzor pravidelně hlásí teplotu. Nahlášená teplota představuje transakci, která se odešle do transakčního uzlu blockchainu.

Example transaction from an IoT temperature sensor. The transaction sets the temperature to -2° celsius in the ledger.

Ve scénáři se zmrzlinou se při přepravě dodávky v dodavatelském řetězci odešle transakce při každé změně stavu. Například tato ilustrace znázorňuje transakce u typické dodávky k výrobci zmrzliny. Při každé transakci se změní buď odpovědný účastník, nebo teplota. Aktuální stav registru tvoří transakce zpracované v daném pořadí.

List of transactions in order that change the responsible party and temperature. The combination of transactions result in a ledger state based on the order of transaction changes.

Vámi odeslaná transakce zamíří do transakčního uzlu blockchainu. Řekněme, že společnost Dalia Pelayo Farms odešle dodávku mléka prostřednictvím společnosti Contoso West Shipping. Systém dodávek ve společnosti Dalia Pelayo Farms odešle transakci do jejího uzlu v blockchainu. Tato transakce přesune odpovědnost za dodávku z této zemědělské firmy na Contoso West Shipping.

A transaction from the farmer being sent to the farmer's blockchain node.

Blockchain rozešle transakci do celé blockchainové sítě. Každý uzel získá kopii transakce.

A transaction being copied to all participant blockchain node peers.

Každý uzel tuto transakci zpracuje, ale ta nadále vyžaduje ověření pomocí mechanismu pro konsensus. Konsensus zajišťuje konzistenci a důvěryhodnost v distribuovaném registru.

Díky čemu můžete důvěřovat, že jsou data v registru konzistentní?

V distribuované síti je obtížné určit, co je pravdivé, protože změny dat musí probíhat napříč všemi uzly. Co se stane, když uzel výrobce zmrzliny neobdrží transakci představující dodávku? Jak se dozví, jestli mu farma odeslala mléko? Co když dojde k poruše mrazicího vozu přepravní firmy a mléko se zkazí? Má přepravní firma možnost svůj registr změnit, aby se vyhnula odpovědnosti?

K ověřování a potvrzování dat mezi všemi uzly blockchainu se používá mechanismus pro konsensus. Konsensus představuje způsob, jak se všechny decentralizované uzly můžou dostat do stejného stavu. Při přenosu hodnoty nebo odpovědnosti záleží na pořadí. Pokud například převádíte vlastnictví auta na kamaráda, nemůžete ho zároveň převádět i na kolegu z práce. Jde o tzv. problém dvojitého výdaje (double spend), který se řeší právě konsensem. Konsensus zajišťuje správné pořadí transakcí a integritu blockchainu. V rámci hledání konsensu se skupina transakcí ověřuje jako blok a síť musí zařazení bloku do blockchainu odsouhlasit.

Consensus mechanism agrees on validated transactions across nodes. Each blockchain node writes the latest validated block to the blockchain.

Existuje několik algoritmů pro konsensus v blockchainu a patří mezi ně PoW (proof of work), PoS (proof of stake) a PoA (proof of authority). Každý algoritmus řeší konzistenci jiným způsobem. Jednoduše řečeno, konsensus představuje způsob, jak se distribuovaný registr dostává do všemi sdíleného stavu.

Co je blok?

Blok je cluster dat v rámci blockchainu, který uchovává informace o transakcích. Počet transakcí v bloku je obvykle založený na čase. Například tato ilustrace znázorňuje blok transakcí, k nimž došlo během posledních 10 minut.

Example of several transactions representing a block. The order of transactions result in a given state.

Na základě konsensu se ověřené bloky přidají do každého uzlu v blockchainu. Vzhledem k tomu, že všechny uzly v řetězci mají stejné bloky, je registr konzistentní v celé síti. Výsledkem je, že všechny uzly obsahují stejná ověřená data v odsouhlaseném pořadí.

Díky čemu máte jistotu, že je registr nezměnitelný?

Možná se domníváte, že pokud máte nad registrem kontrolu ve svém uzlu, stačí změnit data ve vaší kopii. Jak to, že jsou data nezměnitelná?

Blockchain používá kryptografickou hodnotu hash k vytvoření propojení mezi bloky. Díky tomuto propojení bloků lze pořadí transakcí odsouhlasit na základě algoritmu pro konsensus. Kryptografická hodnota hash je algoritmus, který mapuje data libovolné velikosti na bitové vyjádření s pevnou velikostí. Můžete si to představit jako digitální otisk prstu. Bitcoin používá algoritmus hash SHA-256. Pokud použijete funkci hash SHA-256 na dokumentu stránky 100, výstupem funkce je 256bitová hodnota hash. Pokud v dokumentu změníte jenom jeden znak a znovu vygenerujete hodnotu hash, bude výstup jinou 256bitovou hodnotou hash. Teď si představte, že jako vstup do funkce hash použijeme blok dat. Výstupem bude jedinečná hodnota hash pro data v tomto bloku.

A block is sent through a hash function and a cryptographic hash is generated.

Blockchain na základě hodnot hash detekuje, jestli v blocích došlo k nějakým změnám. Zahrnutím hodnoty hash předchozího bloku při generování hodnoty hash dalšího bloku dojde ke zřetězení bloků prostřednictvím hodnot hash.

A block includes the previous block's hash when generating it's hash. Including the previous hash links the blocks together.

Blockchain zajišťuje důvěryhodnost tím, že na základě hodnot hash prokazuje, že se historie dat nezměnila. Tím, že se při vytváření nového bloku zahrne hodnota hash předchozího bloku, vznikne nezměnitelný řetězec transakcí v pevném pořadí.

Three blocks linked together by the previous block's hash

Pokud dojde k úpravě libovolného bloku v řetězci, bude se lišit hodnota hash následných bloků. Výsledkem bude, že se při ověřování zjistí nesoulad.

Důvěryhodná logika

Blockchain nám umožňuje uchovávat data, která jsou konzistentní a kterým je možné důvěřovat. Jak přidáme logiku, která bude provádět totéž na každém uzlu?

V našem scénáři potřebujeme logiku pro přenos odpovědnosti za produkt z jednoho účastníka na druhého. Také potřebujeme na základě dat ze senzoru teploty IoT ověřovat, jestli teplota příliš nestoupla.

Decentralizovaná aplikace (DApp) je aplikace v distribuovaném výpočetním systému. V tomto modulu se zaměříme na použití blockchainového protokolu Ethereum. Aplikace Ethereum DApp se označují jako inteligentní kontrakty. Inteligentní kontrakt obsahuje logiku, která se provádí jako součást transakce. Logiku v protokolu Ethereum programujete v programovacím jazyce Solidity.

Inteligentní kontrakty se nasazují do blockchainu a odkazuje se na ně prostřednictvím adresy. Pokud chcete použít inteligentní kontrakt, vytvoříte instanci. Instance inteligentního kontraktu obsahuje stavová data a programovou logiku. V našem scénáři instance inteligentního kontraktu obsahuje data, jako je odpovědný účastník, poloha a údaj, jestli se teplota produktu nedostala mimo povolený rozsah. U instance můžeme provádět funkce pro přenos odpovědnosti nebo příjem telemetrických dat o teplotě.

Components of a smart contract include address, logic, and data.

Když se odpovědnost za produkt přenese na jiného účastníka, uskuteční se transakce. Logika inteligentního kontraktu aktualizuje stavová data. V našem scénáři se zmrzlinou vytvoří expediční systém výrobce zmrzliny instanci inteligentního kontraktu pro novou dodávku zmrzliny. Expediční systém výrobce odešle transakci, která vyvolá funkci TransferResponsibility – ta přenese odpovědnost za dodávku na přepravce Contoso East. Blockchainová síť odešle tuto transakci do všech uzlů. Logika inteligentního kontraktu se provede na každém uzlu.

A smart contract transaction is sent to one node and copied to the other peer nodes.

Co když během dodávky dojde k poruše mrazicí jednotky a teplota zmrzliny překročí bod mrazu? Senzor teploty IoT sleduje teplotu zmrzliny a pravidelně odesílá transakce. Pokud je teplota nad bodem mrazu, logika inteligentního kontraktu označí zásilku jako nedodržující předpisy.

A smart contract transaction executes logic to set the shipment to out of compliance due to the temperature. The transaction is copied and executed on other peer nodes.

Vzhledem k tomu, že transakce je zahrnuta v řetězci bloků, existuje neměnný záznam o tom, kdy se zásilka stala nedodržující předpisy. Zmrzlinářství může dodávku odmítnout a vyhnout se tak problémům v souvislosti s bezpečností potravin.

Stejně jako data v blockchainu je inteligentní kontrakt nezměnitelný. Po nasazení není možné logiku změnit. Proto můžete důvěřovat tomu, že se logika inteligentního kontraktu vždy provádí na všech uzlech. Případné změny kódu vyžadují nasazení nového inteligentního kontraktu s novou adresou.