Dies ist ein privates Netzwerk
Es wurde eine Transaktion gesendet, um mithilfe des eth_sendTransaction
RPC-Aufrufs einen Vertrag zu erstellen.
Die Transaktion wird „entfernt“ und mit „wird entfernt“ markiert, weil ihr das Gas ausgegangen ist, sie aber im pending
Zustand bleibt und die Miner weiterhin versuchen, sie zu verarbeiten.
1- Gibt es eine Möglichkeit, eine ausstehende Transaktion zu stornieren?
Gemäß der sendTransaction
Dokumentation ermöglicht das erneute Senden einer Transaktion mit derselben Nonce das "Überschreiben Ihrer eigenen ausstehenden Transaktion".
Mit eth_getTransactionByHash
ihm ist es möglich, die Nonce einer Transaktion wiederherzustellen.
Wenn Sie jedoch eine neue Transaktion mit derselben Nonce (und mehr Gas) senden, schlägt die neue Transaktion mit „TX (d37f7a1b) fehlgeschlagen, wird entfernt: Transaktion mit ungültiger Nonce“ fehl.
2- Wie "überschreiben" wir eine ausstehende Transaktion?
Danke schön
edit1: Ergebnis voneth.pendingTransactions
Die Eingabe ist dieselbe (gleicher Vertrag), ebenso die Nonce.
Die ersten 2 scheitern mit TX (49dcf54d/7e591a92) failed, will be removed: Out of gas
, die dritte mitTX (d37f7a1b) failed, will be removed: Transaction w/ invalid nonce. tx=8 state=9)
[{
blockHash: null,
blockNumber: null,
from: "0x766b8dc3ee1a98dd53444ce3cc5a185305570861",
gas: 90000,
gasPrice: 20000000000,
hash: "0x49dcf54d52ddad2cfb57d9805b1a94bbc6b60ad44eaac9c117399530424d1300",
input: "0x60606...5056",
nonce: 8,
to: null,
transactionIndex: null,
value: 0
}, {
blockHash: null,
blockNumber: null,
from: "0x766b8dc3ee1a98dd53444ce3cc5a185305570861",
gas: 150000,
gasPrice: 20000000000,
hash: "0x7e591a92683453ea0ec6a7024d54198140ec2c23936b3662c4f3e0d9978fc828",
input: "0x60606...5056",
nonce: 8,
to: null,
transactionIndex: null,
value: 0
}, {
blockHash: null,
blockNumber: null,
from: "0x766b8dc3ee1a98dd53444ce3cc5a185305570861",
gas: 500000,
gasPrice: 20000000000,
hash: "0xd37f7a1bcedef089723f31bbf155b6c4c66f77fd0b5a5f6c3168a0b8ff3af299",
input: "0x60606...5056",
nonce: 8,
to: null,
transactionIndex: null,
value: 0
}]
edit2: Änderung, nachdem der Knoten, der die Transaktionen erstellt hat, mit dem Mining begonnen hat
Die Situation änderte sich erst, als der Knoten, der die Transaktionen erstellte, mit dem Mining begann
Ist dies das erwartete Verhalten, das der Knoten, der die ausstehende Transaktion erstellt hat, minen muss , damit eine Transaktion, die OOG auf einem anderen Miner ausführt, tatsächlich entfernt wird?
Die ursprüngliche Frage bleibt immer noch: Wie entfernen/stornieren/überschreiben wir eine ausstehende Transaktion?
Um die ursprüngliche Transaktion zu überschreiben, müssen Sie dieselbe Transaktion mit derselben Nonce, aber auch mit * > 10 % höherem Gaspreis als zuvor * erneut senden.
Wenn Sie die Transaktion stornieren möchten, übertragen Sie eine Transaktion mit Nullwert erneut, mit derselben Nonce, aber einem > 10 % höheren Gaspreis.
Nur eine der Transaktionen mit dieser Nonce kann in die Blockchain aufgenommen werden.
Ich hatte ein ähnliches Problem, ich habe versehentlich 20 Transaktionen mit GasPrice=0 durchgeführt, wodurch meine Geth-Instanz vollständig blockiert wurde. Ich habe die Schritte in diesem Artikel befolgt , um die Transaktionen zu stornieren. Was Sie im Wesentlichen tun möchten, ist:
geth attach
eth.pendingTransactions
. Dadurch werden alle ausstehenden Transaktionen zurückgegeben. Ein oder mehrere Objekte, die so aussehen: { blockHash: null, blockNumber: null, from: "your account", gas: 179412, gasPrice: 0, hash: "hex stuff", input: "hex stuff", nonce: 260, r: "hex stuff", s: "hex stuff", to: "hex stuff", transactionIndex: 0, v: "0x29", value: 0 }
Jetzt kann eine von zwei Situationen auftreten, Sie haben nur eine ausstehende Transaktion oder Sie haben mehrere.
Nur eine Transaktion
nonce
(im obigen Beispiel war 260)Entsperren Sie Ihr Konto,
personal.unlockAccount('<YOUR_ACCOUNT>') Unlock account <YOUR_ACCOUNT> Passphrase: true
eth.sendTransaction({ from: '<YOUR_ACCOUNT>', to: '<YOUR_ACCOUNT>', value: 0, gasPrice: <NEW_HIGHER_GAS_PRICE>, gasLimit: 24000, nonce: '<NONCE_OF_YOUR_PENDING_TRANSACTION>' });
Mit mehreren Transaktionen
Das ist eine etwas seltsame Lösung, aber funktioniert :)
Führen Sie die gleichen Schritte 1 und 2 aus dem vorherigen Fall aus, dann:
eth.sendTransaction()
den Nonce-Wert (Kontoadressen und Gaspreis vorher ausfüllen). Ich habe ein gif gemacht, das dies hier zeigt.Das sollte es tun.
eth
Bruno Grieder
Bruno Grieder
xgabrielx