Bestätigen von Transaktionen in Merkle Root und SegWit

Ich versuche herauszufinden, wie genau Transaktionen in einem Block bestätigt werden. Ich verstehe, dass Sie zur Bestätigung einer Transaktion sie mit der zugehörigen Transaktion und dann den zugehörigen Hashes hashen, bis Sie die Merkle-Root erhalten, und wenn die Merkle-Root dieselbe ist wie die im Block, ist die Transaktion legitim.

Aber wie würde jemand wissen, welche zugehörige Transaktion mit Ihrer Transaktion gehasht werden muss, um ihre Gültigkeit zu bestätigen? Und woher würdest du es nehmen?

Außerdem bin ich etwas verwirrt über Segregated Witness. So wie ich es verstehe, werden die Signaturen von den Transaktionen getrennt und die Signaturen werden auf die gleiche Weise wie Transaktionen gehasht. Dieser endgültige Signatur-Hash wird entweder mit dem endgültigen Transaktions-Hash gehasht, um eine Merkle-Wurzel zu bilden, oder er ist als eine weitere Merkle-Wurzel in einem separaten Feld im Block enthalten. Aber wenn die Merkle-Wurzel immer gleich groß ist (nehme ich an), wie spart das Platz? Wenn die Merkle-Root immer 256 Bit beträgt, warum spielt es dann eine Rolle, ob die Signaturen mit den Transaktionen gehasht oder separat gehasht werden?

Ich kann keine klaren Antworten auf meine Fragen finden, daher bin ich für jede Hilfe dankbar.

Antworten (1)

Aber wie würde jemand wissen, welche zugehörige Transaktion mit Ihrer Transaktion gehasht werden muss, um ihre Gültigkeit zu bestätigen? Und woher würdest du es nehmen?

Ihre Frage ist etwas vage, es hört sich so an, als würden Sie fragen, wie ein Lite-Client bestätigt, dass eine Transaktion, die ihm wichtig ist, tatsächlich in einem Block ist. Die Partei, die versucht, sie davon zu überzeugen, dass die Transaktion eingeschlossen ist, kann ihnen die erforderlichen Informationen geben.

Full Nodes haben bereits alle Daten und müssen diese nicht bereitstellen.

Außerdem bin ich etwas verwirrt über Segregated Witness. So wie ich es verstehe, werden die Signaturen von den Transaktionen getrennt und die Signaturen werden auf die gleiche Weise wie Transaktionen gehasht. Dieser endgültige Signatur-Hash wird entweder mit dem endgültigen Transaktions-Hash gehasht, um eine Merkle-Wurzel zu bilden, oder er ist als eine weitere Merkle-Wurzel in einem separaten Feld im Block enthalten. Aber wenn die Merkle-Wurzel immer gleich groß ist (nehme ich an), wie spart das Platz? Wenn die Merkle-Wurzel immer 256 Bit ist,

Die Segwit-Verpflichtung befindet sich weiter unten im Baum, nicht ganz oben. Dies macht keinen wirklichen funktionalen Unterschied, beantwortet jedoch Ihre Frage, ob die Wurzel immer gleich groß ist.

Warum spielt es eine Rolle, ob die Signaturen mit den Transaktionen gehasht oder separat gehasht werden?

Denn wenn Transaktionen angeben, welche Münzen sie ausgeben, beziehen sie sich darauf durch die txid. Wenn die Signaturdaten Teil der txid sind, machen Änderungen an der Signatur (wie Manipulation durch Dritte oder Rücktritt) nachfolgende Transaktionen ungültig. Wenn die Signaturen von diesen txids ausgeschlossen werden, tritt dieses Problem nicht auf.