Beschneiden der Zweige in Merkle Tree

Im Merkle-Baum sind Blätter tatsächliche Transaktionen und interne Knoten sind Hash ihrer Kinder. Im Bitcoin-Papier spricht Satoshi davon, Äste im Merkle-Baum zu beschneiden, um Speicherplatz zu sparen.

Unter welchen Bedingungen dürfen die Äste geschnitten werden? Ich verstehe, dass die Merkle-Wurzel verwendet wird, um POF für den Block zu finden. Gibt es Situationen, in denen alle Knoten im Merkle-Baum mit Ausnahme der Wurzel beschnitten werden?

Antworten (1)

Sicher:

  • Ein Blatt (Transaktion) kann gekürzt werden, wenn alle seine Ausgaben ausgegeben wurden.
  • Ein Knoten kann gekürzt werden, wenn beide seiner Kinder gekürzt wurden.

Bitcoin Core implementiert diese Art der Beschneidung jedoch nicht. Es wurde auf der Annahme aufgebaut, dass Sie alle Blöcke herunterladen und validieren. Aus diesem Grund arbeitet es in einem von zwei Modi:

  • Kein Beschneiden (Standard)
  • Behalten Sie überhaupt keine alten Blöcke oder alten Merkle-Bäume und verfolgen Sie nur nicht ausgegebene Ausgaben und ihre scriptPubKeys. In diesem Modus können Sie neuen Knoten nicht bei der Synchronisierung helfen.
wer macht diesen schnitt? Gibt es eine Datenstruktur, die verfolgt, ob eine bestimmte Ausgabe ausgegeben wurde oder nicht? Oder müssen wir die gesamte Blockchain durchlaufen, um die nicht ausgegebene Ausgabe zu identifizieren?
@Curious Niemand, meines Wissens. Aber wenn es so wäre, würde es hypothetisch von einzelnen Knoten gemacht.
Gibt es eine Datenstruktur, die verfolgt, ob eine bestimmte Ausgabe ausgegeben wurde oder nicht? Oder müssen wir die gesamte Blockchain durchlaufen, um die nicht ausgegebene Ausgabe zu identifizieren?
@Neugierig Ja. Ursprünglich wurde nur der Block verfolgt, in dem sich eine bestimmte Transaktion befand, aber jetzt wird jede Ausgabe einzeln verfolgt, sodass nicht die vollständigen Blockdaten konsultiert werden müssen. Dies geht jedoch über den Rahmen Ihrer Frage hinaus. Sie sollten eine neue Frage stellen, wenn Sie mehr darüber wissen möchten.
Bitcoin Core implementiert dies noch nicht. Pruning wird wahrscheinlich in 0.11 (der nächsten Version) implementiert.