A bitcoin bányászati algoritmus egy programozótól ' s nézőpontból

Ez az oldal: Blocks szerint a bányászat valójában egy matematikai probléma megoldására szolgál, de a Blokk-hash algoritmus olvasása nem nyújt sok segítséget. Próbáltam én is a bitcoind forráskód olvasása, de a kód olvasása sokkal több időt vesz igénybe, mint a dokumentáció elolvasása 🙂

És írtam egy egyszerű json-rpc klienst, hogy felhívjam a getwork () metódust az “adatok” lekérésére, de mit kell Az “adatok” mellett teszem?

Bárki meg tudná magyarázni a bányászat folyamatát a programozó nézetében?

Megjegyzések

  • but what should I do next to this "data"? Itt ‘ egy rövid referencia megvalósítás. github.com/jgarzik/pyminer/blob/master/pyminer.py
  • Emellett explain the mining process in programmer's view elég tág kérdés. Milyen konkrét problémát próbál megoldani?
  • @NickODell Köszönjük a kódot! Most már értem, hogyan lehet új blokkokat létrehozni. De vajon mindegyik beküldött blokk érvényes-e (a bitcoin hálózat elküldi a bitcint ennek a személynek)? Megtaláltam a Bitcoin wikit, amely szerint óránként csak 6 blokk jön létre. Tegyük fel, hogy 100 ember kapja meg a blokkfejlécet a getwork egyidejű használatával, ugyanolyan nehézségekkel, azt hiszem, sokkal több mint 6 blokkot hoznak létre ezek az emberek. Igazam van?
  • Sorrendben válaszolok: Nem. Nem.
  • a lehetséges másolata nem tudom kitalálni a getwork api

Válasz

A bányászati algoritmus a következő:

  • 0. lépés – Az előző blokk kivonatának lekérése a hálózatból.

  • 1. lépés – Gyűjtse össze a “blokk” néven ismert potenciális tranzakciók listáját. A tranzakciók ezen listája a peer-to-peer bitcoin hálózattól származik.

  • 2. lépés – Számítson ki egy kivonatot a potenciális tranzakciók blokkjára egy véletlenszerű számmal együtt.
  • 3. lépés – Ha a kivonat meghaladja a jelenleg beállított nehézségi szintet, akkor ezt a blokkot bányászta. Ha nem, akkor kezdje el az 1. lépéstől. Az 1. lépésből származó tranzakciók listájának bármilyen kiegészítése, valamint a 2. lépés véletlenszámának változása azt jelenti, hogy valószínű, hogy a következő körben teljesül a kritérium.

A programozó nézőpontjából az álkód így nézhet ki:

 P := The hash of the previously mined block B := A block of transactions H := A hash function D := Difficulty Level 0 Retreive P 1 Construct/Modify B 2 IF H(P, B, Some Random Number) > D END 3 GOTO 1 

Figyelmeztetnem kell, hogy vannak néhány pontatlanság ebben a leírásban, de többnyire ennek elég jónak kell lennie. És itt van még néhány hasznos pontosítás:

Mi a hash?

A hash olyan függvény, amely az adatokat egy bizonyos tartományon belüli számokká alakítja. A hashnak megvan az a tulajdonsága, hogy a kimenetének ismerete lényegében kiszámíthatatlan (az adott tartományon belül). A bitcoin bányászatához használt speciális hash függvény az SHA256, amelyet kétszer alkalmaznak.

Hogyan működik a nehézségi szint?

A hash függvénynek ez a kiszámíthatatlan jellege azt jelenti, hogy véletlenszerű adatok (a tranzakció + a véletlen szám) beírása lényegében véletlenszerű számot eredményez egy bizonyos tartományon belül. A kívánt kimenet tartományának további korlátozása befolyásolja, hogy mennyire valószínű, hogy egyetlen körben megtalálja. Ez lehetővé teszi annak valószínűséges meghatározását, hogy az algoritmus hányszor futtatható a hálózaton. Pontosabban, amikor a “gigahashes” vagy a “terahashes” kifejezést hallja, ez arra utal, hogy hányszor lehet futtatni a 3. lépést. Amint a másodpercenkénti kivonatok száma a teljes hálózatban növekszik, a hálózat automatikusan felveti a nehézséget, így körülbelül 10 percen belül megoldást találnak.

