Содержание статьи:
Обладатели криптовалют нередко сталкиваются с проблемой «зависания» транзакции. У некоторых ожидание затягивается на недели! А происходит это чаще всего в самый неудобный момент — когда курс лихорадит.
Почему так происходит
Корень проблемы кроется в структуре блокчейна.
Размер одного блока биткоина на начало 2019 года равен 1 МБ, который вмещает до 2000-3000 транзакций. На создание майнерами одного блока в среднем требуется 10 минут. Чтобы в блокчейне транзакция считалась успешно выполненной, требуется подтверждение 2-6 узлов сети. Подтверждение заключается не только в проверке на ошибки нового блока и включении его в цепочку блоков, но и в последующем использовании цепочки именно с этим блоком. Подтверждение каждым дополнительным узлом занимает 10 минут.
Комиссия сети, которую платит пользователей, совершающий транзакцию — это оплата труда майнеров за включение транзакции в блокчейн. Чем больше комиссия, тем скорее майнер обработает именно вашу транзакцию.
Мемпул
Мемпул (mempool) — это очередь, куда попадают все транзакции до подтверждения и включения в блок. Посмотреть текущее состояние можно здесь. Данные таблицы сгруппированы по соответствующей комиссии. В каждой строке указано количество транзакций в очереди при соответствующей комиссии, ожидаемый блок включения и соответствующая задержка в минутах. Для удобства сделана возможность выбора вида отображения комиссии: сатоши, mBTC (мили-биткоин), BTC. Проверив текущее состояние мемпула, можно с высокой точностью рассчитать необходимую комиссию сети, чтобы транзакция прошла, к примеру, в течение ближайших пяти или шести часов. Ещё можно посетить сайт блокчейна, где представлены графики с числом транзакций, ожидающих подтверждения. Изменяя временной масштаб графика, можно составить статистику нагрузки сети по часам и по дням месяца.
Ускорение транзакции
Если же транзакция с маленькой комиссией уже попала в очередь и «зависла» там надолго, её можно ускорить несколькими способами. Рассмотрим на примере лёгкого электронного кошелька «Electrum».
Replace by fee
Первый способ — использовать функцию кошелька «Замена за вознаграждение» (Replace by fee). Этим способом может воспользоваться только отправитель средств.
По этой функции как-то уже была хорошая статья на хабре, поэтому здесь о ней будет сказано кратко.
Она присутствует не только в Electrum, но и других программных кошельках, таких как Bitcoin Core, Airbits, GreenAddress и другие. На скриншоте ниже показано, как активировать эту функцию в кошельке Electrum.
После того, как опция активирована, можно попробовать ускорить неподтвержденную транзакцию. После нажатия правой кнопкой мыши на «зависшей» транзакции на вкладке «История» появится контекстное меню, в котором есть строка «Увеличить комиссию» (Increase fee).
Стоит отметить, что конкретно в кошельке ELECTRUM для использования функции «Замена за вознаграждение» необходимо наличие некоторого остатка на балансе кошелька.
Весь механизм работы Replace-by-fee (RBF) описан в BIP-0125. Кратко, он заключается в следующем: в мемпул отправляется новая транзакция с более высокой комиссией и новым номером nSequence. Отметим, что этот номер должен быть меньше 0xffffffff — 1. Если же транзакция отправлена без поддержки RBF, её nSequence автоматически будет максимальным, значит и этот метод ускорения транзакции становится неосуществим. Функция «Замена за вознаграждение» не создает проблемы двойной оплаты — ситуации, когда пул отвергает новую транзакцию, потому что в мемпуле еще «висит» неподтвержденная.
Child Pays for Parent
Второй способ называется «Дети платят за родителей», он же CPFP (Child Pays for Parent). Эта операция доступна для получателей средств.
Механизм её таков: к ожидаемой транзакции с низкой комиссией прикрепляется новая транзакция (например, между своими адресами) с высокой комиссией. Возможность получения высокой комиссии приводит к тому, что майнер скорее включает такую связку транзакций в блок.
В том же кошельке Electrum смотрим список входящих транзакций, ожидающих подтверждения. При нажатии правой кнопкой мыши на транзакцию видим строку «Child pays for parent» в выпадающем меню. Далее требуется лишь установить комиссию, которая ускорит подтверждение транзакции майнерами.
После подтверждения процедуры в списках транзакций появится ещё одна, ожидающая подтверждения. Таким образом, для этих двух транзакций будет учитываться общая комиссия, от величины которой и будет зависеть скорость включения связки транзакций в блок.
Заплатить майнерам
Третий способ — воспользоваться услугами стороннего сервиса. К примеру, идем на https://www.btcaccelerator.net/. Указываем комиссию, e-mail и ID неподтверждённой транзакции биткоина. После чего оплачиваем указанную комиссию и ожидаем перевода своих биткоинов. Сервис включает оплаченные транзакции в найденные блоки своего майнинг-пула, предоставляя интерфейс общения владельца крипты с майнером.
Иногда в сети биткоина происходят перегрузки, вызванные нашествием пользователей или хакерскими атаками, что приводит к зависанию множества транзакций и оплаты очень высокой комиссии для быстрого включения транзакции в ближайшие пару блоков. Зачастую, если не «горят трубы», имеет смысл подождать уменьшения очереди, чтобы с меньшей комиссией за приемлимое время осуществить перевод.