Algoritmus těžby bitcoinů z pohledu programátora ' s

Tato stránka: Bloky uvedly, že těžba má ve skutečnosti vyřešit matematický problém, ale čtení Algoritmu hash bloku mi moc nepomůže. Zkoušel jsem také čtení zdrojového kódu bitcoindu, ale čtení kódu trvá mnohem déle než čtení dokumentace 🙂

A napsal jsem jednoduchého klienta json-rpc, který zavolá metodu getwork () k načtení „dat“, ale co by mělo Dělám vedle těchto „dat“?

Kdokoli by mohl vysvětlit proces těžby v pohledu programátora?

Komentáře

  • but what should I do next to this "data"? Zde ‚ je krátká referenční implementace. github.com/jgarzik/pyminer/blob/master/pyminer.py
  • Také explain the mining process in programmer's view je docela široká otázka. Jaký konkrétní problém se snažíte vyřešit?
  • @NickODell Děkujeme za váš kód! Nyní chápu, jak vytvářet nové bloky. Je ale každý odeslaný blok platný (bitcoinová síť posílá bitcoiny této osobě)? Našel jsem bitcoinovou wiki, která řekla, že každou hodinu bude vytvořeno pouze 6 bloků. Předpokládejme, že 100 lidí získá záhlaví bloku pomocí getwork současně se stejnými obtížemi, myslím, že tito lidé vytvoří mnohem více než 6 bloků. Mám pravdu?
  • Odpovídám v pořadí: Ne. Ne.
  • Možný duplikát Nejsem schopen zjistit API sítě

Odpověď

Algoritmus těžby je následující:

  • Krok 0 – Načtěte hash předchozího bloku ze sítě.

  • Krok 1 – Shromážděte seznam potenciálních transakcí známých jako „blok“. Tento seznam transakcí pochází ze sítě bitcoinů typu peer-to-peer.

  • Krok 2 – Vypočítejte hash pro blok potenciálních transakcí spolu s náhodným číslem.
  • Krok 3 – Pokud je hash vyšší než aktuálně nastavená úroveň obtížnosti, pak jste tento blok vytěžili. Pokud ne, začněte znovu od kroku 1. Jakékoli přidání do seznamu transakcí z kroku 1 spolu se změnou náhodného čísla z kroku 2 znamená, že existuje šance, že bude kritérium splněno v příštím kroku.

Z pohledu programátora může pseudokód vypadat asi takto:

 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 

Chtěl bych vás varovat, že existují pár nepřesností v tomto popisu, ale z větší části by to mělo být dost dobré. A zde je několik užitečných vysvětlení:

Co je to hash?

Hash je funkce, která převádí data na číslo v určitém rozsahu. Hash má vlastnost, že jeho znalost je v zásadě nepředvídatelná (v daném rozsahu). Specifická hashovací funkce používaná pro těžbu bitcoinů je SHA256 použita dvakrát.

Jak funguje úroveň obtížnosti?

Tato nepředvídatelná povaha hash funkce znamená, že vložení náhodných dat (transakce + náhodné číslo) v podstatě vytvoří náhodné číslo v určitém rozsahu. Další omezení rozsahu požadovaného výstupu má vliv na to, jak je pravděpodobné, že ho najdete v jednom kole. Tím se vytvoří způsob, jak pravděpodobnostně určit, jak často bude řešení nalezeno na základě počtu spuštění algoritmu v síti. Konkrétně, když uslyšíte výraz „gigahashes“ nebo „terahashes“, znamená to, kolikrát lze spustit krok 3. Jak počet hashů za sekundu v celé síti roste, síť automaticky zvyšuje obtížnost tak, že řešení bude nalezeno přibližně za 10 minut.

Co se stane, když je blok těžen?

Když je blok těžen, miner ho pošle všem ostatním těžařům v síti jako důkaz, že má blok našel jsem to. Tento blok obsahuje seznam transakcí, nalezený hash, konkrétní náhodné číslo a odkaz na předchozí hash. Jakmile každý horník obdrží nově těžený blok, odstraní všechny transakce, které aktuálně těží, které v bloku existují (protože již byly v blokovém řetězci potvrzeny) a vysílá blok dalším těžařům, kteří dělají totéž. propagace proběhne docela rychle.

Poznámka: původní horník bloku dostane „poplatek pro horníky“, což je odměna skládající se z jakýchkoli nevyčerpaných mincí z transakcí kromě odměny „coinbase“. Odměna coinbase začala na 50 bitcoinech a na polovinách po každých 210 000 blocích (přibližně jednou za 4 roky). Odměna coinbase bude nakonec tak malá, že bude nepatrná ve srovnání s poplatky horníků.

