Schwierigkeit für Hash (umgekehrte Funktion von „hat Hash Schwierigkeit/Ziel erreicht“)

Was ist ein Algorithmus, um zu bestimmen, welche maximale Schwierigkeit bereits gefundenes Hash erfüllt?

Antworten (2)

Siehe https://en.bitcoin.it/wiki/Difficulty#How_is_difficulty_calculated.3F_What_is_the_difference_between_bdiff_and_pdiff.3F

Blockieren Sie zum Beispiel #347444:

0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 
0x000000000000000014a5256523f37dd374dcb1e0840a85ab4d0cea60bad043d8
= 53256935148.82868

Zum Spaß können wir die Schwierigkeit berechnen, die der kleinste jemals abgebaute Block-Hash (ab block #347444) hätte erfüllen können.

Holen wir uns zuerst die Liste aus meiner Bitcoin Abe-Datenbank:

MariaDB [abe]> SELECT hex(block_hash), block_height FROM block ORDER BY block_hash ASC LIMIT 10;
+------------------------------------------------------------------+--------------+
| hex(block_hash)                                                  | block_height |
+------------------------------------------------------------------+--------------+
| 000000000000000000002D414BB8F9175BA6C6563721E1BA2C1373C2BD94F29F |       334261 |
| 000000000000000000005A5E143087632FBF0EEA743AD99646D9FC67D40F7441 |       336175 |
| 000000000000000000006836C4009AB00485CD1DE4D5958CA7839184D0B80067 |       331908 |
| 000000000000000000007E1166D92ACF81D4E2D95934FCDEC1276B09A7DB9390 |       326055 |
| 000000000000000000007EEF13EE1F2FCF1B469BD862FCC93B48EC49548ECF6D |       343775 |
| 000000000000000000008AC86BA28085BE84AF2EBD6FC6935A004E57FB60C083 |       340483 |
| 00000000000000000000B7DE9E5C19E52BE073156924B7CF235EFB27AE8A202A |       313338 |
| 00000000000000000000EC03E3183BACC8B18437180F63F6A563267A186225BC |       331987 |
| 0000000000000000000119ADB3DA72742B1EBA98F9DC26F73858E91652B42287 |       334151 |
| 0000000000000000000119F88871F8A3C3B7BE053C98B31E9C4676DF30243CFE |       333904 |
+------------------------------------------------------------------+--------------+
10 rows in set (0.06 sec)

Dann übergeben wir das an Python (ich habe eine modifizierte Version der obigen Abfrage ausgeführt, um ein Format zu drucken, das Python versteht):

>>> # 334261
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x000000000000000000002D414BB8F9175BA6C6563721E1BA2C1373C2BD94F29F
1592230611213387.2
>>> # 336175
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x000000000000000000005A5E143087632FBF0EEA743AD99646D9FC67D40F7441
797371821285215.2
>>> # 331908
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x000000000000000000006836C4009AB00485CD1DE4D5958CA7839184D0B80067
691428638477639.5
>>> # 326055
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x000000000000000000007E1166D92ACF81D4E2D95934FCDEC1276B09A7DB9390
571568585825999.9
>>> # 343775
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x000000000000000000007EEF13EE1F2FCF1B469BD862FCC93B48EC49548ECF6D
567669438511087.9
>>> # 340483
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x000000000000000000008AC86BA28085BE84AF2EBD6FC6935A004E57FB60C083
519203003284590.0
>>> # 313338
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x00000000000000000000B7DE9E5C19E52BE073156924B7CF235EFB27AE8A202A
391889105139868.25
>>> # 331987
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x00000000000000000000EC03E3183BACC8B18437180F63F6A563267A186225BC
305304486446787.75
>>> # 334151
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x0000000000000000000119ADB3DA72742B1EBA98F9DC26F73858E91652B42287
255811103719832.1
>>> # 333904
... 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x0000000000000000000119F88871F8A3C3B7BE053C98B31E9C4676DF30243CFE
255545915930877.94

#347444Daher ist das höchste jemals erreichte Schwierigkeitsziel ab Block 1,592,230,611,213,387.2für Block#334261

NB: Verwenden Sie Python 3, um Dezimalstellen zu erhalten, Python 2.x schneidet die Nachkommastellen ab.

Wie @NickODell in einer anderen Antwort betonte, enthalten die gehashten Blockdaten natürlich ihre Schwierigkeit, also ist dies alles theoretisch, der Block erfüllt immer noch nur die Schwierigkeit, für die er abgebaut wurde, und das kann nicht geändert werden.

Ein Hash trifft nur auf eine Schwierigkeit, denn beim Mining legen Sie ein Feld namens fest nBits, das die Schwierigkeit beschreibt, für die Sie minen wollten. Sie können dieses Feld nicht ändern, ohne den Hash zu ändern und von vorne zu beginnen.

bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
[...]
if (UintToArith256(hash) > bnTarget)

(Quelle)