Transaktion aus Gas trotz viel höherem Gaspreis als fast identische Transaktion bei gleichzeitiger Vollförderung

Zwei Uniswap-Txns rufen auf, swapExactETHForTokensdie bis auf den Wert und den Gaspreis fast identisch sind (sogar mit demselben Zeitstempel), aber der mit dem höheren Wert und Gaspreis hat kein Benzin mehr und verbraucht viel mehr Gas als der andere . Der einzige andere Unterschied ist natürlich ein proportional unterschiedlicher amountOutMin.

Angesichts der Tatsache, dass der Wert des fehlgeschlagenen Swaps kleiner als x2 des anderen ist, während sein Gaspreis x10 beträgt, warum scheitert er?

Ich habe oben verlinkt, aber das sind die txns:

Das ist mir jetzt schon zweimal passiert. Das andere Mal war viel weniger Wert, aber immer noch x10 Gaspreis über dem txn , der vollständig abgebaut wurde (obwohl dieser txn aus einem anderen Grund fehlschlug - unzureichende Produktionsmenge).

Irgendeine Idee, was dazu führen könnte, dass den ausfallenden TXNs das Benzin ausgeht (und sogar viel mehr Benzin verbraucht ), da sie gleichzeitig praktisch identisch mit einem erfolgreichen Swap sind, aber mit einem viel höheren Gaspreis?

Auch die internen txns sind zwischen den txns jeweils identisch.

„Kein Benzin“ hat nichts mit dem Gaspreis zu tun. Versuchen Sie, das Gaslimit zu erhöhen.
@goodvibration Ich habe nie gesagt, dass es so ist, aber das macht meine Frage umso gültiger. Warum geht den ausfallenden TXNs ohne ersichtlichen Grund das Benzin aus (und sie verbrauchen sogar mehr Benzin) (zumal der Gaspreis keinen Unterschied verursachen sollte, wie Sie sagten)? Das unbegrenzte Erhöhen des Gaslimits erhöht offensichtlich die Wahrscheinlichkeit, dass das Gas nicht ausgeht, aber das eigentliche Problem ist, dass die fehlgeschlagenen TXNs mehr Gas verbrauchen als die nachfolgenden TXNs.
Der Titel Ihrer Frage sagt es eigentlich sehr explizit IMO.
Zum Rest Ihrer Frage: Der Gasverbrauch einer Funktion ist nicht konstant. Zum einen hängt es von den Operationen innerhalb dieser Funktion ab, die sich von einer Ausführung zur anderen unterscheiden können, abhängig von der Eingabe in die Funktion sowie dem aktuellen Wert einer Zustandsvariablen (in diesem Vertrag oder in einem anderen Vertrag), die die Funktion ändert sich während ihrer Ausführung. Beispielsweise kostet das Ändern einer Zustandsvariablen von Null auf Nicht-Null 20.000, während das Ändern von Nicht-Null auf Nicht-Null nur 10.000 kostet (oder 5.000, ich kann mich nicht genau erinnern).
@goodvibration Das ist alles sehr gut und verständlich, aber es erklärt nicht, was in meinen beiden Fällen passiert ist, in denen die Eingaben bis auf den Wert amountOutMinund den Gaspreis praktisch identisch sind. Schlagen Sie vor, dass diese speziellen Eingaben eine so große Diskrepanz zwischen zwei ansonsten identischen TXNs verursachen könnten?
Ich schlage vor, dass sich zwischen diesen beiden Transaktionen der Vertragsstatus (oder ein anderer Vertrag, der an diesen Transaktionen beteiligt ist) geändert hat, was in jedem Fall zu einem unterschiedlichen Gasverbrauch geführt hat. Und mit „Vertragszustand“ meine ich die Werte der Zustandsvariablen in diesem Vertrag.
@goodvibration Bei allem Respekt, ich weiß, dass etwas anders ist. Wenn nichts anders wäre, wäre das Ergebnis dasselbe. Das ist ziemlich existenziell. Was ich suche ist, was anders ist. Das einzige, was an der gesamten Transaktion beteiligt ist, ist der SC-Code. Wenn ich also sage, dass etwas im SC anders ist, schränkt es das für mich nicht wirklich ein.

Antworten (1)

Transaktionen haben ein Gaslimit und ein Gaspreisfeld. Wenn Ihrer Transaktion das Gas ausgeht, müssen Sie das Gaslimitfeld erhöhen, nicht das Gaspreisfeld.

Die von einer Transaktion verbrauchte Gasmenge kann variieren, je nachdem, welcher Code ausgeführt wird und wie viele Daten in die Blockchain geschrieben oder aus ihr entfernt werden. Sie finden die Details im gelben Papier, aber ein einfaches Beispiel: Wenn eine vorherige Transaktion einen Wert auf Null setzt und Ihre Transaktion ihn auf einen Wert ungleich Null setzt, erfordert Ihre Transaktion 15000 Gas mehr, als wenn die vorherige Transaktion nicht stattgefunden hätte .

Ihre Brieftasche kann nicht vorhersagen, wie sich der Vertragsstatus zwischen dem Zeitpunkt, an dem Sie die Transaktion senden, und dem Zeitpunkt, an dem sie bestätigt wird, ändern wird, daher verwendet sie den aktuellen Vertragsstatus, um die erforderliche Gasmenge zu berechnen.

Wenn Sie eine Transaktion an einen ausgelasteten Vertrag mit vielen anderen Benutzern senden, sollten Sie das Gaslimit über das hinaus erhöhen, was Ihre Brieftasche vorschlägt. Wenn die Transaktion am Ende weniger Benzin verbraucht als Ihr Gaslimit, wird Ihnen die Differenz automatisch erstattet. Abgesehen von gebrochenen Verträgen schadet es nicht, einfach Ihr Gaslimit um 100.000 zu erhöhen, damit Ihre Transaktion bestätigt wird.

ich hoffe das hilft

Danke für die Erklärung, aber ich interessiere mich mehr dafür, warum meinen speziellen TXNs in Bezug auf die fast identischen TXNs genau zur gleichen Zeit, die viel weniger Benzin benötigten, das Benzin ausgegangen ist. Was die automatische Rückerstattung betrifft, sagen Sie damit, dass das für meine TXNs verbrauchte Nettobenzin möglicherweise geringer war als das, was tatsächlich verbraucht wurde, wenn das Gaslimit höher war? Mit anderen Worten, weil ihnen das Benzin ausgegangen war, wurde der TXN einfach storniert, und eine automatische Rückerstattung, die stattgefunden hätte, fand nicht statt. Wenn ich also das Gaslimit auf 200.000 gesetzt habe und es bei 190.000 bestätigt wurde, wurden mir möglicherweise 70.000 zurückerstattet. Aber da mein Limit 137.000 war, kostete es mich 137.000?