Mining Difficulty

Hallo zusammen,

ich habe eine Frage zur Mining Difficulty: Wie wird diese berechnet und in welcher Einheit wird diese dann angegeben?

Grüße
Fabian

Es gibt einen Zielwert. Der Hash des Blocks gilt dann als gültig, wenn er kleiner oder gleich dieses Zielwerts (Diffcultiy Target) ist.
Je kleiner dieses Target ist, desto schwieriger ist es demnach einen Hash zu finden, der kleiner ist. Daraus folgt, dass die Difficutly höher ist, je kleiner das Target.

Wenn du dich für genaue Zusammenhänge des Minings interessierst, kannst du das hier nachlesen:
http://rosenbaum.se/book/lang/de_DE/build/grokking-bitcoin.html#ch07

Ab Kapitel 7.5 geht es um die Difficultyanpassung, aber du solltest auch 7.0-7.4 lesen, für das bessere Verständnis =)

2 „Gefällt mir“

Hallo Renna,

vielen Dank für deine Antwort. Ich verstehe was die Mining Difficulty aussagt. Auf dieseser Seite z.B. wird die Mining Difficulty mit aktuell 21.886 T angegeben. Heißt für mich, dass die Mining Difficulty gerade bei 21 Terrahashes pro Sekunde steht (Ist das korrekt?). Die Hashrate aber ist bei 150 Exahashes pro Sekunde was eine viel größere Zahl ist. Dann müsste man ja alle paar Sekunden einen neuen Block finden wenn die Hashrate so viel höher ist wie die Mining Difficulty. Oder habe ich einen Denkfehler?

https://www.blockchain.com/charts/difficulty

Grüße
Fabian

In dem von @renna verlinkten Buch steht das z.B. im Kapitel 7.3.3. Deshalb seine Empfehlung, für das Verständnis auch die vorherigen Abschnitte zu lesen.

Die Difficulty hat keine Einheit, da sie den Faktor angibt, um den die aktuellen Blöcke schwieriger zu finden sind als der allererste Block. Dieser Genesis Block hatte dementsprechend die Difficulty 1.
Genauer gesagt entspricht Difficulty 1 der Schwierigkeit, das im Bitcoin Code maximal erlaubte Target zu untertreffen, welches zu Beginn der Chain auch aktuell war. Der Genesis Block selbst hat dieses Target weit untertroffen, hat also sogar mehr führende Nullen als notwendig. Die folgenden Blöcke lagen aber dann nur knapper unter dem Target (siehe weiter unten im Thread).

Wenn du heute in dem von dir verlinkten Diagramm eine Difficulty von „22t“ siehst (= 22 Tera = 2,2e+13), dann bedeutet das, dass die aktuelle Wahrscheinlichkeit mit einem Hash einen gültigen Block zu finden um den Faktor 2,2e+13 kleiner ist als damals bei den ersten Blöcken.

Die Difficulty exakt in ein Target umzurechnen ist gar nicht so trivial, da die entsprechende 256 Bit Zahl in unterschiedlichen Formaten angegeben werden kann, und es zwischen den Angaben kleine Rundungsunterschiede gibt.

Je nachdem, welche Formatierung du verwendest, entspricht Difficulty 1 einem der beiden folgenden Targets, als maximal erlaubter Obergrenze für den Blockhash:

  • 0x00000000FFFF0000000000000000000000000000000000000000000000000000
  • 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

(die beiden Werte unterscheiden sich nur um weniger als 0,01 %)

Der aktuelle Bitcoin Block hat z.B. folgenden Hash:

  • 0x00000000000000000003a225e68c276c12d65709d3b3d5c15abccd9f6d6a4bb3

bei einer Difficulty = 21865558044610.

Diese Difficulty entspricht dem Faktor vom Genesis-Target zum jetzigen Target. In der Binärdarstellung würdest du also erwarten, dass das Target, also die Hashobergrenze, ungefähr log2(Difficulty) = ca. 44 führende Nullen mehr hat als der Genesisblock. In hexadezimaler Darstellung entspricht das 11 führenden Nullen mehr.

