Végtelen mennyiségű bitcoinról álmodott Satoshi?

Bár ma már szinte mindenki tudja, hogy soha nem lehet több bitcoin mint 21 millió (egészen pontosan annál egy picit kevesebb…), de ha valaki rászánja az időt, akkor azt fogja látni, hogy ezen limitáció sehol nem található meg sem a whitepaperben, sem a Satoshi által publikált első bitcoin core kódbázisokban. Ezt a véges számú limitációt (finite monetary supply) csak 2014-ben implementálták, Pieter Wuille BIP-0042-es beterjesztése nyomán.

Persze ez nem jelenti azt, hogy Satoshi tényleg végtelen mennyiségű bitcoint szeretett volna látni, ellenben egy igen vicces teóriával indokolta az eredeti kódot. A kód lényegében azt tartalmazta, hogy – a jelenlegi metódusnak megfelelően – 210.000 blokkonként (4 évente) feleződik a reward, onnantól 32 ciklusig nem feleződik (hiszen 0 satnak a fele is nulla). Ám a második 32-es ciklus után újra indul a ciklus, így 64 ciklussal (tehát 64×4=256 év) a genezis blokk után újra 50 BTC lenne a block reward. Ezen sajátosság abból fakad, hogy a block jutalom felezést Satoshi nem egy fix feltétellel kezelte, hanem egy 64 bites int érték shiftelésével, ami bizony 64 shiftnél túlcsordul a referencia C++ implementáció esetén.

Satoshi ezt a sajátosságot (ami a legvalószínűbb, hogy simán csak egy binary shift bug volt, amit nem gondolt végig eredendően…) azzal indokolta, hogy a Bitcoin tervezésekor a természeti kincsek jellemzőire próbált építeni, ahol pl teljesen logikus, hogy miután kimerült egy komolyabb forrás, akkor az emberek újabb lehetséges források felkutatásába kezdenek. Azaz, ha a végtelenségig kiszipolyoztunk egy aranybányát, akkor jelentős idővel később csak találunk egy újabbat. Ennek megfelelően 1024 évente négy egyenrangú szimbolikus “aranybányát” tártak volna a Bitcoin bányászok.

Tehát ha maradt volna az eredeti kódbázis, akkor mindösszesen már csak ~240 éves kellett volna várnunk arra, hogy újra 50 BTC legyen egy kibányászott block jutalma…

Bookmark the permalink.

8 Comments

  1. Kezdetben volt baj a Satoshi-féle kóddal. Amikor pl. a signed int bugot kihasználva valaki létrehozott pármillió bitcoint. Ez volt a “legkínosabb bug” de mivel szerencsére a közösség akkor még szűk körű volt, Satoshi által közreadott patch-el javították a problémát. Ez is jellemzi a Satoshi-stílust, a fickó zseniális látnok de nem jó programozó. A Bitcoint Gavin Anderson és más Satoshinak dolgozó önkéntes formálta használhatóvá. Tehát igen: szerintem is egy véletlen feature nem szándékos shiftről van szó.
    Mellesleg a kibányászható Bitcoin fogyóban van, és van itt egy tényező is: mint ismert a legnagyobb bányászcég a Bitmain nem csak pool-t üzemeltet de bányászhardevrt is elad. A Bitmainnek fontos hogy pörögjön az üzlet, ehhez az kell hogy a Bitcoin ára tartósan a mainstream bányászköltség felett maradjon. Tehát neki érdekében áll az BTC/BCH árfolyamkarbantartása, hogy el tudja adni az S9-seit. És mivel a Bitcoin limitált, ez talán nem is olyan nehéz dolog.

  2. olvastam a nemrégiben közzétett, állítólasatoshiáltalírt szemelvényt, és abban az volt, hogy eredetileg 100BTC járt volna egy blokkért, de a 42 millió áthallásai miatt inkább lefelezte.
    valaki, aki olvasta még a cumót, egyéb vélemény? 🙂

  3. nem akart vegtelent. ez csak satoshi “tudatlansaganak” tudhato be. az >> operator azt mondja hogy a biteket jobbra kell shiftelni, es az uj belepo bit pedig 0 legyen. joggal gondolta hogy egy 64 bites szamnal 65 bitshifteles az teljesen kiuti az eredeti szamot es egy bazinagy 0 lesz az eredmeny. ezzel szemben a c nyelvben az ilyen shifteles undefined (ertsd: nem rendelkezik rola hogy ilyenkor mit kell csinalni), de az elterjedt c forditok implementacioi “rotacios” shifteles alkalmaznak (pontosabban a proci alkalmaz egy maskolast a szamra), igy az x >> 65 ugyanazt az eredmenyt adja mint az x >> 1. Ezt a “bugot” javitottak az emlitett bipben. (eleg sok ilyen undefined cucc van a c-ben amugy, nem olyan egyszeru programozni benne :D)

    olvasnivalo hozza: https://stackoverflow.com/questions/7401888/why-doesnt-left-bit-shift-for-32-bit-integers-work-as-expected-when-used es https://wiki.sei.cmu.edu/confluence/display/c/INT34-C.+Do+not+shift+an+expression+by+a+negative+number+of+bits+or+by+greater+than+or+equal+to+the+number+of+bits+that+exist+in+the+operand

  4. Ha a cím kérdőjelre végződik, a válasz: Nem 🙂

  5. Bár nem egészen ide tartozik, egy kis érdekesség:
    https://medium.com/@coryfields/http-coryfields-com-cash-48a99b85aad4

  6. Kicsit off: szerintetek érdemes beleinvesztálni EOS-ba? Mert még a poloniex is csinált EOS-USDT párosítást, de így a redditet elnézve, meg párszor felnézve a /biz/re szinte mindenki savazza. És már a lassan 4 dollár alá fog esni.

Szólj hozzá: