das erste mal hier posten.
Ich war daran interessiert, wie Mining-Software bis auf die Bytes funktioniert. Ich bin auf diesen gut geschriebenen Artikel hier gestoßen:
http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html
Unter „Notes and References“ stellt er ein Python-Programm bereit, das den Merkle-Stamm aus einer Liste von Transaktions-Hashes generiert. Was ich jedoch nicht verstehe, ist, warum oder wie der Hash der Coinbase-Transaktion in dieser Liste enthalten ist.
Nehmen wir an, Sie sind dabei, einen neuen Block abzubauen. Sie erstellen Ihre Liste mit Transaktions-Hashes (ohne die Coinbase-Transaktion, da Sie den Block nicht abgebaut haben), erstellen die Merkle-Root und erraten die Nonce, bis Sie einen Block erstellen. Jetzt findet die Coinbase-Transaktion statt und Sie erhalten Ihre Bitcoins, der Coinbase-Transaktions-Hash muss nun in die Liste der Transaktions-Hashes aufgenommen werden. Aber das ändert die Merkle-Wurzel und damit den gesamten Block, was ihn ungültig machen würde.
Wie wird das gelöst? Kennen Sie den Hash der Coinbase-Transaktion im Voraus? Oder schließen Sie die Coinbase-Transaktion für den neuen Block nicht ein und der Python-Code ist nicht korrekt?
Eine Nebenfrage ist auch, dass mich dieser Teil im Python-Code etwas verwirrt:
h = hashlib.sha256(hashlib.sha256(a1+b1).digest()).digest()
Bedeutet a1+b1, dass Sie die Hash-Werte addieren oder einfach die beiden Hash-Werte aneinander hängen?
Danke im Voraus,
Fihdi
Sie erstellen Ihre Liste mit Transaktions-Hashes (ohne die Coinbase-Transaktion, da Sie den Block nicht abgebaut haben),
Hier liegt das Problem in Ihrem Verständnis. Die Coinbase-Transaktion wird generiert, bevor der Block abgebaut wird, nicht danach, da sie wie alle anderen in die Liste der Transaktionen aufgenommen werden muss. Es ist die erste Transaktion im Block, und ihr Hash wird beim Erstellen der Merkle-Root genauso verwendet wie alle anderen.
Sobald die Coinbase-Transaktion erstellt und die Merkle-Wurzel berechnet wurde, wird die Nonce variiert und der Block abgebaut.
Bedeutet a1+b1, dass Sie die Hash-Werte addieren oder einfach die beiden Hash-Werte aneinander hängen?
Hängen Sie die Hashes an, fügen Sie sie nicht hinzu
Viktor T.