Сеть биткоина растет, курс растет и все чаще пользователи биткоина сталкиваются с проблемой, когда биткоин транзакция «зависает». Т.е. биткоины вроде как отправлены, но до адресата доходят через несколько дней в лучшем случае. А чаще всего бывает так, что транзакция «погуляет» по сети и вернется на кошелек. Это кстати тоже один из позитивных вариантов развития событий.
Как я уже отметил, рост количества транзакций в сети биткоин привел к тому, что очень много транзакций «висят» неподтвержденными по несколько дней. Причем даже повышенная комиссия не даст гарантий того, что ваша транзакция будет обработана в заявленные несколько часов. Количество неподтвержденных транзакций в сети может достигать до 200 000.
Основными причинами такой ситуации считаются: атака сети биткоин и малая плата за транзакцию и тогда манеры просто не берут ее в обработку.
Перед тем как отправить платеж советую взглянуть на загрузку сети. Это можно сделать тут и тут. Там же можно увидеть рекомендуемую цену за один байт.
Но вы ведь не попали бы на эту статью, если бы не задались вопросом, который я сделал заголовком. Итак, что делать если транзакция зависла ? Существует специальный сервис для «проталкивания зависших» транзакций.
Для этого нужно получить ХЭШ вашей транзакции (ниже привожу пример того, как это сделать на блокчейне):
Открываем сайт https://www.viabtc.com/tools/txaccelerator/ и вбиваем свою транзакцию. Вводим символы с картинки и жмем Submit:
При сильной загруженности сервиса не всегда с первого раза получается успешно завершить данную операцию. Может выдать ошибку Submissions are beyond limit. Please try later. Поэтому нужно пробовать до тех пор пока вы не получите статус «Успешно». Только после этого ваша транзакция будет принята в обработку.
Какие еще советы могут помочь вам если все таки ваша транзакция не подтверждается:
Сначала можно просто подождать. Если прошло уже несколько часов (или даже суток) и ждать надоело, то есть несколько вариантов:
1) сделать даблспенд. Особенности: может сделать только отправитель.
2) использовать CPFP. Особенности: может сделать получатель и обычно отправитель.
3) использовать replace-by-fee. Особенности: может только отправитель и если заранее позаботился; не все кошельки могут.
4) использовать «ускоритель» от viabtc. Особенности: может получатель и отправитель, но сервис часто перегружен и есть ограничения на транзакцию.
Как сделать даблспенд (двойную трату)?
Действуем по следующему алгоритму (алгоритм описан для кошелька Bitcoin Core; для других кошельков действия аналогичны, но команды будут другими):
0) Убеждаемся, что она ждёт подтверждения. Для этого копируем id вашей транзакции, вставляем в строку поиска сервиса blockchain.info (а также bitaps.com, blocktrail.com/BTC или аналогичного). Далее ищем глазами строку «неподтвержденная транзакция» («unconfirmed transaction»). Нашли? Значит, транзакция ждет подтверждения.
Примечание. На «Приблизительное время подтверждения» («Estimated Confirmation Time») на странице с вашей транзакцией blockchain.info не смотрим — там неизвестно что.
1) Теперь закрываем кошелек и запускаем его из командной строки с параметром -zapwallettxes и ждем пока он откроется. Когда кошелек запустится, все неподтвержденные транзакции из него исчезнут (но они ещё есть в сети!). Для bitcoin core 0.14 потребуется перед запуском ещё переименовать или перенести файл mempool.dat (мемпул в этой версии сохраняется в файл и старая транзакция остается там).
Примечание. Почему не с параметром -salvagewallet? -zapwallettxes не затронет имена ваших ключей, а -salvagewallet удалит их. Кроме того, bitcoin core иногда падает при запуске с -salvagewallet и тогда ваш wallet.dat будет поврежден. Правда, рядом с ним заранее будет создана копия.
2) Теперь можно создавать новую транзакцию, не забыв поставить адекватную комиссию. Но! Поскольку ваша старая транзакция ещё осталась в сети, она может когда-нибудь неожиданно подтвердиться. Если вас это не устраивает, то у новой транзакции хотя бы один из входов должен будет совпадать с одним из входов старой. Для этого смотрим на странице вашей транзакции на сайте blocktrail.com/BTC или аналоге графу «inputs», запонинаем точный размер входа в битках. После этого при создании транзакции в кошельке нажимаем на кнопку «inputs…», находим в списке такое же точно число в битках и выбираем его (если их несколько, то выбирайте с тем же адресом получения и временем). После этого выбираем ещё какие-нибудь входы, чтобы общая сумма была больше суммы транзакции с будущей комиссией; лучше выбирать с запасом. Далее заполняем все поля как обычно, (не забываем про комиссию!) и отправляем.
Примечание. Иногда пишут, что всё это можно не делать, а просто подождать 2-3 суток, чтобы старая транзакция сама «канула в лету». Но иногда это может привести к проблемам.
Как использовать CPFP? Как быть, если я не отправитель, а получатель транзакции?
Такой способ есть и он подходит для получателей; для отправителя он также подойдёт, если у вашей транзакции была «сдача» (обычно она есть). Этот способ немного дороже и сколько пулов его поддерживают — неизвестно (по состоянию на начало 2017 года как минимум два пула его поддерживают). Можно попробовать задействовать механизм CPFP (child pays for parent). Для этого вы должны потратить один из выходов проблемной транзакции с комиссией, которой хватит на обе транзакции сразу — новую и старую. То есть просто создаёте транзакцию с одним входом (это должен быть один из выходов проблемной, например — сдача) и пересылаете биткоины себе же. Комиссию ставите такую, чтобы её хватило на обе сразу: для этого суммируете их размеры, умножаете на число из пункта «Как выбрать адекватную комиссию?», делите на размер новой в килобайтах и вписываете в графу «custom transaction fee» при отправке транзакции. Подробнее для кошелька Bitcoin Core под спойлером:
Пусть для примера вы получатель и должны получить 0.08500148 btc. Для того, чтобы воспользоваться CPFP, в Bitcoin Core нажимаем «Настройки» -> «Параметры» -> «Бумажник» («Settings» -> «Options» -> «Wallet»); ставим галочки у «включить управление входами» («Enable coin control features») и «тратить неподтвержденную сдачу» («Spend unconfirmed change»), если они не стоят (потом можно будет их убрать); теперь закрываем окно настроек и нажимаем «Отправить» («Send»), там нажимаем кнопку «Входы…» («Inputs…») и ставим галочку у суммы 0.08500148; потом «Ок», получателем ставите свой адрес; количество ставите 0.08500148 и галочку «вычесть комиссию из суммы» («subtract fee from amount»); комиссию ставите «выборочно» («custom»), «за килобайт» («per kilobyte») и пишете с рассчетом на 2 транзакции по формуле ((размер старой транзакции)/(размер новой транзакции) + 1)*(адекватная комиссия за килобайт и лучше побольше). Отправляете.
Всё. Теперь ждёте. Те пулы, которые «понимают» эту схему, с радостью возьмут обе транзакции сразу. Возможно, это будет не быстро, если таких пулов мало.
Как отменить транзакцию? Может ли транзакция отмениться сама?
Если транзакция подтвердилась (включена в блок), отмениться или быть отменена она не может. Чтобы отменить неподтвержденную транзакцию, необходимо создать конкурирующую с ней транзакцию и добиться её включения в блок — смотрите пункт (2) ответа на вопрос «Что делать, если отправленная вами биткоин транзакция не подтверждается («зависла»)?». В любом случае, гарантии успеха тут нет.
Сама неподтвержденная транзакция отмениться не может — может лишь поменяться отображение в вашем кошельке. Далее смотрите ответ на вопрос «Моя транзакция висела неподтвержденной несколько дней, а затем пропала и деньги вернулись обратно. Теперь все хорошо и я могу просто отправить деньги ещё раз?».
Моя транзакция висела неподтвержденной несколько дней, а затем пропала и деньги вернулись обратно. Теперь все хорошо и я могу просто отправить деньги ещё раз?
Нет! Ваша старая транзакция ещё есть в сети и может неожиданно подтврдиться. Чтобы этого избежать, смотрите пункт (2) ответа на вопрос «Что делать, если отправленная вами биткоин транзакция не подтверждается («зависла»)?» (под спойлером). Если вы вообще передумали делать тот перевод, то можно будет сделать перевод себе самому.
Как обезопаситься от зависания транзакций?
1. Выставлять адекватную комиссию.
2. Включить в кошельке механизм replace-by-fee и помечать все транзакции как replaceable, если ваш кошелёк его поддерживает (вроде бы electrum поддерживает). Это позволит при возникновении проблемы легко повысить комиссию.
По материалам форума ForexDengi.com
Я намеренно не стал переписывать, а скопировал информацию с форума. Там и так описано все в довольно доступной форме. Если у вас появятся вопросы — задавайте их в комментах, будем разбираться.