Merkle Tree dopušta računala na mreži za provjeru pojedinačnih zapisa bez potrebe za pregledom i usporedbom verzija cijele baze podataka. To čine pomoću kriptografije koja otkriva pojedinačni zapis, a ujedno jamče da svi ostali zapisi u bazi nisu promijenjeni. Prvo što ih je 1979. godine patentirao Ralph Merkle, stabla Merkle bila su važan ključ provjere baze podataka kroz povijest računala.
Merkle stabla posebno su korisna za distribuirane mreže gdje više računala čuva kopije iste baze podataka ili knjige. Kada je Satoshi stvorio Bitcoin, korištenje Merkle stabla za provjeru transakcija nije bilo nimalo pametno. Zbog distribuirane prirode blockchaina potreban nam je siguran i brz način da svi na mreži imaju istu knjigu.
Ako ste proučavali blockchain, onda ste vjerojatno čuli za stabla Merkle i korijenje Merkle. Međutim, mnogi investitori i entuzijasti ne znaju kako rade. S obzirom da su oni ključni dio blockchain sigurnosti i povjerenja, vrijedi razumjeti osnove. Ovaj domišljati mehanizam omogućuje pohranu i pronalaženje milijuna blockchain transakcija.
Potreba za učinkovitom provjerom
Krenimo s osnovama. Zašto su nam potrebna stabla Merkle i što ih čini korisnima u blockchain kontekstu?
Da biste odgovorili na to pitanje, razmotrite svijet bez stabala Merkle za provjeru. Da Bitcoin nema Merkle stabla, svaki čvor na mreži morao bi čuvati cjelovitu kopiju svake pojedine transakcije koja se ikad dogodila na Bitcoin-u. Tada bi, kada potvrđuje prošlu transakciju, čvor morao doprijeti do mreže i dobiti kopije glavne knjige od svojih vršnjaka. Redak po redak, čvor će trebati usporediti svaki unos sa vlastitim zapisima kako bi bio siguran da se mrežne knjige točno podudaraju. Ako bi se neke izmjene provukle, to bi ugrozilo sigurnost mreže.
Budući da provjera valjanosti podataka zahtijeva posjedovanje samih podataka, svaki pojedinačni zahtjev za provjeru Bitcoina zahtijevao bi da se ogromni paketi informacija šalju preko mreže. Tada bi računalo za provjeru valjanosti trebalo posvetiti procesorskoj moći uspoređivanju glavnih knjiga kako bi se osiguralo da nema promjena.
Stabla merkle rješavaju ovaj problem raspršivanjem zapisa u glavnu knjigu. To učinkovito razdvaja dokaz podataka od samih podataka. Ti su hashi redovi veličine manji od same knjige, pa dokazivanje valjanosti transakcije uključuje samo slanje malih paketa preko mreže. Omogućuje vam dokazivanje da su dvije verzije glavne knjige u skladu s minimalnom računalnom snagom i mrežnom propusnošću.
Ako to zvuči sjajno, to je zato što jest. Drveće Merkle zaista je super kriptografski izum. Dakle, sada je pitanje kako oni rade?
Brzo osvježavanje raspršivanja
Prije nego što uđemo u detalje stabala Merkle, trebamo kriptografske temelje u raspršivanju. Blockchains koriste hashiranje svugdje, od algoritama dokaza o radu do provjere datoteka. Hashing je kamen temeljac moderne kriptografije.
Bez previše ulaska u korov, hash je vrsta algoritma koji uzima bilo koji ulaz, bez obzira na duljinu, i daje slučajni izlaz standardne duljine. Na primjer, u Bitcoinu transakcija “Alice šalje Bobu 1 BTC” izgleda kao niz slučajnih znakova:
“3cbcf3e1075b0b3357140de438336733bd6927cd1e78d36cc278324fcce932ad”
Ovaj niz znakova je hash, i to deterministički. To znači da „A -> B 1BTC ”uvijek se raspršuje na isti izlaz.
Međutim, hashovi imaju još jedno sjajno svojstvo. Čak i mala promjena na ulazu pretvara se u drastičnu promjenu na izlazu. Ako transakciju malo izmijenimo u „A-> B 1.1BTC ”, tada hash postaje potpuno drugačiji. Stoga je odmah očito je li zapis promijenio makar jedan znak.
Hashovi su strašni i iz drugih razloga, ali razumijevanje da su hashovi deterministički i da promjene stvaraju vodopad dovoljno je da se shvati kako djeluje stablo Merkle.
Kako napraviti drvo Merkle
Drvo Merkle. Blockchain Merkle stabla uključuju tisuće hashova. Ovdje je na slici samo 8.
Sada je vrijeme za izgradnju našeg stabla Merkle. Nazvat ćemo našu transakciju Allice / Bob iznad “Transakcija A.” Kad se ta transakcija doda u blockchain, ona postaje dio bloka s drugim transakcijama. Radi jednostavnosti, te ćemo transakcije nazvati B, C i D.
Svaka se od tih transakcija rasprši, tako da ne moramo zadržavati detalje o tome tko je i kolika je bila transakcija. No, još uvijek možemo dokazati da transakcija nije promijenjena jer imamo sve hashove. Sada imamo H (A), H (B), H (C) i H (D).
Držanje četiri heša nije toliko velika stvar. Međutim, svaki Bitcoin blok sadrži oko 2000 transakcija, pa je zadržavanje i prijenos svih tih hashova previše prostora za pohranu i propusnost. Stablo Merkle rješava taj problem uparivanjem transakcija i njihovim međusobnim raspršivanjem.
Sada, H (A) + H (B) = H (AB) i H (C) + H (D) = H (CD). Kombinirajući i raspršujući transakcije, smanjili smo broj raspršivanja koja moramo pohraniti za pola. Možemo ponoviti isto, pa je H (AB) + H (CD) = H (ABCD). Čineći to, sada imamo samo jedan hash za pohranu koji je deterministički na temelju hashova svih temeljnih transakcija. Ovaj pojedinačni hash naziva se korijen Merkle.
Provjera transakcija pomoću korijena Merkle
Korijensko raspršivanje stabla Merkle ključni je dio svakog Bitcoin bloka koji se poveže sa sljedećim blokom u lancu.
Svaki Bitcoin blok ima korijen Merkle koji se nalazi u zaglavlju bloka. To je način na koji provjeravamo sadržaj bloka i dosljednost više knjiga. Ako moja kopija blockchaina ima isti Merkleov korijen za blok kao i vaša kopija blockchaina, tada znamo da su sve transakcije u tom bloku iste i slažemo se oko glavne knjige. Čak i sićušna nedosljednost dovela bi do znatno različitih korijena Merkle zbog svojstava hasha.
Da bi se potvrdila transakcija D, treba znati samo H (AB), H (C), H (D) i H (EFGH).
Ako postoji odstupanje u korijenu Merkle, mogu zatražiti dva potheša od pouzdanog tijela. Odatle možemo suziti oko kojeg se zapisa ne slažemo zahtijevajući daljnja podheširanja. Kao rezultat, možemo utvrditi odstupanja, a da ne moramo prolaziti redak po redak kroz cijelu knjigu.
Zaključak
Blockchains, baze podataka i mreže širom svijeta koriste Merkle stabla za brzu i učinkovitu koordinaciju zapisa na više računala. Sad kad razumijete osnove, lako je shvatiti zašto ovaj način strukturiranja podataka čini blockchain sigurnim i učinkovitim.