So stellen Sie das maximale Blockgas in Ganache-Cli ein

Ich verwende Ganache-Cli, das ein Blockgasmaximum von etwa 6,5 ​​Millionen zu haben scheint. Alle Recherchen, die ich zu dieser Frage durchgeführt habe, scheinen Antworten des Benutzers selbst zu liefern, der das Benutzergas LIMIT festlegt (nicht das, was ich will) oder nur eine Gasmenge für die Vertragserstellung festlegt, auch nicht das, was ich will.

Was ich habe, ist ein intelligenter Vertrag, den ich auf der Solidity-Seite in einer „for“-Schleife über Millionen von automatisierten Unit-Tests laufen lassen möchte. Der Smart Contract enthält Zufälligkeit, sodass jedes Mal, wenn er eine Schleife durchläuft, ein anderes Ergebnis ausgegeben wird. Ich muss über Millionen von Komponententests sicherstellen, dass alle zufälligen Ergebnisse ihren erwarteten Wert erreichen.

Das Problem ist, dass ich nur etwa 20 "Loops" machen kann, bevor die 6,5 Millionen Gas erreicht sind. Ich habe versucht, eine For-Schleife auf der Web3-Javascript-Seite mit Metamask durchzuführen, aber das Problem hier ist, dass Metamask jedes Mal auftaucht und mich auffordert, die Transaktion zu bestätigen, wenn ich diese 20 "Schleifen" ausführen möchte. Für 100 Einheitentests müsste ich also 5 Mal klicken. Eine Million? Eine ganze Menge.

Wie würde ich vorgehen? Ich dachte, wenn es eine Möglichkeit gibt, das Blockgasmaximum zu erhöhen, könnte ich meine Schleifengröße auf mindestens 1000 oder so erhöhen.

Oder wenn Sie eine alternative Lösung kennen, wie ich Millionen von Komponententests automatisieren könnte, wäre das großartig.

Antworten (2)

Es gibt eine Möglichkeit, die gasLimit. Sie werden dazu ein Flag verwenden, wenn Sie ganache-cli starten. Verwenden Sie gemäß README-l oder (die Blockgasgrenze --gasLimit(standardmäßig 0x6691b7)).

Wenn Sie dies jedoch tun müssen, können Sie dies nicht im Hauptnetzwerk durchführen.

Ein Großteil der Ethereum-Entwicklung sind Designentscheidungen darüber, was innerhalb und außerhalb der Kette passiert. Aufgrund des Blocks gasLimitenden viele Entscheidungen wie diese in einer Art Off-Chain-Mechanismus.

Um die vorherige Antwort zu erweitern, können Sie verwenden --gasLimit=0x1fffffffffffff.

Dadurch wird das Blockgaslimit auf festgelegt 2 ^ 53 - 1, was zufällig die maximale sichere Ganzzahl von Javascript ist .

Sie können keinen größeren Wert verwenden, da Ganache in Javascript implementiert wurde und sie sich nicht die Mühe gemacht haben, a BigNumberfür dieses Feld im Gegensatz zu anderen Feldern zu verwenden (wenn Sie beispielsweise festlegen --account=address,balance, können Sie einen Wert verwenden, der größer als die maximale sichere Ganzzahl von Javascript ist für den Ausgleichsteil, weil er wahrscheinlich in BigNumberanstatt in umgewandelt wird Number).