Was passiert, wenn ein Knoten den Basisblock eines neu empfangenen Blocks nicht finden kann

Diese spezielle Frage beschäftigt mich schon seit einiger Zeit. Angenommen, es gibt einen gegnerischen Miner, der mit einer seiner Transaktionen einen Block schürft. Der Miner würde den aktualisierten Block nur an einen bekannten Peer Minor (Ma) senden. Und direkt nach dem Senden des ersten Blocks an einen bekannten Peer (nicht an das gesamte Netzwerk) knackt der Miner den Jackpot und konnte mit derselben Transaktion einen weiteren Block generieren. Es ist höchst unwahrscheinlich, dass der Gegner unmittelbar nach dem Abbau des vorherigen Blocks einen weiteren Block abbauen könnte, aber es ist machbar.

Netzwerk --> [B1]->[B2]->[B3]->[S1]->[B4] Ma --> [B1]->[B2]->[B3]->[S2],

Gegner -->[B1]->[B2]->[B3]->[S1]

Wie ich oben gezeigt habe, hat Ma, sobald er B4 erhält, keine Möglichkeit zu wissen, was der Vorgängerblock (S1) von B4 ist.

Könnte bitte jemand erklären, wie Bitcoin mit solchen Problemen umgeht?

Antworten (2)

Ohne den Elternteil zu kennen, hält der Knoten den Block fest und führt nur eine Validierung durch, die ohne Kontext (dh den Elternteil) durchgeführt werden kann. Er fragt auch seine Peers nach dem übergeordneten Block, und sobald er ihn erhält, verbindet er beide Blöcke mit seiner Blockchain, wenn sie mehr kumulierte Arbeit haben als die aktuelle Blockchain des Knotens.

Andernfalls ignoriert der Knoten diesen Block.


Denken Sie daran, dass dieses Szenario äußerst unwahrscheinlich ist und nicht, weil es unwahrscheinlich ist, dass ein Miner zwei widersprüchliche Blöcke fast gleichzeitig findet. Vielmehr werden Knoten Blöcke weiterleiten, sobald sie sie verifiziert haben, es gibt kein "an einen Peer senden, aber nicht an das Netzwerk". Das Senden eines Blocks an einen Peer sendet ihn an das Netzwerk, da dieser Peer ihn an seine Peers weiterleitet und so weiter. Wenn Ma also den Block empfängt, wird es diesen Block an das Netzwerk weiterleiten, es sei denn, es wurde vom Gegner angegriffen.

Wenn die Kollegen von Ma S1 und B4 erhalten, leiten sie diese an Ma weiter und Ma aktualisiert seine Blockchain entsprechend.

Seit der Header-First-Synchronisation (implementiert in Bitcoin Core v0.10.0 und später) ist dies nicht mehr der Fall. Knoten fragen nicht nach einem Block, es sei denn, sie kennen seine Header und die seiner Vorfahren, sodass diese Situation einfach nicht mehr auftritt. Wenn ein Knoten einen unaufgeforderten Block senden würde, wird er einfach ignoriert.

Ein Miner leitet auch empfangene Blöcke weiter. Wenn Sie also einen Block an einen anderen gut vernetzten Miner senden, wird das gesamte Netzwerk ihn sehen.

Jeder Bergmann hat einen starken Anreiz sicherzustellen, dass er immer auf der längsten verfügbaren Kette abbaut, und es gibt eine Infrastruktur, um dies sicherzustellen. FIBER ist ein solches System.