Зависла транзакция биткоина блокчейн кошелек

Зависшие Bitcoin-платежи, или Приключения одной транзакции

Приятно чувствовать себя ниспровергателем мифов, и соблазн занять такую позицию всегда велик. Чтобы не поддаться ему, сразу замечу, что описанные ниже события случаются редко и не должны служить опровержением устоявшихся представлений о том, что биткоин — надежный платежный инструмент, а биткоин-транзакция (перевод этой цифровой денежки) — быстрая и простая операция. Тем не менее, для большинства пользователей биткоин-сервисов «зависший» платеж окажется неожиданным и, возможно, пугающим. Поэтому повторюсь: случай нетипичный, но не уникальный. И весьма ярко демонстрирующий, с одной стороны, пользу от понимания основ работы криптовалют (как, впрочем, и любой технологии), а с другой — неготовность существующей инфраструктуры к работе с блокчейном.

Зависшие Bitcoin-платежи: как это происходит? Фото: mmgp.ru

Итак, история наша началась с банального желания моего знакомого пополнить счет мобильного телефона при помощи биткоин-сервиса, для этого и предназначенного (ДА! Владельцы телефонов украинских мобильных операторов легко могут пополнить свой счет, находясь в любой тмутаракани, если там есть интернет, а у вас есть непустой биткоин-кошелек). Также ранее мы рассказывали, как купить Bitcoin в Украине в том числе с помощью мобильного приложения.

Итак, шли последние дни августа 2016 года, было жарко и… Ну не знаю, пусть виной всему будет 30+ градусов, перегревшийся компьютер и плавящийся от жары мозг. Все равно более внятных причин, явно объясняющих эксцесс, я пока не нашел.

Скриншот 1. Чтобы пополнить счет биткоинами, нужно всего пару кликов

Пополнить счет просто: заходишь на сайт сервиса, вводишь свой номер телефона, выбираешь сумму пополнения счета и получаешь адрес для перевода BTC-шек из своего кошелька сервис-провайдеру (см. скриншот 1). Если кошелек на мобильном устройстве, то еще проще: QR-код поможет быстро передать все параметры и выполнить оплату. Обычно так все и происходит: вы наводите камеру на QR-код, кошелек формирует транзакцию и выполняет оплату. Но в тот раз что-то пошло не так… Нет-нет, читатель, нет причин волноваться — все хорошо кончилось, но не будем забегать вперед.

Итак, с точки зрения пользователя все как обычно: кошелек (это был Bitcoin Core — самый традиционный из возможных) сформировал транзакцию, отправил ее в сеть и… И ничего не произошло. Не пришло подтверждения перевода, поступающего как правило минут через пять-пятнадцать (реже — через полчаса-час). И на следующий день кошелек сообщал о статусе транзакции неутешительное: «Status: 0/unconfirmed, in memory pool» («Статус: неподтверждена, в пуле»). Как наверное знает читатель, транзакции в биткоине безотзывные, то есть нет способа их отменить, деньги перечисляемые из кошелька ушли, а к получателю не пришли. Зависли, и теперь и в кошельке их нет, и счет мобильного не пополнен.

Ситуация «зависшей» биткоин-транзакции не уникальна, даже на русском языке Google дает тысячи ссылок по запросу «зависшие биткоин транзакции» (в выдаче по запросу «Bitcoin Transaction Pending» несколько сотен тысяч позиций, обширное обсуждение зависших транзакций на русском языке здесь). Постараемся разобраться, что произошло, но для этого нам нужно более подробное представление о том, как происходят транзакции, чем «нажал кнопку — и ОК».

Не буду дублировать рассказ о том, как устроен биткоин (можно прочитать здесь), остановимся только на процессе выполнения транзакции. Ваше биткоин-приложение, запросив из какого кошелька, сколько и кому вы переводите, сформирует и отправляет в сеть запрос на транзакцию, описывающую всё перечисленное в надлежащем формате. Транзакция попадет в пул (memory pool — mempool) и будет там ожидать майнера, который поместит ее в блок. Когда блок с этой транзакцией попадет в блокчейн, перевод завершится. Как помнит читатель, блокчейн состоит не из отдельных транзакций, а из блоков, то есть наборов транзакций и удостоверяющих их данных. Блоки формируют майнеры, которые получают за это два вида вознаграждений: плату за блок (сейчас это 12,5 BTC) и комиссию за транзакции, включенные в блок.

Майнеры состязаются за эту плату, оттого создать блок всегда одновременно пытаются несколько майнеров. Кто-то оказывается более успешным и делает это раньше, получая вознаграждение, остальным приходится лишь надеяться на удачу в будущем. Разумеется, возможна ситуация, когда несколько майнеров создают свои блоки почти одновременно (блоки, обычно, не одинаковые, так как майнеры включают в них те или иные транзакции из пула на свое усмотрение). Вознаграждение достанется одному из майнеров — тому, чей блок продолжит цепь (то есть после него появится следующий блок и т.д.), оставшийся блок (или даже небольшая цепочка блоков), не получив продолжения, «умрет».

Но пока вернемся к пулу — месту, где «живут» транзакции, еще не подтвержденные и не отвергнутые (подробнее здесь). Майнеры отбирают из пула транзакции, пытаясь сформировать из них блоки. Так как размер блока ограничен, то в блок чаще всего отбирается лишь часть транзакций из пула (сейчас, когда я пишу эти строки, в пуле почти 41 тысяча неподтвержденных транзакций, занимающих более 42 МБ — понятно, что их все не поместить в один блок). Если мы проследим судьбу типичной транзакции, то увидим фазы ее жизни (см. скриншоты 2 и 3).

Скриншот 2. Транзакция появилась в пуле

Скриншот 3. Транзакция подтверждена и появилась в блокчейне

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

  • Когда транзакция включается в блок (подтверждается);
  • Когда транзакция или один из ее источников начинает конфликтовать с другой транзакцией, уже подтвержденной (деньги источника потратили раньше, чем подошла очередь транзакции);
  • Когда транзакция обладает наименьшим приоритетом в пуле, пул достиг максимально допустимого размера и в него добавляется транзакция с более высоким приоритетом (вытеснение);
  • Когда транзакция умирает по тайм-ауту (по умолчанию через 72 часа);
  • Когда транзакция заменяется (это относительно новая возможность, мы ее обсудим позже).

Нашей транзакции не повезло: то ли рука дрогнула при отправке оплаты, то ли еще какая-то непредвиденность случилась, но в транзакции, которая ушла в пул, оказалась нулевая комиссия (fee). Здесь нужно пояснение. Формально протокол биткоин-сети не требует комиссии. Когда биткоин только появился, были возможны бесплатные транзакции (увы, не все следят за переменами, и до сих пор иногда можно услышать от неофитов, что переводы биткоин бесплатны).

Когда технология стала популярной и темп появления транзакций вырос, возникло несколько причин для появления платы за транзакцию (transaction fee). Во-первых, чтобы избавиться от спама — бессмысленных транзакций, порождаемых злоумышленниками, атакующими ресурсы сообщества, или ошибками неумелых разработчиков. Во-вторых — необходимостью ранжировать транзакции, чтобы дать возможность пользователям ускорить прохождение своих платежей. У транзакций с нулевой комиссией немного шансов попасть в блок и стать подтвержденной в наше время, когда запросов на транзакции более чем достаточно. Поэтому судьба у нашей транзакции должна была быть незавидной: умереть по таймауту или вытесниться из пула.

В зависимости от того, каким кошельком вы пользуетесь, обычная судьба «убитой» транзакции может быть различной. Например, транзакция может быть объявлена несостоявшейся, и неотправленные средства вновь появятся в кошельке. Но возможна и повторная попытка кошелька отправить транзакцию на исполнение в пул. В таком случае транзакция «возродится» в пуле и будет висеть там, периодически возобновляясь, неограниченно долго. В последнем случае ваши средства оказываются замороженными: они недоступны ни вам, ни получателю. Именно такой случай чаще всего описывают столкнувшиеся с зависшими транзакциями пользователи (см. например, заметку об экспериментах с нулевой комиссией). На первый взгляд, именно с такой ситуацией и столкнулся мой знакомый — кошелек упорно сообщает все то же: «Status: 0/unconfirmed, in memory pool».

В описанных случаях (см., в частности, ссылки выше), зависшие средства удается вернуть в кошелек, используя специальные ключи перезагрузки или перезагрузив программу с нуля (в последнем случае блокчейн загружается вновь путем запросов к сети, то есть не попавшие в него транзакции будут проигнорированы, и средства вернутся в кошелек). Процедура полной перезагрузки хлопотная и может занимать очень много времени (не шутка же — перезагрузить более 100 ГБ данных блокчейна), тем не менее, мой знакомый выполнил ее. И ничего хорошего не увидел. Даже спустя пару месяцев популярный сервис анализа блокчейна blockchain.info сообщал: «Transaction rejected by our node. Reason: Fee is too low / Not sufficient priority» («Транзакция отвергнута нашим узлом. Причина: Комиссия слишком мала / Недостаточный приоритет»). То есть, транзакцию по-прежнему видел, но выполнять ее отказывался. Печальная ситуация.

Но нам повезло! 21 января дело дошло до нашей транзакции, и она (ура. ) выполнилась. И в описании транзакции видно, что было необычным. Рассмотрим скриншот 4.

Скриншот 4. «Наша» транзакция подтверждена!

Кроме нулевой комиссии (Fees), транзакция отличается от показанной на третьем скриншоте еще и полем «Lock Time». Этот параметр транзакции показывает, начиная с какого блока майнеры могут включать в блок транзакцию. Многие кошельки ставят 0, разрешая включать немедленно. А кошелек Bitcoin Core, по праву первооснователя считающий себя обязанным следить за безопасностью всей биткоин-сети, устанавливает в значение ближайшего генерируемого блока, что препятствует возможности злоумышленнику атаковать сеть, выстраивая из поздних транзакций конкурирующую с уже существующими блоками ветвь. Но блок 427560 оказался как раз тем редким блоком, который заполучил конкурента. Два майнера почти одновременно, с отличием менее двух секунд, сгенерировали блоки с таким номером (правильнее говорить «такой высоты» — порядковый номер блока в блокчейне называют высотой).

Блоки, которые порождали точки разветвления, отображает, например, Blockchain.info

Вероятно это редкое сочетание: привязка к раздвоившемуся блоку и нулевая комиссия породили ситуацию, из-за которой наша транзакция надолго зависла в пуле. К счастью, все закончилось хорошо: транзакция выполнилась, и счет мобильного был пополнен. Тем не менее, случившееся, на мой взгляд, хороший повод поговорить о том, насколько перспективными являются платежи в биткоине.

С одной стороны, по мере роста интереса к технологии и числа активных кошельков, растет число запросов на транзакции, а значит и конкуренция за подтверждение транзакций (то есть, выполнение платежей). С другой стороны — ситуация улучшается потому, что новые кошельки поддерживают динамическое задание комиссии в зависимости от наполненности пула. А разработчики вводят новые возможности, в частности, возможность увеличить комиссию для уже отправленной в пул, но все никак не подтверждаемой транзакции (функция Opt-In Replace-by-fee (RBF)). Естественно, новые возможности появляются не сразу и не во всех кошельках, что заставляет пользователей следить за ситуацией, быть может, более внимательно, чем хотелось бы. Можно посоветовать, в частности, перевод относительно свежей заметки «Что делать, если «зависла» транзакция в сети Биткоина?»

Сервис поддержки пользователей мог бы стать еще одним фактором, стимулирующим распространение биткоин-платежей. Но пока спасение утопающих дело рук… Пусть не только самих утопающих, но еще и энтузиастов, подсказывающих на форумах что делать. Однако хотелось бы видеть постоянно действующие сервисы/горячие линии, пусть хотя бы на уровне объявлений на столбах: «Настрою биткоин-платежи, помогу вернуть зависшие транзакции». Понятное дело, здесь есть проблема: пока платежей немного, сервис не может быть рентабелен, пока сервиса нет — трудно рассчитывать на взрывной рост числа платежей (кстати, рост должен бы создавать и сервисы-надстройки, позволяющие выполнять клиринг платежей между участниками сервиса, снижая нагрузку на блокчейн).

Еще один вопрос касается уже не технологии, а права. Коль скоро транзакция может происходить достаточно долго, а волатильность биткоина немаленькая, то нужны правила, поскольку привычные «три банковских дня» перестают соответствовать нашим представлениям о справедливости. В примере, на котором мы рассматривали зависший платеж, средства были зачтены по курсу на момент создания транзакции. Но с момента транзакции курс биткоина вырос в полтора раза! Ок, мой заждавшийся перевода приятель был рад и этому. Но вряд ли такие риски приемлемы для массовых платежей. С трудом представляю себе и обратную ситуацию, когда пришедшая на третий день транзакция потеряла заметную часть стоимости. Возможно, ситуацию бы поправила страховка биткоин-платежей? Но и о таких услугах я не слышал.

Другими словами: технологическая готовность к внедрению криптовалют на сегодня гораздо выше, чем инфраструктурная. Отчасти улучшению ситуации может способствовать каждый, кто включился в процесс освоения криптовалют. А пока от всех энтузиастов требуется не терять бдительности и не упускать из виду происходящие перемены.

Вам понравился материал?

ТОП новости, журналы от PSM7.COM

и билеты на мероприятия, бесплатно!

Материалы по теме

PaySpace Magazine – PSM7.COM – экспертное издание о FinTech и e-commerce, стартапах, платежных системах в Украине и мире, онлайн-платежах, традиционных и альтернативных деньгах. На рынке Украины с 2011 года.

При использовании материалов сайта обязательным условием является наличие гиперссылки в пределах первого абзаца на страницу расположения исходной статьи с указанием бренда издания psm7.com

Материалы с пометкой PR публикуются на правах рекламы.

© 2011 – 2018 PaySpaceMagazine «доступно о платежах». Все права защищены.

Что делать, если «зависла» транзакция в сети Биткоина?

С каждым годом, если не месяцем, количество транзакций в сети Биткоина растёт. Это ведёт к переполнению блоков. А поскольку немедленно включить все транзакции в блокчейн невозможно, из не вошедших в блок транзакций у майнеров формируется «пул памяти» (mempool) – своего рода «очередь из транзакций».

Обычно майнеры выбирают транзакции с самыми высокими комиссиями и включают их в блоки первыми. Транзакции с более низкими комиссионными «перебиваются» высокими и остаются в пулах памяти майнеров до обнаружения нового блока. Если же после нахождения блока ожидающую подтверждения транзакцию снова перебивает транзакция с более высокой комиссией, приходится ждать следующего блока, и так далее.

Вся эта ситуация неблагоприятно сказывается на взаимодействии с пользователем. На подтверждение транзакций с низкими комиссиями может потребоваться несколько часов и даже дней, а иногда подтверждение и вовсе не происходит.

Что же можно сделать, чтобы транзакция не зависла?

При отправке транзакции

В первые годы существования Биткоина большинство кошельков добавляли исходящим транзакциям фиксированную комиссию: обычно она составляла 0.1 мBTC (10 000 сатоши). Поскольку в блоках майнеров в любом случае присутствовало свободное пространство, они обычно включали эти транзакции в первый добытый блок (большинство транзакций с низкими комиссионными или совсем без них также включались в блок).

По мере увеличения борьбы за пространство блока, фиксированной платы в 0.1 мBTC для гарантированного включения транзакции в первый блок стало не хватать. Её перебивали транзакции с более высокими комиссиями. И, несмотря на то, что в конечном итоге подтверждение получали и транзакции с низкими комиссионными, на это требовалось время.

Попробовать повысить комиссию

Если вы хотите, чтобы транзакция подтвердилась быстрее, очевидным решением будет повышение комиссии.

Если ваш кошелёк (по умолчанию) использует недостаточную комиссию, можно попробовать настроить её размер вручную – либо в настройках кошелька, либо при отправке транзакции (или и то, и другое).

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

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

Использовать динамические комиссии

Большинство кошельков сейчас работают с динамическими комиссиями. В зависимости от данных, получаемых из сети Биткоина, такие кошельки автоматически добавляют комиссию, необходимую для включения транзакции в следующий блок, или хотя бы в один из первых блоков.

Некоторые кошельки также позволяют выбирать приоритетные комиссии. И вновь, более высокие комиссии способствуют быстрому подтверждению транзакций, а низкие требуют времени.

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

Не бойтесь менять кошельки

В случае перехода на новый кошелёк вам необходимо будет перевести средства со старого кошелька. Если вы не торопитесь и не против оплатить за это комиссию, можно просто отправить средства со старого кошелька на новый через сеть Биткоин.

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

После отправления транзакции

Если вы уже отправили транзакцию, и она зависла, в некоторых случаях можно попробовать «перепрыгнуть очередь».

Функция Opt-In Replace-by-fee

Самый простой способ заставить вашу транзакцию перепрыгнуть очередь – использование опции под названием Opt-InReplace-by-Fee (Opt-InRBF). С её помощью можно повторно отправить ту же самую транзакцию, но с более высокой комиссией.

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

Однако, отправляя транзакцию при помощи Opt-InRBF, вы, по сути, сообщаете сети о возможности повторной отправки этой транзакции позднее, но с более высокой комиссией. В результате большинство узлов Биткоина принимают новую транзакцию вместо старой; таким образом, новая транзакция перепрыгивает очередь.

Включится ли ваша транзакция именно в следующий блок, зависит от того, какой майнер добудет новый блок: не все майнеры используют Opt-InRBF. Так или иначе, данную опцию поддерживает достаточное количество майнеров, чтобы ваша транзакция была включена в следующие несколько блоков.

В настоящее время, функцию Opt-InRBF поддерживают как минимум два кошелька: Electrum и GreenAddress. В Bitcoin Core она поддерживается при обработке транзакций, однако создавать собственные RBF транзакции возможно только с помощью сторонних скриптов. В зависимости от кошелька, может потребоваться обновление Opt-InRBF в настройках меню до отправления (первой) транзакции.

Child Pays for Parent (ребенок платит за родителя)

Если ваш кошелёк не поддерживает Opt-InRBF, всё немного усложняется.

Здесь на помощь может прийти функция ChildPaysforParent (CPFP). Применяя CPFP, майнеры не обязательно выбирают транзакции с самыми высокими комиссиями, а, наоборот, выбирают комплект транзакций с комбинированными комиссиями.

Если не вдаваться в технические детали, большинство исходящих транзакций не только отправляют биткоины получателю, но также возвращают «сдачу». Эту сдачу можно потратить на следующую транзакцию.

Некоторые кошельки позволяют тратить эту сдачу ещё до подтверждения транзакции, то есть вы можете отправить себе сдачу новой транзакцией. На этот раз не забудьте включить достаточно большую комиссию, которая компенсирует оригинальную транзакцию с низкой комиссией. Майнер должен забрать весь комплект транзакций и подтвердить их все одновременно.

Если ваш кошелёк не позволяет выбрать, какие именно входы потратить, то есть вы не можете потратить именно неподтверждённую сдачу, можно попытаться потратить все средства в кошельке – в них должна войти и сдача.

Также как в случае с Opt-InRBF, не все майнеры сейчас поддерживают CPFP. Однако их достаточно для того, чтобы ваша транзакция подтвердилась в ближайших блоках.

Другие варианты

Если отсутствует возможность применить Opt-InRBF или CPFP, технически можно попробовать отправить оригинальную транзакцию с более высокой комиссией. Обычно это называют «full replace-by-fee», и некоторые майнеры такую возможность допускают. Хотя публичные кошельки пока эту опцию не поддерживают.

Другой вариант – просто подождать подтверждения транзакции или повторного появления биткоинов в вашем кошельке. Не забывайте, что технически до подтверждения транзакции биткоины всё ещё находятся в вашем кошельке – просто в действительности так не происходит. На самом деле биткоины не «зависают» в сети и потеряться не могут.

Со стороны получателя

Конечно, зависшая транзакция представляет проблему и в том случае, если вы её получатель.

Если ваш кошелёк позволяет тратить неподтверждённые транзакции, это тоже можно решить при помощи CPFP. Аналогично описанному ранее, вы можете повторно потратить неподтвержденные входящие биткоины самостоятельно, включив комиссию, достаточно высокую для компенсации изначально низкой транзакции. Если новой комиссии будет достаточно, она будет подтверждена в ближайших блоках.

Единственный дополнительный вариант – спросить отправителя, использовал ли он Opt-InRBF. В таком случае он сможет повторно отправить транзакцию с более высокой комиссией.

Все материалы с данного сайта Вы можете свободно копировать с указанием на источник – bits.media

Любые пожелания, предложения, материалы и т.п. Вы можете присылать на адрес [email protected]

Адрес для добровольных пожертвований на развитие – 1BQ9qza7fn9snSCyJQB3ZcN46biBtkt4ee (QR)

ПОДЕЛИТЬСЯ

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here