Как сделать двойную транзакцию
Биткоин транзакции. Ответы на популярные вопросы
Большинство криптоэнтузиастов сталкивались с проблемой когда их транзакция зависала в блокчейне, либо попросту не отправлялась. Мы собрали популярные вопросы и ответы на них касательно криптовалютных транзакций.
Получите скидку на торговую комиссию в 10% на бирже Binance по коду «CRYPTOSLIVA» или по регистрации по этой ссылке
Почему биткоин транзакция не подтверждается?
Скорее всего, отправитель выставил недостаточную комиссию. Может оказаться так, что месяц, неделю, или даже сутки назад её хватало для быстрого подтверждения, а сегодня — нет.
Неподтвержденная транзакция — лишь намерение передать монеты, а не его реализация.
Вторая возможная причина — отправитель потратил выход неподтвержденной транзакции: получил биткоины и, не дожидаясь подтверждений, отправил часть из них дальше.
Как проверить блокчейн транзакцию
Для того что бы отследить блокчейн транзакцию нужно убедиться, что ваша транзакция действительно ожидает подтверждения. Для этого копируем id вашей транзакции, вставляем в строку поиска blockchair.com (или blockchain.com, или bitaps.com). Далее ищем глазами строку «нет подтверждений» («unconfirmed»). Нашли? Значит, транзакция ждет подтверждения.
Сервис поиска транзакций
Я поставил рекомендуемую комиссию, транзакция зависла
Есть только рекомендуемая кем-то комиссия. Этот кто-то может ошибиться. Ошибочные рекомендации иногда выдаёт большинство кошельков (в том числе bitcoin core).
Куда попадет криптовалюта с зависших транзакций
Рано или поздно «зависшая» криптовалюта дойдет до получателя, либо станет доступна в кошельке у отправителя. Она не может зависнуть навсегда, или просто исчезнуть.
Как узнать, время обработки транзакции?
После того как ввели данные своей транзакции в сервис blockchair.com, такую строку «Priority: 14498/22321» («В очереди: 14498/22321»). Первое число — ваше текущее место в очереди, второе — общая длина очереди. В блоке (раз в 10 минут в среднем) обычно 2-3 тысячи транзакций. Можно примерно оценить время в очереди.
Не забываем что ваша позиция в очереди может стать ниже, так как приоритет имеют транзакции с наибольшей комиссией.
Биткоин транзакция не подтверждается что делать и как ускорить
Бывают ситуации когда при отправке биткоинов и других криптовалют транзакция зависает. Для того что бы ее ускорить есть несколько вариантов:
Как использовать replace-by-fee?
Просто нажать кнопку в кошельке. Для Bitcoin core: открываем вкладку с транзакциями, правой кнопкой по проблемной транзакции, затем «Increase transaction fee».
Как использовать CPFP? Как быть, если я получатель транзакции?
Такой способ есть и он подходит для получателей; для отправителя он также подойдёт, если у вашей транзакции была «сдача» (обычно она есть). Этот способ немного дороже. Можно попробовать задействовать механизм CPFP (child pays for parent). Для этого вы должны потратить один из выходов проблемной транзакции с комиссией, которой хватит на обе транзакции сразу — новую и старую.
Будьте внимательны. Если одна из транзакций — «предков» вашей тоже ещё не подтверждена, то комиссию надо будет рассчитывать на три (или более) транзакции.
То есть просто создаёте транзакцию с одним входом (это должен быть один из выходов проблемной, например — сдача) и пересылаете биткоины себе же. Комиссию ставите такую, чтобы её хватило на обе сразу: для этого суммируете их размеры, умножаете на число из пункта «Как выбрать адекватную комиссию?», делите на размер новой в килобайтах и вписываете в графу «custom transaction fee» при отправке транзакции. Пример для кошелька Bitcoin Core:
Как сделать даблспенд (двойную трату)?
Для кошелька Bitcoin Core действуем по следующему алгоритму:
Как отменить биткоин транзакцию?
Если транзакция подтвердилась (включена в блок), отмениться или быть отменена она не может. Чтобы отменить неподтвержденную транзакцию, необходимо создать конкурирующую с ней транзакцию и добиться её включения в блок — смотрите ответ на вопрос «Как сделать даблспенд (двойную трату)?». В любом случае, гарантировать отмену тут нельзя.
Сама неподтвержденная транзакция отмениться не может — может лишь поменяться отображение в вашем кошельке. Далее смотрите ответ на следующий вопрос.
Моя транзакция висела неподтвержденной несколько дней, а затем пропала и деньги вернулись обратно. Теперь все хорошо и я могу забыть про всё это?
Нет! Ваша старая транзакция ещё есть в сети и может неожиданно подтвердиться. Чтобы этого избежать, надо сделать так, чтобы была новая транзакция и конкурировала со старой по входам. Если вы вообще передумали делать тот перевод, то можно будет сделать перевод себе самому. Самый простой, но иногда более затратный вариант — просто переслать себе все биткоины на этот же адрес.
Как избежать зависания транзакций?
Какая комиссия за транзакцию будет оптимальной?
Для того что бы не ошибиться в выборе комиссии для биткоин транзакции существуют специальные сервисы. Рекомендую btc.com, jochen-hoenicke.de и bitcoinfees.earn.com. Если понять, что изображено на диаграмме, тяжело, просто открываем первую ссылку и рекомендацию сверху страницы вписываете в графу «custom transaction fee» при отправке транзакции.
Обратите внимание, что величина комиссии зависит от размера транзакции в байтах (а ещё точнее — от её веса), а не от количества пересылаемых биткоинов.
Будьте внимательны — многие популярные кошельки иногда ошибаются с комиссией и могут вас подвести. Для срочных или важных транзакций обязательно проверяйте комиссию по состоянию мемпула.
У меня получается очень большая комиссия, как сэкономить?
Во-первых, если вам надо сделать несколько переводов — объедините их: создайте одну транзакцию с несколькими выходами. Размер в байтах такой транзакции будет меньше, чем нескольких обычных транзакций; а значит — меньше общая комиссия при неизменной плате за байт. В типичном случае экономия для двух переводов будет в 1.7 раза; для десяти — в 4 раза.
Во-вторых, не полагайтесь на комиссию, которую рекомендует вам кошелек: она может быть как занижена, так и завышена. Самостоятельно оцените её через один из сервисов, показывающих состояние мемпула (см ответ на вопрос «Как выбрать адекватную комиссию? Где посмотреть состояние мемпула?»). Обычно экономия от 10% до 30% (1.5 раза), хотя иногда может быть и до 10 раз.
В-третьих, можно выставить вручную комиссию гораздо меньше рекомендуемой и транзакция всё равно пройдёт, если мемпул («очередь») почти пуст. При пустом мемпуле успешно проходят транзакции с комиссией от 1000 сатоши за килобайт, но придётся подождать несколько часов или даже суток и есть вероятность, что транзакция не пройдёт. Если нужно перевести деньги быстро, не пытайтесь так сэкономить.
Ну и последнее: можно вручную подбирать входы и величину транзакции так, чтобы не было сдачи; экономия до 15%. Или можно заранее консолидировать входы по сниженной ставке за байт — когда комиссии ниже или возможность подождать.
Можно ли тратить неподтвержденные монеты?
Можно. Но комиссию вы должны выставить такую, чтобы её хватило и на родительскую транзакцию со всеми её неподтвержденными предками.
Как вычислить размер обычной (не-сегвит) транзакции?
Примерная формула для обычных (не-сегвит, сжатые (compressed) ключи) транзакций и для большинства современных кошельков (bitcoin core, electrum, ledger …) 10+148*(число входов)+34*(число выходов). Реальное значение может отличаться на несколько байт в меньшую сторону в зависимости от конкретных ключей. Примерная формула для обычных транзакций с несжатыми (uncompressed) ключами (в основном использовались раньше, кошелек Armory): 10+180*(число входов)+34*(число выходов).
Как вычислить размер SegWit-транзакции?
Начнём с того, что у сегвит-транзакции несколько размеров. Чтобы всех запутать и искусственно сделать сегвит-транзакции дешевле, для них было изменено понятие размера. Для рассчета комиссии нам нужно считать не реальный размер сегвит-транзакции на диске, а оплачиваемый (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 транзакции.
Эксперт и главный редактор портала CRYPTOSLIVA. Участник конференций посвященных финтеху и криптовалютам в частности. Магистр в области информационной безопасности.
Bitcoin core отказаться от транзакции
Jekis
Свой человек
Salatik_cn
Бывалый
mafaka27
Бывалый
Lauarvik
Свой человек
Guest
Killer_Pooh
Свой человек
Jekis
Свой человек
GermanG
Свой человек
Почему моя транзакция не подтверждается («зависла»)?
Мои биткоины теперь пропадут?
Нет. Они либо дойдут до получателя, либо когда-нибудь опять станут доступны в кошельке у отправителя.
Как узнать, скоро ли она подтвердится?
Ищем на странице вашей транзакции на сервисе blockchain.info (а также bitaps.com, blocktrail.com/BTC или аналогичного) строку «Плата за байт» («Fee per byte») и запоминаем число, которое там стоит. Затем, пользуясь этим или этим сервисом, оцениваем свое место в очереди и делаем выводы.
Что делать, если ваша биткоин транзакция не подтверждается и очередь до нее большая?
Если ждать очень долго или надоело, то есть несколько вариантов:
1)сделать даблспенд. Особенности: может сделать только отправитель, нужен доступ к ключам, недорого.
2)использовать CPFP. Особенности: может сделать получатель и обычно отправитель, немного дороже.
3)использовать replace-by-fee. Особенности: может только отправитель и если заранее позаботился; не все кошельки могут; недорого.
4)использовать «ускоритель» от viabtc. Особенности: может кто угодно, бесплатно, но сервис часто перегружен (как это обойти см здесь) и есть ограничения на транзакцию. Имейте в виду, что этот сервис приносит прямые убытки своим создателям и вряд ли просуществует очень долго.
Как сделать даблспенд (двойную трату)?
Действуем по следующему алгоритму (алгоритм описан для кошелька Bitcoin Core; для других кошельков действия аналогичны, но команды будут другими):
2) Теперь можно создавать новую транзакцию, не забыв поставить адекватную комиссию. Но! Поскольку ваша старая транзакция ещё осталась в сети, она может когда-нибудь неожиданно подтвердиться. Если вас это не устраивает, то у новой транзакции хотя бы один из входов должен будет совпадать с одним из входов старой. Для этого смотрим на странице вашей транзакции на сайте blocktrail.com/BTC или аналоге графу «inputs», запонинаем точный размер входа в битках. После этого при создании транзакции в кошельке нажимаем на кнопку «inputs. «, находим в списке такое же точно число в битках и выбираем его (если их несколько, то выбирайте с тем же адресом получения и временем). После этого выбираем ещё какие-нибудь входы, чтобы общая сумма была больше суммы транзакции с будущей комиссией; лучше выбирать с запасом. Далее заполняем все поля как обычно, (не забываем про комиссию!) и отправляем.
Как использовать CPFP? Как быть, если я не отправитель, а получатель транзакции?
Примечание. Будьте внимательны. Если одна из транзакций-«предков» вашей тоже ещё не подтверждена, то комиссию надо будет рассчитывать на три (или более) транзакции.
Всё. Теперь ждёте. Те пулы, которые «понимают» эту схему, с радостью возьмут обе транзакции сразу. Возможно, это будет не быстро, если таких пулов мало.
Как отменить транзакцию? Может ли транзакция отмениться сама?
Моя транзакция висела неподтвержденной несколько дней, а затем пропала и деньги вернулись обратно. Теперь все хорошо и я могу забыть про всё это?
Нет! Ваша старая транзакция ещё есть в сети и может неожиданно подтвердиться. Чтобы этого избежать, надо сделать так, чтобы была новая транзакция и конкурировала со старой; далее смотрите ответ на вопрос «Как сделать даблспенд (двойную трату)?». Если вы вообще передумали делать тот перевод, то можно будет сделать перевод себе самому. Если у вас нет возможности выбора входов транзакции, можно переслать себе всё сразу.
Как обезопаситься от зависания транзакций?
1. Выставлять адекватную комиссию.
2. Включить в кошельке механизм replace-by-fee и помечать все транзакции как replaceable, если ваш кошелёк его поддерживает (вроде бы electrum поддерживает). Это позволит при возникновении проблемы легко повысить комиссию.
Как выбрать адекватную комиссию?
Обратите внимание, что величина комиссии зависит от размера транзакции в байтах, а не от количества пересылаемых биткоинов.
У меня получается очень большая комиссия, как сэкономить?
Во-вторых, не полагайтесь на комиссию, которую рекомендует вам кошелек: она может быть как занижена, так и завышена. Самостоятельно оцените её через один из сервисов, показывающих состояние мемпула (см ответ на вопрос «Как выбрать адекватную комиссию?»). Обычно экономия от 10% до 30% (1.5 раза), хотя иногда может быть до 10 раз.
Разбираемся с Replace-By-Fee транзакциями Bitcoin
Всем привет! В этой статье мы разберемся что такое Replace-By-Fee транзакции и как их использовать. Бонус! Пара поучительных историй в конце.
Итак, представим ситуацию когда A посылает монеты B. Он создает и подписывает транзакцию, и выпускает ее в сеть для подтверждения. К сожалению, транзакция долго не подтверждается, у транзакции слишком маленькая комиссия (или комиссия нормальная в обычных обстоятельствах, но в данный момент очередь неподтвержденных транзакций слишком большая и майнеры предпочитают майнить транзакции с бОльшими комиссиями). Что делать пользователю A? Варианты: a) ждать подтверждения (ждать можно долго) б) ждать отмены транзакции (когда большинство нод решат наконец выкинуть из mempool транзакцию) и освобожденными монетами можно будет снова распоряжаться (то есть создавать транзакции и пулы не будут считать их даблспендами и отвергать) в) Заменить транзакцию с повышением комиссии (RBF)
Итак, RBF — замена существующей транзакции новой транзакцией с повышением комиссии. Замена означает что в новой транзакции будут использованы те же входы что и в старой транзакции, и это не будет считаться даблспендом (читай, мошенничеством). В итоге только одна транзакция будет добавлена в блокчейн (с большой вероятностью это будет транзакция с повышенной комиссией).
Какая транзакция может быть заменена? Это хороший вопрос. Замена транзакций была предусмотрена еще создателем системы Сатоши Накамото, но выключена в определенный момент. Затем она была доработана до RBF и включена в код Bitcoin Core 0.12 и старше. Для замены в данных транзакции предусмотрено специальное int поле nSequence, которое сигнализирует о том, какая транзакция старше какой. Чтоб транзакция была потенциально заменяемой, значение nSequence должно быть меньше (0xffffffff — 1).
По умолчанию, большинство современных кошельков nSequence сразу ставят максимальным, и возможность заменять транзакции надо включать в настройках. Вот так это выглядит в кошельке Electrum:
Пример декодированой транзакции:
Sequence указывается для каждого входа транзакции.
В том же кошельке Electrum после включения опции RBF станет возможным увеличивать комиссию за транзакцию прямо в GUI, но сейчас мы с вами будем собирать RBF транзакцию руками. Зачем? Во-первых — разобраться, во-вторых — для большей гибкости, например, в этом случае в RBF транзакции мы сможем указать совершенно другие целевые адреса для перевода, чем периодически пытаются воспользоваться злоумышленники.
Выглядит это так: A хочет заплатить B. A создает, подписывает и транслирует транзакцию на перевод монет B, но умышленно ставит пониженную или нулевую комиссию. Если B недостаточно осторожен он засчитывает неподтвержденную транзакцию (и отдает товар А, например). После этого A заменяет транзакцию и перенаправляет выход транзакции на С, где С подконтролен А.
Как B может этого избежать? Если все же B предпочитает засчитывать неподтвержденные транзакции (для скорости), не стоит засчитывать пластичные транзакции (где nSequence позволяет транзакции заменять). И вообще, с подозрением относиться к таким транзакциям. Если вы когда-то засчитывали пластичные транзакции то неплохо бы их перепроверить на факт наличия фрода и применить санкции к плательщику, если тот мошенничает. Ну и естественно, идеально было бы дожидаться не менее 2х подтверждений.
Будем пользоваться замечательной опенсорсной тулзой github.com/OutCast3k/coinbin с помощью которой можно вручную легко создавать транзакции с нужными нам входами и выходами. Работает полностью в браузере не общаясь с сервером. Живая версия доступна по адресу coinb.in
Создаем транзакцию через New → Transaction. Берем приватный ключ в формате WIF и загружаем доступные (непотраченные) выходы для этого ключа. Во вкладке Outputs указываем целевой адрес, указываем amount. В Advanced Options не забываем поставить галку на “Make this a RBF transaction” — в этом случае nSequence транзакции будет меньше максимального значения. Жмем Submit.
Транзакция создана. Обратите внимание на Transaction Fee — это разница между доступным количеством монет суммарно со всех входов МИНУС сумма всех выходов (в нашем случае 1 выход). Разница и будет комиссией которую майнер заберет себе. В этом примере она специально нулевая.
Жмем Sign, копипастим туда полученный hex транзакции, все тот же приватный ключ, и подписываем транзакцию:
Транслируем транзакцию в сеть (можно использовать любой ендпоинт):
Так транзакция выглядит:
Теперь давайте воспользуемся RBF. Создаем новую транзакцию, входы берем с того же WIF. Но выходы укажем совершенно иные! Один из выходов укажем 1CWHWkTWaq1K5hevimJia3cyinQsrgXUvg — донейт адрес создателя coinb.in
Amount укажем такие чтоб комиссия за транзакцию была достаточной для быстрого подтверждения.
Обратите внимание на вкладку Inputs — если исходный адрес многоразовый и на нем много транзакций, то нам придется во входах вручную прописать только те инпуты, которые входят в транзакцию которую мы хотим заменить (удалить лишние, оставить только нужные). Входов этих могут быть сотни, и в некоторых случаях это может быть достаточно кропотливая работа.
Вот так это теперь выглядит на blockchain.info. У новой транзакции есть все шансы быть включенной в блок раньше своей предыдущей версии.
Ждем. Есть подтверждение:
Мы только что заменили транзакцию с помощью RBF, причем монеты отправили совсем не на тот адрес который хотели изначально.
Опять о безопасности
Не всегда nSequence=MAX гарантирует что транзакция финальная и заменить ее нельзя. На самом деле галку “Make this a RBF transaction” можно было не ставить, но:
Ссылки и материалы:
Как-то один из проектов использующих мой биткоин платежный шлюз взломали, и поставили на вывод 2 BTC. В той версии шлюза была захардкоджена комиссия 0.0001 BTC, что было достаточно мало на тот момент. Времени оказалось достаточно чтобы во всем разобраться и заменить транзакцию на возврат средств, повысив комиссию до 0.1 BTC. Злоумышленники наверное расстроились. Мораль — используйте RBF во благо!
Я на bitmedia.io пополнял счет биткоином. Счет там пополняется засчитывая входящие транзакции на специальный top-up адрес пользователя, и прибавляя сумму транзакции к общему балансу пользователя. Засчитываются только транзакции с 6 подтверждениями.
Баланс я хотел пополнить поскорее, поэтому когда первая транзакция зависла, я несколько раз заменял транзакцию с помощью RBF. Когда транзакция подтвердилась — баланс мне приплюсовался в столько раз больше, сколько RBF замен я сделал. Я сразу написал в поддержку, чтобы баг исправили. В благодарность лишние 0.3 BTC мне подарили как bug bounty. Мораль — проверьте свои системы как они поведут себя с RBF!