Wenn ich den RPC-Aufruf getBlock
auf dem bitcoin-qt-Client ausführe, erhalte ich ein Feld mit dem Namen chainwork
, das einen Hash enthält. Ich kann keine Informationen finden, worum es sich bei diesem Wert handelt.
Anfrage:
getblock 0000000000000000073dacdd0178da5158bd78c543fbc79bd0dacf56a2021bcc
Ergebnis:
{
"hash" : "0000000000000000073dacdd0178da5158bd78c543fbc79bd0dacf56a2021bcc",
"confirmations" : 1,
"size" : 182400,
"height" : 304962,
"version" : 2,
"merkleroot" : "b144b39759d4669cb92ca8b9084d68d1f05f1e28e16887bf062f37e3b5f79fd2",
"tx" : [
"3edc72d280edd0a7719670a5f0c97e8991a5bcfcfcfa77620969643f04d021a3",
"841840f8a7863c8fb99e26975d45ff9151b0a5f021fb479aa9ff91a138d3cd3f",
"a01af3f203313cdab4e8977cd2dccbd416872c9d9f76968fc7009f47ad630199"
],
"time" : 1402334610,
"nonce" : 2351732739,
"bits" : "185d859a",
"difficulty" : 11756551916.90395200,
"chainwork" : "0000000000000000000000000000000000000000000086859f7a841475b236fd",
"previousblockhash" : "000000000000000031132699bcb917e7e6ce3cc6cce1f20b6ad36a437436c821"
}
Der Chainwork-Wert ist wirklich nur die Gesamtmenge an Arbeit in der Kette.
Es ist die Gesamtzahl der Hashes, die voraussichtlich erforderlich waren, um die aktuelle Kette zu erzeugen, in hexadezimaler Form.
Wenn Sie in Dezimalzahlen umwandeln, erhalten Sie 635262017308958427068157 0000000000000000000000000000000000000000000086859f7a841475b236fd
oder 635262 Exahashes.
Bei den Hash-Raten vom Juni 2014 (100 Petahash/s) würde es nur 73 Tage dauern, um so viele Hashes durchzuführen, während es in Wirklichkeit über 5 Jahre dauerte. Die Hash-Rate ist jedoch so schnell gestiegen, dass die Auswirkungen von vor mehr als ein paar Monaten vernachlässigbar sind.
Pieters Antwort ist gut, der Chainwork-Wert ist der erwartete Arbeitsaufwand in der Kette, ausgedrückt als 32-Byte-Ganzzahl, für die doppelte SHA-256-Hash-Berechnungsarbeit.
Das Kettenwerk wird verwendet, um die richtige Kette zu identifizieren, der größte Kettenwerkwert bedeutet die stärkste oder die richtige Kette.
Übrigens war Satoshi anfangs nicht klar, dass die Auswahl der richtigen Kette durch einfaches Zählen von Blöcken einige extrem einfache Angriffe ermöglicht. Version 0.1 hat nur Blöcke gezählt. Deshalb steht auf dem Papier nur „am längsten“. Etwas später kam die Idee der „Kettenarbeit“ hinzu. Einzelheiten hierzu finden Sie hier .
Ich möchte nur einige Informationen darüber geben, wie dieser „Kettenwerk“-Wert zustande kommt , um besser oder tiefer zu verstehen, was es ist.
Werfen wir einen Blick auf den Header des Genesis-Blocks von Satoshi (Teil der zugehörigen Informationen):
$ bitcoin-cli getblockhash 0
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
$ bitcoin-cli getblockheader 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
{
...
"height": 0,
...
"bits": "1d00ffff",
"difficulty": 1,
"chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
...
}
Wie Sie oben sehen, hat der Genesis-Block eine Schwierigkeit von 1 und ein Kettenwerk von [0x01,0001,0001]. Wenn Sie eine Frage dazu haben, was eine „Schwierigkeit“ ist, können Sie sich diese Antwort ansehen . Also, das ist die richtige Definition:
difficulty '1' = chainwork amount [0x01,0001,0001]
Dann akkumulieren wir jedes Mal, wenn ein neuer Block generiert wird, einfach die Verkettung mit dem Feldwert „Schwierigkeit“ des neuen Blocks, aber denken Sie daran, dass wir für jede „1“-Schwierigkeit einen Verkettungsbetrag [0x01,0001,0001] hinzufügen.
Wenn die Blockchain wächst, wird die Schwierigkeit nach und nach zunehmen (oder manchmal leicht abnehmen).
Bevor sich die erste Schwierigkeitszeit änderte, hatte die Kettenblockhöhe 32255 erreicht.
$ bitcoin-cli getblockhash 32255
00000000984f962134a7291e3693075ae03e521f0ee33378ec30a334d860034b
$ bitcoin-cli getblockheader 00000000984f962134a7291e3693075ae03e521f0ee33378ec30a334d860034b
{
...
"height": 32255,
...
"bits": "1d00ffff",
"difficulty": 1,
"chainwork": "00000000000000000000000000000000000000000000000000007e007e007e00”,
...
}
Wie Sie oben sehen können, ist der Chainwork-Wert [0x7e00,0x7e00,0x7e00], was genau der Höhe [32255]+1 (für den Genesis-Block) mal [0x01,0001,0001] entspricht.
[0x7e00,0x7e00,0x7e00] = 32256 * [1.0] * [0x01,0001,0001]
Dann werfen wir einen Blick auf Block 32256:
$ bitcoin-cli getblockhash 32256
000000004f2886a170adb7204cb0c7a824217dd24d11a74423d564c4e0904967
$ bitcoin-cli getblockheader 000000004f2886a170adb7204cb0c7a824217dd24d11a74423d564c4e0904967
{
...
"height": 32256,
...
"bits": "1d00d86a",
"difficulty": 1.182899534312841,
"chainwork": "00000000000000000000000000000000000000000000000000007e01acd42dd2”,
...
}
Bei Block 32256, weil die Schwierigkeit dann von 1,0 auf 1,182899534312841 steigt
[chainwork value] = [previous chainwork value] + [difficulty] * [0x01,0001,0001]
[0x7e01,acd4,2dd2] = [0x7e00,0x7e00,0x7e00] + [1.182899534312841] * [0x01,0001,0001]
Tim S.
Dennis Kriech