A Bitcoin létrehozása – Árva blokkok

Az alábbi cikk egy fejezet Yan Pritzker – A Bitcoin létrehozása című könyvének magyar fordításából. A tartalomjegyzéket és az ingyen letölthető változatot ide kattintva éred el.

***

Amikor két blokk összeér

Van még valami a konszenzus esetén, amelyet figyelembe kell vennünk: hogyan tudjuk biztosítani, hogy mindenkinél ugyanaz a lineáris tranzakciós történet legyen meg, ha két bányász egyszerre, ugyanabban az időpillanatban tud blokkot létrehozni, és ezeket elküldeni a hálózat többi résztvevőjének?

Egy világméretű hálózatról beszélünk. Az Egyesült Államokban ugyanúgy vannak bányászok, mint Kelet-Ázsiában, és mindenki ugyanazt a Proof of Work lottót játsza, egyszerre.

Valaki Chicagoban blokkot talál, azaz a kapott hash értéke a célszám alá esik. Kihirdeti a hálózaton, és a többi résztvevő Amerika-szerte elkezdi bemásolni a saját főkönyvébe.

Pár másodperc különbséggel viszont Sanghajban is blokkot talál egy bányász. A fizikailag, földrajzilag hozzá közelebb lévő csomópontok még nem értesültek az amerikai blokkról, így ők először a kínai blokkot vezetik fel a saját nyilvántartásukba.

Mindkét blokkban szerepel, hogy Alice 1 dollárt küld Bobnak. Bob viszont ahogy megkapja a pénzt, azonnal tovább is küldi Charlie számára. Az időzítési különbségek miatt az újabb amerikai blokk ezt a tranzakciót is előbb hallja, és feljegyzi, hogy Bob végső egyenlege 0 dollár. Kínába viszont még nem érkezett meg ez az információ, így anélkül jön létre a blokk, hogy tartalmazná Bob költését, így a kínai változatban Bob még mindig 1 dollárral rendelkezik.

A hálózat így megosztottá válik, hogy melyik főkönyv a helyes, valódi példány. A probléma az, hogy mindkét blokk érvényes, hiszen mindkettő érvényes tranzakciókat tartalmaz, és mindkettő az előző blokkok tranzakciós történetének a megfelelő folytatása. Mindkettőhöz bizonyíthatóan el lett használva a megfelelő mennyiségű energia a Proof of Work során. Ezt lánc-elágazódásnak hívják, a blokklánc kettéválik, két egyformán érvényesnek tűnő lánccá, de nincsen központi szereplő, aki megmondaná, hogy melyik az érvényes. Mit lehet ilyenkor tenni?

A Bitcoin megoldása egyszerű. Dőljünk hátra, és várjunk. A bányászok szabadon eldönthetik, hogy melyik blokkot fogadják el érvényesnek, melyikkel folytatják tovább a láncot. Az amerikaiak az általuk hallott blokkot folytatják, a kínaiak pedig az ő blokkjukat veszik alapul.

A következő, nagyjából 10 perces intervallumban létrejön az újabb blokk. A Bitcoin kódjában meg van határozva, hogy elágazódás esetén az a lánc nyer, az lesz érvényesnek tekintve, amely több energiát használt el a Proof of Work során. Ez egy nagyon fontos szabály a Bitcoin működésében, a rendszer összesíti, hogy mennyi munka lett belefektetve a lánc továbbvitelébe, és a nagyobb értékűt választja érvényesnek. Ezt a szabályt Satoshi tiszteletére a számítástechnika-tudományokban Nakamoto-konszenzusnak nevezik.

Mondjuk, hogy a kínaiak előbb bányásszák ki a következő blokkot. Így az ő láncuk most egy blokk előnnyel rendelkezik az amerikai lánchoz képest, és több munkát is végeztek, több a Proof of Work értéke. Mikor ezt az új blokkot kihirdetik a hálózaton, az amerikai csomópontok felismerik, hogy a kínai csomópontok által futtatott lánc értékesebb, több energiát, több munkát fektettek bele, így újraszervezik a saját láncukat. Ez azt jelenti, hogy az ő legfrissebb blokkjukat lecserélik a kínaiak által bányászott két új blokkra.


