A Bitcoin létrehozása – A bányászati nehézség

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.

***

A kibocsátás és a bányászat kontrollja

A bányászat számítógépeket és elektromosságot igényel, és minél több áll a rendelkezésedre ezekből, annál jobb esélyekkel indulsz a nyertes lottószám megtalálására. Például, ha van 100 egyforma teljesítményű számítógép a hálózaton, és ebből 10 a tiéd, átlagosan az idő 10%-ában a tiéd lesz a nyertes szám. Mindenesetre a bányászat az esélyek és a véletlen összjátékán alapul, így lehetséges, hogy órákig, vagy akár napokig nem találsz új blokkot.

Az előző fejezetből már tudjuk, hogy a bányászok nem írhatnak jóvá maguknak csak úgy egy kis plusz jutalmat, mert ha megteszik, a többi résztvevő elutasítja a blokkjukat. De mi történik akkor, ha hajlandóak és képesek hatalmas mennyiségű plusz energia felhasználására, és ezzel felgyorsítják a blokkok generálását, egy csomó bitcoinhoz jutva, és egyben felborítva a kibocsátási ütemtervben meghatározott rátát?

Térjünk vissza a már használt példánkhoz, és mondjuk, hogy a hashelés során 1000 lehetséges output jöhet létre, a célszámot pedig 100-ra állítjuk. Ez alapján elmondhatjuk, hogy a próbálkozások 10%-a lesz kisebb a célszámnál, és ennyi esetben tudunk blokkot generálni.

Mondjuk, hogy minden egyes hash létrehozása 1 másodpercet vesz igénybe. Ha minden másodpercben megtesszük ezt, és a nyerő találatra 10% az esélyünk, akkor átlagosan 10 másodpercenként fogunk új blokkot találni.

De mi történik, ha nem egy, hanem kettő számítógép teszi ugyanezt? Kétszer olyan gyorsan tudják a hashelést csinálni, így nagyjából 5 másodpercenként jönne új blokk. Ha pedig 10 számítógépet használunk, akkor minden egyes másodpercben lesz egy nyerő találat.

Ez pedig baj: ha több ember bányászik, túl gyorsan jönnek létre az új blokkok. Ennek két következménye is lehet, és mi egyiket sem szeretnénk:

  • Nem lehet tartani az előre meghatározott kibocsátási ütemet. Azt akarjuk, hogy nagyjából ugyanannyi bitcoin jöjjön létre óránként, hogy a teljes készlet 2140-re kerüljön forgalomba, ne pedig előbb.
  • Problémát okozhat a hálózaton belül is, hiszen ha túl gyorsan jönnek egymás után a blokkok, akkor lesznek számítógépek, amelyekhez nem jut el időben a legfrissebb blokk, mielőtt legenerálnák a következőt. Így nem lehet konszenzusra jutni, hogy lineárisan hogyan fest a főkönyv aktuális helyzete, ráadásul több bányász is blokkba foglalhatná ugyanazokat a tranzakciókat. Így a blokkok érvénytelenné válnak, mert a többiek azt látnák, hogy több blokkban is ugyanaz a bitcoin kerülne elköltésre.

Ha pedig túl kevés ember bányászik, az pont az ellentétes problémákhoz vezet:

  • Túl lassan kerülnek forgalomba az új coinok, szintén felborítva a kibocsátási ütemtervet.
  • Használhatatlanná válna a rendszer, hiszen órákat, napokat, vagy még hosszabb időt kellene várakozással tölteni a felhasználóknak, hogy a tranzakciókat blokkba foglalják a bányászok.

A hálózaton résztvevő összes számítógép másodpercenkénti hashelési kapacitását hashrátának nevezzük.


A blokkok közötti időtartam attól függően változik, hogy a hashráta növekszik vagy csökken, de persze a véletlen is szerepet játszik benne.

Nehézségi igazítás: határozzuk meg közösen a célszámot

A Bitcoin hálózatához bárki bármikor önkéntesen csatlakozhat, nincs főnök, aki irányítana, így természetesen a hashráta is nagy válozatosságot mutat. Ki kellett találni valamit, hogy meghatározott ütemben jöjjenek a blokkok egymás után, ne gyorsuljon fel a kibocsátás, ha egy új bányász csatlakozik, és ne lassuljon, ha valaki kilép a rendszerből.

Hogyan tudjuk biztosítani, hogy nehezebb legyen megtalálni a nyerőszámot, ha sokan csatlakoznak újonnan, és könnyebbé váljon, ha sok a kilépő? Ahogyan már szóba került, a bitcoin bányászata nem más, mint egyfajta lottózás, ahol meg kell találnuk a nyerőszámot, amelynek kisebbnek kell lennie a célszámnál:


Egy ilyen kicsi célterületre kell eljutnunk. A lehetséges kimenetelek száma elképesztően hatalmas, így nagyon sokáig tart, mire a megfelelő értéket dobjuk a kockával.

