Ich habe eigentlich 2 Fragen:
Wie ermittelt man den Gaspreis? Metamask füllt dies für mich aus, aber es ist immer zu niedrig, wenn ich auf Senden klicke. Im Grunde scheinen alle Werte auf der ETH Gas Station zu niedrig zu sein? Wie viel Gas-Limit soll ich einsetzen?
Ich habe eine Überweisung erhalten, indem ich hohe Werte verwendet habe. aber es ist trotzdem gescheitert. Anscheinend habe ich jetzt 0,0105 Ether (13,66 $) verloren? Gibt es eine Möglichkeit, dies zurückzubekommen? Gibt es eine Möglichkeit, diese Fehler NICHT zu machen? Es ist wirklich eine sehr hohe Lernkurve (und kostspielig).
Siehe: https://etherscan.io/tx/0x2d68ca04e623509c05713a8b80c857e49cc80d3a71aadebd0aca7eb2511c57cd
Danke für jede Hilfe.
Ich denke, Sie haben etwas falsch gemacht ... Sie haben ein Gaslimit von 42000 festgelegt, was offensichtlich nicht ausreicht. Sie sollten das Gaslimit so gut wie nie anpassen, da es im Voraus sehr genau bestimmt wird. MetaMask sollte die richtige Gasgrenze für Sie festlegen.
Sie legen auch einen sehr hohen Gaspreis fest: 250 gwei, wenn https://www.ethgasstation.info/ sagt, dass 80 gwei Ihre Transaktion innerhalb von 2 Minuten verarbeiten sollten.
Nein, es gibt keine Möglichkeit, den Ether zurückzubekommen, den Sie für diese Transaktion bezahlt haben.
Lassen Sie in Zukunft MetaMask das Gaslimit wählen und den Gaspreis festlegen, indem Sie https://www.ethgasstation.info/ überprüfen .
BEARBEITEN
Ich sollte beachten, dass ein Gasmangel auch auftreten kann, wenn bei der Transaktion etwas anderes schief geht. Einige Arten von Fehlern können dazu führen, dass das gesamte Gas verbraucht wird. (zB ein assert
im Code.)
Wenn Sie wie ich nach den Gaskosten einer historischen Transaktion suchen, finden Sie hier Ihre Antwort.
gasCost(tx) = gasPrice * gasUsed
Sie können web3 verwenden, um die 2 erforderlichen Informationen zu erhalten, aber Sie werden 2 verschiedene Anrufe tätigen:
web3.eth.getTransaction(txHash)
gibt ein Objekt zurück, das gasPrice
.
web3.eth.getTransactionReceipt(txHash)
gibt ein Objekt zurück, das gasUsed
.
Wenn diese beiden Teile kombiniert sind, haben Sie die Benzinkosten für eine bestimmte historische Transaktion.
Das Gaslimit kann (vorstellbar) auf einen beliebigen Wert eingestellt werden - die Transaktion verwendet das verbrauchte Gas und jede Menge an verbrauchtem Benzin wird zurückerstattet - außer - und dies ist eine sehr wichtige Ausnahme - -wenn die Transaktion fehlschlägt (z. B. wegen eines assert
oder throw
).
Wenn die Transaktion fehlschlägt, erhalten Sie keine andere Fehlermeldung als „Kein Benzin mehr“, denn was passiert, wenn ein throw
oder assert
trifft, ist, dass das gesamte verbleibende Gas (bis zum Gaslimit) verbraucht ist und die Transaktion zurückkehrt (das ist warum ich gesagt habe, dass das Gaslimit wichtig ist - es ist wichtig, wenn es fehlschlägt - es spielt keine Rolle, wenn es nicht funktioniert). Aber @smarx hat recht - lass Metamask die Einstellung vornehmen.
Sobald Sie das Benzin ausgegeben haben, können Sie es nicht zurückbekommen. Stellen Sie sich das so vor – die Maschine, die den Block abgebaut hat, hat die Arbeit erledigt, um zu entscheiden, ob die Transaktion erfolgreich war oder nicht. Diese Maschine (dh der Miner) sollte nicht bestraft werden, weil Sie eine Funktion ausgeführt haben, die fehlgeschlagen ist. Die Funktion lief – das kostete den Miner Geld – er/sie sollte bezahlt werden.
Die Gesamtkosten der Transaktion (nur zu Ihrer Information) betragen gas used
* gas price
.
Wenn Sie die Blocktransaktionsgebühr berechnen möchten, können Sie sie wie folgt berechnen:
eth_getBlockByNumber
Blockinfo erhalten.eth.getTransaction
bekommen gasUsed
.eth_getTransactionReceipt
bekommen gasprice
.gasUsed * gasPrice
Transaktionsgebühren erhalten.
JS
Benutzer19510
assert
Sie am Ende mehr bezahlen, als Sie benötigt haben, wenn ein Fehler (z. B. ein ) dazu führt, dass das gesamte Gas verbraucht wird. Für diese spezielle Transaktion würde ich denken, dass 100.000 ziemlich hoch sind, aber ich bin verwirrt darüber, warum MetaMask das falsch macht. Sehen Sie irgendwelche Fehlermeldungen?JS