
Autor: John Otander, Kern -Ethereum -Entwickler;
Dieser Artikel wurde von Ethereums oft Antworten auf Vitalik in der jüngsten Reddit AMA inspiriert.
Vitalik wies darauf hin, dass es vernünftig ist, die Gasgrenze mäßig zu erhöhen, und die Gasgrenze ist in fast drei Jahren nicht zugenommen, was die längste Zeit in der Geschichte der Vereinbarung ist.Vitalik hat auch einige einfache Berechnungen durchgeführt, um die Gasgrenze von Ethereum auf 40 Millionen zu erhöhen.
In diesem Artikel heißt es, warum es schwierig ist, die Gasgrenze von Ethereum zu verbessern?Erhöhen Sie die Risiken, die durch Ethereum Gasgrenze sowie verwandte Lösungen bestehen.
1AnwesendGasgrenze(GasLimit)
Die Gasgrenze bestimmt die in einem Block abgeschlossene Arbeiten und daher fest, wie viele Transaktionen pro Block ausgeführt werden können.Durch die Verbesserung der Gasgrenze können Ethereum einen höheren Transaktionsdurchsatz oder komplexere Transaktionen verarbeiten.Die spezifischen Gasgrenzeeinstellungen wurden von Bergleuten/Stakeholdern beeinflusst, und die Grenze hat im Laufe der Jahre zugenommen.Die folgende Abbildung stammt von Etherscan.io und zeigt den historischen Gasverbrauch (sehr nahe am Gasgrenze, alle Grenzhöhen wurden vom Markt verdaut).
2,Risiko
Die zunehmende Gasgrenze beinhaltet jetzt mehrere Risiken.
(1) Leckage Blockrate
Ich habe in meinem vorherigen Artikel erwähnt, dass die Onkelrate bei der Bewertung der Zunahme der Gasgrenze der am meisten diskutierte Indikator ist.Jetzt, nach der Ethereum -Fusion, gibt es keine Entsperren mehr.Wenn wir wissen möchten, ob der Knoten die aktuelle Gasgrenze gut verarbeiten kann, besteht die einzige Möglichkeit, die fehlende Blockrate zu erkennen.Diese Metrik ist jedoch fehlerhaft, weil sie nur die derzeit unterversetzten Knoten zeigt.Es bietet uns keine gute Metrik, um die Zunahme der Gasgrenze zu zeigen, und zeigt nur den durchschnittlichen Fall, nicht den schlimmsten Fall, der beim Angriff auftreten kann.
(2) Statusgröße
Der Account Snapshot von Block 18418786 (24. Oktober 2023) beträgt 10,33 GB und der Speicher -Snapshot 76,59 GB, sodass der Gesamtzustand ungefähr 87 GB beträgt.Block 17419840 (6. Juni 2023) hat einen Status von etwas weniger als 80 GB.Dies bedeutet, dass der Status in 4 Monaten um etwa 7 GB gestiegen ist, was etwa 2 GB pro Monat bedeutet.
Wenn wir 87+ (2*12*# Jahre) verwenden, um zu schließen, beträgt der Status 111 GB in einem Jahr und 207 GB in fünf Jahren.Das Problem hier ist nicht die Größe.Jeder kann so viele Daten speichern, aber das Zugriff auf und ändern Sie auf diese Daten werden langsamer und langsamer.
Dies ist nur ein Schnappschuss, es ist ein normaler Zustand.Geth muss diesen Zustand auch in einer anderen Form speichern, um die staatliche Wurzel zu überprüfen.Eine andere Form des Zustandsspeichers (Trieknoten) von Block 18418786 erfordert etwa 180 GB.
Daher beträgt die derzeit für den Staatspeicher verwendete Gesamtraumgröße etwa 267 GB.Wenn wir die Gasgrenze erhöhen, wächst die Zustandsgröße schneller.
Das Problem mit dem staatlichen Wachstum ist, dass wir anders als in der Vergangenheit keinen klaren Weg haben, um den Zustand zu entfernen.Es gibt keine spezifischen Vorschläge für die staatliche Frist, die wir schnell umsetzen können, um uns aus einem wachsenden Staat herauszuholen.
(3) Historische Skala
In einem Artikel von 2021 erwähnte ich, dass ein voller Geth -Knoten etwa 350 GB (neu beschnitten) ist.Nach ungefähr drei Jahren beträgt ein vollständiger Getth -Knoten (auf PBSS) über 900 GB.Die folgende Abbildung zeigt das Gesamtzusatzvolumen von Transaktionen.Es ist leicht zu erkennen, dass sich das Transaktionsvolumen in drei Jahren mehr als verdoppelt hat, von etwa 980 Mio. bis mehr als 2,2 Milliarden.
Mit dem Aufstieg von L2 ist die historische Skala zu einem größeren Problem geworden, da sie jetzt (vor dem 4844 live) die Art und Weise, wie sie Daten speichern, als Daten speichern.Block 18418786 hat mehr als 427 GB Block, während Block 17419840 (auch vor 4 Monaten) 339 GB Block aufweist, was in 4 Monaten ein Wachstum von 28 GB bedeutet, was etwa 9 GB Wachstum pro Monat bedeutet.Wir können 427+ (9*12*# Jahre) verwenden, um dieses Wachstum zu schließen, d. H. 535 GB nach einem Jahr und 967 GB nach fünf Jahren (erneut ein lineares Wachstum annehmen).
Hoffentlich wird sich dieses Wachstum verlangsamen, nachdem EIP-4844 gestartet wurde, wenn L2 nicht mehr mit CallData verwendet wird, um die Verfügbarkeit von Daten zu erhalten und auf Blobs umzusteigen, die in wenigen Wochen ablaufen.
EIP-4444 wird das historische Wachstumsproblem lösen, da die volle Knoten nicht mehr die gesamte Geschichte speichern müssen.Die Implementierung von EIP-4444 erfordert ein zuverlässiges Netzwerk, um die Geschichte abzurufen. Anschließend können wir den vollständigen Knoten-Stop-Historical Data Service erstellen.
(4) Synchronzeit
Die Gasgrenze kann in vielerlei Hinsicht die Synchronisationszeit beeinflussen:
· Die vollständige Synchronisation wird sehr langsam.
· Gleichzeitige historische Daten sind langsam.Da wir mehr Daten herunterladen müssen, ist die Synchronisierung des historischen Datenteils langsamer.
· Der Snapshot -Synchronisationsstatus ist langsamer, da wir mehr Status herunterladen müssen.
· Die Snapshot -Wiederherstellung ist langsam.Da sich der Drehpunkt während der Snapshot -Synchronisation bewegt, haben wir viele unvollständige Zustände auf der Festplatte, die repariert werden müssen.如果pivot移动更频繁,并且每个块有更多的更改,那么该修复阶段就会变慢。
· 由于节点需要通过更多的更改才能形成区块头,因此与链同步的速度会更慢。
(5)客户端多样性
构建一个新的EL客户端本身就是一项艰巨的任务。Es gibt einen zusätzlichen Nachteil des Hinzufügens von Gasgrenze, was es schwieriger macht, Clients zu erstellen und für die Verwendung durch das Mainnet zu optimieren.Geth wird seit mehr als 10 Jahren entwickelt und hat viele Optimierungen erfahren.Es kann eine entgegengesetzte Ansicht geben, dass neue Kunden von bestehenden Kunden ausleihen und nicht mehr die gleichen Fehler machen können.
Wir haben jedoch das Mainnet -Dilemma von zwei Clients gesehen (Ausführungsspezifikationen in Python und Ethereumj, die in JavaScript geschrieben wurden).Dies bedeutet auch, dass Kunden, die in bestimmten Sprachen geschrieben wurden, jetzt nicht funktionieren.Aufgrund des Sprachaufwands und der Reife der Codebasis lässt das Hinzufügen von Gasgrenze einige Clients zurück.
Wir sehen dies in KZG und um die erforderliche Leistung zu erhalten, die sich die meisten Kunden darauf verlassen, C-KZG (eine in C) geschriebene Codebasis, anstatt Bibliotheken in der gewählten Sprache zu verwenden.
(6) Schlimmster Fall
Wenn wir die Gasgrenze in Betracht ziehen, können wir nicht nur die allgemeine Situation betrachten.Wir müssen immer das schlimmste Szenario berücksichtigen.Natürlich können Knoten gut laufen, wenn sich die Kette in einer durchschnittlichen Lastsituation befindet, aber was passiert, wenn sich die Festplatten -E/A von 5 Blöcken plötzlich verdoppelt?
Die Laufzeit ist nicht die einzige Metrik, die wir berücksichtigen müssen, und wenn ein Angreifer andere Ressourcen wie Festplatten-E/A, CPU-Zeit oder Speicher aufnehmen kann, können sie Maschinen mit geringer konfiguriertem Offline zwingen.Insbesondere nach Ethereum -Fusion kann der Angriff auf die gleiche Kunden auch den anderen Kunden instabil machen.In den frühen Tagen von Ethereum Merge -Tests haben wir mehrmals gesehen: Ein Speicherleck für einen Kunden würde das gesamte System zum Absturz bringen.
Ein weiteres schlechteste Szenario ist die Beweisgröße.Mit zunehmender Gasgrenze steigen auch die potenziellen Zustandsänderungen, die zwischen den beiden Blöcken auftreten können.Dies wirkt sich auf die zuvor diskutierte Snapshot -Synchronisation aus, wirkt sich jedoch auch auf die Beweisgröße des Light -Clients der Ausführungsschicht aus.Dies ist keine große Sache, der Beweis für den Merkle-Patricia-Baum ist zu groß, um das Netzwerk zu senden.Wenn wir jedoch die Cross-Validation-Idee implementieren möchten, mehrere leichte Clients auf derselben Maschine auszuführen, ist die Beweisgröße sehr wichtig.
3, Lösung
Sind wir so fertig?Werden wir die Obergrenze von 30 mgas behalten?NEIN!
In einem Artikel von 2021 schlug ich Lösungen für das Dilemma vor, mit dem wir zu dieser Zeit konfrontiert waren.Für das vollständige Synchronisationsproblem im Jahr 2021 implementiert Geth Snapshot -Synchronisation und Snapshots.Für Beschneidung und Datenbanklayoutprobleme implementiert Geth PBSS.TXPool ist zuverlässiger bei der Umstellung mit hohen Transaktionslasten, und die meisten MeV -Rush -Transaktionen werden an Bauherren übertragen.Viele Transaktionen haben sich ebenfalls auf L2 bewegt, was wiederum die durchschnittliche Größe der Mainnet -Transaktionen erhöht hat.
Die einzige Lösung, die nicht implementiert wird, ist die Regenese.Im Laufe der Jahre haben sich die Ansichten der Menschen ein wenig verändert, und die meisten Menschen scheinen geneigt zu sein, die historische EIP-4444-Frist als kurzfristige Lösung für das Wachstum historischer Daten zu verwenden.Für die Veröffentlichung von EIP-4444 benötigen wir ein starkes Netzwerk historischer Datendienstnoten, damit die Geschichte nicht verloren geht, auch wenn sie nicht mehr von allen vollen Knoten gespeichert wird (übrigens speichern die meisten Bitcoin-Knoten keine historischen Daten bei alle) .
Wir haben immer noch keinen anständigen, realistischen Weg gefunden, um eine staatliche Frist zu erreichen.
Wie Sie die Angriffe sahen, bevor Sie in Shanghai eskalierten, gibt es einige Angriffe, die uns daran hindern, die Gaslimit zu erhöhen.(Soweit ich weiß) alle Schwachstellen wurden gelöst.
Zum Zeitpunkt des Schreibens wird EIP-4844 online veröffentlicht.Dieser EIP erhöht den Speicher- und E/A -Anforderungen des Knotens.Meiner Meinung nach ist es am sichersten zu warten und die Auswirkungen dieser Änderung auf das Mainnet zu sehen, bevor Sie eine Art von Gasgrenze -Addition ausprobieren.Sobald sich L2 an Blob -Transaktionen verwandelt, sollten wir die CALLDATA -Kosten erhöhen (da der CallData meiner Meinung nach im Vergleich zu anderen Dingen unterbewertet ist, dass die Daten gespeichert werden müssen).Dies kann auch als Zwangsfunktion für L2 unter Verwendung von Blobspace verwendet werden.
Kurz gesagt, ich möchte alle daran erinnern, vorsichtig zu sein, wenn sie die Gasgrenze verbessert, da dies viele Aspekte des Knotens beeinflusst, und einige der Effekte werden relativ offensichtlich sein.In verwandten Diskussionen ist es sehr wichtig, die langfristigen und kurzfristigen Auswirkungen von Veränderungen der Gasgrenze zu berücksichtigen.