Wat lossen bitcoin-mijnwerkers, net als bij mining, echt op? Ik las dat ze hashes aan het oplossen zijn, maar wat betekent dat eigenlijk? Kunnen we zien wat ze oplossen? Kan iemand een voorbeeld geven van wat een bitcoin mining-machine ziet om op te lossen?
Opmerkingen
- Gerelateerd: bitcoin.stackexchange.com/q/148/153
- Oké, maar WELKE gegevens delven we! Niemand lijkt het te weten. Het kan me niet ‘ schelen hoe het werkt. Ik wil weten waar de gegevens vandaan komen van dat bit-mining is decodering of codering.
Answer
Ze proberen een willekeurige nonce (een beetje willekeurige data) te vinden die in een blok gaat en zorgt ervoor dat het blok een (SHA256) hash heeft die (in binair ) begint met een bepaald aantal nullen. Hoe meer nullen, hoe zeldzamer de hash is. De uitkomst van een goede hash is niet voorspelbaar, en daarom moet je een aantal keren proberen om een goede nonce te vinden.
Het aantal nullen is gebaseerd op hoe moeilijk het hoort te zijn om een blok te vinden. In Bitcoin past het zich aan om elke 10 minuten een nieuw blok te hebben (gemiddeld gezien de snelheid waarmee eerdere blokken worden gevonden).
Interessant: omdat de hashes onvoorspelbaar zijn, maakt het niet uit hoe de nonce verandert ! Meestal is het slechts een getal dat omhoog telt vanaf 0!
Antwoord
Hier is een extreem vereenvoudigde schets van het probleem, maar het zou een redelijk goed idee moeten geven van wat het probleem is.
De gegevens:
Dit is de hash van het laatste blok (afgekort tot 30 tekens):
00000000000001adf44c7d69767585
Deze zijn de hashes van een paar geldige transacties die wachten op opname (afgekort).
5572eca4dd4 db7d0c0b845
En dit is de hash van een speciale transactie die je zojuist hebt gemaakt, wat 25BTC oplevert (de huidige beloning) voor jezelf:
916d849af76
Het volgende blok bouwen:
Laten we nu een grove benadering gebruiken van hoe een nieuw blok eruit zou kunnen zien (het echte blok gebruikt een binair formaat). Het bevat de hash van het vorige blok en de hashes van die 3 transacties:
00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--
Laten we nu met de hand minen! Ons doel is om dit te voltooien blok met een nonce (een stuk vuilnis) zodat de hash van het nieuwe blok begint met 13 nullen (gezien de vorige hash lijkt het erop dat 13 nullen de huidige moeilijkheidsgraad zijn!).
Mining (probeert dit blok af te ronden):
Laten we proberen met nonce = 1, en de hash berekenen van het blok (ik gebruik het md5 hash-algoritme, maar Bitcoin gebruikt dubbele sha256):
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--1" | md5sum 8b9b994dcf57f8f90194d82e234b72ac
Geen geluk, de hash begint niet met een 0 … Laten we het proberen met nonce = 2
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--2" | md5sum 5b7ce5bcc07a2822f227fcae7792fd90
Geen geluk…
…
Als we doorgaan tot nonce = 16, we krijgen onze eerste voorloopnul.
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--16" | md5sum 03b80c7a34b060b33dd8fbbece79cee3
Voor nonce = 208 krijgen we twee voorloopnullen!
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--208" | md5sum 0055e55df5758517c9bed0981b52ce4a
Ga zo verder … Als je eindelijk een hash vindt met 13 voorloopnullen … je bent een winnaar! Andere miners zullen nu op je blok bouwen, je “hebt zojuist 25BTC.
Maar je” moet snel zijn!
Terug naar stap 1 …
Als iemand erin slaagt een blok te bouwen voordat jij dat doet, moet je opnieuw beginnen vanaf het begin met het nieuwe blok “s hash (die van de winnaar).
Reacties
- Ook gaat je voorbeeld conceptueel de goede kant op, maar het echte succes is wanneer de sha256-hash van de header kleiner is dan het doel. Voorbeelddoel:
00000000000001ae00000000000000
is groter dan00000000000001adf44c7d69767585
< – dit zou een geldige hash zijn . - @Reonarudo, niet precies, dit is een erg vereenvoudigde schets van wat er werkelijk wordt gedaan. Transacties worden gedaan met scripts die vaak van adressen gemaakt zijn, meer info vind je op de Bitcoin wiki.
- Dit klinkt in principe als een mooie (vereenvoudigde) samenvatting, maar op welk punt accepteert het bitcoin netwerk dit als het volgende geldige blok, en wat gebeurt er in het (onwaarschijnlijke) geval dat twee verschillende mijnwerkers er bijna gelijktijdig in slaagden een geldig blok in te dienen?
- Wauw, geweldig antwoord! Er zijn ‘ een paar dingen die ik nog steeds niet ‘ kon begrijpen: laat ‘ s zeggen dat je ‘ al 6 minuten naar een oplossing zoekt en dat er een nieuwe transactie komt. 1) wat gebeurt er nu? als ik opnieuw moet beginnen, klinkt dat alsof iedereen opnieuw moet beginnen. Hoe kan blockchain dan garanderen dat een blok in ~ 10 minuten wordt gevonden? 2) Hoe komt die transactie eigenlijk bij mij terecht?3) Wat als ik een oplossing vind voor dit blok en dan komt er een nieuwe transactie naar me toe van een ander knooppunt dat het accepteerde voor het blok dat ik zojuist heb gesloten?
- 1) Ja, iedereen begint opnieuw, als je bouwt bovenop een oud blok is er een kleine kans dat ‘ je blokken deel uitmaken van de langere keten en dat ze door de rest van het netwerk genegeerd worden. Er is geen garantie dat een blok binnen 10 minuten wordt gevonden, het is ‘ slechts een gemiddeld statistisch resultaat. 2) Welke transactie? Blokken worden uitgezonden door degene die ze heeft gedolven en doorgestuurd door andere knooppunten. 3) Niets dwingt u om alle lopende transacties op te nemen, maar hoe meer transacties u opneemt, hoe meer kosten u kunt innen.
Antwoord
Het volgende is een beschrijving van de globale, statistische gok die elke 10 minuten wordt gespeeld. Het interval van het spel wordt bepaald door de moeilijkheidsgraad die aangeeft hoeveel “hashes” nodig zijn per interval.
Met andere woorden, de difficulty
en target
bepalen de “odds of the house” tegen uw kans om een winnende SHA-hash. Het nonce
is het “krasveld”.
Elke hasj verbruikt elektriciteit en geeft warmte af, wat extra koeling vereist.
Dit wordt gedaan met elke hash:
Stap 1
Op een hoog niveau neemt de mijnwerkersoftware een lijst met actieve transacties en groepeert ze vervolgens in iets dat een “blok” wordt genoemd.
Of beter gezegd: De mijnwerkersoftware bedekt alle transacties in een samenvattingsweergave genaamd “merkle root”, en hasht deze, die representatief is voor de transacties.
Stap 2
Dan converteert mijnsoftware dit naar een binair formaat dat een Block Header , die ook verwijst naar de vorige blokken (ook wel een ketting genoemd).
Field Purpose Updated when... Size (Bytes) Version Block version number You upgrade the software and 4 it specifies a new version hashPrevBlock 256-bit hash of the previous A new block comes in 32 block header hashMerkleRoot 256-bit hash based on all A transaction is accepted 32 the transactions in the block Time Current timestamp as seconds Every few seconds 4 since 1970-01-01T00:00 UTC Bits Current target in compact format The difficulty is adjusted 4 Nonce 32-bit number (starts at 0) A hash is tried (increments) 4
Stap 3:
De hardware van de mijnwerker verandert een klein deel van dit blok, een “nonce” genaamd .
Stap 4:
De blokheader is gehasht en vergeleken met het doel alsof het gewoon een groot aantal is, zoals 10.000.000> 7.000.000 (de reële getallen zijn veel groter, en in hex). Het doel wordt gecomprimeerd en opgeslagen in elk blok in een veld dat bits heet.
Een uitgebreid doel ziet er als volgt uit:
Target 0000000000000083ef00000000000000000000000000000000000000000000000
En de Het doel is om ervoor te zorgen dat de SHA256-hash van het blok kleiner is dan deze waarde. In het onderstaande voorbeeld is “83ee
” kleiner dan “83ef
”
Om dit concept te vereenvoudigen, kunt u het doel door de voorloopnullen te tellen (zoals het andere antwoord hier uitlegt). Hier is een voorbeeld:
Hier is een voorbeeldblok met transacties die u kunt bekijken op BlockChain.info. Kijk in de rechterbovenhoek van de webpagina voor deze hash:
Hash 0000000000000083ee9371ddff055eed7f02348e4eda36c741a2fc62c85bc5cf
Die vorige hash was van vandaag en heeft 14 voorloopnullen. Laten we dat vergelijken met wat drie jaar geleden nodig was met blok 100 met 8 voorloopnullen.
Hash 00000000a8ed5e960dccdf309f2ee2132badcc9247755c32a4b7081422d51899
Samenvatting
Dus aan het eind van de dag doet alles wat een miner doet is:
- Neem een block header als invoer
- Verander de Nonce
- Test of de Block Header hash is kleiner dan het doelwit. Als dit het geval is, wint u.
- Ga naar stap 2 (of ga naar stap 1 als iemand anders het blok heeft gewonnen)
Wil je zien wat Bitcoin-QT doet als het een blok vindt? … Ik heb het hier gepost. . De informatie in dit bericht zal helpen u te begrijpen wat er is gebeurd.
Opmerkingen
- Is niet ‘ t de nonce (32 bits) ver te klein om een hash te kunnen vinden die moet beginnen met 14 voorloopnullen (14×4 = 56 bits)? Het vinden van zon hash zou gemiddeld 2 ^ 56/2 pogingen vereisen en met een 32 bit nee Er zijn slechts 2 ^ 32 pogingen mogelijk voordat alle mogelijke nonce-waarden zijn uitgeput. Bewerken: met de tijd die elke seconde verandert, denk ik dat dit alleen van toepassing is als de hash-snelheid hoger is dan 4 GH / sec (wat ik denk van wel …)
- Ja, jij ‘ re right, … van de URL in de Block-header:
Whenever Nonce overflows (which it does frequently), the extraNonce portion of the generation transaction is incremented, which changes the Merkle root.
Antwoord
Mijnbouw biedt een manier om consensus te bereiken over hoe het transactiegrootboek eruit moet zien en weet dat niemand vals speelt.
Dat is de niet-technische definitie van mijnbouw .
De “autoriteit” voor dubbele uitgaven is de blockchain. De blockchain bestaat uit de geschiedenis van alle blokken in de blockchain plus het volgende blok met transacties. De beloningssubsidie bedraagt momenteel 25 BTC voor de partij die het volgende blok indient. Maar goed … je zou die 25 BTC (momenteel ongeveer $ 825 waard) willen, net als ik en iedereen. Dus hoe zorg je ervoor dat ik “niet vals kan spelen en de blokkering zelf kan claimen?
Nou, je zet een systeem in dat jij en ik moeten concurreren. Dat is wat het bewijs van werk doet – het maakt het zo dat wanneer ik de beloning claim, het gemakkelijk is om te bewijzen dat ik het werk echt heb gedaan. Dus om een kans van 2% te hebben om een blok op te lossen, moet ik 2% van het mijnwerk inleggen. Er is geen manier voor mij om minder dan 2% van al het werk te doen en toch minstens 2% van de tijd (gemiddeld) blokken op te lossen.
Als gevolg hiervan, wanneer een transactieblokkering wordt ingediend, verifiëren alle peers of er geen dubbele uitgaven waren, dat het juiste bedrag aan subsidie werd geclaimd en dat de indiener echt het werk heeft uitgegeven dat nodig is voor die oplossing. Met die drie regels hoeft er geen een centrale autoriteit die het proces beheert of de uitkomst kan controleren.