A Bitcoin ezt a problémát az úgynevezett nehézségi igazítással oldja meg. Mindenki ugyanazt a programot futtatja, amely ugyanazokat a szabályokat várja el mindenkitől, és mindenkinek megvan az összes eddigi blokkot tartalmazó főkönyv másolata, mindenki ki tudja számolni, hogy milyen gyorsan jönnek egymás után a blokkok.

Minden alkalommal, amikor létrehoztunk 2016 új blokkot, ez nagyjából két hét[1] alatt megvan, megnézzük, hogy mennyi ideig tartott eljutni idáig, és ez alapján megváltoztatjuk a célszámunkat, hogy gyorsítsunk vagy lassítsunk a blokkok létrehozásán.

Mindenki megnézi, hogy ezt a 2016 blokkot átlagosan mennyi idő alatt sikerült létrehozni. 10 percnél sűrűbben jönnek a blokkok? Akkor túl gyorsak vagyunk. 10 percnél ritkábban? Akkor viszont túl lassúak.

Ez alapján módosítani tudjuk a célszámot, így az alacsonyabb vagy magasabb lesz, attól függően, hogy a kódban meghatározott 10 perces blokkidőhöz gyorsítanunk vagy lassítanunk kell.

Meg tudjuk növelni a célszámot, így több nyerő lehetőséget biztosítunk a bányászok számára, ezzel együtt csökkentjük a felhasználandó energia mennyiségét. Ezt úgy nevezzük, hogy a nehézség csökkentése.


Ha megnöveljük a tartományt, amelyet el kell találniuk a bányászoknak, akkor kevesebb próbálkozással is meglesz a nyerőszám, olcsóbb lesz a blokk generálása.

Ugyanígy csökkenteni is tudunk a célszámon, szűkíteni az érvényes hashek arányát, így a bányászoknak több energiát kell a nyertes szám megtalálására fordítani. Ekkor azt mondjuk, hogy növekszik a nehézség.

Ez alapján elmondhatjuk, hogy minden egyes 2016 blokkot tartalmazó intervallumban pontosan ismerjük a célszám értékét. Pontosan tudjuk, hogy melyik az a mágikus határ, amely a nyertes lottószámot jelenti, amelyet el kell érnünk a Proof of Work hashelése során minden egyes blokk létrehozásához.

A nehézségi igazítás, és a célszám meghatározása valószínűleg a Bitcoin innovációjának a legfontosabb eleme. Ez teszi lehetővé, hogy mindenki, másoktól függetlenül ellenőrizni tudja a nyertes lottószámot a másoktól függetlenül, de pontosan ugyanolyan módon kiszámolt célszám ismeretében. Emiatt tudunk részt venni a lottózásban anélkül, hogy bárkinek el kellene mondania nekünk a nyertes számokat.

Az alábbiakban láthatsz egy grafikont, a vonal a hashráta értékét mutatja, az oszlopok pedig a nehézséget. A nehézség nem véletlen néz ki lépcsősornak, ez azért van, mert a rendszer lépésenként, minden 2016 blokk után tudja növelni az értékét. Láthatod, hogy minden esetben, amikor a hashráta nagyot növekedett, nem sokkal utána a nehézség is emelkedett, hogy lépést tudjon tartani a hashrátával. Amikor a hashráta viszont esik, mint ahogyan például 2018 októbere és decembere között láthattuk, a nehézség szintén fokozatosan csökken.

Hashráta és nehézség

A nehézség így 2016 blokk „lemaradással” követi a hashrátát. Emiatt viszont lehetséges, hogy ezen a 2016 blokkos perióduson belül nagy kilengés történjen a hashrátában, felfelé, vagy lefelé. Ezzel gyorsítani vagy lassítani lehet a bitcoin kibocsátási ütemét, kismértékben megsértve a kibocsátási ráta szabályait.

A hashráta növekedése viszont a legtöbbször azt jelenti, hogy nagy mennyiségű új bányászhardvert állított csatasorba valaki, ez pedig elég ritka, így a nagy kiugrások is elég ritkák, és nincs is túlságosan nagy hatásuk az összképre. Minden egyes kilengés csak abban a 2016 blokkos időintervallumban tud hatást kifejteni, amelyikben megjelenik, hiszen az utána következő nehézségi igazítás máris megváltoztatja a célszámot, alkalmazkodva az új körülményekhez, a megváltozott hashrátához. Így vissza is térünk az átlagosan 10 percenként létrejövő blokkokhoz.


[1] A 2016-os blokk-intervallum azért lett kiválasztva, mert így oldható meg a nagyjából 10 perces blokkidő. 2016 blokk, átlagosan 10 percenként az két hetet jelent. A 10 perces blokkidőre azért van szükség, mert ez elég hosszú ahhoz, hogy a csomópontok többsége szinkronizálni tudja a legfrissebb adatokat, a legújabb blokkot. A két hét pedig azért fontos, mert ezzel megelőzhető, hogy valaki a hashráta hirtelen, jelentős mértékű megváltoztatásával ki tudja játszani a rendszert.