Wie kann Segwit den Transaktionsdurchsatz erhöhen, wenn die gleiche Datenmenge in der Blockchain gespeichert wird?

Ich poste dies, nachdem ich die Antworten darauf gelesen habe: Wo wird die Signatur in einer SegWit-Transaktion gespeichert?

Ich habe durch das Lesen herausgefunden, dass in Segwit die "Zeugen" (oder Signaturen), die die Authentizität einer Transaktion bestätigen, immer noch in der Blockchain gespeichert sind. In diesem Fall sollte die gleiche Menge an Bits von einer bestimmten Transaktion verbraucht werden, als ob Segwit nicht verwendet würde. Wenn die Blockgröße gleich bleibt, sagen wir 1 MB, dann sollte sie genau die gleiche Anzahl von Transaktionen enthalten.

Ich habe eine alternative Möglichkeit. Nehmen wir an, was tatsächlich an die Knoten gesendet wird, ist eine Transaktion mit einem leeren Signaturfeld (ich denke, dass ein solches Feld aufgrund von Multi-Sig-Sachen und Skripten nicht wirklich existiert, aber ertragen Sie mich). Dann können die Unterschriften über einen separaten Kanal gesendet werden. Was tatsächlich auf die Blockchain gestempelt wird, ist eine Transaktion mit einem leeren Signaturfeld. Und dann akzeptieren die Nicht-Segwit-Knoten wegen der längsten Blockchain-immer-gewinnt-Regel einfach, dass die Blockchain mit der größten Anzahl von Transaktionen, die einige lustige signaturlose Transaktionen enthält, die maßgebliche Blockchain ist.

Aber anscheinend ist die Realität komplizierter.

Außerdem stellt sich die Frage, inwieweit die längste Blockchain-immer-gewinnt-Regel missbraucht werden kann. (Das Wort „missbraucht“ impliziert keine negative Meinung). Nehmen wir zum Beispiel an, ich erfinde FoobarWit. FoobarWit ist das gleiche wie Bitcoin, aber mit einer größeren Blockgröße (kein Segwit). Sobald genügend Knoten FoobarWit übernehmen, werden mehr solcher Knoten das Mining-Rennen gewinnen, und andere Knoten werden effektiv größere Blöcke akzeptieren, da die Historie länger ist. Ich weiß, dass dem nicht so ist, aber warum?

@Murch das habe ich gelesen. Hat nicht wirklich geholfen

Antworten (2)

Die Antwort auf die Frage „Sind die Segwit-Zeugen Teil der Blockchain“ hängt davon ab, was Sie als Blockchain definieren:

  • Laut alten Pre-Segwit-Knoten ist die Antwort nein , da sie sich nicht darum kümmern oder die Zeugen empfangen.

  • Laut neuen Segwit-Knoten lautet die Antwort ja ; die Zeugen sind ebenso Teil der Kette wie alles andere und unterliegen ebenso vielen Validierungsregeln.

Segwit erhöht also den Durchsatz leicht, auf Kosten der Vergrößerung der Blockchain. Hier gibt es keine Wunderwaffe, und dieser Aspekt von Segwit ist einfach eine Erhöhung der Blockgröße. Es handelt sich nicht um eine Skalierbarkeitsverbesserung.

Segwit war in erster Linie eine Lösung für das Problem der Formbarkeit von Transaktionen und öffnete die Tür für verschiedene Protokolle auf höherer Ebene, die dadurch behindert wurden, dass sie nicht in der Lage waren, über zukünftige On-Chain-Transaktionen nachzudenken, die noch nicht veröffentlicht wurden. Darüber hinaus hat es auch die Anreizstruktur ein wenig verbessert (was die Ausgaben relativ billiger macht, wenn es um die Schaffung von Ergebnissen geht). Als letzten Nebeneffekt hat es auch die Blockgröße abwärtskompatibel etwas erhöht.

Was Ihre Frage zu einem anderen Fork betrifft, die noch weiter geht: Was Ihre Software tut, hat keine Auswirkungen auf diejenigen, die sie nicht übernehmen. Selbst wenn es die gesamte Hashrate der Welt an Bord hat, werden sich alte Nodes nicht darum kümmern oder Ihre zusätzlichen Daten sehen.

