Bitcoin minealgoritmen fra en programmør ' s synspunkt

Denne side: Blocks sagde, at minedrift faktisk er for at løse et matematisk problem, men at læse Block hashing-algoritme giver ikke meget hjælp. Jeg prøvede også læsning af bitcoind-kildekode, men læsning af kode tager meget mere tid end at læse dokumentation 🙂

Og jeg har skrevet en simpel json-rpc-klient for at kalde getwork () -metoden for at hente “data”, men hvad skal Jeg gør ved siden af disse “data”?

Enhver kunne forklare mineprocessen i programmørens visning?

Kommentarer

  • but what should I do next to this "data"? Her ‘ er en kort referenceimplementering. github.com/jgarzik/pyminer/blob/master/pyminer.py
  • Også explain the mining process in programmer's view er et ret bredt spørgsmål. Hvilket specifikt problem prøver du at løse?
  • @NickODell Tak for din kode! Nu forstår jeg, hvordan man opretter nye blokke. Men er hver indsendt blok gyldig (bitcoin-netværk vil sende bitcoin til denne person)? Jeg fandt Bitcoin wiki sagde, at der kun oprettes 6 blokke hver time. Antag, at 100 mennesker får blokoverskriften ved at bruge getwork på samme tid med samme vanskelighed, jeg tror, at meget mere end 6 blokke vil blive oprettet af disse mennesker. Har jeg ret?
  • Svar i rækkefølge: Nej. Nej.
  • mulig duplikat af Jeg kan ikke regne getwork-api

Svar

Minedriftsalgoritmen er som følger:

  • Trin 0 – Hent hash fra den forrige blok fra netværket.

  • Trin 1 – Saml en liste over potentielle transaktioner kendt som en “blok”. Denne liste over transaktioner kommer fra peer-to-peer bitcoin-netværket.

  • Trin 2 – Beregn en hash for en blok af potentielle transaktioner sammen med et tilfældigt tal.
  • Trin 3 – Hvis hashen er mere end det aktuelt indstillede vanskelighedsniveau, har du mineret den blok. Hvis ikke, start forfra fra trin 1. Enhver tilføjelse til listen over transaktioner fra trin 1 sammen med ændring i det tilfældige tal fra trin 2 betyder, at der er en chance for, at kriteriet vil blive opfyldt i næste omgang.

Fra en programmørs visning kan pseudokoden muligvis se sådan ud:

 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 

Jeg skal advare dig om, at der er et par unøjagtigheder i beskrivelsen, men for det meste skal det være godt nok. Og her er et par flere nyttige afklaringer:

Hvad “sa hash?

En hash er en funktion, der konverterer data til et tal inden for et bestemt interval. Hashet har den egenskab, at det at vide, at det er output, i det væsentlige er uforudsigeligt (inden for det givne interval). Den specifikke hash-funktion, der bruges til bitcoin-minedrift, anvendes SHA256 to gange.

Hvordan fungerer sværhedsgraden?

Denne uforudsigelige karakter af hash-funktionen betyder, at indsættelse af tilfældige data (transaktionen + det tilfældige tal) i det væsentlige vil producere et tilfældigt tal inden for et bestemt interval. Yderligere begrænsning af rækkevidden for det ønskede output påvirker, hvor sandsynligt det er, at man finder det i en enkelt runde. Dette skaber en måde til sandsynligt at bestemme, hvor ofte en løsning findes baseret på antallet af gange, algoritmen kan køres på netværket. Specifikt, når du hører udtrykket “gigahashes” eller “terahashes”, refererer dette til det antal gange, trin 3 kan køres. Da antallet af hashes pr. Sekund på tværs af hele netværket vokser, øger netværket automatisk vanskeligheden, således at der findes en løsning inden for ca. 10 minutter.

Hvad sker der, når en blok udvindes?

Når en blok udvindes, sender minearbejderen blokken til alle andre minearbejdere på netværket som bevis for, at den har fundet det. Denne blok indeholder en liste over transaktioner, den fundne hash, det specifikke tilfældige tal og en henvisning til den forrige hash. Da hver minearbejder modtager den nyminerede blok, fjerner den alle transaktioner, som den i øjeblikket udvinder, der findes inden for blokken (fordi de allerede er blevet bekræftet i blokkæden) og sender blokken til andre minearbejdere, der gør det samme. udbredelse sker ret hurtigt.

Bemærk: den oprindelige minearbejder i blokken får et “minearbejdsgebyr”, hvilket er en belønning bestående af eventuelle uudnyttede mønter fra transaktioner ud over en “coinbase” -belønning. Coinbase-belønningen startede med 50 bitcoins og halveres efter hver 210.000 blokke (ca. en gang hvert 4. år). Coinbase-belønningen bliver til sidst så lille, at den bliver minimal i forhold til minearbejdernes gebyrer.

