Zie ook: target
Wat is “moeilijkheid”?
Moeilijkheidsgraad is een maatstaf voor hoe moeilijk het is om een hash te vinden onder een gegeven doel.
Het Bitcoin-netwerk heeft een globaal blokprobleem. Geldige blokken moeten een hash hebben onder dit doel. Mijnpools hebben ook een pool-specifieke share-moeilijkheidsgraad die een lagere limiet voor shares instelt.
Hoe vaak verandert de netwerk-moeilijkheidsgraad?
Elke 2016 blokken.
Wat is de formule voor moeilijkheidsgraad?
moeilijkheid = moeilijkheidsgraad_1_target / huidig_target
(doel is een 256-bits getal)
moeilijkheidsgraad_1_target kan verschillend zijn voor verschillende manieren om moeilijkheidsgraad te meten. Traditioneel vertegenwoordigt het een hash waarbij de leidende 32 bits nul zijn en de rest één (dit staat bekend als “pool moeilijkheid” of “pdiff”). Het Bitcoin-protocol vertegenwoordigt doelen als een aangepast type met drijvende komma met beperkte precisie; als resultaat schatten Bitcoin-clients de moeilijkheidsgraad vaak op basis hiervan (dit staat bekend als “bdiff”).
Hoe wordt moeilijkheid opgeslagen in blokken?
Elk blok slaat een ingepakte weergave op ( genaamd “Bits”) voor het werkelijke hexadecimale doel. Het doel kan hieruit worden afgeleid via een vooraf gedefinieerde formule. Als het ingepakte doel in het blok bijvoorbeeld 0x1b0404cb is (opgeslagen in little-endian-volgorde: cb 04 04 1b
), is het hexadecimale doel
0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000
Merk op dat dit ingepakte formaat een tekenbit bevat in de 24ste bit, en bijvoorbeeld de negatie van het bovenstaande doel zou 0x1b8404cb in verpakt formaat zijn. Aangezien doelen in de praktijk echter nooit negatief zijn, betekent dit dat de grootste juridische waarde voor de onderste 24 bits 0x7fffff is. Bovendien is 0x008000 de kleinste legale waarde voor de onderste 24 bits, aangezien doelen altijd worden opgeslagen met de laagst mogelijke exponent.
Hoe wordt de moeilijkheidsgraad berekend? Wat is het verschil tussen bdiff en pdiff?
Het hoogst mogelijke doel (moeilijkheidsgraad 1) wordt gedefinieerd als 0x1d00ffff, wat ons een hexadecimaal doel geeft van
0x00ffff * 2**(8*(0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
Opgemerkt moet worden dat pooled mining vaak niet-afgekapte doelen gebruikt, waardoor “pool moeilijkheid 1” op
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0x1b0404cb is daarom:
0x00000000FFFF0000000000000000000000000000000000000000000000000000 /0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.420938523983 (bdiff)
En:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.669773817162 (pdiff)
Hier is een snelle manier om bereken de moeilijkheidsgraad van bitcoin. Het gebruikt een aangepaste Taylor-reeks voor de logaritme (je kunt tutorials zien over flipcode en wikipedia) en vertrouwt op logboeken om de moeilijkheidsgraad te berekenen:
Om de wiskunde te zien om van de normale moeilijkheid te gaan berekeningen (die grote grote ints vereisen groter dan de spatie in een normaal geheel getal) voor de bovenstaande berekening, hier is een python:
Wat is de huidige moeilijkheid?
Huidige moeilijkheid, als uitvoer door getDifficulty van Bitcoin.
Grafieken
Wat is de stelregel um moeilijkheid?
Er is geen minimum target. De maximale moeilijkheidsgraad is ruwweg: maximum_target / 1 (aangezien 0 zou resulteren in oneindigheid), wat een belachelijk groot aantal is (ongeveer 2 ^ 224).
De werkelijke maximale moeilijkheid is wanneer current_target = 0, maar we zou de moeilijkheid niet kunnen berekenen als dat zou gebeuren. (gelukkig zal dat nooit gebeuren, dus we zijn in orde.)
Kan het netwerkprobleem verminderen?
Ja dat kan. Zie discussie in target.
Wat is de minimale moeilijkheidsgraad?
De minimale moeilijkheidsgraad, wanneer het doel de maximaal toegestane waarde heeft, is 1.
Welke netwerkhash-snelheid resulteert in een bepaalde moeilijkheid?
De moeilijkheidsgraad wordt elke 2016 blokken aangepast op basis van de tijd die nodig was om de vorige 2016 blokken te vinden. Bij het gewenste tempo van één blok per 10 minuten, zou het vinden van 2016 blokken precies twee weken duren om te vinden. Als de vorige 2016 blokken meer dan twee weken nodig hadden om te vinden, wordt de moeilijkheidsgraad verminderd. Als ze minder dan twee weken hebben geduurd, wordt de moeilijkheidsgraad verhoogd. De verandering in moeilijkheidsgraad is evenredig met de hoeveelheid tijd over of minder dan twee weken die de vorige blokken van 2016 nodig hadden om .
Om een blok te vinden, moet de hash kleiner zijn dan het doel. De hash is in feite een willekeurig getal tussen 0 en 2 ** 256-1. De offset voor moeilijkheidsgraad 1 is
0xffff * 2**208
en voor moeilijkheid D is
(0xffff * 2**208)/D
Het verwachte aantal hashes dat we moeten berekenen om een blok met moeilijkheid D te vinden is daarom
D * 2**256 / (0xffff * 2**208)
of gewoon
D * 2**48 / 0xffff
De moeilijkheidsgraad is zo ingesteld dat de voorgaande blokken van 2016 gevonden met een snelheid van één per 10 minuten, dus berekenden we (D * 2 ** 48 / 0xffff) hashes in 600 seconden. Dat betekent dat de hash-snelheid van het netwerk
D * 2**48 / 0xffff / 600
was ten opzichte van de voorgaande blokken van 2016. Kan verder worden vereenvoudigd tot
D * 2**32 / 600
zonder veel verlies aan nauwkeurigheid.
Bij moeilijkheidsgraad 1 is dat ongeveer 7 Mhashes per seconde.
Op het moment van schrijven is de moeilijkheid 22012.4941572, wat betekent dat over de vorige set van 2016 gevonden blokken de gemiddelde netwerkhash-snelheid
22012.4941572 * 2**32 / 600 = around 157 Ghashes per second.
Hoe snel kan ik verwachten een blok te genereren?
(De eeuwige vraag.)
De gemiddelde tijd om een blok te vinden kan worden benaderd door te berekenen:
time = difficulty * 2**32 / hashrate
waarbij moeilijkheid de huidige moeilijkheid is, hashrate is het aantal hashes dat uw miner per seconde berekent, en tijd is het gemiddelde in seconden tussen de blokken die u vindt.
Met Python berekenen we bijvoorbeeld de gemiddelde tijd tot genereer een blok met behulp van een 1Ghash / s mining-rig als de moeilijkheidsgraad 20000 is:
$ python -c "print 20000 * 2**32 / 10**9 / 60 / 60.0"23.85
en ontdek dat het gemiddeld iets minder dan 24 uur duurt.
- Elke keer dat de hasj wordt gemalen, heeft dezelfde kans om te “winnen” als elke andere. Het getallenspel geeft aan hoeveel pogingen uw hardware per seconde kan doen.
- U moet de moeilijkheidsgraad (hierboven) en uw khash / sec-snelheid (gerapporteerd door de klant) kennen.
- Mijnbouw Hardwarevergelijking bevat enkele statistieken die u kunnen helpen te voorspellen wat u zou kunnen krijgen.
- Bezoek een rekenmachine of voer de berekeningen zelf uit,
- http://www.alloscomp.com/bitcoin/calculator.php
- http://www.vnbitcoin.org/bitcoincalculator.php
- https://bitknock.com/calculator
- Onthoud dat het gewoon een kans is! Er zijn geen garanties dat je elke N dagen wint.
Gerelateerde links
- Bitcoin-moeilijkheidsgeschiedenis
- Wat is Bitcoin-mijnbouwproblemen?
- Zie ook: doel