Das Konzept von Blockgewicht und Segwit ist noch unklar

Es scheint eine doppelte Frage zu sein, aber ich habe viele Artikel und Beiträge gelesen, um Segwit zu verstehen.

Die folgenden Links sind etwas, das ich gelesen habe

Was ist das Blockgewicht und wie unterscheidet es sich von der Blockgröße?

Was ist die größtmögliche Blockgröße nach der Segwit-Aktivierung?

Verständnis der Segwit-Blockgröße

Blockgewicht

Aber ich brauche ein Beispiel, um das Blockgewicht T_T zu klären

Das sagte der Autor im Artikel Verständnis der Blockgröße von Segwit

Die Segwit-Blöcke werden durch etwas namens Block Weight eingeschränkt. Das Blockgewicht ist ein neues Konzept, das in Segwit eingeführt wurde und pro Transaktion berechnet wird. Jede Transaktion hat ein „Gewicht“, das folgendermaßen definiert ist:

(tx size with witness data stripped) * 3 + (tx size)

Ich denke, TX-Größe ist

tx = transactions + witness data

Dann steckte ich in Rekursion fest ... Ich kann es nicht verstehen.

Für mich scheint es widersprüchlich zu sein.

Denn um eine tx-Größe zu definieren, muss die Blockgewichtung die Größe der Zeugendaten einschränken. Aber um ein Gewicht zu bekommen, braucht man eine TX-Größe.

Ich habe verstanden, dass, wenn keine Zeugendaten vorhanden sind, die maximale Blockgröße 1 MB beträgt (vor Segwit). Ja Es ist klar. Aber einige Leute verwenden Gewicht gleich mit Byte.

Einige Leute sagten zum Beispiel (insbesondere Bitcoin Wiki - Blockgewicht )

weight = 1mb * 3 + 1mb = 4mb

Und andere sagten ( Was ist Blockgewicht und wie unterscheidet es sich von der Blockgröße? )

Sogar in diesem Beitrag sagte Sam Jone 4.000.000 WU, aber der Block ist immer noch 1 MB groß

weight = 1mb * 3 + 1mb = 4,000,000 Weight unit(WU) Or 4mWU

wie ist der genaue Ausdruck?

und wenn es keine Zeugendaten gibt, was sind dann noch 3mb oder 3mWU gefüllt? ist es leer?

In Block #577639 beträgt die Blockgröße 1158,038 kB

Wie werden Zeugendaten gespeichert?

1 MB Transaktion + Zeugendaten richtig ...?

oder

1-MB-Block wird von Transaktionen und Zeugendaten geteilt?

Das Grundkonzept von Segwit besteht darin, eine Blockgröße von 1 MB für Transaktionen beizubehalten und Zeugendaten hinzuzufügen, richtig ...?

Das bedeutet, dass die Größe der Transaktionen (Zeugendaten sind ausgeschlossen) 1158,038 KB beträgt? oder Transaktionen + Zeugendaten sind 1158.038kb?

Wie wir wissen, beträgt das maximale Blockgewicht 4 mWU oder 4 MB. Wenn also Transaktionen ohne Zeugendaten etwa 1,1 MB groß sind, erscheint es seltsam

block weight = 1.1mb * 3 + (1.1mb + witnessdata)

Weil es größer als die maximal mögliche Größe ist.

Wenn Transaktionen + Zeugendaten etwa 1,1 MB betragen

block weight = (1.1mb - witnessdata) * 3 + 1.1mb

Diese Berechnung erscheint vernünftiger. Wenn die Zeugendaten jedoch weniger als 0,1 MB groß sind, beträgt das Blockgewicht mehr als 4 MB. Ist es möglich, dass so wenig Zeugendaten?

Und wenn es nur Transaktionsdaten und keine Zeugendaten wie 1 MB Transaktionsdaten und 0 Zeugendaten gibt (das Blockgewicht beträgt 4 MB oder 4 mWU, was die theoretische maximale Größe ist), wie wird dann das Problem der Transaktionsverformbarkeit gelöst?

Es tut mir so leid. Die Fragen sind ziemlich lang, aber ich hoffe, dass sie nicht nur mir, sondern auch jemandem, der etwas über Blockchain studiert, hilfreich sein können.

Vielen Dank fürs Lesen

Antworten (1)

Schau mal: https://blockchair.com/bitcoin/block/0000000000000000000cbbceb342e07071f9621607e044ec909aa86fcdf88e8a

Size = 1,158,038 bytes
Weight units = 3,992,825 WU

