Algoritmul de extragere a bitcoinului dintr-un punct de vedere al programatorului '

Această pagină: Blocks a spus că mineritul este de fapt pentru a rezolva o problemă matematică, dar citirea Algoritmul de blocare nu oferă prea mult ajutor. De asemenea, am încercat citirea codului sursă bitcoind, dar citirea codului necesită mult mai mult timp decât citirea documentației 🙂

Și am scris un simplu client json-rpc pentru a apela metoda getwork () pentru a prelua „datele”, dar ce ar trebui Fac lângă aceste „date”?

Oricine ar putea explica procesul de exploatare în vizualizarea programatorului?

Comentarii

  • but what should I do next to this "data"? Aici ‘ o scurtă implementare de referință. github.com/jgarzik/pyminer/blob/master/pyminer.py
  • De asemenea, explain the mining process in programmer's view este o întrebare destul de largă. Ce problemă specifică încercați să rezolvați?
  • @NickODell Vă mulțumim pentru cod! Acum înțeleg cum să creez blocuri noi. Dar este fiecare bloc trimis valid (rețeaua bitcoin va trimite bitcoin acestei persoane)? Am găsit Bitcoin wiki spunând că vor fi create doar 6 blocuri în fiecare oră, Să presupunem că 100 de persoane primesc antetul blocului folosind getwork în același timp cu aceeași dificultate, cred că vor fi create mai mult de 6 blocuri de către acești oameni. Am dreptate?
  • Răspuns în ordine: nu. Nu.
  • posibil duplicat al Nu reușesc să calculez api-ul getwork

Răspuns

Algoritmul minier este următorul:

  • Pasul 0 – Preluarea hash-ului blocului anterior din rețea.

  • Pasul 1 – Adunați o listă de tranzacții potențiale cunoscute sub numele de „bloc”. Această listă de tranzacții provine din rețeaua bitcoin peer-to-peer.

  • Pasul 2 – Calculați un hash pentru un bloc de tranzacții potențiale împreună cu un număr aleatoriu.
  • Pasul 3 – Dacă hash-ul este mai mare decât nivelul de dificultate stabilit în prezent, atunci ați extras blocul respectiv. În caz contrar, începeți din nou de la Pasul 1. Orice adăugiri la lista de tranzacții de la pasul 1, împreună cu modificarea numărului aleatoriu de la Pasul 2 înseamnă că există „șansa ca criteriul să fie îndeplinit în următoarea parcurgere.

Din punctul de vedere al programatorului, pseudo-codul ar putea arăta cam așa:

 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 

Ar trebui să vă avertizez că există câteva inexactități în descrierea respectivă, dar, în cea mai mare parte, aceasta ar trebui să fie suficient de bună. Și iată câteva clarificări utile:

Ce „sa hash?

Un hash este o funcție care convertește datele într-un număr dintr-un anumit interval. Hash are proprietatea că cunoașterea ieșirii sale este în esență imprevizibilă (în intervalul dat). Funcția hash specifică utilizată pentru extragerea bitcoin este SHA256 aplicată de două ori.

Cum funcționează nivelul de dificultate?

Această natură imprevizibilă a funcției hash înseamnă că introducerea datelor aleatorii (tranzacția + numărul aleator) va produce în esență un număr aleatoriu într-un anumit interval. Restricționarea în continuare a gamei de ieșire dorită afectează cât de probabil este să o găsiți într-o singură rundă. Aceasta creează o modalitate de a determina probabilistic cât de des va fi găsită o soluție pe baza numărului de ori în care algoritmul poate fi rulat în rețea. Mai exact, când auziți termenul „gigahashes” sau „terahashes”, acesta se referă la numărul de ocazii cu care poate fi rulat pasul 3. Pe măsură ce numărul de hashuri pe secundă crește în întreaga rețea, rețeaua ridică automat dificultatea, astfel încât o soluție va fi găsită în aproximativ 10 minute.

Ce se întâmplă atunci când un bloc este exploatat?

Când un bloc este exploatat, minerul trimite blocul către toți ceilalți mineri din rețea ca dovadă că are l-am gasit. Acest bloc conține o listă de tranzacții, hash-ul găsit, numărul aleatoriu specific și o referință la hash-ul anterior. Deoarece fiecare miner primește blocul nou exploatat, acesta elimină toate tranzacțiile pe care le exploatează în prezent, care există în cadrul blocului (deoarece acestea au fost deja confirmate în lanțul de blocuri) și transmite blocul altor mineri care fac același lucru. propagarea are loc destul de repede.

Notă: minerul inițial al blocului primește o taxă „pentru mineri”, care este o recompensă constând din orice monede neutilizate din tranzacții, în plus față de o recompensă „coinbase”. Recompensa bazată pe monede a început la 50 de bitcoin și jumătăți după fiecare 210.000 de blocuri (aproximativ o dată la 4 ani). Recompensa bazată pe monede va deveni în cele din urmă atât de mică încât va fi minusculă în comparație cu taxele minerilor.

