Beziehung zwischen Transaktions-Trie und Quittungs-Trie

Wenn ich das Yellow Paper durchlese , kann ich sehen, dass jeder Block-Header den Keccak 256-Hash der Wurzel des Trie für Transaktionen und Transaktionsbelege enthält. Ich habe Mühe zu verstehen, wie und wo sie erstellt werden.

Wie hängen der Transactions Trie und der Transaction Receipts Trie für einen bestimmten Block zusammen?

Ist es der Fall, dass, wenn der Weltzustand aktualisiert wird, indem die Transaktionen durchlaufen werden, die Transaktionen und Transaktionsbelege in ihren jeweiligen Versuchen gespeichert werden?

Antworten (2)

Transaktionsversuche und Transaktionsempfangsversuche sind in der Tat unabhängige Datenstrukturen mit unterschiedlichen Wurzeln, die im Blockchain-Header gespeichert sind und sich sowohl in Zweck als auch Inhalt unterscheiden .

Zweck :

  • Transaktionsversuche : zeichnet Transaktionsanforderungsvektoren auf

  • Transaktionsempfangsversuche : Zeichnet das Transaktionsergebnis auf

Inhalt :

Parameter, die beim Erstellen eines Transaktionsversuchs verwendet werden [Einzelheiten in Abschnitt 4.3 des gelben Papiers] :

  • einmal,
  • Gaspreis,
  • Gasgrenze,
  • Empfänger,
  • Übertragungswert,
  • Transaktionssignaturwerte und
  • Kontoinitialisierung (wenn die Transaktion vom Typ Vertragserstellung ist) oder Transaktionsdaten (wenn die Transaktion ein Nachrichtenaufruf ist)

Parameter, die beim Erstellen eines Transaktionsbelegversuchs verwendet werden [Einzelheiten in Abschnitt 4.4.1 des gelben Papiers] :

  • Zustand nach der Transaktion,
  • das kumuliert verbrauchte Gas,
  • der Satz von Protokollen, die durch die Ausführung der Transaktion erstellt wurden, und
  • der Bloom-Filter, der aus Informationen in diesen Protokollen besteht
Danke zanzu, sind die Rezepte immer für die Transaktionen im selben Block? Wenn ja, werden sie in der gleichen Reihenfolge gespeichert?
@atomh33ls. Ja und ja. Dies geht aus den Gleichungen für die Transaktionswurzel Ht und die Quittungswurzel Hr in Gleichung 29 hervor, die beide auf dem Blocktransaktionsindex indexiert sind, d.
Ah ja danke; Ich denke, du meinst Er für Empfangswurzel? Die Ht- und He-Komponenten von Gl. 28 sind ebenfalls relevant.
@atomh33ls. Ja, tut mir leid, ersetze in meinem obigen Kommentar Hr durch He (es wäre zu einfach gewesen, wenn der Quittungsstamm mit Hr bezeichnet worden wäre! :o))
Was meinst du mit transaction request vectors@zanzu

In https://blog.ethereum.org/2015/11/15/merkling-in-ethereum gab Vitalik Buterin ein Beispiel für die Verwendung der verschiedenen Bäume (Transaktionen, Quittungen, Zustandsbäume).

  • Wurde diese Transaktion in einen bestimmten Block aufgenommen?
  • Nennen Sie mir alle Instanzen eines Ereignisses vom Typ X (z. B. ein Crowdfunding-Vertrag, der sein Ziel erreicht), das von dieser Adresse in den letzten 30 Tagen ausgegeben wurde
  • Wie hoch ist der aktuelle Saldo meines Kontos?
  • Existiert dieses Konto?
  • Geben Sie vor, diese Transaktion für diesen Vertrag auszuführen. Was wäre die Ausgabe?

Die erste wird vom Transaktionsbaum behandelt ; die dritte und vierte werden vom Zustandsbaum und die zweite vom Empfangsbaum behandelt . Die ersten vier sind ziemlich einfach zu berechnen; Der Server findet einfach das Objekt, holt den Merkle-Zweig (die Liste der Hashes, die vom Objekt zur Baumwurzel aufsteigen) und antwortet dem Light-Client mit dem Zweig zurück. Der fünftewird ebenfalls vom Zustandsbaum behandelt, aber die Art und Weise, wie sie berechnet wird, ist komplexer. Hier müssen wir einen sogenannten Merkle-Zustandsübergangsbeweis konstruieren. Im Wesentlichen ist es ein Beweis, der die Behauptung aufstellt: „Wenn Sie Transaktion T auf dem Zustand mit Wurzel S ausführen, wird das Ergebnis ein Zustand mit Wurzel S‘, mit Log L und Ausgabe O sein“ („Ausgabe“ existiert als Konzept in Ethereum, weil jede Transaktion ein Funktionsaufruf ist; es ist theoretisch nicht notwendig).

Quittungen dienen im Wesentlichen zum Nachweis von Protokollen und Ereignissen .