Was bedeutet es nun? Die Größe ist also das, was Sie wahrscheinlich gut verstehen – wenn Sie eine Datei auf der Festplatte haben, wird ihre Größe in Bytes gemessen, und genau das bedeutet die Größe hier. Es ist die Anzahl der Bytes, die Sie benötigen würden, um einen solchen Block im Speicher oder auf der Festplatte zu speichern. Dies ist die Summe aus Nichtzeugendaten (nWD) und Zeugendaten (WD). Nennen wir dies zur Verdeutlichung die absolute Größe (AS).

Es gibt auch etwas, das virtuelle Größe (VS) genannt wird. Dies ist ein neues Konzept, das den Block in neuen Einheiten, genannt vBytes, misst. Sie wird berechnet als (absolute Größe der Nicht-Zeugendaten) + (absolute Größe der Zeugendaten)/4.

Das Gewicht des Blocks (BW) wird in Gewichtseinheiten berechnet und wird berechnet als (absolute Größe der Nichtzeugendaten) * 4 + (absolute Größe der Zeugendaten). Dies entspricht eigentlich dem, was Sie in Ihrem Beitrag erwähnt haben: (tx size with witness data stripped) * 3 + (tx size)weil die Transaktion selbst sowohl Zeugen- als auch Nicht-Zeugendaten enthält.

Also, jetzt wissen wir das:

AS = 1,158,038 bytes = nWD bytes + WD bytes
BW = 3,992,825 WU = nWD * 4 weight units + WD weight units

Was sind die Grenzen im Protokoll? Derzeit gibt es keine Beschränkung der Blockgröße mehr. Es gibt nur eine Grenze für das Blockgewicht. Diese Grenze ist auf 4.000.000 WU festgelegt. Daraus folgt, dass im Fall eines Blocks ohne Segwit-txs das Gewicht jedes Bytes 4 WU beträgt, daher ist ein solcher Block ohne Segwit-txs durch die absolute Größe von 1 MB begrenzt.

Blöcke, die Segwit-TXS enthalten, können größer sein, und es gibt einige theoretische Berechnungen, die besagen, dass Sie eine absolute Größe von etwa 3,7 MB eines Blocks erreichen können. Aber diese theoretische Grenze ist genau das – theoretisch. Selbst wenn der Block voller Segwit-Txs wäre, würde seine absolute Größe in der Praxis diese Grenze nicht erreichen.

Derzeit enthalten die meisten Blöcke sowohl txs – Segwit als auch Legacy, sodass wir die Blockgrößen von vollständigen Blöcken normalerweise im Bereich zwischen 1 und 2,2 MB sehen. Der Block ist voll, wenn sein Gewicht sehr nahe an der Protokollgrenze von 4.000.000 WU liegt.

Dies impliziert, dass es nicht richtig ist zu glauben, dass ein Block mit einer Größe von 1,1 MB aus 1.000.000 Bytes nWD besteht und der Rest WD ist. Das würde nicht funktionieren, da das Gewicht von 1.000.000 nWD-Bytes bereits 4.000.000 WU wäre und wir daher, wenn wir das Gewicht von WD hinzufügen würden, die Grenze überschreiten würden. Das ist nicht möglich.

Wenn wir also AS = 1.158.038 KB kennen, dann sind es eher 944.929 Bytes von nWD mit einer Gewichtung von 3.779.716 WU und der Rest sind 213.109 Bytes von WD mit einer Gewichtung von 213.109. Damit beträgt das Gesamtgewicht des Blocks 3.779.716 + 213.109 = 3.992.825 WU.

Wir können jetzt VS berechnen:

VS = nWD vBytes + WD/4 vBytes = 944,929 + 213,109 / 4 = 998,206.25 vBytes

Die virtuelle Größe (VS) kann also nicht größer als 1.000.000 vBytes sein, also ist das gemeint, wenn jemand sagt, dass die neue Blockgröße immer noch auf 1 MB begrenzt ist - sie meinen tatsächlich 1 Million vBytes.

wow.. wirklich wirklich klar. Vielen Dank! aber "Derzeit enthalten die meisten Blöcke beide txs - Segwit und Legacy" Dieser Satz bedeutet, dass selbst der neueste Block noch eine Legacy-Transaktion enthält, die ein Skript enthält?
Sogar die neuesten Blöcke enthalten Nicht-Segwit-Transaktionen. Da sie aber auch Segwit-Transaktionen enthalten, ist der gesamte Block Segwit. Ich bin mir nicht sicher, was Sie mit "Skript im Inneren" meinen. Skript wird sowohl in Segwit- als auch in Nicht-Segwit-Transaktionen verwendet. Da dieses Thema sehr umfangreich ist, sollten Sie in Betracht ziehen, mehrere Fragen mit begrenztem Umfang zu stellen.
Vielen Dank sehr hilfreich. Hab eine schöne Woche:)