Jos Bitcoin ei ole vielä tuttu, niin siihen kannattaa tutustua nyt. Luin itse hiljattain järjestelmää käsittelevän whitepaperin, joka on miellyttävän lyhyt ja ytimekäs. Tarkempi speksi löytyy protokollamäärittelystä sekä toimintakuvauksesta. Ajattelin vetää kokonaisuutta hiukan yhteen tähän suomeksi.
Bitcoin
Bitcoin on P2P-valuuttajärjestelmä. Sen taustalla ei ole mitään keskitettyä laitosta, joka laskisi ulos valuuttaa tai tarkistaisi siihen liittyviä transaktioita. Luotettavuus perustuu siihen, että järjestelmä luottaa eniten laskentatehoa omistavaan verkon osaan.
Bitcoin siis toimii luotettavasti niin kauan, kun "hyviä" noodeja on enemmän kuin "pahoja". Lisäksi pahojen noodien täytyisi toimia koordinoidusti yhdessä voittaakseen hyvät. Hyvä noodi on sellainen, joka noudattaa samoja sääntöjä kuin Bitcoinin virallinen client-ohjelma.
Bitcoinin valuuttana toimivat kolikot, joiden epävirallinen lyhenne on BTC. Kolikko ilmaistaan 64-bittisenä kokonaislukuna (uint64_t). Siinä on kiinteästi mukana 8 desimaalipisteen jälkeistä nollaa. Pienin mahdollinen kolikko on siis 0.00000001 BTC ja suurin 184,467,440,737.09551615 BTC eli noin 184,5 miljardia. Tämä ei sinänsä rajoita sitä, paljonko valuuttaa voi omistaa, mutta yksittäisten transaktioiden on tapahduttava näiden rajojen puitteissa.
Kolikot voivat jakaantua ja yhdistyä ajan kuluessa. Jokaisessa transaktiossa on syötteenä N kappaletta aiempia kolikoita ja ulostulona M kappaletta uusia kolikoita uusine omistajineen. Bitcoin-sovellusohjelmalle jää vapaus päättää, millä tavalla se jakaa tai yhdistelee kolikoita uusissa luomissaan transaktioissa.
Bitcoiniin on kuitenkin sisäänrakennettu sellainen rajoitus, että Bitcoin-verkko voi generoida ajan kuluessa yhteensä maksimissaan 21,000,000 BTC. Tämä on seurausta siitä, että yhden blokin ratkaisemisesta myönnettävä insentiivi (alussa 50 BTC) puoliintuu joka 210,000 blokin jälkeen ja päätyy lopulta nollaan. Tämä rajoitus ei ole niinkään tekninen vaan taloudellinen. Ajatuksena on, että yksittäinen Bitcoin-verkko päätyy rahangeneroimisvaiheen jälkeen tilaan, jossa valuuttaa on kiinteä määrä, eikä sen arvo enää inflatoidu. Sen sijaan riskinä on, että käyttäjämäärän kasvaessa arvo alkaa deflatoitua. Tästä lisää artikkelin viimeisessä kappaleessa.
Transaktioketjut
Bitcoinin toiminta perustuu transaktioketjuihin. Yksi transaktio tarkoittaa kolikon siirtämistä aiemmalta omistajalta uudelle. Verkko "muistaa" kaikki transaktiot siitä lähtien, kun kolikko luotiin. Kolikon luominen on ketjun ensimmäinen transaktio, jota kutsutaan coinbase-transaktioksi. Se on ainoa tapa synnyttää uutta rahaa järjestelmään.
Kolikon kulloisenkin omistajan identiteetti perustuu ECDSA-salaukseen. Kolikon luovuttaja allekirjoittaa aina transaktion omalla salaisella avaimellaan. Uusi omistaja taas määräytyy julkisen avaimensa perusteella. Ainoastaan se taho, jolla on hallussaan kyseinen julkinen avain ja siihen liittyvä salainen avain, voi allekirjoittaa uuden transaktion ja siirtää kolikon eteenpäin.
Bitcoin-sovelluksen Address Bookissa näkyvät osoitteet ovat käyttäjien julkisten avainten 160-bittisiä RIPEMD-hasheja. Vastaanottajan hash riittää transaktion luomiseen. Varsinaista julkista avainta tarvitaan vasta sitten, kun vastaanottaja haluaa siirtää kolikon taas eteenpäin.
Bitcoin-transaktioiden anonymiteetti perustuu siihen, että käyttäjä ei paljasta olevansa tietyn julkisen avaimen (osoitteen) haltija. Tämä saavutetaan parhaiten siten, että jokaisessa transaktiossa käytetään aina uutta osoitetta. Bitcoin-sovellus luokin automaattisesti uuden osoitteen joka kerta, kun aiemmalla on vastaanotettu transaktio. On kuitenkin syytä muistaa, että P2P-verkko näkee uuden transaktion luoneen noodin IP-osoitteen, joskaan se ei jää pysyvästi blokkihistoriaan.
Blokit
Kun käyttäjä lähettää rahaa toiselle käyttäjälle, Bitcoin-sovellus julkaisee tiedon uudesta transaktiosta kaikille muille P2P-verkon noodeille. Näitä uusia transaktioita pidetään ensin irrallisessa poolissa, jossa niillä ei ole mitään erityistä järjestystä. Transaktioita ei pidetä vielä luotettavina tässä vaiheessa.
Hiljalleen Bitcoin-verkko kerää uudet transaktiot blokkeihin, joissa on tällä hetkellä tyypillisesti 10-20 transaktiota. Blokit ovat globaaleja, eli verkon jokaisella noodilla on kopio kaikista tähän asti luoduista blokeista. Protokolla on rakennettu siten, että noodit pääsevät aina yhteisymmärrykseen siitä, mitä blokkeja on luotu ja missä järjestyksessä. Blokkeja ja niiden järjestystä käy laskennallisesti yhä vaikeammaksi muuttaa jälkeenpäin.
Yksittäinen blokki koostuu aikaleimasta, joukosta transaktioita, vaikeustasosta sekä nonce-arvosta. Näistä lasketaan SHA-256-hash, joka todistaa blokin olevan aito. Hashilla on tiettyjä laskennallisia vaatimuksia, joista enemmän seuraavassa kappaleessa.
Blokit muodostavat koko verkolle yhtenäisen ketjun. Kun uusi blokki on saatu laskettua valmiiksi jossain, kaikki noodit liittävät sen osaksi ketjua, ja alkavat laskea seuraavia blokkeja tämän blokin perään. Verkko siis tavallaan kilpailee siitä, kuka saa aina ensimmäisenä laskettua seuraavan blokin valmiiksi. Blokkien kokonaismäärällä ei ole mitään rajaa, vaan niitä voi muodostua lisää loputtomiin.
Blokkien vaatimuksiin kuuluu se, että kaikki niiden sisältämät transaktiot ovat valiideja. Koko aiemman transaktioketjun pitää löytyä aiemmista blokeista, ja kaikkien transaktioiden pitää täsmätä. Jos uudessa blokissa on mukana virheellinen transaktio, niin P2P-verkon muut noodit eivät hyväksy sitä, eikä se näin liity osaksi globaalia blokkiketjua. Näin estetään esimerkiksi saman kolikon käyttäminen useaan kertaan.
Transaktion luotettavuus perustuu siihen, kuinka monta blokkia sen blokin perään on tullut, jossa transaktio alun perin esiintyi. Tämä lukumäärä näkyy Bitcoin-sovelluksessa "confirmations"-arvona. Vanhojen blokkien korvaaminen käy laskentateholtaan sitä vaikeammaksi, mitä enemmän ketjuun on ilmestynyt uusia blokkeja niiden perään. Luotettavuus on siis suoraan suhteessa käytettyyn laskentatehoon.
Laskentatyön todistaminen
Koska Bitcoin-verkossa ei ole mitään keskitettyä auktoriteettia tai jaettua salaisuutta, noodit tarvitsevat toisen mekanismin päättääkseen, kehen voi luottaa ja kehen ei. Laskentatyöhön perustuva mekanismi lähtee siitä, että kun tietyn blokin eteen on suoritettu paljon laskutoimituksia, sen oletetaan olevan luotettu. Bitcoin-verkko synnyttää uutta rahaa tällä tavoin.
Laskentatyön todistaminen perustuu sellaisen syötteen löytämiseen, joka tuottaa tiettyä 256-bittistä lukuarvoa (kohdetta) pienemmän SHA-256-hashin. Kun kohde pienenee, käy eksponentiaalisesti yhä vaikeammaksi löytää sitä pienempiä hasheja. Bitcoin-verkko mukautuu laskentatehon kehitykseen ja verkon kasvamiseen siten, että se pienentää (tai tarvittaessa myös kasvattaa) kohdetta ajan mittaan. Tavoitteena on, että verkolta kuluisi yhden uuden blokin löytämiseen keskimäärin 10 minuuttia. Kohdetta tarkistetaan 2016 blokin välein.
"Pahat" noodit voivat yrittää ujuttaa verkkoon sellaisia blokkeja, joiden kohde on ollut liian helppo, eikä blokin löytämiseen ole kulunut riittävästi laskentatehoa. Bitcoin-järjestelmä estää tämän laskemalla blokeille vaikeusarvon, joka on sitä suurempi, mitä vaikeampi kohde oli. Noodit valitsevat aina luotetuksi sen blokkiketjun, jonka kaikkien blokkien yhteenlaskettu vaikeusarvo on suurin. Tästä seuraa se, että eniten laskentatehoa omaavaa verkon osaa pidetään luotettavana.
SHA-256:n satunnaisuus ja Merkle-puut
Eräs Bitcoinin tärkeistä ominaisuuksista on se, että blokkien hashien laskeminen ei ole inkrementaalista vaan satunnaista. Sillä ei ole siis mitään merkitystä, miten paljon työtä jokin noodi on aikaisemmin tehnyt sopivan hashin löytämisen eteen. Joka kerta, kun SHA-256 lasketaan uudelleen, on yhtä suuri todennäköisyys löytää ratkaisu blokkiin.
Toinen tärkeä ominaisuus liittyy siihen, miten blokin sisältämät transaktiot vaikuttavat SHA-256-hashiin. Bitcoin käyttää tässä apuna Merkle-puuta, joka laskee kaikista transaktioista vain yhden yhteisen hashin. Tämä tarkoittaa, että blokin sisältämien transaktioiden määrällä ei ole mitään vaikutusta SHA-256:n laskemisen raskauteen.
Näistä ominaisuuksista seuraa, että jokainen Bitcoin-noodi voi aina ottaa uuden verkkoon ilmestyneen transaktion mukaan laskentaan. Aiemmin tehty työ ei mene "hukkaan" eikä prosessointi muutu yhtään sen raskaammaksi.
Transaktiomaksut ja uudet kolikot
Bitcoin-verkon pyörittäminen vaatii noodeilta paljon laskentatyötä. Siksi siihen on sisäänrakennettu insentiiveiksi uusien kolikoiden "löytäminen" sekä vapaaehtoiset transaktiomaksut.
Uusien kolikoiden löytäminen perustuu siihen, että jokaisessa uudessa Bitcoin-blokissa on ensimmäisenä transaktiona ns. coinbase-transaktio. Tämä transaktio synnyttää uuden kolikon tyhjästä. Ideana on, että se noodi, joka onnistui ratkaisemaan kyseisen blokin SHA-256-hashin, saa tämän uuden kolikon omistukseensa. Kolikon koko on määritelty siten, että se on tällä hetkellä 50 BTC, mutta arvo puoliintuu aina 210,000 blokin jälkeen. Blokkeja on toistaiseksi luotu vasta 125,900 kappaletta.
Coinbase-transaktiot eivät toimi pelkästään insentiivinä vaan myös koko Bitcoin-valuuttajärjestelmän perustana, sillä uutta rahaa syntyy vain niiden kautta. Jokainen uusi blokki tuo siis järjestelmään tietyn määrän uutta rahaa, jota voidaan sitten käyttää transaktioissa kaupankäyntiin.
Blokkien löytymisestä myönnettävien palkkioiden määrä kuitenkin siis puoliintuu säännöllisesti ja päätyy lopulta nollaan. Tämän jälkeen laskentatyön insentiivinä toimivat vapaaehtoiset transaktiomaksut.
Transaktiomaksu on maksutapahtuman luoneen noodin tekemä "tarjous" siitä, että seuraavan blokin ratkaisija saa pitää pienen rahasumman korvauksena tekemästään työstä. Tarjous toimii teknisesti niin, että transaktion syötteenä toimivien kolikoiden summa on hieman suurempi kuin sen ulostulojen, jolloin rahaa jää yli. Tämän ylijäämän saa pitää se, joka sattuu löytämään oikean SHA-256-hashin.
Laskentatyö kannattaa siis priorisoida siten, että parhaimmat tarjoukset tehneet transaktiot käsitellään ensin. Toisaalta Bitcoin-verkosta löytyy käytännössä aina joku vapaaehtoinen, joka käsittelee myös maksuttomia transaktioita. Käsittelyyn saattaa vain kulua paljon kauemmin, kuin tavoitteena oleva 10 minuuttia.
IRC-bootstrap
Eräs virallisen Bitcoin-sovelluksen mielenkiintoisista ominaisuuksista on, että se käyttää IRC:tä apunaan löytääkseen toiset Bitcoin-käyttäjät. Sovellus avaa yhteyden irc.lfnet.org-palvelimeen ja liittyy kanavalle #bitcoin. Sieltä se löytää joukon muita käyttäjiä, jotka ovat liittyneet samalle kanavalle.
Varsinainen kommunikaatio ei kuitenkaan tapahdu IRC:n kautta, vaan yhteistä kanavaa käytetään vain muiden käyttäjien löytämiseen ensimmäisellä kerralla.
Bugit ja ongelmatilanteista toipuminen
Bitcoinin wikistä löytyy luettelo historiallisista selkkauksista. Näistä ilmeisesti pahin on se, jossa joku onnistui luomaan tyhjästä 184 miljardin kolikon.
Tilanne korjattiin paikkaamalla Bitcoin-sovellus siten, ettei se enää hyväksy kyseistä virheellistä transaktiota. Hiljalleen verkko toipui ja pääsi yhteisymmärrykseen siitä, että tuota transaktiota ei koskaan tapahtunut. Foorumin viestien perusteella tämä tapahtui siten, että virheellisen blokin muut transaktiot siirrettiin orvoiksi ja niille laskettiin sitten uudet blokit.
Historian perusteella Bitcoin pystyy siis toipumaan varsin hyvin tilanteista, joissa järjestelmän bugi korjataan ja transaktiot muutuvat jälkeenpäin virheellisiksi. Ongelmaksi jää tietysti se, että bugin löytänyt hyökkääjä ehtii hetken aikaa hyödyntää luomiaan kolikoita, ja saattaa olla ostanut niillä jo jotain.
Bitcoinin tulevaisuus
Bitcoin on perusteiltaan lähes päinvastainen rahajärjestelmä kuin esimerkiksi euro. Tätä aihetta on puitu deflatorista spiraalia käsittelevässä artikkelissa.
Eurojärjestelmän perustanahan toimivat pankkilainat, joiden myötä uutta rahaa virtaa markkinoille. Pankkilainojen kokonaismäärää ei ole rajoitettu, joten uutta rahaa voi syntyä rajattomasti. Tästä seuraa jatkuva inflaatio, joka pyritään pitämään suhteessa reaalitalouden kasvuun keskitetyllä ohjauskorolla. Lainat on kuitenkin aina maksettava pankeille takaisin korkojen kanssa, mistä seuraa länsimaisille rahajärjestelmille tyypillinen nousu- ja laskukausien vaihtelu.
Nousukauden aikanahan lainaa otetaan lisää ja markkinoilla on jatkuvasti uutta rahaa talouden kasvua varten. Mutta jossain vaiheessa ihmiset muuttuvat säästäväisiksi, eli alkavat laittaa rahaa talteen kuluttamisen sijaan, eivätkä ota enää uusia lainoja. Tällöin markkinoilla ei enää kierrä tarpeeksi rahaa kaikkien lainojen takaisinmaksuun, jolloin yrityksiä alkaa mennä konkurssiin ja yksityishenkilöt menettävät omaisuuttaan velkojilleen. Tätä kutsutaan myös lamaksi.
Bitcoinissa raha ei ole jonkun ottamaa velkaa pankille, vaan pysyvää omaisuutta. Järjestelmään ei siis liity samanlaista nousu- ja laskukausien vaihtelua kuin velkaan perustuvassa rahassa. Sen sijaan ongelmaksi muodostuu ajan mittaan se, että Bitcoin-verkon kiinteä rahamäärä ei voi kasvaa Bitcoinin käyttäjämäärän kasvaessa. Bitcoin-valuutta siis deflatoituu (sen arvo kasvaa) sitä mukaa, kun verkkoon tulee lisää käyttäjiä, ja valuutta käy suhteessa yhä harvinaisemmaksi.
Jatkuvan deflaation ongelma on, että se toimii insentiivinä säästää valuuttaa tulevaisuutta varten. Säästäminen puolestaan kiihdyttää deflaatiota entisestään, kun markkinoilla on yhä vähemmän rahaa käytettävissä. Bitcoinille voi siis käydä niin, että että yhden BTC:n arvo kasvaa loputtomasti, eikä kukaan enää halua käyttää niitä. Tästä luultavasti seuraisi lopuksi koko järjestelmän romahtaminen. Ratkaisuksi on ehdotettu mallia, jossa rahan määrä ei olisi kiinteä vaan kasvaisi sitä mukaa, kun uusia transaktioita tehdään. Tulee olemaan mielenkiintoista nähdä, miten Bitcoinin loppujen lopuksi käy.