Sehen Sie sich den folgenden Code aus der Android-Bitcoin-Brieftasche an:
proofOfWorkLimit = Utils.decodeCompactBits(0x1d00ffffL);
Und schauen Sie sich den Code von Bitcoin Qt Wallet an:
static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
Ich nehme an, dass im zweiten Fall ProofOfWorkLimit 32 "0" und 224 "1" (000000 ... 000111111111 .... 11111111) ist?
Ich habe also keine Ahnung, wie ich den ersten Fall "0x1d00ffffL" aus dem zweiten Fall bekomme? Im Binärformat ist "0x1d00ffffL" 11101000000001111111111111111.
PS Ich habe in uint256.h geschaut. Es war nicht hilfreich.
Das erste Byte, 1D, ist die Länge. Die nächsten drei Bytes sind die High-Bytes des Hashs. Wir haben also 00ffff
, dann fügen wir ff
am Ende Bytes hinzu, um 29 Bytes zu erhalten. Dann sind wir fertig.
Am Ende haben wir 3 Bytes mit führenden Nullen, weil 32-29 3 ist. Und wir erhalten ein Byte mit Nullen aus dem zweiten Byte der kompakten Bits. Das Endergebnis ist also 00,00,00,00,ff,ff,ff...
Vitali Grabowski
David Schwarz
>> 32
bedeutet, die Bits um 32 Bits nach links zu verschieben und an ihrer Stelle Nullen einzufügen.Vitali Grabowski
David Schwarz
00011111
ist1F
. Da das Ganze 32 Bytes groß ist und wir 3 Null-Bytes benötigen, beträgt die Länge des Nicht-Null-Segments 29 Bytes, was in Hex 1D ist. Wenn ich also keinen Fehler gemacht habe, bekomme ich0x1D1FFFFF
.