Это частная сеть
Была отправлена транзакция для создания контракта с помощью eth_sendTransaction
вызова RPC.
Транзакция «удалена» с пометкой «будет удалена», потому что у нее закончился газ, но она остается в pending
состоянии, и майнеры продолжают пытаться ее обработать.
1- Есть ли способ отменить незавершенную транзакцию?
Согласно sendTransaction
документации , повторная отправка транзакции с тем же одноразовым номером позволяет «перезаписать собственную ожидающую транзакцию».
С eth_getTransactionByHash
его помощью можно восстановить одноразовый номер транзакции.
Однако при отправке новой транзакции с тем же одноразовым номером (и большим количеством газа) новая транзакция завершается с ошибкой «TX (d37f7a1b) не удалось, будет удалена: транзакция с недопустимым одноразовым номером».
2- Как мы «перезаписываем» ожидающую транзакцию?
Огромное спасибо
edit1: результатeth.pendingTransactions
Вход тот же (тот же контракт), как и одноразовый номер.
Первые 2 терпят неудачу с TX (49dcf54d/7e591a92) failed, will be removed: Out of gas
, третий сTX (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: изменение после того, как нода, создавшая транзакции, начала майнинг
Ситуация изменилась только тогда, когда нода, создавшая транзакции, начала майнинг.
Является ли это ожидаемым поведением, которое должен выполнять узел, создавший ожидающую транзакцию , чтобы транзакция, выполняющая OOG на другом майнере, была фактически удалена?
Первоначальный вопрос все еще остается: как удалить/отменить/перезаписать ожидающую транзакцию?
Чтобы перезаписать исходную транзакцию, вам нужно будет повторно передать ту же транзакцию с тем же одноразовым номером, но также с * > 10% более высокой ценой газа, чем раньше *
Если вы хотите отменить транзакцию, ретранслируйте транзакцию с нулевой стоимостью с тем же одноразовым номером, но на > 10 % более высокой ценой газа.
Только одна из транзакций с этим одноразовым номером может быть включена в блокчейн.
У меня была аналогичная проблема: я случайно совершил 20 транзакций с GasPrice=0, что полностью заблокировало мой экземпляр Geth. Я выполнил шаги, описанные в этой статье , чтобы отменить транзакции. По сути, что вы хотите сделать, это:
geth attach
eth.pendingTransactions
. Это вернет все ожидающие транзакции. Один или несколько объектов, которые выглядят следующим образом: { 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 }
Теперь может возникнуть одна из двух ситуаций, у вас только одна ожидающая транзакция или у вас их несколько.
Только одна транзакция
nonce
(в примере выше было 260)Разблокируйте свой аккаунт,
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>' });
С несколькими транзакциями
Это довольно странное исправление, но оно работает :)
Сделайте те же 1 и 2 шага из предыдущего случая, затем:
eth.sendTransaction()
(предварительно заполните адреса учетных записей и цену газа) вокруг значения nonce. Я сделал гифку, показывающую это здесь.Это должно сработать.
эт
Бруно Гридер
Бруно Гридер
xgabrielx