FAQ по зависшим транзакциямЭтот FAQ был изначально написан мной для форума bits.media два года назад и неоднократно обновлялся потом. Ниже - актуальная переработанная версия. Модератору: если я ошибся с разделом, перенесите в более подходящий.
Почему моя транзакция не подтверждается (зависла)?
Скорее всего, отправитель выставил недостаточную комиссию. Может оказаться так, что месяц, неделю, или даже сутки назад её хватало для быстрого подтверждения, а сегодня - нет. Вторая возможная причина - отправитель потратил выход неподтвержденной транзакции: получил биткоины и, не дожидаясь подтверждений, отправил часть из них дальше.
Сначала убедимся, что ваша транзакция действительно ожидает подтверждения. Для этого копируем id вашей транзакции, вставляем в строку поиска
blockchair.com (или
blockchain.com, или
bitaps.com). Далее ищем глазами строку "нет подтверждений" ("unconfirmed"). Нашли? Значит, транзакция ждет подтверждения.
Чья это проблема и кто её должен решать?Это проблема отправителя - того человека или сервиса, который транзакцию создал и отправил. Неподтвержденная транзакция - лишь намерение передать монеты, а не его реализация. Хотя бывает так, что решать проблему приходится получателю.
Но я поставил рекомендуемую комиссию! Почему же транзакция не подтверждается?Есть только рекомендуемая
кем-то комиссия. Этот кто-то может ошибиться. Ошибочные рекомендации иногда выдаёт большинство кошельков (в том числе bitcoin core).
Мои биткоины теперь пропадут?Нет. Они либо дойдут до получателя, либо станут доступны в кошельке у отправителя.
Как узнать, скоро ли она подтвердится?Ищем на странице вашей транзакции на сервисе
blockchair.com такую строку "Priority: 14498/22321" ("В очереди: 14498/22321"). Первое число - ваше текущее место в очереди, второе - общая длина очереди. В блоке (раз в 10 минут в среднем) обычно 2-3 тысячи транзакций. Можно примерно оценить время в очереди.
Моя позиция в очереди увеличилась! Как так?Приоритет имеют транзакции с наибольшей комиссией.
Что делать, если ваша биткоин транзакция не подтверждается и очередь до нее большая?Есть несколько вариантов:
- использовать replace-by-fee. Это может сделать только отправитель и если в кошельке стояла галочка до отправки; не все кошельки поддерживают; недорого, несложно.
- использовать CPFP (child pays for parent). Это может сделать получатель и обычно отправитель, немного дороже, не очень сложно.
- сделать даблспенд (двойную трату). Может сделать только отправитель, нужен доступ к приватным ключам или hd seed (12/24 слова), недорого, относительно сложно.
- использовать бесплатный "ускоритель" от viabtc. Может сделать кто угодно, бесплатно, несложно, но сервис часто перегружен и есть ограничения на транзакцию (комиссия дожна быть не менее 10 сат/байт). Этот сервис приносит прямые убытки своим создателям и может в любой момент прекратить работу. Ещё есть аналогичный "ускоритель" от antpool (необходим аккаунт на antpool.com). Иногда не работает.
- использовать один из платных ускорителей от пулов viabtc, btc.com. Может использовать кто угодно, но относительно дорого.
- использовать один из бесплатных/платных ускорителей в телеграмме. Те из них, что работают - переиспользуют ускорители от пулов. Ещё попадаются фальшивые ускорители типа такого: bitaccelerate.com. Они вообще ничего не ускоряют, а только рассылают вашу транзакцию. Как правило, это не имеет смысла.
Как использовать replace-by-fee?Просто нажать кнопку в кошельке. Для Bitcoin core: открываем вкладку с транзакциями, правой кнопкой по проблемной транзакции, затем "Increase transaction fee". Подробно про replace-by-fee транзакции
читайте тут.Как использовать CPFP? Как быть, если я не отправитель, а получатель транзакции? Такой способ есть и он подходит для получателей; для отправителя он также подойдёт, если у вашей транзакции была "сдача" (обычно она есть). Этот способ немного дороже. Можно попробовать задействовать механизм 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)*(адекватная комиссия за килобайт и лучше побольше). Отправляете.
- Всё. Теперь ждёте.
Как сделать даблспенд (двойную трату)?Для кошелька Bitcoin Core действуем по следующему алгоритму:
- Закрываем кошелек, запускаем его с параметром -zapwallettxes и ждем пока он откроется. Когда кошелек запустится, все неподтвержденные транзакции из него исчезнут (но они ещё есть в сети!). Для bitcoin core 0.14 и выше потребуется перед запуском ещё удалить (переименовать или перенести) файл mempool.dat.
Почему не с параметром -salvagewallet? -zapwallettxes не затронет имена ваших адресов а -salvagewallet удалит их. Кроме того, bitcoin core может упасть при запуске с -salvagewallet и тогда ваш wallet.dat будет поврежден. Правда, рядом с ним заранее будет создана копия. - Теперь можно создавать новую транзакцию, не забыв поставить адекватную комиссию. Но! Поскольку ваша старая транзакция ещё осталась в сети, она может когда-нибудь неожиданно подтвердиться. Если вас это не устраивает, то у новой транзакции хотя бы один из входов должен будет совпадать с одним из входов старой. Для этого смотрим на странице вашей транзакции на сайте blockchair.com или аналогичном графу "inputs" (входы), запонинаем точный размер входа в биткоинах. После этого при создании транзакции в кошельке нажимаем на кнопку "inputs...", находим в списке такое же точно число в биткоинах и выбираем его (если их несколько, то выбирайте с тем же адресом получения и временем). После этого выбираем ещё какие-нибудь входы, чтобы общая сумма была больше суммы транзакции с будущей комиссией; лучше выбирать с запасом. Далее заполняем все поля как обычно, (не забываем про комиссию!) и отправляем.
Иногда пишут, что всё это можно не делать, а просто подождать 2-3 суток, чтобы старая транзакция сама "канула в лету". О том, что иногда это может привести к проблемам, можно прочитать тут (англ).
Ещё есть
вот это отличное руководство с картинками - подходит для любых кошельков! Как вытащить приватные ключи из blockchain.com смотрите
тут (англ).
Как отменить транзакцию? Может ли транзакция отмениться сама?Если транзакция подтвердилась (включена в блок), отмениться или быть отменена она не может. Чтобы отменить неподтвержденную транзакцию, необходимо создать конкурирующую с ней транзакцию и добиться её включения в блок - смотрите ответ на вопрос "Как сделать даблспенд (двойную трату)?". В любом случае, гарантировать отмену тут нельзя.
Про отмену replace-by-fee транзакций
читайте тут.
Сама неподтвержденная транзакция отмениться не может - может лишь поменяться отображение в вашем кошельке. Далее смотрите ответ на следующий вопрос.
Моя транзакция висела неподтвержденной несколько дней, а затем пропала и деньги вернулись обратно. Теперь все хорошо и я могу забыть про всё это?Нет! Ваша старая транзакция ещё есть в сети и может неожиданно подтвердиться. Чтобы этого избежать, надо сделать так, чтобы была новая транзакция и конкурировала со старой по входам. Если вы вообще передумали делать тот перевод, то можно будет сделать перевод себе самому. Самый простой, но иногда более затратный вариант - просто переслать себе все биткоины на этот же адрес.
Как обезопаситься от зависания транзакций?
Выставлять адекватную комиссию.
Включить в кошельке механизм replace-by-fee и помечать все транзакции как replaceable, если ваш кошелёк его поддерживает (bitcoin core и electrum поддерживают). Это позволит при возникновении проблемы очень легко повысить комиссию.
Как выбрать адекватную комиссию? Где посмотреть состояние мемпула?
Рекомендую
этот,
этот и
этот сервис. Если понять, что изображено на диаграмме, тяжело, просто открываем первую ссылку и рекомендацию сверху страницы вписываете в графу "custom transaction fee" при отправке транзакции.
Обратите внимание, что величина комиссии зависит от размера транзакции в байтах (а ещё точнее - от её веса), а не от количества пересылаемых биткоинов.
Будьте внимательны - многие популярные кошельки иногда ошибаются с комиссией и могут вас подвести. Для срочных или важных транзакций обязательно проверяйте комиссию по состоянию мемпула.
Можно ли тратить неподтвержденные монеты?Можно. Но комиссию вы должны выставить такую, чтобы её хватило и на родительскую транзакцию со всеми её неподтвержденными предками.
Как вычислить размер обычной (не-сегвит) транзакции?Примерная формула для обычных (не-сегвит, сжатые (compressed) ключи) транзакций и для большинства современных кошельков (bitcoin core, electrum, ledger ...) 10+148*(число входов)+34*(число выходов). Реальное значение может отличаться на несколько байт в меньшую сторону в зависимости от конкретных ключей.
Примерная формула для обычных транзакций с несжатыми (uncompressed) ключами (в основном использовались раньше, кошелек Armory): 10+180*(число входов)+34*(число выходов).Как вычислить размер сегвит-транзакции?Начнём с того, что у сегвит-транзакции несколько размеров. Чтобы
всех запутать и искусственно сделать сегвит-транзакции дешевле, для них было изменено понятие размера. Для рассчета комиссии нам нужно считать не реальный размер сегвит-транзакции на диске, а
оплачиваемый (vsize, он же weight/4).
Формула для сегвит-адресов на "3" (если все входы и выходы - P2SH-P2WPKH): 11+91*(число входов)+32*(число выходов).
Формула для сегвит-адресов на "bc1" (если все входы и выходы - P2WPKH): 11+68*(число входов)+31*(число выходов).
Как считать для сегвит-транзакции, в которой есть входы и/или выходы разных типов:
11+68*(число входов типа P2WPKH)+91*(число входов типа P2SH-P2WPKH)+148*(число legacy входов)+31*(число выходов P2WPKH)+32*(число выходов P2SH-P2WPKH)+34*(число legacy входов). Реальное значение может отличаться на несколько байт в меньшую сторону в зависимости от конкретных ключей. Пожалуйста, не спрашивайте, как посчитать размер для segwit-multisig транзакции
ССЫЛКА НА ПРОДОЛЖЕНИЕ FAQ