Tehnologija veriženja blokov


Kaj je veriga blokov?

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.


Posebnost teh podatkovnih blokov je, da vsak vsebuje zgoščeno vrednost o vsebovanih podatkih (v žargonu tej vrednosti pravimo "hash")

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.


Tako veriga blokov dejansko predstavlja zgodovino podatkov, ki smo jih v tako strukturo vložili.  Primerna je na primer za beleženje finančnih transakcih pri kriptovalutah, za beleženje zgodovine naših bolezni (nenakšna zdravniška kartoteka), za beleženje zgodovine dogodkov (servisov, prodaj) avtomobila in še za marsikaj drugega. Če verigo blokov implementiramo na porazdeljen (decentraliziran) način, na primer na spletu, dobimo nepovratno časovnico podatkov. Vsak s podatki napolnjen blok postane del te časovnice in ob dodatku v verigo običajno dobi tudi  časovno značko.


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.


Podatek

   Stanje verige:


"Zgodovine", zapisane v verigi blokov, ne moremo spremeniti, ne da bi to lahko uporabnik verige blokov to opazil. In to pomeni varnost takih podatkov.
Dodatno varnost predstavlja dejstvo, če take verige implementiramo decentralizirano.

Decentralizacija

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.



In kako sprogramiramo verigo blokov?

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.