Wenn du den Hash des aktuellen Blocks mit den ersten Blöcken nach dem Genesis-Block vergleichst, siehst du, dass es tatsächlich 11 führende Nullen mehr sind.

Beim Genesis-Block war die Wahrscheinlichkeit mit einem Hash einen Block zu finden
ca. 1 / 4,3e+09 (= 1 / 16^8, entsprechend 8 führenden hexadezimalen Nullen). Mit der aktuellen Difficulty beträgt diese Wahrscheinlichkeit ca. 1 / 4,3e+09 / 21865558044610 = 1e-23 pro Hash.

Die aktuelle Hashrate beträgt nach deiner verlinkten Seite ca. 166m TH/s = 1,66e+20 H/s. Das entspricht damit einer Erfolgswahrscheinlichkeit von 1,66e+20 H/s * 1e-23 1/H = 0,00166 pro Sekunde.

Der Erwartungswert der Zeit bis zum nächsten Block ist also ca. 1/0,00166 s = 602 s = ca. 10 min.

Das passt übrigens nur zufällig gerade so genau und kommt auch von meinen ganzen Rundungen.

5 „Gefällt mir“

Danke sehr, genau danach habe ich echt lang gesucht.

Ich studiere alles gerade penibel und suchte etwas länger nach der Einheit von der Difficulty (T).
Jetzt weis ich, das es keine Einheit ist, sondern ein Faktor.

Grüße Retrocoiner

1 „Gefällt mir“

Also wenn ich beim Block Null richtig gezählt habe, dann sind das 10 führende Nullen.

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

1 „Gefällt mir“

Da hast du natürlich recht, ich habe mich unsauber ausgedrückt. Ich werde das oben etwas umschreiben.

Richtig ist aber, dass der Genesis Block die Difficulty 1 hatte, und dass Difficulty 1 per Definition dem maximal erlaubten Target 0x00000000FFFF entspricht, also 8 führenden Nullen.

Zu Beginn des Netzwerks war die Mining Power, d.h. die Hashrate noch relativ gering. Und zwar so gering, dass die mittlere Hashrate eigentlich sogar zu einer Absenkung der Diffculty bzw. einer Erhöhung des Targets geführt hätte, die aber durch Begrenzung im Code nicht erlaubt ist.
Deshalb lag die Difficulty im kompletten ersten Jahr 2009 bei 1. Erst am 30.12.2009 wurde das erste Mal durch ein Difficulty Adjustment das Target minimal abgesenkt, so dass die Difficulty mit 1,18 minimal größer als 1 wurde.

Im Genesis Block (Block 0) selbst wurde das gültige Target tatsächlich stark unterboten (10 führende Nullen). Allerdings wurde dieser Block ja schon vor Beginn des Netzwerks erzeugt. Satoshi hatte also ausreichend Zeit um einen „schönen“ ersten Block zu finden, oder einfach nur Glück. :slightly_smiling_face:

Block 1 und fast alle weiteren Blöcke in 2009 hatten dann aber eben die erwähnten 8 führenden Nullen. Statistisch gibt es natürlich immer wieder mal auch Blöcke, die das Target weit unterbieten.

Zum Thema:
Difficulty - Bitcoin Wiki
Satoshi auf bitcointalk.org zur ersten Erhöhung 2009
Maximales Target im Bitcoin Source Code

3 „Gefällt mir“

Hi Skyrmoin,

kannst du mir Laien das bitte etwas ausführlicher erklären.

Im Mempool sehe ich nämlich, dass aktuell der Hash 19 führende Nullen hat und vor 100.000 Blöcken hatten wir bereits 19 führende Nullen wobei sich seitdem die Hashrate ca. verdoppelt hat. Verstehe ich es richtig, dass die Darstellung im Mempool eine andere ist?
Wie kann ich das berechnen bzw. wo kann ich sehen wie viele führenden Nullen der Hast nun wirklich hatte? 19? 44? oder noch mehr?

