Fehlermeldung von Smart Contract zurückgeben

Ich versuche, Fehlermeldungen von Solidity zurückzugeben. Ich habe diesen Vertrag:

pragma solidity ^0.4.23;
contract Simple {
    function arithmetics(uint a, uint b){           
                     require(a % 2 == 0, "Even value required.");             
                    b = b * 3; 
            }
}

Wenn ich in Remix teste, wird mir die folgende Fehlermeldung zurückgegeben:

transact to Simple.arithmetics error: VM error: revert. revert Die Transaktion wurde in den Ausgangszustand zurückgesetzt. Vertragsgrund: "Ebener Wert erforderlich.". Debuggen Sie die Transaktion, um weitere Informationen zu erhalten.

Als ich jedoch versuchte, es von meiner dApp mit web3.js aufzurufen, erhalte ich keine Fehlermeldung, sondern nur diese:

Der Transaktion ging das Gas aus.

Antworten (2)

Sie finden die Fehlermeldung, die die Transaktion nachverfolgt. Verwenden Sie zum Beispiel geth und ich gehe davon aus, dass Ihr Knoten unter läuft http://127.0.0.1:8545:

1- Öffnen Sie eine Konsole

geth attach http://127.0.0.1:8545

2- Transaktion verfolgen

debug.traceTransaction(<your TX hash here>)

Sie sollten eine Transaktionsverfolgung erhalten. Wenn Ihr Geth-Knoten nicht aktiviert gestartet wurde debug, können Sie einfach eine HTTP-Anforderung wie folgt ausführen:

curl -X POST --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["<your TX hash here>"],"id":1}' http://127.0.0.1

Jetzt, da Sie die Ablaufverfolgung haben, können Sie die JSON-Datei verschönern, um sie besser zu sehen. Ganz unten finden Sie die letzte Anweisung und den EVM-Status (und andere Dinge). Die letzte Anweisung sollte ein REVERTOpcode sein. Gehen Sie dann zum MEMORYAbschnitt, und Sie können ihn in ASCII konvertieren, um die Fehlermeldung zu finden. Beispielsweise würde dieser Befehl in Bash von Hex in ASCII konvertieren:

echo <your HEX here> | xxd -r -p

Für web3 ist dies eine Arbeit in Entwicklung und noch nicht möglich. Sie können diesem Thread folgen: https://github.com/ethereum/web3.js/issues/1707