Speichert Full Node alle gültigen Forks und "alternativen" Blöcke aus der Blockchain-Historie?

Forks sind beim Schürfen der Blockchain möglich und treten während des Schürfens "die ganze Zeit" auf.

Dies bedeutet, dass die Knoten, die die Blockchain überwachen, während der Lebensdauer der Blockchain viele Forks aufgezeichnet haben, wobei einige der Nicht-Hauptzweige mehrere Blöcke lang waren.

Speichern Knoten alle Zweige aus der gesamten Blockchain-Geschichte?

BEARBEITEN: Ich habe eine andere Frage gelesen, und es ist logisch, dass der Knoten die Transaktionen aus dem "alternativen" Zweig, auf dem sie sich befanden, an den Speicherpool zurückgeben sollte (oder sie verwerfen sollte). Aber geschieht dies gleichzeitig, wenn jemand ihnen einen längeren Zweig "zeigt", oder behalten sie irgendwie immer noch die alternativen Zweige bei?

Antworten (1)

Speichern Knoten alle Zweige aus der gesamten Blockchain-Geschichte?

Sie speichern alle ihnen bekannten Verzweigungen, solange die Blockheader jeder Verzweigung vollständig gültig sind.

Die Funktionsweise von Bitcoin Core-Knoten (und aller auf Bitcoin Core basierenden Knotensoftware) besteht darin, dass sie nach einem Block-Header fragen, bevor sie nach dem eigentlichen Block selbst fragen. Unter Verwendung der Header baut der Knoten eine Header-Kette auf. Wenn also ein Blockheader gültig ist (dh er hat einen gültigen Proof of Work und verbindet sich mit bekannten vorherigen Blockheadern), wird er gespeichert und dem Chainstate hinzugefügt. Auf diese Weise kann ein Knoten alle Zweige der Blockchain kennen und verfolgen, ohne den Block selbst zu haben.

Auch wenn eine Header-Kette nicht die meiste Arbeit hat, wird sie dennoch für immer herumliegen und im Auge behalten. Obwohl Blöcke für diese Header-Kette nicht angefordert werden, wenn Peers diese Kette als ihre tatsächliche Blockchain haben und die Header vollständig gültig sind, ist sie dennoch einem Peer bekannt und wird nachverfolgt.

Wenn eine Header-Kette plötzlich beginnt, ungültige Block-Header zu haben, wird die Kette gültiger Header dennoch beibehalten und verfolgt; Die ungültigen Header erweitern das nicht.

Aber warum sollte ich "veraltete" Zweige im Auge behalten? Es ist sinnvoll, nur den Verzweigungsknoten zu verfolgen, der gerade eingeschaltet ist.
Denn diese „veralteten Zweige“ sind voll gültig und könnten eines Tages möglicherweise zur Hauptkette werden. Ohne das Verfolgen dieser Verzweigungen wären wir nicht in der Lage, uns auf die Kette mit der meisten Arbeit zu reorganisieren, falls wir uns in einer Kette mit weniger Arbeit befinden.
Aber 99,99 % dieser Zweige sind nutzlos. Und wir müssen sie überhaupt nicht verfolgen. Wenn einer von ihnen schließlich zur Hauptkette wird, kann der Knoten ihn vollständig von dem Punkt an rekonstruieren, an dem er auseinandergegangen ist (und sich selbst umschalten kann).
Wir wissen nicht, von welchem ​​Punkt es abgewichen ist. Wenn Sie vorschlagen, dass wir die Kette aufbauen, indem wir nach den Blöcken von einem Peer fragen, dann ist das leicht DoS-angreifbar.
Ich bin nicht einverstanden. Sie fragen den Peer, der den neuen Block bereitgestellt hat. Wenn er es nicht schafft, hören wir auf. Kein DoS. Außerdem ist die Situation die gleiche, als ob wir ein paar Blocks von seiner Filiale (oder sogar der Hauptfiliale) entfernt bleiben würden.
Der Angriff besteht darin, dass ein bösartiger Peer Ihnen ständig mitteilen kann, dass er einen anderen Fork verwendet, was dazu führt, dass Sie ständig neue Blöcke anfordern, die mehr Speicherplatz, mehr CPU und RAM für die Validierung und mehr Bandbreite beanspruchen. Wir wissen nicht, was die Verzweigungen sind, also müssten wir das Wort dieses Kollegen nehmen und sehen, ob seine Verzweigungen korrekt sind. Indem wir alle Filialen verfolgen, müssen wir das nicht tun und wir kennen alle Filialen und ihre aktuellen Tipps.