Veriga blokov (Blockchain) zveni komplicirano in dejansko lahko je. Osnovni koncept pa je preprost. To je v bistvu tip podatkovne baze.
Podatki v običajni podatkovni bazi so tipično strukturirani v obliki tabel, kar omogoča preprosto iskanje in filtriranje želenih informacij. Tako podtkovno bazo hranimo na enem ali nekaj računalnikih.
Pri verigi podatkov pa je osnovni gradnik blok, ki vsebuje enega ali več podatkov. Več blokov
sestavlja verigo. in tako dobimo poseben tip baze podatkov. In kopije takih baz podatkov zasledimo po tisočih računalnikov na spletu.
Prvi blok v verigi je poseben in mu v žargonu pravimo »Genesis block«. Vsak novi blok v verigi je povezan na predhodni blok. Vsak blok vsebuje enega ali več podatkov. V primeru kriptovalut bi to lahko bil podatek o pošiljatelju in prejemniku in količina take valute.
Ta zgoščena vrednost je nekakšen prstni odtis takega bloka in ga po njej lahko ločimo od drugih blokov. |
Kot omenjeno govorimo o verigi blokov in vsak blok
vsebuje še nekaj
pomembnega: zgoščeno vrednost (prstni odtis) predhodnega bloka v tej
verigi. Pravzaprav je tudi ta, zgoščena vrednost predhodnika poleg
samih podatkov bloka izračunana v samo zgoščeno vrednost bloka.
Tak zapis je dokaj varen pred poneverbami, saj v tako
"zgodovino" oziroma verigo lahko le dodajamo nove podatkovne bloke. V
zgoščeni vrednosti posameznega bloka je namreč "vračunana" tudi
zgoščena vrednost njegovega predhodnika. |
Oglejmo si demonstracijo preproste verige blokov in se z njo
poigrajmo: V tem zelo poenostavljenem primeru nam
podatek predstavlja vrstica znane pesmice. Vsaka vrstica predstavlja
blok v verigi. Vrstice (bolje podatkovne bloke) lahko dodajamo (in s
tem gradimo pesem). V tej demonstraciji vidimo, da so novejši bloki na "dnu" verige.
Lepo je vidno, da je zgoščena vrednost predhodnika(desni stolpec)
res enaka zgoščeni vrednosti v predhodnem bloku (stolpec v sredini).
Prvi blok verige (genesis blok) ima seveda zgoščeno vrednost predhodnika enako 0 (oziroma karkoli), saj nima predhodnika.
Pa poskusimo spremeniti kaj v predhodnihblokih,(bodisi podatek bodisi zgoščeno vrednost). Sistem to zazna kot "poškodbo" verige.
Za razumevanje verige blokov je poučno, če pogledamo, kako so implementirali Bitcoin. Tudi Bitcoin potrebuje za pomnenje svoje verige množico računalnikov. V svoji verigi blokov pomni vsako izvedeno transakcijo. Vendar v razliko s klasičnimi podatkovnimi bazami njegova podatkovna baza (veriga blokov) ni »pod isto streho«. Vsak računalnik ali skupino računalnikov uporavlja nek posameznik ali skupina posameznikov. Teh računalnikov je na tisoče, načeloma na različnih geografskih lokacijah.
Računalnikom, ko tvorijo omrežje Bitcoin, pravimo vozli. Tako je Bitcoinovo omrežje porazdeljeno, obstajajo pa tudi privatna omrežja, ki jih uporablja en posameznik.
V verigi blokov ima vsak vozel poln zapis podatkov, ki so bili shranjeni v verigo od njenega nastanka. Pri Bitcoinu predstavljajo podatki celotno zgodovino transakcij Bitcoin. Če pride do napake v enem vozlu, lahko ta uporabi kot referenco tisoče drugih vozlov in se popravi. Če tega ne naredi, ga drugi vozli hitro odkrijejo. Do sprememb lahko pride le, če se večina udeležencev v omrežju s tem strinja. Na ta način ne more noben vozel pokvariti podatkov, ki jih pomni. Zato je zapis transakcij v verigi Bitcoin nepovraten.
Bitcoin tako pomni zgodovino transakcij. Vendar lahko tehnologijo veriženja blokov uporabljamo tudi drugje, ne le za denarne transakcije. Na primer pri pravnih pogodbah, inventarju izdelkov podjetja ipd. Pa v zdravstvenih zapisih posameznikov. Morda tudi pri elektronskih volitvah.
Za tiste, ki bi radi tudi kaj sprogramirali: Preprost šolski primer, zapisan v JavaScript, najdemo kar na tej spletni strani. Najbolj bistvena sta razreda Block (za tvorbo instanc blokov) in razred BlockChain (za tvorbo instance verige). Kodo tega šolskega primera, iz katere je odstranjena vsa navlaka, najdemo tukaj.
Na spletu najdemo tudi šolske primere, kako sprogramiramo verigo blokov v Pythonu. Na primer tukaj.