Was wäre bei 100 % Segwit-Transaktionen die maximal mögliche Anzahl an Transaktionsbestätigungen in einem Block?

Was wäre bei 100 % Segwit-Transaktionen die maximal mögliche Anzahl an Transaktionsbestätigungen in einem Block?

Und wie viele utxo können durch einen Block voller Segwit-Transaktionen aktualisiert werden?

was bedeutet es, dass ein "utxo aktualisiert" wird? UTXOs werden verbraucht und bei jeder Transaktion werden neue produziert. Können Sie konkretisieren, was Sie eigentlich meinen?
Wie viele utxo werden maximal von einem Block voller Segwit-Transaktionen (~12k) aktualisiert (erstellt oder verbraucht oder aktualisiert)? Ist es dasselbe wie vor Segwit? Ich meine, wie viele Bitcoin-Adressen werden maximal von einem Block voller Segwit-Transaktionen aktualisiert?
Ich denke, cdecker hat es wirklich klar gemacht, wenn es sich bei allen um Transaktionen mit 1 Eingabe und 1 Ausgabe handelt, dann sind 12.000 die maximale Anzahl von UTXOs, die verbraucht und produziert werden. Außerdem bedeuten 12.000 Transaktionen, dass maximal 12.000 eindeutige Adressen produziert werden.

Antworten (1)

Sehr interessante Frage, mal sehen, was die kleinste Transaktion ist, die wir aufbauen können. Damit es minimal ist, muss es einen einzigen Eingang und einen einzigen Ausgang geben. Der Nicht-Segwit-Teil würde etwa so aussehen:

  • 4-Byte-Version
  • 1 Byte Eingangszähler
  • Eingang
    • 36 Bytes Endpunkt
    • 1 Byte scriptSigLen ( 0x00)
    • 0 Byte scriptSig
    • 4-Byte-Folge
  • 1 Byte Ausgangszähler
    • 8 Byte Wert
    • 1 Byte scriptPubKeyLen
    • 22 Byte scriptPubKey ( 0x0014{20-byte keyhash})
  • 4 Byte Sperrzeit

Dies summiert sich auf insgesamt 82 Bytes für den Nicht-Zeugen-Teil. Bei einer Gesamtblockgröße ohne Zeugen von 1 Million Bytes erhalten wir also maximal 12195 Transaktionen. Unter der Annahme, dass alle ausgegebenen Ausgaben P2WPKH waren, besteht der Zeugenteil für jede Transaktion aus zwei Pushs: einer für die Signatur und einer für den Pubkey. Diese sind etwa 72 Bytes und 33 Bytes lang und benötigen jeweils ein Längenpräfix von 1 Byte. Zusätzlich gibt es eine 1-Byte-Witness-Version. Die gesamte Zeugengröße beträgt also 108 Bytes. Mit 3 MB verbleibendem Speicherplatz im Witness-Block bringt uns dies auf etwa 27777 Witnesses pro Block. Der begrenzende Faktor ist also der Platz im Nicht-Zeugen-Teil des Blocks, das ist also die letzte Zahl, die wir berücksichtigen sollten.

Beachten Sie, dass ich die Nicht-Segwit-Serialisierung für den Nicht-Segwit-Teil verwendet habe, da dies für nicht aktualisierte Knoten gilt. Beachten Sie auch, dass dies ein extremes Beispiel ist, da die meisten Transaktionen nicht Single-Input-Single-Output sind. Eine entsprechende Nicht-Segwit-Transaktion hätte eine Größe von 192 Bytes, was uns zusammen mit der Größenbeschränkung von 1 MB auf 5208 Transaktionen pro Block bringt, verglichen mit 12195 maximalen Segwit-Transaktionen pro Block.

Der zweite Teil Ihrer Frage zum maximalen UTXO in einem Block ist ziemlich einfach. Wir möchten den Overhead aus der Transaktionsstruktur amortisieren und Inputs + Outputs maximieren. Da die Eingänge größer als die Ausgänge sind, verwenden wir einfach einen einzelnen Eingang und berechnen die maximale Anzahl von Ausgängen, die in einen Block passen, der 32256 ist. Da die Ausgänge Nicht-Segwit-Daten sind, ändert sie sich auch minimal vor der Segwit-Aktivierung (nur die Signatur von der einen Eingabe wird in den Segwit-Teil verschoben). Daher beträgt die maximale UTXO-Abwanderung 1 UTXO wird entfernt, 32256 werden hinzugefügt. Zum Vergleich: Ohne Segwit war die maximal hinzugefügte Anzahl 32252. Beachten Sie, dass es möglicherweise andere Limits gibt, die ich nicht berücksichtigt habe, aber dies sind definitiv die oberen Limits, und diese Limits haben sich wahrscheinlich während der Aktivierung von Segwit nicht geändert.

Nur um sicherzugehen, dass wir Äpfel mit Äpfeln vergleichen: In beiden Fällen sprechen wir über signierte Eingaben und Ausgaben, die niemand ausgeben kann, richtig?
Richtig, in beiden Fällen sprechen wir SIGHASH_ALLvon , was die häufigste Verwendung ist. Da wir nur einen einzigen Eingang und einen einzigen Ausgang haben, passt dies auch zu SIGHASH_SINGLE.
@cdecker wenn 1 tx = 1 Utxo-Update / -Erstellung, dann ist 12195 die maximale Utxo-Änderung in einem Block? Oder können mehr als 12195 utxo in einem Block aktualisiert (erstellt) werden?
Wahrscheinlich nicht, aber das ist die kleinste vernünftige Verwendung, die mir einfallen könnte. Wenn Sie Ausgaben nur mit OP_TRUE erstellen würden, könnten Sie mit etwas kleineren Transaktionen davonkommen, aber Sie könnten nicht sicherstellen, dass nur der Eigentümer sie ausgeben kann. Insbesondere können Sie 21 der 22 Bytes scriptPubKey loswerden, wodurch der Nicht-Zeugen-Teil nur 61 Bytes beträgt, was Sie zu 16393 Transaktionen bringt, aber auch diese wären überhaupt nicht sicher.
@cdecker kannst du bitte 2 Teil der Frage beantworten, damit ich sie als beantwortet markieren kann.
Nun, wir sind in der gleichen Größenordnung für die aktualisierten UTXO-Einträge. Entfernen Sie 12195 und fügen Sie 12195 neue hinzu, obwohl es möglich sein könnte, einige weitere Eingaben/Ausgaben einzufügen und den Transaktionsaufwand weiter zu amortisieren.
Ok, sieht so aus, als ob die maximale UTXO-Abwanderung etwas anders ist, ich werde meine Antwort ändern :-)