- inaword
- Блог о разработке и современных технологиях
- Что делать если транзакция в pending?
- Почему транзакция pending от появляется то исчезает и время ожидания обнуляется?
- Как протолкнуть или удалить запирающую транзакцию
- How to solve pending (stuck) transactions on Ethereum
- Why are they not being processed?
- So how do I know which fee (gas price) is sufficient?
- How to fix a long-running transaction
- Are there wallets that calculate the gas price automatically for you?
- Sometimes a video says more than words
- Как отменить или заменить транзакцию, зависшую в сети Ethereum
- Что такое Nonce?
inaword
Блог о разработке и современных технологиях
Что делать если транзакция в pending?
DRAFT — ЧЕРНОВИК (Статья находится в процессе доработки)
В последнее время нагрузка на сеть эфира выросла. К тому же часто проводятся ICO которые могут поднять нагрузку на сеть почти в три раза.
Увеличение нагрузки на сеть может привести к ситуации когда ваша транзакция находится в состоянии pending очень долго.
Дело в том что майнеры в первую очередь стараются взять в обработку самые дорогие транзакции. Поэтому у транзакций с большей стоимостью газа шанс обработаться выше. Когда нагрузка на сеть возрастает транзакции с маленькой стоимостью газа могут ожидать своей очереди по несколько дней и даже недель.
На момент написания статьи при нормальной нагрузке на сеть количество транзакций в состоянии pending от 2000 до 4000 тысяч. Когда кто-от начинает ICO количество транзакций в pending может возрасти до 8-11 тысяч. На изображении как раз показан такой резкий скачек.
Когда транзакция очень долго находится в pending пользователь пытается отправить такую же транзакцию но с большим газом, потом еще и еще. В надежде что хоть одна из них пройдет. И все эти транзакции остаются в pending.
Дело в том что транзакции с адреса как-правило обрабатываются в порядке очереди. Поэтому пока не обработана самая первая — запирающая транзакция, остальные будут ждать.
Почему транзакция pending от появляется то исчезает и время ожидания обнуляется?
Когда транзакция попадает в состояние pending, это значит что нода взяла вашу транзакцию к себе в обработку. И сейчас ищет блок. Однако, блок может найти быстрее другая нода, которая не содержит в себе вашу транзакцию. В этом случае нода которая взяла вашу транзакцию «выплевывает» ее и теперь вашу трназакцию в обработку может взять другая нода. В этом случае время обнуляется.
Как протолкнуть или удалить запирающую транзакцию
Стоит отметить, что ожидание транзакции 2-3 часа хоть и не является нормальным, но все же допустимо.
Транзакции в блоке имеют свои уникальные номера — nonce. Если отправить в сеть две транзакции с одинаковым nonce, то только одна из них обработается. А другая будет считаться некорректной. Поэтому нам достаточно повторить транзакцию с тем же nonce но увеличить стоимость газа. В этом случае нода возьмет транзакцию с наибольшей стоимостью в обработку, а запирающую отклонит как некорректную. И мы решим нашу проблему.
Как это сделать?
Итак, если вы хотите именно удалить запирающую транзакцию, то достаточно отправить пустую транзакцию с высокой ценой газа. Возможности установить цена газа нет в кошельке mist или ethereum wallet. Поэтому мы воспользуемся MyEtherWallet .
- Найдите запирающую транзакцию. Для этого зайдите на etherscan.io и введите в поле address адрес с которого отправляли транзакции и нажмите кнопку go.
- Появится список всех транзакций с вашего аккаунта, нажмите на ссылку «pending Txns»
- Перед вами отобразится список всех транзакций в состоянии pending, а также отобразится цена газа. Как правило запирающая транзакция самая первая. Так и есть в мы видим что в первой транзакции цена газа 1 Gwei. А следующая уже за ней в очереди хоть и имеет цену газа 21 Gwei, но не обработается пока не обработается запирающая транзакция. Нажмите на ссылку хэша запирающей транзакции чтобы посмотреть подробности.
- В подробностях скопируйте число none и адрес from (собственно это адрес аккаунта с которого вы отправляли транзакцию)
- Теперь зайдите в на на https://www.myetherwallet.com/ и выберите вкладку Send Offline (Оффлайн перевод).
- Теперь из всех полей нам надо заполнить следующие:
- From Address — указываем адрес с которого отправляли запирающую транзакцию
- To Address — любой существующий адрес
- Gas price — тут нам надо указать цену газа. Наша запирающая транзакция стоила 1 Gwei. Что никуда не годится. Стандартно MyEtherWallet использует цену газа 21 Gwei. Поэтому мы поставим чуть выше — 30 Gwei. Если посмотрим на надпись справа от поля, то увидим там Wei. 1 GWei = 1000000000 Wei. Поэтому нам нужно написать 30000000000.
- nonce — вставляем то значение, которое скопировали в подробностях транзакции
- Value amount — указываем 0
- Теперь наша задача разблокировать кошелек удобным вам способом. Сделайте это самостоятельно. После разблокировки вам будет доступна кнопка generate transaction. Нажимаем на нее. А затем нажмите на send transaction.
- В появившемся окне нажмите синюю кнопку «Yex, I am sure! Make transaction.»
Источник
How to solve pending (stuck) transactions on Ethereum
If you are one of the many people that own an Ethereum wallet and launched a few transactions against the Ethereum blockchain, then the chance is high that you came face to face with a long-running transaction. Some people even reported having to wait for hours, days even months, hoping their transaction would be processed by the miners.
Since Ethereum transactions have to be processed sequentially it leaves the user completely stuck. Meaning the long-running transaction has to be processed before any other transaction from that wallet has a chance to be processed. Or does it…?
Why are they not being processed?
The main reason why Ethereum transactions are not being processed is that they are not getting picked up by a miner. So why are they not being picked up? To answer that question you need to understand that miners receive the transaction and code-processing fees (gas) for each block of transactions they process, it is part of their reward. If your transaction is not being mined it means that there are enough other transactions on the network that are willing to pay a higher fee to the miner to get processed. This means if the network is very busy, the transaction costs will be higher and vice versa.
So how do I know which fee (gas price) is sufficient?
In Arkane we automatically set the correct gas price based on the consumption on the network. Making it very easy for the user to get their transactions processed. Advanced users have the option to modify the gas price for their transaction, either higher, to get it processed more quickly. Or lower, if time is not a factor, leading to a lower transaction cost.
If you are using a different wallet, which might not support fluctuating gas prices, you can always set it manually, if your wallet allows it. To get an idea of the recommended gas price you can look at the gas tracker from Etherscan.
How to fix a long-running transaction
So what if you have launched a transaction with a gas price that is too low to be of any interest to the miners. Easy you just relaunch the same transaction, but this time with a higher gas price, high enough so it will be picked up. Now you will have two transactions almost identical, one with a low gas price and one with a high gas price. The only problem left to solve is to make sure, only one gets processed at the end.
At the beginning of this post, I said that on the Ethereum blockchain transactions are being processed sequentially, meaning transaction #2 will be processed before # 3 and so forth. It is also not possible to process transactions with the same sequence number. For example, it is not possible to process 2 transactions that have sequence #3, one of them will be dropped.
This brings us to our solution, when you launch your transaction with a correct gas price, you set the sequence number to the same number as the long-running transaction. The transaction with the higher gas price will be picked up sooner, meaning the sequence number will be processed, cause the long-running transaction to be dropped because his sequence is outdated.
At Arkane we understand that this might sounds complicated, therefore we’ve added a Resubmit button that takes care of all the technical stuff.
We even make it super easy to cancel a pending transaction.
Are there wallets that calculate the gas price automatically for you?
Luckily yes, Arkane Wallet, will analyze your transaction and set an average gas price, which you can modify easily to speed up or slow down your transaction.
The Arkane wallet is currently securing more than $5 million in crypto assets for more than 80,000 persons.
Sometimes a video says more than words
In this 10min video below we create a ‘stuck’ transaction and show you how you can speed them up or even cancel them. Yes, it is possible to cancel a blockchain transaction 😮. Apologies for the bad audio.
Источник
Как отменить или заменить транзакцию, зависшую в сети Ethereum
Иногда, после отправки транзакции в сети Ethereum, значительно увеличивается ее загруженность (возрастает количество необработанных операций), что приводит к увеличению стоимости газа, необходимого для ее быстрого включения в блок. Неотправленные транзакции получают статус Pending и могут находится в этом состоянии очень долго, даже недели.
Если пользователь пытается сделать еще одну транзакцию с этого адреса, даже с большей комиссией, она все равно не отправляется, а просто становится в очередь за зависшей.
Безусловно, это вряд ли может удовлетворить, как говорит классик, «Не только лишь всех».
Чтобы выйти из этого положения, можно создать новую транзакцию с тем же nonce и отправить ее в сеть с приемлемой комиссией. Благодаря этому многократно увеличивается вероятность включения в блокчейн именно этой транзакции (с большим fee).
Что такое Nonce?
Nonce — это один из параметров транзакции, соответствующий их общему количеству для этого адреса Ethereum на момент отправки. Фактически это ее порядковый номер. Поэтому первой можно отменить транзакцию с наименьшим номером.
Когда транзакция с высокой комиссией будет обработана майнерами и включена в блокчейн, неудачная, зависшая транзакция с таким же nonce получит статус Dropped и не будет обрабатываться. Комиссия за ее отправку также не будет взиматься.
Рассмотрим подробнее, как происходит этот процесс на примере кошелька MEW.
Прежде всего, нужно зайти на обозреватель сети, например, etherscan, где нужно ввести в строку поиска адрес, с которого отправлялась транзакция.
Затем нужно перейти по ссылке хеша транзакции, которая зависла (находится в статусе Pending):
В открывшемся окне можно изучить детали неудачной транзакции, в том числе предположительное время, необходимое для ее обработки (оно не всегда соответствует действительности):
При нажатии на кнопку в виде часов можно изучить рекомендованную величину газа, которая гарантирует быструю обработку транзакции:
Для замены подвисшей транзакции нужно узнать значение ее nonce, которое можно увидеть, раскрыв окно дополнительной информации о транзакции путем нажатия на интерактивную надпись Click to see More:
В строке Nonce находится информация о значении nonce для текущей транзакции, его нужно запомнить (в данном случае это 71):
Теперь в кошельке Ethereum, например в MEW нужно создать транзакцию с таким же nonce. Для отмены создается транзакция с нулевым значением в строке Value. Для повторной отправки нужной суммы (замены зависшей транзакции) можно создать новую транзакцию с тем же Nonce, но большей комиссией. Нужно понимать, что до ее обработки существует вероятность включения в блокчейн майнерами исходной, зависшей транзакции.
После отправки в сеть транзакции с дублирующим значением Nonse, зависшая операция с таким же Нанс будет отменена.
Для работы с активами в сети Ethereum и дргуих блокчейнах с хешированием на Ethash удобно использовать кошелек MyEtherWallet. Максимальный уровень безопасности обеспечивается при использовании MEW в холодном режиме.
Далее приводятся пояснительные скриншоты по работе с MEW при замене зависшей транзакции.
Создание транзакции с одинаковым nonce на кошельке MEW, подключенном в сеть:
После этого производится перенос файла json на защищенный (оффлайн) компьютер, где указывается адрес получателя, сумма перевода, подписывается транзакция и сохраняется ее подписанный файл:
Затем в онлайн кошельке открывается подписанный файл signedTransactionObject*.json и транзакция отправляется в сеть:
При недостаточном объеме средств, оставшемся на балансе кошелька отправителя, транзакция создана не будет, появится сообщение об ошибке Error: Returned error: insufficient funds for gas * price + value:
При отправке правильно подписанной транзакции, а также наличии достаточных для оплаты комиссии сети средств, нужно дождаться включения майнерами информации о transaction в блок:
При достаточном газе транзакция попадает в статус выполненных за несколько десятков секунд
Зависшая в сети транзакция с тем же nonce получает статус отброшенной и замененной (Dropped & Replaced):
Впоследствии она даже не будет отображаться в обозревателе блоков.
Описанный алгоритм отмены/замены транзакций можно выполнять только для зависших операций. Если транзакция уже включена в блокчейн, то с ней ничего сделать невозможно.
Источник