Wie kann man das Gaslimit im Block mit Geth erhöhen?

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?

Aber was ist, wenn der Entwickler einen Vertrag über seine gerade erstellte private Blockchain einreichen muss? Gibt es eine Möglichkeit, das Gaslimit im Genesis-Block zu ändern? ( geth init genesis.json ändert weder Schwierigkeit noch gasLimit) { "config": { "chainId": 1994, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0 } , "nonce": "0xabcdef0001478042", "timestamp": "0x0", "parentHash": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasPrice": "0x0", "gasPrice": "0x0", "gasPrice": "0x0", "gasPrice": "0x0", "parentHash": "0x00000000000000000000000000000", "extraData": "0x0", "gasPrice": "0x0", "gasPrice": "0x0", "gasPrice": "0x0", Schwierigkeit": "400", "Mixhash": "0x000000000000000000000000000000
Wenn Sie eine neue Frage haben, stellen Sie diese bitte, indem Sie auf die Schaltfläche „ Frage stellen“ klicken . Fügen Sie einen Link zu dieser Frage hinzu, wenn dies hilfreich ist, um den Kontext bereitzustellen. - Aus Bewertung

Antworten (4)

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 --targetgaslimitFlags 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 9000000000000Abbau fortgesetzt wird. Im Laufe der Zeit wäre das Gaslimit so groß geworden, dass Sie das Error: exceeds block gas limitProblem 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 --targetgaslimitals Flag eine sehr bequeme Möglichkeit, das Gaslimit einer privaten Kette während der Entwicklung zu erhöhen oder zu verringern.

Sie setzen gasLimit auf 9000000 Millionen! Es ist viel zu viel. Bitte setzen Sie es auf 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 gasLimitNä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.