Abfangen von Fehlern bei Gasproblemen

Ich arbeite am Frontend, wo ich try / catch verwende, um Fehler zu finden und den Benutzern entsprechende Nachrichten zu geben. Mein Smart Contract hat eine kostenpflichtige Funktion und ich war kurz davor, Fehler beim Gasverbrauch zu finden.

uint[] public theArray;




function myFunction(uint bigNumber) payable public {
         if(msg.value == 0.01 ether){
         theArray.push(bigNumber);}
else {if (msg.value == .05 ether){
            for (int i; i<50;i++)
            theArray.push(bigNumber);

        }
else { 
    revert();
}
}}

Wenn ich jetzt versuche, die Fehler abzufangen, kann derselbe Fehler zwei verschiedene „Ausgänge“ haben (err.message). Die Beispiele:

Verwenden von MetaMask im Rinkeby-Testnetzwerk

Wenn ich 0,05 ETH mit 21.000 Gas oder sogar 21.001 (Mindestbetrag) sende, erhalte ich folgende Fehlermeldung:

Zurückgegebener Fehler: Error: Error: [ethjs-rpc] rpc error with payload

Wenn ich jedoch 0,05 ETH mit 25.000 Gas sende (nicht genug Gas, so dass es immer noch fehlschlägt), erhalte ich folgende Fehlermeldung:

Die Transaktion wurde von der EVM rückgängig gemacht

Kann mir jemand erklären, warum sich der Fehler ändert, wenn ich die Gasmenge erhöhe?

Eine andere Sache, die mir aufgefallen ist, ist, dass ich auch bekomme, wenn ich einen ungültigen Betrag wie 0,04 sende

Die Transaktion wurde von der EVM rückgängig gemacht

Antworten (1)

Basierend auf meiner Beobachtung und meinem Verständnis. Vielleicht nicht die beste Erklärung da draußen.

  1. Wenn ich 0,05 ETH mit 21.000 Gas oder sogar 21.001 (Mindestbetrag) sende, erhalte ich folgende Fehlermeldung:

    Zurückgegebener Fehler: Error: Error: [ethjs-rpc] rpc error with payload

-Für diesen Fehler kann es an der Metamaske selbst gelegen haben, vielleicht spielen Sie mit dem gasPrice und/oder gasLimit. Zum besseren Verständnis können Sie hier oder hier verweisen.


  1. Wenn ich jedoch 0,05 ETH mit 25.000 Gas sende (nicht genug Gas, so dass es immer noch fehlschlägt), erhalte ich folgende Fehlermeldung:

Die Transaktion wurde von der EVM rückgängig gemacht

Kann mir jemand erklären, warum sich der Fehler ändert, wenn ich die Gasmenge erhöhe?

-Für diesen Fehler habe ich den Code ausgeführt und festgestellt, dass der mögliche Grund darin besteht, dass die Transaktion stattfindet und fortgesetzt wird. Die Parameter erfüllen diesen Teil des Codes. Doch mitten im Prozess ging das Gas aus, während die for-Schleife läuft, was den größten Teil des von Ihnen bereitgestellten Gases auffrisst. Versuchen Sie vielleicht, das Gaslimit zu erhöhen, und dies wird ohne Fehler abgebaut.

if (msg.value == .05 ether){
        for (int i; i<50;i++)
        theArray.push(bigNumber);

    }

  1. Eine andere Sache, die mir aufgefallen ist, ist, dass ich auch bekomme, wenn ich einen ungültigen Betrag wie 0,04 sende

Die Transaktion wurde von der EVM rückgängig gemacht

Beim letzten Szenario hat der Parameter einfach keine der Bedingungen erfüllt, weshalb er direkt zum letzten geht, was ihn revert() macht.

Vielen Dank. Ich versuche jetzt, mehr über den ersten Fehler zu verstehen! Bezüglich des zweiten Fehlers weiß ich, dass es funktioniert, wenn ich das Gas erhöhe. Ich habe gerade gesehen, dass es einen anderen Fehler gibt als beim Senden von 21000, also war ich neugierig warum
Ebenfalls. Ich möchte auch eine Antwort mit dem ersten Fehler, aber basierend auf den Links, die ich bereitgestellt habe, liegt es höchstwahrscheinlich an der Metamaske. Ich bin mir nur nicht sicher, warum genau.
Ich habe ihnen eine E-Mail geschickt. Ich werde mit einem Update zurückkommen, sobald ich eine Antwort erhalte