Comentarii

  • Recompensa este înjumătățită la fiecare 210000 blocuri .- > Tocmai am văzut asta acum și cred că este îngrijit: bitcoinclock.com
  • Oh , iar dificultatea este ajustată la fiecare blocuri 2016 presupunând că rețeaua va continua să funcționeze cu rata medie de hash a blocurilor menționate în 2016 și setând noua dificultate astfel încât acest hashrate să conducă la un ciclu de blocare de aproximativ 10 minute.
  • M-aș putea înșela, dar cred că blocul conține și hash-ul din ultimul bloc. Și acesta este modul în care blocurile sunt înlănțuite înapoi, ducând la termenul blockchain.
  • @Murch, dificultatea este de fapt ajustată la fiecare bloc în funcție de cât a durat până la găsirea blocului anterior și, în acest moment, dificultatea poate crește doar. La fiecare blocuri 2016, dificultatea este ajustată în raport cu ultimele blocuri 2016 și poate merge fie în sus, fie în jos. Acest lucru ajută la protejarea împotriva scăderilor bruște ale puterii de calcul, care altfel ar duce la timpul pentru a găsi un bloc crescând la mai mult de 10 minute.
  • @ Tarandeep-Gill, care ‘ e corect! Hash-ul blocului anterior este hash împreună cu lista tranzacțiilor. Acest lucru mă face să cred că explicația mea despre hash este puțin incompletă – Funcția de hash specifică nu este SHA256 aplicată de două ori așa cum sa menționat, ci mai degrabă acea funcție aplicată diferitelor părți ale blocului (inclusiv tranzacții și hash-ul blocului anterior) în diverse feluri. Aceasta este una dintre acele ” inexactități ” despre care v-am avertizat. Mă întreb dacă îi poți găsi pe ceilalți …

Răspunde

Scopul rezolvării unui „puzzle” este de a (a) întârzia exploatarea blocului la o medie de 10 minute și (b) de a suporta costuri reale pentru exploatarea unui bloc (cheltuirea energiei CPU, deci energie). Costurile sunt pentru a preveni un atac Sybil (punerea la lucru a mai multor mașini miner pentru a face un atac de 51%).

Întârzierea este pusă pentru a permite propagarea unui bloc bun pe tot globul către toți ceilalți mineri. , fără a oferi minerului care tocmai a inventat noul bloc un avantaj. Pentru aceasta, timpul de blocare (10 minute) trebuie să fie de ordinul mărimilor mai mare decât întârzierea de propagare (câteva secunde).

Deci, genul de puzzle este într-un anumit sens irelevant, ar putea fi la fel de bun ca un Sudoku gigant.

Răspuns

Orice hash este un hash valid. Întrebarea este dacă „sunteți hash îndeplinește criteriile noastre. Ceea ce aveți hash este de fapt câteva lucruri (vom reveni la asta) care aliniate împreună fac un șir care este un șir de o lungime specifică. Apoi hash întregul șir. Gândiți-vă la hash-ul rezultat ca la un număr. Ceea ce ne dorim este ca numărul rezultat să fie mai mic decât un număr țintă. Deci, este ca și cum ar fi să arunci un miliard de matrițe și să creezi un număr sub numărul țintă. Numărul țintă respectiv este considerat „dificultate”. Pe măsură ce mai mulți oameni aruncă matrița, reducem numărul respectiv pentru a reduce probabilitatea. oricare dintre lansări va atinge.

Atât de important, unele dintre acele lucruri pe care le aliniam în șirul pe care îl hashim sunt lucruri pe care ni se permite să le ajustăm. Hashing-ul nu este exact ca aruncarea matriței, deoarece dacă avem același lucru din nou și din nou, obținem același rezultat din nou și din nou. Cu toate acestea, chiar și o ajustare minoră a ceea ce am hash poate avea un impact major asupra a ceea ce este hash-ul rezultat. elementul principal pe care îl putem manipula se numește „nonce”. Practic alegem un nonce pentru a-l folosi în șir, hash întregul șir și vedem ce obținem. Dacă hash nu este apăsat, modificăm nonce și încercăm din nou . Nonce-ul în sine nu este „foarte mare, deci există un număr limitat de variații ale nonce-ului pe care le puteți încerca. Următorul element pe care îl putem modifica este un timestamp. Ni se permite să ștergem și marca de timp. Fiecare mișcare a mărcii de timp ne permite să parcurgem din nou întregul set de posibile valori de nonce. Repetăm acest proces de epuizare a posibilităților de nonce, apoi ne mișcăm de mai multe ori până când apare hash-ul rezultat. este mai mic decât numărul țintă de dificultate.

Când se întâmplă acest lucru, atunci proclamăm lumii că acest timestamp plus această nonce funcționează pentru a rezolva blocul. Alții îl validează ca fiind adevărat și este adăugat la lanț de bloc. Un bloc este considerat „validat” odată ce „are un anumit număr de blocuri„ adânc ”în lanțul de blocuri, ceea ce înseamnă că este un bloc istoric în comparație cu blocul actual. Validarea este puțin denumită aici, deoarece nu este faptul că blocul nu este deja cunoscut ca fiind valid. Ceea ce „validăm” este dovada muncii, adică odată ce blocul istoric este îngropat suficient de mult, efortul implicat pentru a crea acea istorie este insurmontabil pentru ca altcineva să încerce să creeze o variație diferită a istoriei. Ei ar trebui să creeze propria lor versiune a acelui bloc (singurul motiv fiind acela de a scrie în propria versiune a tranzacțiilor, adicăfura monede) apoi rezolvați-le singuri, apoi rezolvați următorul bloc și cel de după și așa mai departe și „ajungeți din urmă” cu toți ceilalți. Acest lucru înseamnă că ar trebui să depășească întreaga lume în jocul de lansare a zarurilor. Poate că odată în istoria universului cineva ar putea avea noroc pe nonce cu două sau trei blocuri în spate, dar cu cele 120 de blocuri pe care le necesită acum majoritatea bazinelor și schimburilor miniere? Nu se va întâmpla niciodată.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *