Bitcoinin tekninen kuvaus

Kun haluaa ymmärtää Bitcoin-verkon toimintaa, niin kannattaa aloittaa siitä mitä se tekee. Bitcoin-verkko on käytännössä hajautettu kirjanpitotietokanta. Tässä tietokannassa on tallennettuna bitcoin-osoitteet ja niiden sisältämät Bitcoin-määrät. Tämän lisäksi verkon tehtävänä on myös luoda Bitcoineja tarkkaan rajattujen sääntöjen mukaan.

Hajautettu yksimielisyys

Keskeisin käsite tässä yhteydessä lienee lohkoketju (blockchain). Tämä viittaa tietorakenteeseen joka sisältää kaikki Bitcoin-verkossa koskaan tapahtuneet siirrot (transaction). Lohkoketju muodostuu lohkoista jotka on ketjutettu yhteen sillä että uuden lohkon (block) otsikot (headers) sisältävät aina sitä edeltäneen lohkon otsikoiden tiivisteen (hash). Tämän lisäksi otsikoissa on aika, lohkon vaikeustaso, bitcoin siirrot sisältävän merkle-puun juuren, sekä pari muuta arvoa jotka ovat lähinnä täytettä.

Toinen tärkeä käsite on louhiminen (mining). Louhimisen tarkoitus on tehdä lohkojen luomisesta niin kallis prosessi, että siirtohistorian muokkaamisesta tulee kannattamatonta. Kun louhitaan, niin tehdään uusi lohko ja lasketaan sille pienin muutoksin uusia tiivisteitä kunnes löytyy vaikeustason (difficulty) mukainen tiiviste. Kun tällainen löytyy, se levitetään koko verkkoon ja aletaan laskemaan sille jatkoa. Louhijoiden tehtävänä on myös päättää mitkä siirrot sisällyttää mihinkin lohkoon.

Ollakseen hyväksyttävä, lohkon täytyy täyttää vaikeustasovaatimus ja sen sisältämien siirtojen täytyy olla täysin verkon sääntöjen mukaisia. Verkon sääntöjen vahtiminen on kaikkien täyttä Bitcoin-verkon solmua ajavien yhteinen tehtävä. Sääntöjä pidetään yllä siten, että kaikki sääntöjä rikkova jätetään huomiotta. Tietokantaan pääsevät siis vain sääntöjä noudattavat siirrot ja lohkot.

Bitcoin-verkon louhimisen vaikeustaso asetetaan tavoitteena saada keskimääräiseksi ajaksi löytyneiden lohkojen välille 10 minuuttia. Tämä tapahtuu 2016 lohkon välein. Eli noin kahden viikon välein. Käytännössä vaikeustaso on toteutettu vaatimalla lohkon tiivisteen olevan tiettyä raja-arvoa pienempi.

Lohkoista syntyy tällä tavalla ketju, joka kokonaisuudessaan sisältää Bitcoin-verkon täydellisen siirtohistorian. Mikäli ketjussa on haaraumia, ketju, jonka lohkojen vaikeustason summa on suurin, on voimassa oleva. Tämä sääntö mahdollistaa hajautetun yksimielisyyden.

Siirtokäytännöt

Bitcoin siirrot muodostuvat sisääntuloista (input) ja ulostuloista (output). Sisääntulot sisältävät viittauksen aikaisemman siirron ulostuloon sekä komentojonopalasen joka täydentää aikaisemman ulostulon komentojonon (script) kokonaiseksi. Mikäli näin syntynyt kokonainen komentojono suorituksen jälkeen antaa tulokseksi ykkösen, on yhdistelmä hyväksyttävä (valid). Ulostulot koostuvat komentojonosta sekä Bitcoin-määrästä.

Kokonainen siirto on hyväksyttävä mikäli kaikkien sisääntulojen tuloksena syntyvät kokonaiset komentojonot antavat tulokseksi ykkösen sekä siirron sisääntulojen summa on suurempi tai yhtäsuuri kuin ulostulojen summa. Yksi poikkeus tälle on luojasiirto, joka on jokaisessa lohkossa listan ensimmäinen siirto. Tälle siirrolle ei vaadita sisääntuloja vaan sillä on ainoastaan ulostuloja.

Luojasiirrolla on kaksi roolia. Ensimmäinen on luoda uusia bitcoineja määrättyjen sääntöjen mukaan. Toinen on luoda taloudellinen porkkana jolla saada ihmiset louhimaan. Molemmat onnistuvat kätevästi antamalla louhijoiden päättää luojasiirtojen komentojonot. luojasiirron ulostulojen summa saa olla enintään uusien bitcoinien sallittu määrä plus lohkossa olevien siirtojen siirtopalkkiot (transaction fees).

Bitcoinien enimmäismäärä seuraa geometrisen summan kaavasta ja se on vähän alle 21 miljoonaa kappaletta. Uusien Bitcoinien luonti menee niin, että ensimmäiset 210 000 lohkoa luovat 50 BTC per lohko. Seuraavat 210 000 luovat 25. Tämän jälkeen 12.5, 6.25, 3.125, jne. Bitcoinien luonti tulee päättymään täysin vuoden 2140 tienoilla kun luotavien Bitcoinien määrä tippuu alle järjestelmän tukeman tarkkuuden. 99.9% Bitcoineista on luotuna vuoden 2040 tienoilla.