Kein Gas während der Vertragserstellung

Vor einigen Tagen scheiterten mehrere Versuche, einen Vertrag zu erstellen, mit Gasfehlern (bestätigt durch etherscan/ethercamp und getBalance API), jedoch ist mir nicht klar, was genau fehlgeschlagen ist und wie es diagnostiziert werden kann.

Nicht genug Gas für die Ursache „Kein Gas, um den gerade erstellten Vertrag zurückzugeben“.

Eine solche Transaktion ist 0x47bf53491a14e64bc8938afa97d4b012677f465bddd7c3c0bbfb5df2baa99127

Wenn Sie es in Etherscan und ether.camp überprüfen, wird es mit einem Fehler aufgelistet, aber beim Betrachten des vmtrace in beiden Explorern oder beim Betrachten der Ausgabe von debug.traceTransaction wird kein Fehler gemeldet.

Die Transaktionsquittung zeigt auch keinen Fehler und gibt eine Vertragsadresse an, als ob alles funktioniert hätte.

Was genau ist schief gelaufen?

(Ich habe vorläufig ein Problem für Geth deklariert, bin mir aber nicht sicher, wie es qualifiziert werden soll.)

Bearbeiten Sie AFAICT dort vier Transaktionen mit dem gleichen Verhalten, die unten aufgeführt sind (sie sind nicht meine, noch meine Versuche, ich interessiere mich nur wegen des Verhaltens ohne Gas)

  • 0x0b157cbbcca6079664e1f61e5f5e33241999c1cc1a7dbc1adad347b904c0fb65
  • 0xc712e39a316745d1c0154941bcd9c60eacaf6287596dd3e356249e69509d20c1
  • 0xaf071ce2147cc61d951a07c4e123c99f84b50e3656ceb07bba2c78796875626c
  • 0x47bf53491a14e64bc8938afa97d4b012677f465bddd7c3c0bbfb5df2baa99127
Das sieht nicht nach einem Geth-Problem aus. Möglicherweise ein Solidity-Bug, der unsachgemäße Rückgaben verursacht? Gibt es eine Möglichkeit, die Initialisierungsmethode aus der Quelle zu posten?
Ich bin mir nicht sicher, was Sie mit der Initialisierungsmethode meinen ... Ich habe lediglich die TraceTransaction vs. getBalance vor / nach der Verwendung von Geth überprüft, etwas gefunden, das ich nicht verstanden habe, und mir dann angesehen, was die Entdecker gesagt haben :)
Ich meine die Funktion im Quellcode mit dem gleichen Namen wie der Vertrag
@fairglu: Hast du das Problem herausgefunden? etherscan.io/tx/…
@ryepdx es ist etherscan.io/tx/… , beachte den Fehler und klicke dann auf VMTrace, kein Fehler. Bei Tjaden ist es nicht mein Vertrag, nur etwas, das ich auf der Blockchain beobachtet habe, obwohl es 4 solcher Transaktionen gibt (aufgeführt in Frage)
Wenn Ihr Vertrag während der Bereitstellung eine Ausnahme ausgelöst hat, würde dies dies erklären. Ausnahmen verbrauchen das gesamte Gas in einer Transaktion und führen zu einem „Kein Gas“-Fehler.
@ryepdx wie siehst du a posteriori, dass ein Vertrag eine Ausnahme ausgelöst hat?
@fairglu Sie sehen, dass das GasLimit, das an einen TX mitgeschickt wurde, vollständig aufgebraucht ist. Das ist ein klarer Hinweis darauf, dass Sie auf einen Gasaussetzer gestoßen sind, der meistens durch eine interne und explizit geworfene Ausnahme ausgelöst wurde oder weil Sie einfach zu wenig Gas gegeben haben und dann einfach "alles Gas verbrannt" haben ".

Antworten (1)

Sie haben beim Erstellen der Transaktion nur 500.000 Gas bereitgestellt, und die Transaktion hat alles verbrannt (siehe „Gas“ und „Von der Transaktion verbrauchtes Gas“ auf Etherscan ). Sie müssen wirklich nur mehr Gas geben.

Wie auf Ethstats zu sehen ist, beträgt das aktuelle Gaslimit (pro Block) 4.712.388. Sie können versuchen, die Transaktion auf Testnet einzureichen oder eth_estimategas zu verwenden, um genau zu sehen, wie viel Gas benötigt wird, um diese Vertragserstellungstransaktion zu verarbeiten, bevor Sie so viel Gas für eine Transaktion ausgeben.

Wie ich schrieb, sind dies NICHT meine Transaktionen, sondern nur Transaktionen, die ich beim Scannen der Blockchain gefunden habe. Das Problem besteht darin, a posteriori aus der Trace- und Ethereum-API herauszufinden, ohne sich auf Explorer von Drittanbietern verlassen zu müssen.