Erklären Sie den ungültigen JUMP-Fehler [Duplikat]

Es gibt eine Reihe von Fragen zu dem invalid JUMPFehler.

Ich erhalte dies beim Debuggen eines Solidiy-Vertrags auf dem Testrpc mit der Geth-Befehlszeile:

Error: VM Exception while processing transaction: invalid JUMP at 3802e3b6eefb98
150918c4ddfaabf93c18d6c41aaa2682c5cdbc0a9a9a6a2853/cb611bab0cd7c4f21f7cb0b91ad45
f1330995289:13717
    at web3.js:3119:20
    at web3.js:6023:15
    at web3.js:4995:36
    at web3.js:4055:16
    at apply (<native code>)
    at web3.js:4141:16
    at <anonymous>:1:1

Können Sie den ungültigen JUMP-Fehler erklären – was läuft auf der Opcode-Ebene der virtuellen Maschine schief?

Welchen Ansatz sollten Sie verwenden, um die Quelle solcher Fehler zu finden?

Ist dieser Fehler einzigartig bei go-ethereum?

BEARBEITEN:

Die Frage wird hier beantwortet:

Was bedeutet ein „böser JUMPDEST“-Fehler?

Was ist der Unterschied, falls vorhanden, zwischen der obigen invlaid JUMPund dieser Frage bad JUMPDEST?

Andere Fragen:

oraclize 'VM-Ausnahme: ungültiger JUMP'

VM-Ausnahme: ungültiger JUMP, wenn ich eine zweite Funktion aufrufe

ungültiger JUMP nach dem Upgrade von truffle & testrpc

Ungültiger Sprungzielfehler beim Versuch, The DAO-Token zu übertragen

Das ist was ich gedacht habe.
@eth ja das ist eine gute antwort. Ich vermute, "invalid JUMP" ist Geths Wrapper für "bad JUMPDEST" in dieser Frage?
Ja, sie sind dasselbe

Antworten (1)

Das ist eigentlich die Fehlermeldung von testrpc . Wenn eine Transaktion Geth einwirft, behandelt es dies als einen Gasmangel-Fehler und sagt es Ihnen nicht. (Das liegt daran, dass es sich technisch gesehen um einen Gasmangel handelt.)

Leider gibt es nicht viele aktuelle Debugging-Tools. Browser-Solidity hat einen. Meine eigene Methode zum Debuggen dieser Art ist eher wie eine Schrotflinte. Kommentieren Sie langsam/früh zurück, bis Sie keinen ungültigen JUMP erhalten. Wenn Sie die gesamte Funktion kommentiert haben, handelt es sich möglicherweise um eine Funktion, die bezahlt wird, ohne payable.