Kommentarer

  • Belønningen halveres hver 210000 blok .- > Så det lige nu og synes det er pænt: bitcoinclock.com
  • Åh , og vanskeligheden justeres hver 2016-blok ved at antage, at netværket fortsætter med at fungere med den gennemsnitlige hash-hastighed for de sidste 2016-blokke og indstille den nye vanskelighed således, at denne hashrate vil resultere i en cirka 10 minutters blokcyklus.
  • Jeg kunne tage fejl, men jeg tror, at blokken også indeholder hash fra den sidste blok. Og det er sådan, blokke lænkes bagud, hvilket fører til udtrykket blockchain.
  • @Murch, vanskeligheden justeres faktisk hver blok baseret på hvor lang tid det tog at finde den forrige blok, og på dette tidspunkt, vanskeligheder kan kun gå op. Hver 2016-blokering justeres vanskeligheden i forhold til de sidste 2016-blokke, og den kan gå enten op eller ned. Dette hjælper med at beskytte mod pludselige fald i computerkraft, hvilket ellers ville resultere i tiden til at finde en blok, der stiger til mere end 10 minutter.
  • @ Tarandeep-Gill, at ‘ er korrekt! Hashet fra den foregående blok hashades sammen med listen over transaktioner. Dette får mig faktisk til at tænke, at min forklaring på hashing er lidt ufuldstændig – Den specifikke hash-funktion anvendes ikke SHA256 to gange som anført, men snarere den funktion, der anvendes på forskellige dele af blokken (inklusive transaktioner og hash fra den forrige blok) på forskellige måder. Dette er en af de ” unøjagtigheder ” Jeg advarede dig om. Jeg spekulerer på, om du kan finde de andre …

Svar

Formålet med at løse et “puslespil” er at (a) udskyde minedrift af blokken til gennemsnitlige 10 minutter og (b) at pådrage sig reelle omkostninger til minedrift af en blok (bruge cpu-energi, dermed energi). Omkostningerne er der for at forhindre et Sybil-angreb (at sætte mange minearbejdningsmaskiner på arbejde for at udføre et 51% -angreb).

Forsinkelsen sættes ind for at tillade en god blokering at sprede sig over hele kloden til alle andre minearbejdere uden at give minearbejderen, der netop har præget den nye blok, en fordel for fordelen. Til det skal blokeringstiden (10 minutter) være i størrelsesorden større end udbredelsesforsinkelsen (et par sekunder).

slags puslespil er på en måde irrelevant, det kan lige så godt være en kæmpe Sudoku.

Svar

Enhver hash er en gyldig hash. Spørgsmålet er, om du ”hash opfylder vores kriterier. Det, du hash, er faktisk et par ting (vi kommer tilbage til dette), der sammen stilles op til en streng, der er en streng af en bestemt længde. Du hash derefter hele strengen. Tænk på din resulterende hash som et tal. Hvad vi ønsker er, at det resulterende antal skal være mindre end et målnummer. Så det er som at rulle en milliard sidet matrice og komme op med et tal under målnummeret. Dette målnummer betragtes som “vanskeligheder”. Da flere mennesker ruller matricen, sænker vi, hvad dette målnummer er for at reducere sandsynligheden en hvilken som helst die-roll vil ramme.

Så vigtigt er det, at nogle af de ting, som vi stiller op i strengen, som vi har, er ting, som vi har lov til at justere. Hashing er ikke nøjagtigt som at rulle matricen, for hvis vi har den samme ting igen og igen, får vi det samme resultat igen og igen. Men selv en mindre justering af hvad vi hash kan have stor indflydelse på, hvad den resulterende hash er. primært element, som vi kan manipulere kaldes “nonce”. Dybest set vælger vi en nonce, der skal bruges i strengen, hash hele strengen og ser hvad vi får. Hvis hash ikke er en hit, ændrer vi nonce og prøver igen . Selve nonce er ikke meget stor, så der er et begrænset antal variationer af nonce, som du kan prøve. Det næste element, vi kan ændre, er et tidsstempel. Vi har også lov til at vrikke tidsstemplet. Hver vridning af tidsstemplet giver os mulighed for at gennemgå hele sættet af mulige nonce-værdier igen. Vi gentager denne proces for at udtømme nonce-mulighederne og derefter vrikke tidsstemplet igen og igen, indtil den resulterende hash er lavere end sværhedsmålnummeret.

Når det sker, proklamerer vi derefter over for verden, at dette tidsstempel plus denne nonce fungerer for at løse blokken. Andre validerer det for at være sandt, og det føjes til blok kæde. En blok betragtes som “valideret”, når den er et bestemt antal blokke “dybt” i blokkæden, hvilket betyder at den er en historisk blok sammenlignet med den aktuelle blok. Validering er lidt misvisende her, fordi det ikke er, at blokken ikke allerede vides at være gyldig. Det, vi validerer, er beviset for arbejde, hvilket betyder, at når den historiske blok er begravet nok, er den krævede indsats for at skabe denne historie uoverstigelig for en anden at forsøge at skabe en anden variation af historien. De bliver nødt til at skabe deres egen version af denne blok (den eneste grund er at skrive i deres egen version af transaktionerne, dvs.stjæle mønter) så løser det selv, løser derefter den næste blok og den efter og så videre og “indhenter” alle andre. Dette betyder, at de bliver nødt til at køre verden rundt i terningen. Måske en gang i universets historie kan nogen få held på nonce med to eller tre blokke ryg mod ryg, men med de 120 blokke, som de fleste minepuljer og udvekslinger kræver nu? Kommer aldrig til at ske.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *