Das Senden von OMG-Token schlägt mit Bad Instruction fehl

Ich versuche, OMG-Token mit der Offline-Transaktion von MyEtherWallet zu senden, und erhalte eine Fehlermeldung wie diese: 0x084284cb471d3b413ebbbcc5373f1108e3c084e57529f2cfaf8c490117c1a9d1

Das Gaslimit dort war 300.000, was ausreichend sein sollte. Ich sage, es sollte viel sein, denn hier scheint eine Transaktion wie die obige zu sein, die erfolgreich war: 0xcbd89114d75a6246ed8060dbd2b042240acc4dd35ed2a0e3e894a30982133503 . Sein "Gas used by txn" beträgt nur 22k.

Gibt es eine Möglichkeit herauszufinden, wo es fehlgeschlagen ist?

Siehe Geth-DebugTrace . Dies deutet auch darauf hin, dass es während der Ausführung nur ein winziges bisschen Gas verbraucht hat und dann versagt hat.

Wenn es mit so viel verbleibendem Benzin ausfällt, warum wird mir dann volles Benzin bis zu meinem Limit berechnet?

Antworten (1)

Schlechte Anweisung ist eine allgemeine Fehlermeldung, die je nach Vertrag und Transaktion alles Mögliche sein kann. Zum Beispiel wurde der Fehler von tx 0x084284cb... verursacht, als versucht wurde, mehr Token (ca. 1481) zu senden, als der Saldo zu diesem Zeitpunkt (ca. 820).

Das aktuelle Verhalten, im Fehlerfall das volle Gas zu zahlen, diente dazu, schlechte Verträge davon abzuhalten, das Netzwerk anzugreifen. Aber eigentlich sind menschliche Fehler sehr häufig, daher werden diese Art von Fehlern in der kommenden Fork nicht das volle Gas verbrauchen. Aber bis dahin muss man das Transaktionsgas auf einen vernünftigen Wert setzen. Eine gute Brieftasche sollte eine gute Annäherung festlegen.

Das war in der Tat das Problem. Können Sie mitteilen, wie Sie herausgefunden haben, dass dies das Problem war? Gibt es eine Möglichkeit, die Vertragsausführung im Solidity-Quellcode zu verfolgen?
Etherscan zeigt den Methodennamen transferund die Vertragsquelle. Ich habe auch den Überweisungsbetrag 1481 erhalten. Wenn ich mir die Quelle ansehe (sie scheint auf OpenZeppelin zu basieren, ich habe einige Erfahrung damit), sind die einzig möglichen Gründe für das Scheitern einer Überweisung "unzureichender Kontostand", "Token angehalten" und 'Kurzadressen-Angriffsschutz'. Das Anhalten des Tokens ist unwahrscheinlich, da es sich auf alle Übertragungen ausgewirkt hätte. Es gab andere Transaktionen, also habe ich sie "storniert", bis der Saldo bei der fehlgeschlagenen 820 hätte betragen sollen (weit entfernt von 1400, selbst wenn ich einen Fehler gemacht habe). Ich habe nicht nach einem kurzen Adressangriff gesucht.