Aber was macht diese Änderung dazu in der Lage, keine Hard Fork auszulösen? Und wie kann etwas auf der Blockchain sein und nicht sein? Ich dachte, es gäbe nur eine Kette.
Ich kann das, was du sagst, nicht einfach glauben
Die einzige wirkliche Erklärung wäre eine Geschichte einer Segwit-Transaktion zwischen Alice und Bob, die es durch das Netzwerk schaffte. Alles andere ist "Es kann das auf magische Weise tun!" Obwohl die Erklärung von James C. allmählich hilft
Ich lese den BIP. Wenn ich einen Durchbruch habe, werde ich eine Antwort posten
Segwit-Knoten entfernen einfach die Zeugen, wenn sie an Nicht-Segwit-Peers weiterleiten. Da die Zeugen die txid nicht beeinflussen, gibt es in einer Transaktion nichts, was in irgendeiner Weise auf ihren Zeugen anspielt oder sich darauf bezieht, so dass für Knoten, die sich nicht um diese Zeugen kümmern, nichts kaputt geht. Der Block enthält jedoch einen Hash aller Zeugen (auf eine Weise, die für alte Knoten wie zufällige Daten aussieht), was ihn zu einem Teil der Kette für diejenigen macht, die sich darum kümmern .
Es hilft zu erkennen, dass die Blockchain nicht nur ein Blob von Bytes ist. Es ist eine Struktur mit Datenteilen, die auf andere Datenteile mit Hashes verweist. Ob ein Knoten die Daten benötigt, auf die diese Hashes verweisen, ist seine eigene Entscheidung (z. B. haben leichte Knoten die Header, benötigen aber keine Transaktionen). Segwit fügte einfach ein neues Datenelement hinzu, um das sich neue Knoten kümmern und andere nicht.
Es ist also fast so, als würden wir sagen, dass wir einen abwärtskompatiblen Dialekt von C machen, in dem einige Kommentare (die ältere Compiler ignorieren würden) ausführbar werden. Ich verstehe das. Aber dann sagen Sie, dass der Block nur den Hash der Zeugen enthält
Mein Verständnis ist, dass Hashing eine irreversible Operation ist. Sie legen also nur eine verschlüsselte Version der Zeugendaten in der Blockchain ab
Es ist falsch, an Blöcke zu denken, die irgendetwas "enthalten". Sie sind alle nur Hashes. Auf die gleiche Weise kann man auch sagen, dass Transaktionen kein "Teil" der Blockchain sind, da Blockheader nur einen Hash der Transaktionen enthalten. Ob Sie denken, dass Transaktionen ein wesentlicher Teil der Kette sind, hängt vom Kontext ab: Full Nodes tun dies (sie akzeptieren keinen Block mit TX-Hashes ohne die eigentlichen Transaktionen), Light Nodes nicht (sie sehen die Hashes und sind glücklich damit). Dasselbe gilt für Segwit-Zeugen.
Was ist dann der Sinn eines Lichtknotens? Was um alles in der Welt kann es tun? ich bin verloren
Es kann selektiv überprüfen, ob Transaktionen in die Kette aufgenommen wurden, ohne zu überprüfen, ob ihre Signaturen gültig sind. Dies ist nicht so sicher wie ein vollständiger Knoten, aber vorausgesetzt, dass genügend andere vollständige Knoten ausführen, ist die Benutzerfreundlichkeit mit einem Sicherheitsniveau, das für einige Anwendungsfälle akzeptabel ist, viel besser. Beachten Sie, dass ich nicht sage, dass Segwit mit diesem Sicherheitskompromiss zusammenhängt (ist es nicht), aber es ist ein ähnliches Prinzip. Sie müssen aufhören, daran zu denken, dass die Kette nur ein Datenklumpen ist, der einige Dinge enthält und andere Dinge nicht. Es ist eine Struktur mit Verpflichtungen, die manche interessieren.

Das Blocklimit von 1 MB gilt nach der Segwit-Aktivierung weiterhin, bezieht sich jedoch ausschließlich auf die im Pre-Segwit-Format serialisierten Blocktransaktionen, die keine Zeugen enthalten. Diese 1 MB sind heute noch Konsens.

Wenn Segwit aktiviert ist, gibt es eine zusätzliche Blockgrößenbeschränkung, die für Segwit-Daten gilt: Es ist eine „Gewichts“-Grenze von 4 MB pro Block.

Das Gewicht errechnet sich wie folgt:

  • Transaktionsbytes (Pre-Segwit-Serialisierung) x 3
  • Plus Transaction Bytes mit Segwit (Segwit-Serialisierung) x 1

Wenn der Zeugenanteil der gesamten Transaktionsdaten auf 100 % zunimmt, nähert sich die effektive Blockgrößenbegrenzung in Byte 4 MB.

Die Zeugen werden also nicht auf die Blockchain gestempelt?
Die Einschränkung der Blockgröße besteht darin, DDOS über den Segwit-Kanal zu vermeiden?
Gute Frage: Sie werden als Witness Root (wie der Merkleroot) zusammen mit dem Coinbase Witness in einer Coinbase op_return-Ausgabe festgeschrieben, die auf Korrektheit validiert wird.
Zählt das op_returnFeld nicht zur klassischen 1MB Blockgröße?
Es gibt keinen separaten Kanal. Wenn ein Knoten nicht segwit-fähig ist, erkennen Peers dies auf P2P-Ebene und sehen davon ab, Witness-Daten an den älteren Peer zu senden. Zeugendaten werden von den tx-Daten „gestrippt“.
Ja, op_return sind keine Zeugendaten und tragen daher zum Blocklimit von 1 MB bei.
"als Zeuge root begangen". Auf die Blockchain? Danke.
Ja, in der Coinbase-Transaktion, die die erste tx in jedem Block ist :) finden Sie Details in einem der Segwit-BIPs. So etwas wie dsha256(witnessroot|coinbasewitness).