Blokkjede — Introduksjon Del 3— Blokkenes Innhold
Hva inneholder en blokk? Hvorfor er blokkjeder tryggere enn vanlige databaser?
Nå kommer vi inn på et ørlite mer teknisk punkt, men som med begrepene over bare ser vanskelig ut på grunn av at man ikke er kjent med begrepene. En svært viktig faktor i blokkjeder er at all informasjon fra tidligere blokker blir validert (bekreftet) i nye blokker. Vi skal se nærmere på hvordan denne valideringen foregår og innholdet i hver blokk. Jeg vil presisere at dette er en forenklet modell.
La oss gå igjennom innholdet i bildet over punkt for punkt.
Se for deg at en blokk er delt opp i 2 deler. En del er block headeren og den andre delen er body. I block headeren lagres all den nødvendige informasjonen i blokkjeden, med unntak av alle enkelttransaksjonene i sin opprinnelige form. Det at Pål sender Pia 100 kr eller at Ali sender Bob 100 kr lagret i body. Nærmest alt annet plasseres i block headeren.
- Tidsstempel: Som vi ser på toppen av block headeren, så har vi først og fremst et tidsstempel. Tidsstempelet markerer når blokken ble generert.
- Nonce: Under tidsstempelet har vi noe som kalles en nonce. En nonce er veldig enkelt forklart en kombinasjon av tall som gjør at hver blokk blir unik. Hovedfunksjonen til en nonce er at man skal kunne differensiere mellom blokker. I den første transaksjonen ser vi at Pål sender Pia 100 kr. Dersom Pål skal sende Pia 100 kr på et senere tidspunkt er det viktig at vi har en nonce, slik at vi kan differensiere mellom de to ulike transaksjonene i de to ulike blokkene.
- Hash av tidligere blokk: La oss ta utgangspunkt i blokk nr 2 og 3 i bildet over, ettersom blokk nr 1 ikke har en tidligere hash å referere til. Dette er kanskje noe av det mest viktige innen blokkjedeteknologi. For å kunne bekrefte nye transaksjoner i en ny blokk, må man alltid bekrefte hashen (all informasjon fra tidligere blokker, hashet) for å kunne bekrefte informasjonen i nye blokker. Som vi ser så inneholder Blokk 3 en hash av innholdet til Blokk 2, som igjen inneholder en hash av innholdet til Blokk 1. Alt blir ført videre, blokk etter blokk.
Dette gjør at man i praksis alltid dobbeltsjekker all tidligere informasjon før man legger til ny informasjon. Et godt eksempel på hvorfor dette er viktig, er at man må kunne bekrefte at Per, som i Blokk 3 skal sende Pia 100 kr, faktisk har nok penger på kontoen sin. Den eneste måten å få bekreftet det på, er å dobbeltsjekke alt Per har gjort tidligere for å sørge for at han har nok på penger på kontoen sin.
I en bank ville banken hatt en oversikt over alle sine saldoer, men i blokkjeder så sjekker man alle tidligere blokker for å kunne holde seg oppdatert på alle saldoer og transaksjoner. En miner er ansvarlig for å verifisere mye transaksjoner i en blokkjede. Mineren kan ikke verifisere informasjonen i en ny blokk før han eller hun har verifisere samtlige blokker i hele blokkjeden i samarbeid med en node. Vi kommer nærmere inn på hva en miner og en node er, og deres roller i blokkjeder.
4. Mining vanskelighetsgrad er enkelt forklart mattestykket som definerer hvor vanskelig det er for en miner å verifisere informasjonen i en blokk. Les gjerne dette punktet og punktet over om igjen etter du har lest forklaringen og rollen til en miner i et blokkjede.
5. Merke roots er veldig enkelt forklart alle transaksjoner i en body, hashet. Istad nevnte jeg at hashing gjør at man kan komprimere informasjon. I stedet for å ha en liste for eks. 5000 transaksjoner i block headeren, så hasher man alle transaksjonene til en enkel linje med kode som representerer alle transaksjonene.
På samme måte som jeg komprimerte en rød stol til A, komprimerer SHA256 samtlige transaksjoner i bodyen til en merke root. Dette gjør det mer oversiktlig, trygt og mindre ressurskrevende å lagre alle transaksjonene i block headeren. Så selv om alle enkelt-transaksjoner ikke lagret i block headeren, lagres en komprimert form av transaksjonene ved bruk av merkle roots.
Oppsummering: Etter å sett på innholdet i blokkene, ser vi at det egentlig handler om å bekrefte informasjon bakover og alltid dobbeltsjekke tidligere informasjon for å sørge for at alle saldoer og transaksjoner stemmer. Hashing brukes hovedsakelig til å kryptere og komprimere data slik at det blir enklere å lagre. Et eksempel på dette er hashingen av alle transaksjoner i bodyen med en merke root, slik at dataen enklere kan lagret i neste blokk.
Samtidig bruker hashing til å kryptere informasjonen i blokkjeden. All data blir hele tiden videreført, loggført med tidsstempling, og alle blokker blir gjort unike ved bruk av nonce slik at man enklere kan skille mellom blokker. En miner må verifisere samtlige transaksjoner i en blokkjede før han eller hun kan verifisere en ny blokk. Vanskelighetsgraden på denne verifiseringen blir også definert i hver blokk.
_________________________________________________________________
Forhåpentligvis var denne informasjonen nyttig for noen der ute. Denne gjennomgangen av blokkjedeteknologi er delt opp i flere deler så det er enklere å fordøye. Etter du har lest alle delene, vil du kunne mer om blokkjeder enn folk flest.
Du kan lese mer om mining og konsensus, del 4 av denne serien om blokkjeder:
https://krypto101.medium.com/blokkjede-introduksjon-del-4-mining-konsensus-7d80e2aa9d8d
Inntil neste gang,
Milad
🐦 Twitter: https://twitter.com/itsnakazumi
📨 Telegram: https://t.me/inakazumi
✉️ Epost: milad@presail.com
_________________________________________________________________
Definisjoner:
Block Header: Delen av en blokk der majoriteten av informasjonen i blokkjeden blir lagret.
Body: Delen av en blokk der transaksjoner lagret. Transaksjonene blir også hashet og lagret i block headeren, men ikke som single transaksjoner.
Timestamp: Tidsstemplingen av når en blokk ble generert.
Nonce: En unik hash som spesifisierer en blokk og gir blokken en unik verdi, som har som formål å gjøre det mulig å differensiere mellom blokker.
Mining Difficulty: Vanskelighetsgraden som er satt i en viss protokoll for å kunne mine en blokk for en miner.
Merkle Root: En hashet versjon av alle transaksjoner som foregår i en blokkjede.