Schwierigkeit bei der Hash-Validierungskorrelation

Bei der Validierung eines Blocks sagt man, dass ein Miner einen gültigen Block hat, wenn die Transaktionen in der Kette nachverfolgt werden können und der Hash des Block-Headers geringer ist als die Schwierigkeit. Es fällt mir schwer, die Beziehung in realen Blöcken zu sehen, die gelöst werden.

Zum Beispiel aus Block#496785 :

Schwierigkeit ("Ziel") = 1.347.001.430.558,57 oder in Hex 00000000000000000000000000000000000000000000000000001399F8AB21E

Abgebauter Hash = 000000000000000000cf3620d570d08d1799a1cafbbfae512fdba2124665eca0

Also scheint mir der Hash jetzt größer zu sein als die Schwierigkeit, also ein ungültiger Block, aber das ist offensichtlich nicht der Fall.

Ich habe auch gehört, dass die Schwierigkeit mit der Anzahl der führenden Nullen nach dem maximalen Ziel zusammenhängt. In diesem Fall kann es sinnvoll sein, wenn 1399F8AB21E eine 11-Byte-Zahl ist und der Hash nach dem standardmäßigen führenden 8-Byte-Ziel 10 Bytes enthält, was weniger als die ist Schwierigkeit 11 Byte Nullen.

So

00000000 0000000000 cf3620d570d08d1799a1cafbbfae512fdba2124665eca0
8 bytes  difficulty             some value

Ist das richtig? Wie funktioniert das?

Antworten (1)

Schwierigkeit ist nicht dasselbe wie Ziel-Hash (kurz Ziel).

Sie stehen in umgekehrter Beziehung zueinander, sodass die minimal mögliche Schwierigkeit (von 1) das maximale Ziel ergibt , per Definition gegeben als ( https://en.bitcoin.it/wiki/Target ):

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Da Bitcoin das Ziel als Fließkommatyp speichert, wird dies abgeschnitten:

0x00000000FFFF0000000000000000000000000000000000000000000000000

Die aktuelle Schwierigkeit wird als maximales Ziel geteilt durch das aktuelle Ziel berechnet. Zum Beispiel ( https://en.bitcoin.it/wiki/Difficulty ):

0x00000000FFFFFFFFFFFFFFFFFFFRM000000000000000000000000000000000000000000000000000000000000000000000000000000 = 16307.420938523983398339398333939833000000000000000000000000000000000000000000000000000000000000000000033983983983983983983983. sichet

In Ihrem Beispiel würde also die Schwierigkeit = 1.347.001.430.558,57 das aktuelle Ziel ergeben von:

aktuelles_Ziel = 0x00000000FFFF00000000000000000000000000000000000000000000000000 / 1.347.001.430.558,57

Wenn Sie dies berechnen (achten Sie darauf, dass eine Zahl hexadezimal und eine andere dezimal ist), sollte der Vergleich ergeben, dass dieses aktuelle_Ziel höher ist als der abgebaute Hash von:

0x000000000000000000cf3620d570d08d1799a1cafbbfae512fdba2124665eca0

BEARBEITEN: Die Berechnung mit Stift und Papier gibt mir, dass das aktuelle Ziel in der Nähe ist:

0x000000000000000000FFFF0000000000000000000000000000000000000000

Wie ich das bekommen habe. 1.347.001.430.558,57 ist ungefähr 1,225 * (16^10). Da das Ziel zur Basis 16 ist, bedeutet dies, dass das Teilen durch 1 * (16^10) wie das Verschieben der Ziffern um 10 Stellen nach rechts ist. Um nach dem Verschieben der Ziffern ein genaues Ergebnis zu erhalten, sollte ich durch 1,225 dividieren, aber ich habe dies in dieser Stift- und Papierberechnung ignoriert.

EDIT2: Um noch genauer zu sein, nehme ich 16/1.225 ist ungefähr 13 ( D in Hex), also ist das Ziel ungefähr:

0x000000000000000000D000000000000000000000000000000000000000000

Warum 0x00000000FFFF0000000000000000000000000000000000000000000000000000stellt die Version des abgeschnittenen Fließkommatyps von dar 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF?