Wenn ich versuche, Methoden aus meinem Smart-Contract auszuführen, werde ich durch das Gaslimit in einem Block eingeschränkt und kann nichts tun. Wie ändere ich das Gaslimit im Block?
Während es ratsam ist, das einmal erstellte Gaslimit einer Chain nicht zu ändern, kann es notwendig werden, mit dem Gaslimit einer bestehenden privaten Blockchain herumzuspielen, insbesondere während der Entwicklung.
Bei geth
, kann dies durch Setzen des --targetgaslimit
Flags beim Start des Knotens erfolgen. Beispielsweise können Sie Folgendes für ein Netzwerk mit id ausführen 666
, das auf ausgeführt wird localhost:8545
:
geth --networkid '666' --datadir 'path/to/your/chain/db' --targetgaslimit '9000000000000' --rpc --rpccorsdomain 'localhost:8545' --mine
Das Obige wird Ihren Knoten starten und das Gaslimit weiter verschieben, während der 9000000000000
Abbau fortgesetzt wird. Im Laufe der Zeit wäre das Gaslimit so groß geworden, dass Sie das Error: exceeds block gas limit
Problem nicht mehr haben werden.
Natürlich wiederholt das Schließen des Knotens und das Neustarten den Vorgang von der anfänglichen Gasgrenze der Kette bis zum Ende 9000000000000
.
Grundsätzlich ist die Verwendung --targetgaslimit
als Flag eine sehr bequeme Möglichkeit, das Gaslimit einer privaten Kette während der Entwicklung zu erhöhen oder zu verringern.
10000000
(~10 Millionen), was das aktuelle Gaslimit für das Ethereum-Mainnet ist.Kurze Antwort
Kann oder soll nicht.
Bessere Antwort
Das Blockgaslimit ist eine Eigenschaft des Netzwerks. Wenn Sie eine private Kette verwenden, können Sie im Genesis-Block damit herumspielen. In einer echten Blockchain wird diese Eigenschaft regelmäßig von den Minern abgestimmt. Siehe Gelbes Papier.
Weitere Informationen hier: Was bedeuten die einzelnen genesis.json-Parameter?
gasLimit Ein skalarer Wert, der der aktuellen kettenweiten Grenze des Gasverbrauchs pro Block entspricht. In unserem Fall hoch, um während der Tests nicht durch diese Schwelle eingeschränkt zu werden. Hinweis: Dies bedeutet nicht, dass wir den Gasverbrauch unserer Verträge nicht beachten sollten.
Hilfreiche Antwort
Erwägen Sie eine Umstrukturierung des Vertrags im Hinblick auf die Reduzierung des Gasbedarfs. Das Live-Ethereum-Netzwerk hat ein bewegliches Limit. https://ethstats.net/
Ich hoffe es hilft.
Die Antwort von @Daniel Okwufulueze legt das Gaslimit auf 9000000 Millionen fest .
Ich empfehle nicht, die gat-Grenze auf einen extrem hohen Gaswert einzustellen. Selbst wenn Sie eine private Kette verwenden, ist es besser, sich in der gasLimit
Nähe des echten Hauptnetzes zu befinden gasLimit
, um eine realistische Simulationsumgebung aufrechtzuerhalten.
Im Ethereum-Mainnet beträgt das aktuelle Gaslimit ~10 Millionen (überprüft am 4. Januar 2020), siehe https://etherscan.io/chart/gaslimit .
Bitte fügen Sie beim Start einfach das folgende Flag auf Miner- oder Signer-Knoten hinzu geth
:
geth --targetgaslimit '10000000'
, gefolgt von anderen Flags.
Ich wollte nur zur Lösung ähnlicher Probleme beitragen. Wenn Sie den Fehler erhalten: "err: Error: Returned error: breaks block gas limit" könnte dies durch die Menge an Gas ausgelöst werden, die Sie für die Verarbeitung der Transaktion gesendet haben. Normalerweise würden Sie denken, dass es in Ordnung ist, mehr Benzin als nötig zu schicken, da nicht verbrauchtes Benzin zurückerstattet würde. Wenn Sie jedoch zu viel Gas bereitstellen, um Ihre Transaktion zu verarbeiten, stürzt es mit diesem Fehler ab. Es scheint, dass der Miner davon ausgeht, dass die zugrunde liegende Funktion zu kompliziert zu verarbeiten und fehleranfällig ist, wenn Sie so viel Gas senden müssen. Sie hätten mehr Glück, Geld mit einer einfacheren Transaktion zu verdienen.
Laut https://www.ethgasstation.info/ beträgt die maximale Blockgrenze 8000000, daher muss die Gasmenge für Ihre Transaktion kleiner oder gleich dieser Zahl in Hex sein, dh web3.utils.toHex('8000000') , und dasselbe sollte für das Gas gelten, das für die Vertragsfunktion benötigt wird.
Benutzer3184743
Roman Frolow