Mi történik, ha blokkot bányásznak?

Ha blokkot bányásznak, a bányász a blokkot elküldi a hálózat összes többi bányászának, annak bizonyítékaként, hogy találtam. Ez a blokk tartalmazza a tranzakciók listáját, a megtalált kivonatot, a konkrét véletlenszámot és hivatkozást az előző kivonatra. Amint minden bányász megkapja az újonnan bányászott blokkot, eltávolítja az összes bányászatban lévő tranzakciót, amely a blokkon belül létezik (mert már megerősítették őket a blokkláncban), és továbbítja a blokkot más bányászoknak, akik ugyanezt csinálják. a terjedés meglehetősen gyorsan megtörténik.

Megjegyzés: A blokk eredeti bányászai “bányászok” díjat kapnak, ami egy jutalom, amely a tranzakciókból származó fel nem használt érmékből áll, az “éremalap” jutalom mellett. Az éremalap jutalma 50 bitcoinnál és felénél kezdődött minden 210 000 blokk után (kb. 4 évente egyszer). Az éremalap jutalma végül olyan kicsi lesz, hogy minimális lesz a bányászok díjaihoz képest.

Megjegyzések

  • A jutalom 210000 blokkonként feleződik. .- > Most láttam ezt, és gondoltam, hogy ügyes: bitcoinclock.com
  • Ó , és a Nehézségi fokot minden 2016-os blokkban kiigazítják azzal a feltételezéssel, hogy a hálózat továbbra is az előző 2016-os blokkok átlagos kivonatolási sebességével fog működni, és az új nehézséget úgy állítja be, hogy ez a hashrát körülbelül 10 perces blokkciklust eredményezzen.
  • Tévedhetek, de úgy gondolom, hogy a blokk tartalmazza az utolsó blokk hashját is. És így blokkolódnak visszafelé a blokkok, ami a blokklánc kifejezéshez vezet.
  • @Murch, a nehézséget minden blokkban igazítják annak alapján, hogy mennyi ideig tartott az előző blokk megtalálása, és ezen a ponton a a nehézség csak felmehet. Minden 2016-os blokkban a nehézség kiigazításra kerül az utolsó 2016-os blokkokhoz képest, és akár felfelé, akár lefelé haladhat. Ez segít megvédeni a számítási teljesítmény hirtelen csökkenésétől, amely egyébként a blokk megtalálásának időtartamát meghaladja a 10 percet.
  • @ Tarandeep-Gill, hogy ‘ s helyes! Az előző blokk kivonatát kivonatolják a tranzakciók listájával együtt. Ez valójában arra késztet, hogy azt gondoljam, hogy a kivonatolásra vonatkozó magyarázatom kissé hiányos – A konkrét hash függvényt nem az SHA256 alkalmazza kétszer a kijelöltnél, hanem a blokk különféle részeire alkalmazott funkció (ideértve a tranzakciókat és az előző blokk hashját is) különböző módon. Ez egyike azoknak a ” pontatlanságoknak “, amelyekre figyelmeztettelek. Kíváncsi vagyok, megtalálja-e a többieket …

Válasz

A “rejtvény” megoldásának célja az, hogy (a) késleltesse a blokk bányászatát átlagosan 10 percre, és (b) a blokk bányászatának valós költségei merüljenek fel (CPU-energia, így energia elköltése). A költségek azért vannak, hogy megakadályozzák a Sybil-támadást (sok bányászgép munkába állása 51% -os támadás végrehajtására).

A késleltetést azért teszik lehetővé, hogy egy jó blokk terjedhessen az egész világon az összes többi bányász számára , anélkül, hogy a bányásznak, aki épp az új blokkot verte, előnyt jelentene. Ehhez a blokkidőnek (10 perc) nagyobbnak kell lennie, mint a terjedési késés (néhány másodperc).

