Как отменить биткойн-транзакцию

Тема в разделе "Общий раздел", создана пользователем Romero, 26 июн 2016.

Метки:
  1. Romero

    Romero Новичок Проверенный

    Всем известно, что отмена биткойн-транзакции невозможна. Необратимость транзакций одно из отличительных свойств системы пиринговой наличности – в отличии от централизованных платёжных систем. Одно время разработчики Bitcoin Core собирались внести изменение в клиент, которое позволило бы редактировать транзакцию ещё не принятую в блок с целью изменения комиссии, но этот функционал пока не реализован. И, тем не менее, уже сейчас в определённых условиях и при достаточном желании отмена транзакции возможна.
    [​IMG]
    Данная статья является описанием эксперимента, целью которого было проверить, с насколько низкими комиссиями можно успешно отправить биткойны с кошелька Bitcoin Core. Эксперимент оказался неудачным и привёл к тому, что пять транзакций, отправленных с разнообразными установками кошелька в части комиссий “зависли”. Но затем экспериментатору удалось отменить зависшие транзакции с возвратом заблокированных сумм.

    Как не надо отправлять транзакции

    Первые 2 транзакции попытались отправить с выставленной минимальной комиссией в 0,00001 BTC и флажком “Попытаться отправить без комиссии, если это возможно”.[​IMG]

    Обратите внимание, клиент рекомендует выставить 0,00013615 BTC за килобайт. Но для оставшихся трёх транзакций, каждая из которых была на ту же сумму 0,01 BTC, рекомендация касательно размера комиссии была проигнорирована, а сам размер комиссии выставлен заведомо меньшим, чем рекомендованный.

    Получилось, что все пять транзакций зависли без единого подтверждения на неопределённое время. В нашем случае на неделю.

    [​IMG]

    Дополнительное неудобство состояло в том, что адрес, на который были отправлены биткойны, в свою очередь, нельзя было использовать для отправки биткойнов. Попытка сделать перевод сопровождалась сообщением: «Oops! You have unconfirmed deposits pending. You must wait for your deposits to be confirmed before withdrawing.»

    Если ситуация вам знакома, то для паники нет причины. Для начала, некоторое время можно подождать. Если очередь транзакций рассосётся, то возможно, в конце-концов, дойдёт очередь и до вашей. Если же ожидание излишне затянулось – как в нашем случае, на неделю, то можно попробовать заставить кошелёк – здесь это делалось на примере Bitcoin Core – “забыть” о размещённых транзакциях. Ведь до тех пор, пока не пришло первое подтверждение – транзакция не попала в блок, а значит, знает о ней только ваш клиент.

    Как откатить зависшую транзакцию
    1. Убедитесь, что транзакция зависла. Откройте Block Explorer и проверьте, что про зависшую транзакцию там ничего не знают, а на счете деньги на самом деле есть. Даже в случае, если blockchain.info показывает транзакцию и рисует красную кнопку [​IMG] , ещё не всё потеряно.
    2. В кошельке перейдите в отладочную консоль (Помощь — Окно отладки — Консоль) (Help – Debug window – Console)
    3. Если кошелек зашифрован, то для начала необходимо получить доступ, используя команду walletpassphrase <passphrase>.
    4. Теперь нужно получить приватный ключ от нужного адреса. dumpprivkey <address>. Вместо <address> необходимо подставить адрес, был использован для отправки средств. В результате получите приватный ключ для указанного адреса. Его нужно куда-нибудь скопировать, он понадобится. Если транзакция была составная, и биткойны брались с нескольких счетов, то и экспортировать надо приватные ключи для всех этих адресов. Никогда не храните приватные ключи в доступном для кого-либо месте. Знание ключа дает полный доступ к соответствующему ему счету. Также, обратите внимание на то, что на каждую команду в режиме отладки в консоли приходит ответ. Он может быть пустым, но он есть всегда.
    5. Если на других адресах есть биткойны, то приватные ключи этих адресов так же необходимо экспортировать.
    6. После того, как закончили экспорт ключей, закройте клиент и удалите кошелек. Расположение кошелька (wallet.dat) зависит от конкретного клиента и ОС. Естественно, совсем удалять его не стоит, лучше переименовать или переместить в надежное место.
    7. Теперь перезапустите клиент. Он заново создаст кошелек. В него необходимо импортировать полученный ранее ключ (ключи). Идем в отладочную консоль и пишем importprivkey <privkey>. Импорт может занять достаточно много времени, но в любом случае дайте ему завершиться — дождитесь ответа на команду.
    8. В новом кошельке должен появиться счет с его реальным состоянием. Неподтверждённые транзакции “забыты”, средства, заблокированные ранее снова доступны для отправки. Теперь можно выслать их заново, но на этот раз не забудьте включить рекомендованную комиссию.
    [​IMG]

    Для клиента, где отсутствует функционал расчёта рекомендованного размера комиссии, можно воспользоваться сервисом Blocktrail. Клиентом, который не только не показывает, но и не предоставляет возможность выставить размер комиссии, пользоваться можно на свой страх и риск.

    Отмена зависших транзакций отправленных при помощи других кошельков, чем Bitcoin Core, делается аналогичным образом. Важно экспортировать приватные ключи от всех адресов, участвовавших в транзакциях, и где наличествуют биткойны, затем пересоздать кошелек – для этого, вероятно, придётся удалить каталог, где программа-кошелёк хранит данные, и затем импортировать приватные ключи в созданный заново кошелёк. Решение не применимо для облачных кошельков.

    При участии Юлии Шалимовой

    По материалам: Habrahabr
     
    randers и WorldTank нравится это.
  2. Romero

    Romero Новичок Проверенный

    Это вот как раз для случая зависания транзы, когда стоял CORE, не знал как отменять... FAQ хороший!
     
  3. randers

    randers Провидец=)

    Отличная статья)))