Wie kann man verhindern, dass ein Miner den Block eines anderen Miners stiehlt?

Viele Artikel enthalten nur eine Formulierung wie

Ein Miner Alöst das Hash-Problem und gibt das Ergebnis an das Netzwerk zur Überprüfung weiter. Sobald eine Mehrheit des Netzwerks bestätigt, Aerhält man die Belohnung.

Aber wie schützt man seine Bemühungen vor Diebstahl? Wie ich denke:

  1. Ahat das Problem gelöst, also Aerhalten Sie die ursprüngliche Zeichenfolge S, die in den Ziel-Hash gehasht werden könnte H.
  2. Asendet sein Ergebnis an das Netzwerk (einige andere Miner), um die Belohnung zu erhalten.
  3. Andere Knoten (Miner) müssen hashen Sund prüfen, ob das Ergebnis gleich ist, Hum festzustellen, ob Aes richtig ist oder nicht. (Also ich denke hier kann man bekommen Sund H)
  4. Aber in der BNähe Abekommt er seine AWerke, also bekommt er die Sund H. Dann kann er ein neues Ergebnis konstruieren und an andere senden, die behaupten, Bdas Problem sei gelöst
  5. Wenn er Bsein Ergebnis schneller verbreiten kann als A, bekommt er die Belohnung.

Ich habe gesehen Kann ein Miner den Block eines anderen stehlen? , in dem @Highly Irregular sagt

Der Block, den Alice abgebaut hat, enthält die Mining-Belohnungen, die an Alices Adresse gehen. Wenn Eve die Blockdaten ändert, um die Belohnungen an ihre eigene Empfangsadresse auszugeben, wird die Nonce (und andere variable Werte, ich denke, "extranonce" und Zeitstempel), die Alice zum Lösen des Blocks verwendet hat, den Block mit ziemlicher Sicherheit nicht mehr lösen.

Aber er sagte nicht, wie im Detail.

@Stéphane Gimenez gab hier die normalen Mining-Schritte an , bei denen ich keine Maßnahme gesehen habe, um zu verhindern , dass Bder Block gestohlen wird A(oder wie das Ergebnis validiert wird, wird ursprünglich von berechnet A).

Wenn B ohnehin ein neues Ergebnis konstruieren will, wozu braucht er A's?

Antworten (2)

A wird geschützt, indem coinbase transactioner seine eigene Bitcoin-Adresse hinzufügt.

von https://en.bitcoin.it/wiki/Block_hashing_algorithm

Der Körper des Blocks enthält die Transaktionen. Diese werden nur indirekt über die Merkle-Wurzel gehasht. Da Transaktionen nicht direkt gehasht werden, erfordert das Hashing eines Blocks mit 1 Transaktion genau den gleichen Aufwand wie das Hashing eines Blocks mit 10.000 Transaktionen.

Das kompakte Zielformat ist eine spezielle Art der Gleitkommacodierung mit 3-Byte-Mantisse, dem führenden Byte als Exponent (wobei nur die 5 niedrigsten Bits verwendet werden) und seiner Basis ist 256. Die meisten dieser Felder sind für alle gleich Benutzer. Es kann geringfügige Abweichungen bei den Zeitstempeln geben. Die Nonce wird normalerweise unterschiedlich sein, aber sie steigt streng linear an. „Nonce“ beginnt bei 0 und wird für jeden Hash inkrementiert. Immer wenn Nonce überläuft (was häufig vorkommt), wird der extraNonce-Teil der Generierungstransaktion inkrementiert, was die Merkle-Wurzel ändert.

Darüber hinaus ist es äußerst unwahrscheinlich, dass zwei Personen denselben Merkle-Stamm haben, da die erste Transaktion in Ihrem Block eine Generation ist, die an eine Ihrer eindeutigen Bitcoin-Adressen „gesendet“ wird. Da sich Ihr Block von den Blöcken aller anderen unterscheidet, ist es (fast) garantiert, dass Sie unterschiedliche Hashes erzeugen. Jeder von Ihnen berechnete Hash hat die gleiche Gewinnchance wie jeder andere vom Netzwerk berechnete Hash.


Eine weitere Erklärung von http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html

Das folgende Diagramm zeigt die Struktur eines bestimmten Blocks und wie er gehasht wird. Der gelbe Teil ist der Block-Header, gefolgt von den Transaktionen, die in den Block gehen. Die erste Transaktion ist die spezielle Coinbase-Transaktion, die dem Miner die Mining-Belohnung gewährt . Die verbleibenden Transaktionen sind Standard-Bitcoin-Transaktionen, bei denen Bitcoins bewegt werden. Wenn der Hash des Headers mit genügend Nullen beginnt[3], ist der Block erfolgreich abgebaut. Für den Block unten ist der Hash erfolgreich: 0000000000000000e067a478024addfecdc93628978aa52d91fabd4292982a50 und der Block wurde zu Block #286819 in der Blockchain.

Aufbau eines Bitcoin-Blocks

Wenn ein Miner einen Block löst, muss er eine Coinbase-Transaktion einschließen. Die Coinbase-Transaktion ist einzigartig im Block und zahlt die Blockbelohnung an die Adresse des Miners aus. Um die Blockbelohnung umzuleiten, müsste ein Angreifer die Coinbase-Transaktion ändern. Da alle Transaktionen über den Merkle-Baum ausgeführt werden, der zur Merkle-Wurzel geführt hat, würde eine Änderung der Coinbase-Transaktion die Merkle-Wurzel ändern. Da die Merkle-Root Teil des Block-Headers ist, würde dies den Block-Header und damit den Hash des Blocks verändern.

Angesichts der Pre-Image-Widerstandseigenschaft kryptografischer Hash-Funktionen ist es astronomisch unwahrscheinlich, dass der neue Block-Header auch ein gültiger Block sein wird.