Wie reduziert SegWit die Transaktionsgröße, wenn die Signatur einfach in einen anderen Teil der Transaktion verschoben wird?

In diesem Video wird erklärt, dass die Signatur aus dem Eingabebereich verschoben und in den neuen Abschnitt namens Zeuge verschoben wird . Soweit ich das beurteilen kann, ist die Unterschrift des Zeugen immer noch in dieser Transaktion enthalten - wie würde eine einfache Neuordnung von Informationen auf magische Weise mehr Platz schaffen?

Ich habe andere Artikel und Videos gelesen und keiner von ihnen scheint diese "Magie" anzusprechen.

Antworten (2)

TL; DR :
SegWit reduziert die Transaktionsgröße nicht, wenn Sie sich auf die Rohbytelänge von Transaktionen beziehen. Stattdessen wird die Blockgewichtung als neue Metrik eingeführt, die nicht direkt der rohen Bytelänge von Transaktionen entspricht, sondern Zeugendaten so behandelt, als hätten sie weniger Gewicht als andere Teile der Transaktion.


Das Limit für Bitcoin-Blöcke wurde mit der Aktivierung von Segwit geändert. Früher waren Blöcke auf 1.000.000 Bytes (1 MB) begrenzt. Seit segwit sind sie auf 4.000.000 Gewichtseinheiten begrenzt.

Bei der Berechnung des Gewichts einer Transaktion werden Bytes unterschiedlich gewichtet, je nachdem, ob sie Teil des Witness sind oder nicht:

  • Ein Nicht-Zeugen-Byte wiegt vier Gewichtseinheiten.
  • Ein Witness-Byte wiegt eine Gewichtseinheit.

Dies hat den Effekt, dass eine Nicht-Segwit-Transaktion genau den gleichen Anteil zum Limit beiträgt wie zuvor. ZB beträgt die rohe Bytelänge einer P2PKH-Transaktion mit einem Eingang und zwei Ausgängen 222 Bytes und wiegt daher 888 WU, dh 222B / 1.000.000 B = 888 WU / 4.000.000 WU. Das bedeutet, dass das Blockgewichtslimit für Nicht-Segwit-Transaktionen genau die gleiche Wirkung hat wie zuvor das Blockgrößenlimit, und es ist abwärtskompatibel.

Bei Segwit-Transaktionen ist das Gewicht jedoch nicht das Vierfache der Rohtransaktionsgröße. Beispielsweise beträgt die rohe Bytelänge einer P2SH-P2WSH 2-von-3-Multisig-Transaktion mit einer Eingabe und zwei Ausgaben 409 Bytes, aber ihr Gewicht beträgt 868 WU, da ein großer Teil der Transaktionseingabe Zeugendaten sind. Eine Segwit-Transaktion nimmt daher einen kleineren Teil der Gewichtsgrenze ein, als die rohe Bytelänge vermuten lässt.

Um einen einfacheren Vergleich mit alten Gebührensätzen zu ermöglichen, wird das Blockgewicht oft als „virtuelle Größe“ in „virtuellen Bytes“ oder „vBytes“ ausgedrückt. Die virtuelle Größe wird berechnet, indem das Gewicht einer Transaktion durch vier dividiert und auf die volle Ganzzahl aufgerundet wird. Bei Nicht-Segwit-Transaktionen sind die rohe Bytelänge und die virtuelle Größe gleich.

Zusammenfassend lässt sich sagen, dass die rohe Bytelänge von Blöcken jetzt 1.000.000 B überschreiten kann, die virtuelle Größe jedoch 1.000.000 vB nicht überschreiten kann.

Gewicht muss also eine Abstraktionsschicht sein, denn wenn ich einen Block habe, den ich auf der Festplatte speichern möchte, verbraucht er BYTES. Oder wenn ich den Block über das Netz übertrage, werden die gleichen Bytes berechnet. Würde ein maximaler SegWit-Block 4 Megabyte übertragen? Ich habe mich gefragt, ob das "Gewicht" nur für die Gebührenberechnung relevant ist?
@pebwindkraft : Ich denke, 3,7 MB ist die maximal erreichbare Größe, da es unmöglich ist, alle Daten in den Zeugen zu schreiben. Ich weiß nicht, was Sie mit "Abstraktionsschicht" meinen, aber die Blockkapazität ist in Gewicht definiert . Aus dieser Blockgewichtsgrenze leitet sich die Relevanz des Gewichts für den Gebührensatz ab.
yup, thx, die Blockkapazität ist diese "Abstraktionsschicht" (vielleicht nicht das richtige Wort, da ich kein Muttersprachler bin). Ich dachte wirklich an Bits und Bytes, die auf der Festplatte gespeichert sind (oder auch über die Netzwerkverbindungen übertragen werden). Blockkapazität ("Gewicht") und Festplattenkapazität sind also etwas anderes. Das war der verwirrende Teil. Sipa erwähnt hier ( bitcoin.stackexchange.com/questions/58018/… ), die Blockgröße würde zunehmen. Da er "Godfather of Segwit" ist, vertraue ich ihm :-) Segwit rockt!
@pebwindkraft: Die virtuelle Größe der Transaktionen ist streng kleiner oder gleich der Rohtransaktionsgröße, da ein Teil der Rohgröße abgezinst wird. Da die virtuelle Größenbegrenzung gleich der vorherigen Blockgrößenbegrenzung ist, kann der tatsächliche Speicherbedarf die vorherige Blockgrößenbegrenzung überschreiten. Eine Tatsache, die auch hier im untersten Chart zu beobachten ist: segwit.party/charts
Die kurze Antwort auf die Frage im Titel lautet einfach, dass SegWit die Transaktionsgröße nicht reduziert (wenn Größe Bytes bedeutet). Es definiert ein neues Konzept als "Größe", das nicht mehr direkt der Festplattengröße entspricht. In dieser neuen Größe wird der Zeuge abgezinst, und somit werden Transaktionen – praktisch „kleiner“.
@PieterWuille: Danke, ich habe ein TL;DR hinzugefügt, inspiriert von diesem Kommentar.

segwit IST eine Erhöhung der Blockgröße. Keine Magie.

Der Segwit-Mechanismus erzwingt eine Grenze für eine gewichtete Datengröße, die berechnet wird, indem der Nicht-Sig-Teil einer Transaktion als Basisdaten (Gewicht = 4) gezählt wird und die Sig-Daten zu einem ermäßigten Satz (Gewicht = 1) gezählt werden. Die Summe der gewichteten Transaktionsgrößen des Blocks (als „Blockgewicht“ bezeichnet) ist auf 4 MB begrenzt. Clients ohne Upgrade sehen nur die Basisdaten und wenden wie zuvor die alte 1-MB-Grenze an.

Jetzt können Sie also sehen, wie sich die Blockgröße erhöht. Wenn die Transaktionen alle (fast) keine Basisdaten und hauptsächlich Signaturdaten haben, kann die tatsächliche Blockgröße bis zu 4 MB betragen. Wenn die Transaktionen hauptsächlich Basisdaten und keine Signaturdaten haben, kann die Blockgröße nur bis zu 1 MB betragen. Der tatsächliche Fall wird immer irgendwo dazwischen liegen - daher eine Erhöhung des Blockraums.