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

Beim Lesen über BIP141 bin ich auf die folgenden Optionen gestoßen:

Block creation options:
-blockmaxweight=<n> Set maximum BIP141 block weight (default: 3000000)
-blockmaxsize=<n>   Set maximum block size in bytes (default: 750000)

Was ist ein Blockgewicht? Ist es eine ganzzahlige Darstellung der Größe?

Antworten (2)

Das Blockgewicht wird in BIP 141 selbst definiert:

Das Blockgewicht ist definiert als Basisgröße * 3 + Gesamtgröße. (Begründung[3])

Die Basisgröße ist die Blockgröße in Bytes mit der ursprünglichen Transaktionsserialisierung ohne Zeugendaten, wie sie von einem nicht aktualisierten Knoten gesehen wird.

Die Gesamtgröße ist die Blockgröße in Bytes mit serialisierten Transaktionen wie in BIP144 beschrieben, einschließlich Basisdaten und Zeugendaten.

Die angegebene Begründung lautet:

Grund für die Verwendung einer einzigen zusammengesetzten Einschränkung anstelle von zwei separaten Grenzwerten wie 1 MB Basisdaten und 3 MB Zeugendaten: Die Verwendung von zwei separaten Grenzwerten würde das Schürfen und die Gebührenschätzung nahezu unmöglich machen. Miner müssten ein komplexes nichtlineares Optimierungsproblem lösen, um den Satz von Transaktionen zu finden, die die Gebühren unter Berücksichtigung beider Einschränkungen maximieren, und Wallets wären nicht in der Lage zu wissen, was zu zahlen ist, da es davon abhängt, welche der beiden Bedingungen durch die am stärksten eingeschränkt wird Time Miner versuchen, Blöcke mit ihren Transaktionen zu produzieren. Ein weiteres Problem bei einem solchen Ansatz ist das Freeloading. Sobald eine Reihe von Transaktionen die Basisdatenbeschränkung von 1 MB erreicht, können dem Zeugen bis zu 3 MB zusätzliche Daten hinzugefügt werden, indem die Gebühr nur minimal erhöht wird. Die Grenzkosten für zusätzlichen Zeugenraum werden in diesem Fall effektiv Null.

Dies ist also ein vom BIP141 definierter Begriff, der nichts mit dem Bitcoin-Kern zu tun hat
Ja, so sieht es aus.

Es ist ein Trick, der die Blockgröße erhöht, ohne die Abwärtskompatibilität mit Nicht-Segwit-Knoten zu beeinträchtigen. Ich fand diesen Artikel von Jimmy Song hilfreicher als zu versuchen, den BIP zu verstehen.

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-Größe mit entfernten Zeugendaten) * 3 + (TX-Größe)

Nicht-Segwit-Transaktionen haben keine Zeugendaten, sodass das Gewicht einer Nicht-Segwit-Transaktion genau viermal so groß ist. Segwit-Transaktionen haben einige Zeugendaten, sodass das Gewicht weniger als viermal so groß sein wird. Hinweis Segwit-Transaktionen werden ohne Witness-Daten an Legacy-Knoten übertragen, sodass diese Formel immer zu Blöcken führt, die an Legacy-Knoten übermittelt werden und kleiner oder gleich 1.000.000 Bytes sind.

Wenn Sie einen Block mit Nicht-Segwit-Transaktionen (0 Byte Zeugendaten) füllen, wird die Anzahl der Gewichtseinheiten (WU) berechnet als

(1,000,000 B - 0 B) * 3 + 1,000,000 B = 4,000,000 WU

Aber die Größe des Blocks beträgt immer noch 1.000.000 Bytes. Das bedeutet auch, dass Sie einen Block mit Segwit-Transaktionen füllen können, solange ihre Größe ohne die Zeugendaten 1.000.000 Bytes oder weniger beträgt. Der Grund dafür ist, dass Nicht-Segwit-Knoten die Zeugendaten für Segwit-Transaktionen nicht sehen und sie daher nicht zur Blockgröße zählen.

Bis zum 21.01.2018 wurden mehrere Blöcke, wie dieser , abgebaut, die größer als 1 MB sind.