Wie übersetzt sich ein Proof-of-Work-Limit von `~uint256(0) >> 20` in eine Schwierigkeit von `1 / 2^12`?

In der Litecoin-Quelle steht geschrieben:

static CBigNum bnProofOfWorkLimit(~uint256(0) >> 20); // Litecoin: starting difficulty is 1 / 2^12

Wie rechnet sich das? ~uint256(0) >> 20ist 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff. Hashes haben die gleiche Wahrscheinlichkeit, dass es sich um eine beliebige Zahl handelt, daher ist die Chance, einen gültigen Litecoin-Hash (dh einen, der kleiner als diese Zahl ist) zu erhalten , 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff / 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= 1 / 2^20, nicht 1 / 2^12 . Ist das ein Tippfehler im Litecoin-Quellcode oder verstehe ich etwas falsch?

Eine gute Möglichkeit, sich daran zu erinnern, ist, dass eine Schwierigkeit von 1 bedeutet, dass durchschnittlich 2^32Hashes benötigt werden, um einen Block abzubauen, und von dort aus linear skaliert wird. Diese Konvention stammt von Bitcoin, wo die Mindestschwierigkeit tatsächlich 1 ist.
Hallo. Bei neuerer Quelle gibt es keine CBigNum, was wurde daran geändert?

Antworten (1)

Um die Terminologie in Litecoins Wiki zu verwenden , ~uint256(0) >> 20ist das Ziel und 1 / 2^12(ungefähr) die Schwierigkeit. Sie können das sehen, indem Sie Folgendes in Python ausführen (oder irgendetwas, das Berechnungen mit großen Zahlen verarbeiten kann).

target = 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff # or 2**236-1
diff = 0xFFFF * 2**208 / target
print(diff) # 0.00024413689970970154
print(1/2**12) # 0.000244140625

Ich glaube, die 1 / 2^20von Ihnen berechnete Zahl ist die Wahrscheinlichkeit, dass jeder Hash erfolgreich sein wird, was nicht mit der Schwierigkeit identisch ist (obwohl sie damit zusammenhängt).

Oh, interessant, ich wusste nicht, dass es eine Konvention für die Schwierigkeit gibt. Das klärt die Sache auf.
Hallo. Bei neuerer Quelle gibt es keine CBigNum, was wurde daran geändert?