Um genau zu sein, schreiben Sie ein Programm, das den Hash des für das Mining erforderlichen Blocks findet. Es ist nutzlos und unmöglich, mit der von mir implementierten Software abzubauen, daher besteht der Zweck darin, den Mechanismus zu verstehen.
Siehe Referenzen.
Ich werde die ausführliche Erklärung anderen Artikeln usw. überlassen, aber es handelt sich um das Aufzeichnen (Genehmigen) von Bitcoin-Transaktionen.
Es handelt sich um einen Vorgang, bei dem ein Nonce-Wert so gefunden wird, dass Nullen ab dem Beginn des Hash-Werts, aus dem berechnet werden kann, mit einer bestimmten Zahl (17 ab Januar 2016) in einer Reihe stehen. Wenn Sie die Nonce des Blocks zum ersten Mal auf der Welt finden, erhalten Sie 25 BTC (ca. 1,16 Millionen Yen, Stand Januar 2016) neu ausgegebene Münzen und eine Gebühr für die gebuchte Transaktion. Für diese Belohnung beeilen sich Menschen auf der ganzen Welt, eine große Anzahl von Maschinen zu benutzen, die mit speziellen Chips beladen sind. Der Schwierigkeitsgrad des Bergbaus wird so angepasst, dass er mit Ressourcen aus der ganzen Welt durchschnittlich 10 Minuten dauert. Daher wird es schwieriger, wenn die Anzahl der Bergbauteilnehmer zunimmt.
Da es basierend auf dem Hash des vorherigen Blocks berechnet wird, ist es mit dem vorherigen Block verbunden und der Ursprung des Namens "Blockchain". Um einen Transaktionsverlauf zu manipulieren, muss der Hash des Blocks, der diese Transaktion enthält, und alle Blöcke danach neu berechnet werden, weshalb gesagt wird, dass Manipulationen nicht möglich sind.
Es braucht viel Zeit, um wirklich zu versuchen, meine zu finden, also stelle ich nur sicher, dass das Nonce der bereits genehmigten Transaktion wirklich korrekt ist. Die Ergebnisse aller Bitcoin-Transaktionen und des Mining sind öffentlich https://blockchain.info/ja/ Sie können es bei etc. sehen.
Diesmal als Probe https://blockchain.info/ja/block/000000000000000003a0343cc001d21b97d15e97e665b68c790b98c871cf0731 Wird genutzt.
Die Eingabe für die Hash-Berechnung ist
ist. Nehmen Sie diese Werte von der obigen Seite auf.
version = 4
prev_block = "0000000000000000005629ef6b683f8f6301c7e6f8e796e7c58702a079db14e8"
markle_root = "efb8011cb97b5f1599b2e18f200188f1b8207da2884392672f92ac7985534eeb"
timestamp = "2016-01-30 13:23:09"
bits = 403253488
nonce = 1448681410 #Da es sich um einen genehmigten Block handelt, kennen wir auch den Wert von Nonce
Da jedes nicht so verwendet werden kann, wie es ist, konvertieren Sie es in das angegebene Format.
Füllen Sie die Version mit 0, um 8 Stellen zu erhalten. Wie bei anderen Werten üblich, werden alle diese Werte bei der Berechnung in umgekehrter Bytereihenfolge (wenig tolandisch) verwendet. Es gibt wahrscheinlich einen anderen besseren Weg, um die Bytereihenfolge umzukehren, aber unten werde ich sie in eine hexadezimale Zeichenfolge konvertieren und sie dann erneut dekodieren. (Für python3 hat int eine to_bytes-Methode)
version_h = format(version, "08x").decode("hex")[::-1]
Der Hash und die Merkle-Wurzel des vorherigen Blocks liegen bereits in hexadezimaler Form vor. Dekodieren Sie sie also und kehren Sie sie um.
prev_block_h = prev_block.decode("hex")[::-1]
markle_root_h = markle_root.decode("hex")[::-1]
Time konvertiert die Anzahl der Sekunden von der Unix-Standardzeit wie gewohnt in eine umgekehrte Bytefolge.
from datetime import datetime
timestamp_s = int((datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S")-datetime(1970,1,1)).total_seconds())
timestamp_h = format(timestamp_s,"x").decode("hex")[::-1]
bits, nonce Konvertieren Sie einfach in eine Reverse-Byte-Zeichenfolge.
bits_h = format(bits,"x").decode("hex")[::-1]
nonce_h = format(nonce,"x").decode("hex")[::-1]
Bitcoin-Hash verwendet sha256 zweimal. Da das Ergebnis auch eine Reverse-Byte-Zeichenfolge ist, konvertieren Sie die Reihenfolge in hexadezimal.
from hashlib import sha256
header = version_h + prev_block_h + markle_root_h + timestamp_h + bits_h + nonce_h
print(sha256(sha256(header).digest()).digest()[::-1].encode("hex"))
Ausgabe
000000000000000003a0343cc001d21b97d15e97e665b68c790b98c871cf0731
Sie können sehen, dass 17 0s richtig ausgerichtet sind.
Recommended Posts