Hallo hier im Forum!

Die Difficulty kann sich noch feiner verändern als nur in der Anzahl der führenden Nullen. D.h. sie kann zumindest eine Zeit lang stetig steigen, ohne dass sich die Anzahl der führenden Nullen im Target verändert.

Im Endeffekt ist sowieso immer das Target entscheidend, welches von einem gültigen Block-Hash unterboten werden muss, und welches beliebige ganzzahlige Werte annehmen kann.

Dasselbe Missverständnis hatten wir schon einmal, siehe hier:

Steigt die Difficulty linear oder exponentiell? - #11 von skyrmion

Lies dir mal den verlinkten Beitrag oder am besten den ganzen Thread durch. Dann sollte das klarer werden.

Wenn du es genauer wissen willst, kannst du dir neben dem Hash (in Hexadezimaldarstellung) auch die genaue Difficulty eines Blocks ansehen. Zum Beispiel auf https://mempool.space/, wenn du auf einen Block gehst und dann auf Details.

Die Difficulty des aktuellen Blocks 811710 ist z. B. gerundet 57321508229258. In Binärdarstellung wären entsprechend log2(57321508229258) ≈ 45 Nullen mehr gefordert gewesen als beim Genesis-Target.

Vor 100.000 Blöcken hatten wir den Block 711710 mit Difficulty 22335659268936. In Binärdarstellung wären entsprechend log2(22335659268936) ≈ 44 Nullen mehr gefordert gewesen als beim Genesis-Target.

Eine Null mehr in Binärdarstellung entspricht grob einer Verdopplung. In Hexadezimaldarstellung sind allerdings beides nur 11 Nullen mehr als beim Genesis-Target, also insgesamt 19 Nullen.

Block 811710 hat den Hash:
000000000000000000048900f75d0ede6927293936fe4d4d247db6dc279fb440

Block 711710 hat den Hash:
00000000000000000004e7c0c69621311920e4c1804518646d493be567521b57

Die Angabe der Difficulty anhand der führenden Hex Nullen ist also sehr grob. Pro führender Null mehr in Hex-Darstellung, hat man ja immer gleich einen Faktor 16.

Edit:
@Kneko, du hast geschrieben, dass du Laie bist. Frag bei Unklarheiten einfach nochmal nach! Sind dir die verschiedenen Zahlensysteme bzw. -darstellungen bekannt (binär, hexadezimal)?

2 „Gefällt mir“

Noch mal eine kurze Frage hierzu:
Mein BitAxe bzw. der Pool zeigt mir an, dass ich eine Best Difficulty von 1.61G hatte.
Davor war das ein Wert von ca. 51M, also DEUTLICH geringer.
Nur zum Verständnis, jeder Hashwert, der vom Miner berechnet wird, hat die gleiche Chance sehr nah an der der geforderten Difficulty zu sein bzw. sehr weit davon weg, oder?
Theroretisch steigt die persönliche Best Difficulty nur dadurch an, dass man es häufiger hasht und dadurch durch Zufall mal einen besseren (den eigenen besten) Hash findet, oder?

Grüße

1 „Gefällt mir“

Genau, es ist das gleiche Prinzip wie bei einem Würfel: Wenn du eine fünf würfelst, bist du nicht „näher“ an der sechs, als wenn du eine drei gewürfelt hättest. Die Wahrscheinlichkeit ist bei jedem Wurf gleich, bzw. nicht durch vorherige Würfe beeinflusst.

Es bringt einem also nicht wirklich etwas, einen besonders kleinen „Rekordhash“ gefunden zu haben, wenn dieser fürs Netzwerk trotzdem noch zu groß ist – außer vielleicht, dass es aus Sicht eines Nerds irgendwie cool ist.

Im Prinzip geht das in die Richtung der klassischen Gambler’s Fallacy: Spielerfehlschluss – Wikipedia

2 „Gefällt mir“