Tehát a puzzle féle je bizonyos értelemben nem releváns, akár óriási Sudoku is lehet.

Válasz

Bármely kivonat érvényes hash. A kérdés az, hogy “megfelel-e a hashnak a kritériumainknak. Ami hash, az valójában egy pár dolog (erre még visszatérünk), amelyek egymásba sorakozva egy karakterláncot alkotnak, amely egy meghatározott hosszúságú karakterlánc. Ezután kivonatolja azt az egész karakterláncot. Gondoljon az eredő hashra, mint számra. Azt akarjuk, hogy az eredő szám kevesebb legyen, mint egy célszám. Tehát olyan, mintha egymilliárd oldalú kockát gördítenénk, és számmal állnánk elő a célszám alatt. Ezt a célszámot “nehézségnek” tekintjük. Mivel egyre többen dobják a kockát, csökkentjük a célszámot, hogy csökkentsük a valószínűségét bármelyik találatot eléri.

Annyira fontos, hogy néhány olyan dolog, amelyet sorba állítunk a hashban, olyan dolgok, amelyeket szabad beállítani. A hashászás nem pontosan olyan, mint a szerszám feltekerése, mert ha ugyanazon dolgunk van újra és újra, ugyanazt az eredményt kapjuk újra és újra. Azonban még egy kisebb kiigazítás is, amely hash-t tartalmaz, nagy hatással lehet az eredő hash-ra. az elsődleges elem, amelyet manipulálhatunk, “nonce” -nek nevezzük. Alapvetően kiválasztunk egy nonce-t, amelyet használunk a karakterláncban, kivonatoljuk az egész karakterláncot, és megnézzük, mit kapunk. Ha a hash nem “beüt, módosítjuk a nonce-t és megpróbáljuk újra . Maga a nonce nem túl nagy, ezért korlátozott számú változata van a nonce-nek, amelyet kipróbálhat. A következő elem, amelyet megváltoztathatunk, egy időbélyeg. Engedélyezhetjük az időbélyeg mozgatását is. Az időbélyeg minden hullámzása lehetővé teszi számunkra, hogy a lehetséges nonce értékek teljes halmazát újból végigvigyenük. Megismételjük a nonce lehetőségek kimerítésének ezt a folyamatát, majd az időbélyeget újra és újra addig görgetjük, amíg a kapott hash alacsonyabb, mint a nehézségi célszám.

Amikor ez megtörténik, akkor hirdetjük a világnak, hogy ez az időbélyeg plusz ez a nonce a blokk megoldására szolgál. Mások igazolják, hogy igaz, és hozzáadódik a blokklánc. Egy blokkot akkor tekintünk “érvényesítettnek”, ha egy bizonyos számú blokk “mélyen” van a blokkláncban, ami azt jelenti, hogy egy történelmi blokk az aktuális blokkhoz képest. Az érvényesítés itt kissé félrevezetés, mert nem arról van szó, hogy a blokk még nem ismert, hogy érvényes. Amit megerősítünk, az a munka bizonyítéka, ami azt jelenti, hogy ha a történelmi blokkot elég mélyen eltemetik, akkor a történelem létrehozásához szükséges erőfeszítések meghaladhatatlanok ahhoz, hogy valaki más megpróbálja létrehozni a történelem egy másik változatát. a blokk saját verziója (az egyetlen ok az, hogy a tranzakciók saját verziójába írják, azazellopni érméket), majd megoldani maguk, majd megoldani a következő blokkot és az utána következőt, és így tovább, és “utolérni” mindenkit. Ez azt jelenti, hogy ki kellene versenyezniük a világot a dobókocka játékban. Talán egyszer az univerzum történetében valakinek szerencséje lehet két vagy három hátsó hátsó blokkkal, de a 120 blokkra, amelyet a legtöbb bányászati medence és csere most megkövetel? Soha nem fog megtörténni.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük