A Bitcoin létrehozása – PoW a gyakorlatban

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.

***

Proof of Work lottózás a hashelés segítségével

Most már tudjuk az alapokat, hogy rátérhessünk a valódi varázslatra a Bitcoin működésében. Beszéltünk róla, hogy az sha-256 esetében a kimenetelek száma 2256 lehet. Ez túl nagy szám, az egyszerűség kedvéért most tegyük fel, hogy mindössze 1000 variáció létezik.

A lottó rendszere az alábbiak szerint működik:

  • Alice kihirdeti, hogy 2 dollár küldene Bob részére.
  • Mindenki nekiáll lottószámokat generálni, az „Alice küld Bobnak 2 dollárt” tartalmú tranzakcióval, és ehhez hozzáadnak egy véletlenszerű számot, amelyet nonce (number using only once, azaz mindössze egyszer használt szám) néven ismerünk. Ez biztosítja, hogy nem használnak két egyforma inputot, így egyszerűbb megtalálni a nyerőszámot. A cél nem az, hogy mindenki ugyanazokat a számokat próbálgassa, hanem, hogy találjanak egy darab megfelelő nyerőszámot.
  • Ha valakinél a nyerőszám kisebb, mint a célszám (ezt már említettük korábban, a következő fejezetben részletesebben is beszélünk róla), akkor megvan a nyertes.
  • Ha a kapott szám nagyobb, mint a nyerőszám, a résztvevők újból próbálkoznak, egy másik nonce értékkel. „Alice küld Bobnak 2 dollárt, nonce = 12345”, aztán „Alice küld Bobnak 2 dollárt, nonce = 67890”, aztán „Alice küld Bobnak 2 dollárt, nonce = 918273645”, és így tovább, egészen addig, míg a kapott szám végre kisebb lesz a célszámnál.

A célszámnál kisebb megoldás megtalálása nagyon-nagyon sokáig tarthat. Az esélyeket pedig azzal tudjuk befolyásolni, hogy mekkora mértékű célszámot állítunk be. Ha a fent említett 1000 lehetséges megoldás létezik, a célszámot pedig 100-ra állítjuk, akkor alapfokú matematikával kiszámolható, hogy a próbálkozások 10%-a lesz sikeres. Ha tehát egy olyan algoritmussal hashelsz, amellyel a lehetséges megoldások száma 1000, akkor 100-as célszámnál minden tizedik próbálkozásod fog sikerülni.

Tehát a lottó tulajdonképpen így működik. Meghatározzuk a célszámot, amelyet mindenki elfogad, ezután fogjuk a függőben lévő tranzakciók listáját, hozzáadjuk a nonce-ot, egy véletlenszerűen kiválasztott számot, és indulhat a hashelés. Amint valaki talál egy olyan hasht, amely értéke kisebb a célszámnál, már ki is hirdeti a résztvevők között:

Helló mindenki!

  • Ezeket a tranzakciókat hasheltem: Alice küld 2 dollárt Bobnak, Charlotte küld 5 dollárt Alicenek.
  • Hozzáadtam a nonce-ot, amely a 32895-ös szám.
  • Az output hash értéke 42 lett, ez kisebb, mint a célszám, hiszen az 100.
  • Proof of Work: a tranzakciók adatai, az általam használt nonce, és a hash, amely ebből az inputból lett.

Lehet, hogy egymilliárdszor kellett próbálkozni, sok ezer dollárnyi áram elhasználásával, mire meglett a megfelelő hash, de mivel megosztom a résztvevőkkel, hogy mit használtam inputként, ők mindössze egyetlen próbálkozással ellenőrizni tudják, hogy tényleg megtaláltam a jó megoldást, meglett a nyertes szám. Ehhez elegendő ugyanezt az inputot használni, az outputot pedig összehasonlítani azzal, amelyet én küldök. Ha a kettő egyezik, az bizonyítja, hogy tényleg elvégeztem a munkát.


Ahogy már írtuk, a hashelés folyamatát fel lehet fogni kockadobálásként, ahol a lehetséges változatok száma annyi, mint ahány atom van az univerzumban. De csak a célszám alatti eredmény nyer, és meg kell mutatnod mindenkinek, hogy hogyan jött ki az a szám.

Hogyan tudjuk biztosítani, hogy ehhez tényleg sok energiára legyen szükség? Újból elmondhatjuk, a lehetséges kimenetelek száma több, mint amennyi atom létezik az ismert univerzumban. Ha elég alacsony célszámot határozunk meg, akkor a hash értékeknek csak egy apró töredéke fog érvényesnek számítani. Így hát bárki, aki érvényes hasht szeretne találni, rengeteg próbálkozásnak néz elébe, rengeteg számítási kapacitást kell elhasználnia, ez pedig rengeteg energiát igényel, mert csak sokára fog a célszámnál alacsonyabb számot találni.

Minél kisebb a célszám, annál több próbálkozást igényel a nyertes hash megtalálása. Ha a célszám nagyobb, akkor pedig értelemszerűen könnyebb dolgunk van. Ha tudni lehet, hogy a célszám alá menni mindössze 1 a millióhoz az esélyünk, a nyertes szám megtalálása egyben azt is bizonyítja, hogy elvégeztük az egymillió próbálkozást, elvégeztük a munkát.

1 thought on “A Bitcoin létrehozása – PoW a gyakorlatban

Comments are closed.