FixedFloat Blog

Наши новости, руководства и инструкции

Замена и отмена транзакции Ethereum

Для чего нужен Replace by fee?

Возникает ситуация, когда требуется отменить или заменить транзакцию. Это может быть вызвано тем, что транзакции долгое время не попадают в блок. Все операции, которые после запуска не добавились в блок, считаются неподтверждёнными. Неподтвержденные транзакции чаще всего случаются именно из-за низких комиссий. У таких транзакций всё же есть возможность стать обработанными.

В блокчейнах Bitcoin, Ethereum и других существует механизм, который позволяет заменить еще неподтвержденную транзакцию другой транзакцией с большей комиссией (transaction fee). Этот механизм называется Replace by Fee.

Ускорение транзакции за счёт повышения комиссии

Отличие Ethereum от Bitcoin в том, что каждая транзакция имеет порядковый номер (nonce). Поэтому для того, чтобы использовать функцию Replace by fee, у заменяемой и заменяющей транзакции должен быть один номер.

Nonce указывает майнерам и нодам о порядке транзакций и, соответственно, о том, как изменять "состояние аккаунта". Первой примется та транзакция, у которой параметр nonce меньше. Если будет две транзакции с одинаковым nonce, то примется та, у которой комиссия выше.

  1. Откройте кошелек, который вы использовали для отправки исходной транзакции.
  2. Заполните поле "Получатель", указав адрес, на который вы хотите выполнить отправку.
  3. Измените значение поля "Сумма" с 0 на ту сумму ETH, которую вы хотите отправить.
  4. При отправке стандартной транзакции в ETH вы можете использовать лимит топлива 21000. Если вы отправляете токены, увеличьте лимит примерно до 100000. В противном случае просто оставьте значение по умолчанию.
  5. Увеличьте значение поля "Цена топлива" на 10 GWEI, по сравнению с вашей предыдущей транзакцией. Если это срочная транзакция, вы можете увеличить его больше. Имейте в виду, что чем выше цена газа, тем выше комиссия за транзакцию (лимит газа * цена газа).
  6. Убедитесь, что значение поля "Нонс" совпадает со значением в предыдущей транзакции. Если это так, то не меняйте значение в поле. Если вы измените его, то эта транзакция не заменит предыдущую.
  7. Нажмите кнопку "Отправить транзакцию".
  8. Появится хеш новой транзакции. Нажмите на ссылку, чтобы просмотреть ее и узнать, получилось ли у вас. Если она не появится сразу, попробуйте обновить страницу через несколько минут.

Отмена транзакции

Для того, чтобы предотвратить "прохождение" предыдущей транзакции, её добычу и включение в блокчейн, требуется создать транзакцию на сумму 0 ETH на ваш собственный адрес.

  1. Отправляйтесь на Etherscan.io или Ethplorer.io.
  2. Вставьте хеш вашей транзакции.
    • Если статус транзакции — Pending (В ожидании), то вы можете попробовать ее отменить.
    • Если транзакция не найдена, нажмите кнопку еще раз, подождав несколько минут между каждым нажатием. Если это не сработает, скорее всего, ваша транзакция не была отправлена.
    • Если статус транзакции — Success (Успешно), то вы не сможете ее отменить.
  3. Если отображается статус Pending (В ожидании), войдите в кошелек, который вы использовали для отправки исходной транзакции на MEW.
  4. Отправьте себе транзакцию с балансом 0 ETH.
  5. Нажмите кнопку "Отправить транзакцию".
  6. Появится диалоговое окно. Нажмите кнопку "Да, я уверен", чтобы отправить ее.
  7. Появится хеш новой транзакции. Нажмите на ссылку, чтобы просмотреть ее и узнать, получилось ли у вас. Если она не появится сразу, попробуйте обновить страницу через несколько минут.

Ускорение транзакции с помощью Child Pays for Parent

В ETH опция Child Pays for Parent невозможна. Желая ускорить транзакцию повышением комиссии, пользователь ETH может только отправить ту же транзакцию с тем же nonce с более высокой ценой за газ. Майнер добавляет в блок только одну транзакцию с лучшей комиссией. Две транзакции с одним и тем же nonce не могут быть добавлены в блок.