Was ist SPV-Mining und wie hat es (versehentlich) den Fork verursacht, nachdem BIP66 aktiviert wurde?

Ich bin gespannt auf eine ausführliche Erklärung der Hard Fork und wie sie verursacht wurde; Ich habe viel gehört/gelesen, aber mir fehlt eine zusammenhängende Erklärung.

Antworten (1)

SPV-Mining ist der Begriff, der üblicherweise für Mining mit weniger als vollständiger Node-Validierung verwendet wird. Dies bedeutet normalerweise, dass Miner die Überprüfung des Blocks und der darin enthaltenen Transaktionen überspringen und sofort mit dem Mining eines neuen Blocks beginnen, der auf den gerade gelösten Block-Header verweist. Da sie jedoch nicht wissen, was sich im letzten Block befindet, müssen sie ohne Transaktionen (mit Ausnahme der Coinbase-Transaktion) minen, um sicherzugehen, dass sie keinen Block mit Transaktionen minen, die mit Transaktionen im vorherigen in Konflikt stehen Block.

Nachdem BIP 66 erzwungen wurde, lösten etwa 5 % des Netzwerks immer noch Version 2-Blöcke (BIP 66 erzwingt Blöcke mit Versionsnummer >= 3). Einer der Miner in diesen 5 % hat einen Block mit Version 2 gelöst, und wenn alle eine vollständige Validierung durchgeführt hätten, wäre ihr Block ignoriert und durch einen Block der Version 3 ersetzt worden. Das sollte passieren.

Aber leider begannen einige Pools (F2Pool war der größte, glaube ich) mit dem Mining eines neuen Blocks, der auf den ungültigen Block-Header verwies, ohne die darin enthaltenen Transaktionen zu überprüfen, oder dass der neue Header eine Versionsnummer von 3 verwendete (wie es gerade wurde durchgesetzt). Miner verbinden manchmal direkt ihre vollständigen Knoten oder überwachen die Arbeits-APIs der anderen, um zu sehen, wann ein anderer Pool einen Block gelöst hat, damit sie so schnell wie möglich mit der Arbeit an einem neuen Block beginnen können. In diesem Fall hörten einige Pools, dass BTC-Nuggets einen Block lösten, indem sie auf ihre Stratum-API hörten, und begannen, darauf abzubauen. Sie hatten nicht einmal den Block-Header, nur den Hash des Block-Headers.

https://en.bitcoin.it/wiki/July_2015_Forks#Invalid_Block_Hashes zeigt die ungültigen Blöcke:

  • 0000000000000000009cc829aa25b40b2cd4eb83dd498c12ad0d26d90c439d99 abgebaut von BTC Nuggets (98 Nicht-Coinbase-Transaktionen)
  • 0000000000000000155f2519d35cd5d2869900bcc5093594b27763a0315390b4 abgebaut von F2Pool (0 Nicht-Coinbase-Transaktionen)
  • 00000000000000000cb7a20ee4e199e347ad7369936abae53a1518efa531ec61 abgebaut von F2Pool (0 Nicht-Coinbase-Transaktionen)
  • 00000000000000000966d65e0fd87d1d5a8f154a2c955816c28e2006e381aa18 abgebaut von AntPool (0 Nicht-Coinbase-Transaktionen)
  • 00000000000000001301bfd6f566a421c7eeba103d09b312032ca065cb185de7 abgebaut von F2Pool (0 Nicht-Coinbase-Transaktionen)
  • 000000000000000013fe26675faa8f7dccd55ce5485bb6d0373fa66345901436 abgebaut von F2Pool (0 Nicht-Coinbase-Transaktionen)

Einer der Kernentwickler, Gregory Maxwell, hat hier auch eine Erklärung veröffentlicht , die Sie möglicherweise nützlich finden.

Soweit ich weiß, hatten sie, als sie mit dem Mining begannen, nicht einmal den vorherigen Block-Header (nur seinen Hash). Siehe meinen Kommentar auf Reddit hier . ( Quelle ) Da der Block ungültig war, haben sie den Block oder seinen Header wahrscheinlich nie wirklich über das normale P2P-Relay-Netzwerk erhalten.
@DavidA.Harding, wow, das ist noch schlimmer. Ich dachte, sie hätten den Header über P2P-Relay erhalten. Dann werde ich meine Antwort jetzt aktualisieren.
Das ist richtig, sie bauen auf Stratum-Antworten anderer Pools ab, nicht auf Bitcoin P2P-Header.