Az elágazódás természetes folyamat, akkor következik be, ha két bányász egyszerre talál blokkot. Az a lánc lesz az érvényes, amely több befektetett munkát tartalmaz, a másik nem folytatódik, úgymond árva lesz.

Az amerikai blokk most már árva blokknak számít. Mivel a hálózat elutasítja, a bányász nem kapja meg érte a blokkjutalmat, a belefoglalt tranzakciókat pedig nem jegyzik fel a főkönyvbe. Ezek a tranzakciók természetesen nem vesznek el. Néhány amúgy is benne van a másik, a kínai blokkban, és amelyik nem, az is belekerül valamelyik következőbe.

A bányászok minden tranzakciót az úgynevezett mempool-ban tárolnak addig, amíg blokkba nem kerülnek. Az elutasított blokkokból ide kerülnek vissza a tranzakciók. Amennyiben érvényes tranzakciók, és nem kerülnek összetűzésbe a rendszer eddigi nyilvántartásával, úgy egy későbbi blokkba kerülnek bele.

Ebben a példában amerikai és kínai blokkról, csomópontokról beszélünk, mivel fizikailag elég messze vannak egymástól, hogy számítson az a pár másodperces különbség az adatátvitelben. A valóságban azonban a csomópontok semmit sem tudnak egymás személyazonosságáról, vagy a földrajzi helyzetükről. Az egyetlen információ, amelyre szükségük van, az a Proof of Work során elhasznált energia bizonyítása, hogy kiderüljön, melyik lánc értékesebb, és az, hogy a blokkba foglalandó tranzakciók érvényesek, nem számítanak például dupla költésnek.

Ezek a fajta lánc-elágazódások normálisak, és időről időre megtörténnek a Bitcoin hálózatán. Szinte kivétel nélkül megoldódnak a következő blokk létrejöttekor. Az internet-hálózati kapcsolatok sebességének a növekedése, és a blokkok terjedésének a javulása egyre ritkábbá teszik majd ezt a fajta problémát. Ma, és valószínűleg a belátható közeljövőben is a Bitcoin továbbra is szigorúan meghatározza, hogy mennyi adatot lehet beletenni egy blokkba. Ennek, és a 10 perces blokkidőnek is köszönhető, hogy az árva blokkok elég ritkának számítanak, hiszen kevés adatot kell megosztani a többi résztvevővel, és elég hosszú idő áll ehhez rendelkezésre.

A bányászat a véletlenen alapul. Néha pontosan 10 perc telik el a blokkok között, de néha előfordul, hogy csak néhány másodperc. Ha másodpercenként hozzuk létre az új blokkokat, vagy túl sok adatot zsúfolunk bele, nagy a valószínűsége, hogy az amerikai és a kínai csomópontok össze fognak ütközni. Földrajzilag messze vannak egymástól, és hosszabb ideig tart az adatátvitel. Ha az árva blokkok túl gyakoriak, a blokklánc széteshet. Árva blokkok következhetnek árva blokkok után, a csomópontok pedig nem tudják kiválasztani, hogy melyik az érvényes, mert közben már érkezik is a következő.

Nagyon fontos, hogy a blokkok viszonylag kicsik maradjanak, hogy a hálózat összes résztvevője megkapja a friss adatokat még a következő blokk létrehozása előtt. Egy másik, szintén fontos oka is van a kis blokkok használatának. A csomópontok futtatásához szükséges hardveres követelmények így alacsonyak maradhatnak, ezzel ösztönözni lehet a további csomópontok, bányászok részvételét a decentralizált hálózat fenntartásában. A nagy blokkok arra ösztönöznék a bányászokat, hogy adatközpontokba telepítsék a tevékenységeiket, sokszor ugyanabba a földrajzi régióba „összeköltözve”, így megakadályozva a nyereségességet csökkentő árva blokkok előfordulását.