Komentáře

  • Odměna se sníží na polovinu každých 210000 bloků .- > Právě jsem to viděl a myslel si, že je to úhledné: bitcoinclock.com
  • a Obtížnost se upravuje každých 2016 bloků za předpokladu, že síť bude i nadále fungovat s průměrnou hashovací rychlostí zmíněných posledních 2016 bloků a nastavením nové obtížnosti tak, aby tato hashrate vedla k přibližně 10minutovému blokovému cyklu.
  • Mohl jsem se mýlit, ale věřím, že blok obsahuje také hash z posledního bloku. A tak jsou bloky zřetězeny dozadu, což vede k výrazu blockchain.
  • @Murch, obtížnost se ve skutečnosti upravuje každý blok podle toho, jak dlouho trvalo najít předchozí blok a v tomto okamžiku obtížnost může jít jen nahoru. Každý blok 2016 se obtížnost upravuje s ohledem na poslední bloky 2016 a může jít nahoru nebo dolů. To pomáhá chránit před náhlými poklesy výpočetního výkonu, které by jinak vedly k tomu, že se čas na nalezení bloku zvýší na více než 10 minut.
  • @ Tarandeep-Gill, že ‚ s správné! Hodnota hash předchozího bloku je hašována spolu se seznamem transakcí. To mě vlastně přimělo myslet si, že moje vysvětlení hashování je trochu neúplné – konkrétní hashovací funkce není SHA256 použita dvakrát, jak je uvedeno, ale spíše tato funkce aplikovaná na různé části bloku (včetně transakcí a hash předchozího bloku) v různých cestách. Toto je jedna z těch “ nepřesností “ na které jsem vás varoval. Zajímalo by mě, jestli najdete ostatní …

Odpovědět

Účel řešení „hádanky“ je (a) odložit těžbu bloku na průměrných 10 minut a (b) vynaložit skutečné náklady na těžbu bloku (vynaložení energie CPU, tedy energie). Náklady jsou tam, aby se zabránilo útoku Sybil (uvedení mnoha hornických strojů do práce, aby provedly 51% útok).

Zpoždění je zavedeno, aby se dobrý blok mohl šířit po celém světě všem ostatním těžařům , aniž by horníkovi, který právě vyrazil nový blok, poskytl náskok. K tomu musí být doba blokování (10 minut) řádově větší než zpoždění šíření (několik sekund).

Takže druh puzzle je v jistém smyslu irelevantní, mohlo by to být také obří sudoku.

Odpověď

Jakýkoli hash je platný hash. Otázkou je, zda „hash splňuje naše kritéria. To, co máte hash, je ve skutečnosti pár věcí (k tomu se vrátíme), které společně seřadí a vytvoří řetězec, který je řetězcem konkrétní délky. Celý tento řetězec pak hashujete. Představte si svůj výsledný hash jako číslo. Chceme, aby výsledné číslo bylo menší než cílové číslo. Takže je to jako hodit kostkou s miliardou stran a přijít s číslem pod cílovým číslem. Toto cílové číslo je považováno za „obtížnost“. Protože více lidí válí kostkou, snižujeme to, čím je toto cílové číslo, aby se snížila pravděpodobnost zasáhne kterýkoli die-roll.

Je tedy důležité, že některé z věcí, které seřadíme v řetězci, který máme hash, jsou věci, které můžeme upravovat. Hashing není úplně jako válcování kostkou, protože pokud máme stále stejnou věc, získáváme stále stejný výsledek. Avšak i malá úprava toho, co máme hash, může mít zásadní dopad na to, co výsledný hash je. primární položka, se kterou můžeme manipulovat, se nazývá „nonce“. V zásadě vybereme nonce, který se má použít v řetězci, hashuje celý řetězec a uvidí, co dostaneme. Pokud hash není zasažen, upravíme nonce a zkusíme to znovu . Samotná nonce není příliš velká, takže existuje omezený počet variant nonce, které můžete vyzkoušet. Další položkou, kterou můžeme změnit, je časové razítko. Je nám také dovoleno kroutit časové razítko. Každé kroutí časové razítko nám umožňuje celou sadu možných hodnot nonce znovu a znovu. Opakujeme tento proces vyčerpání možností nonce a pak kroutí časovou značku znovu a znovu, dokud výsledný hash je nižší než cílové číslo obtížnosti.

Když k tomu dojde, potom prohlásíme světu, že tento časový údaj plus tato nonce funguje k vyřešení bloku. Ostatní jej ověřují jako pravdivý a je přidán do kladkostroj. Blok je považován za „ověřený“, jakmile se jedná o určitý počet bloků „hluboko“ v řetězci bloku, což znamená, že jde o historický blok ve srovnání se současným blokem. Ověření je zde trochu nesprávné pojmenování, protože není známo, že blok již není platný. To, co „znovu potvrzujeme“, je důkaz práce, což znamená, že jakmile bude historický blok pohřben dostatečně daleko, bude úsilí vynaložené na vytvoření této historie nepřekonatelné, aby se někdo jiný pokusil vytvořit jinou variaci historie. Museli by vytvořit jejich vlastní verzi tohoto bloku (jediným důvodem je psát ve vlastní verzi transakcí, tjukrást coiny) pak to vyřešit sami, pak vyřešit další blok a ten další a tak dále a „dohnat“ všechny ostatní. To znamená, že by museli závodit se světem v kostkové hře. Možná, že jednou v historii vesmíru bude mít někdo štěstí na nonce se dvěma nebo třemi bloky zády k sobě, ale se 120 bloky, které nyní většina těžebních fondů a výměn vyžaduje? Nikdy se to nestane.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *