Pages:
Author

Topic: FAQ: зависла / не подтверждается транзакция - page 4. (Read 19009 times)

staff
Activity: 2436
Merit: 2347
Для новичков очень полезная тема. А что скажете насчет сервисов, которые проталкивают зависшие транзакции?

Есть две темы по этому поводу:

Список ускорителей зависших транзакций
Как протолкнуть зависшую транзакцию
legendary
Activity: 996
Merit: 1133
Get Some!
А какой смысл использовать несжатый, кроме ненужного раздувания блокчейна и переплаты комиссий?
Использование несжатого публичного ключа может быть обусловлено желанием иметь Vanity адрес.
legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
~
там приватники на L и K, то есть сжатый формат.

вообще то речь идет о размере публичного ключа, который передается и который в сжатом формате меньше ровно на 32 байта.
Я знаю. Но несжатый публичный получается из несжатого приватного на пятерку. И наоборот, сжатый из приватного на L или K.
member
Activity: 74
Merit: 100
формат ключа  зависит от клиента, который формирует транзакцию
Вам известен какую-нибудь актуальный  клиент, формирующий такие транзакции?
Не-а, это вопрос скорее к igor72.  Я испокон веков использую Армори, и там нет сжатого формата.
Я имел ввиду несжатые. В клиентах, которые регулярно использую сам (bitcoin core, electrum) - встречал только сжатые. Про Армори добавлю.
~
2) Приоритет транзакции зависит от "возраста" пропихиваемых монет. Иными словами более "старые" монеты проходят быстрее.
В этом я сомневаюсь. Знаю, что так было раньше. Мне казалось, что потом это условие было убрано. Кроме того, любому пулу выгодно учитывать только плату за байт, а не возраст. Если учесть, что выбор транзакций пулом никак и никем не контролируется, можно предположить, что на возраст монет никто из пулов не смотрит.

Если вы уверены, что возраст учитывается, надо будет экспериментировать.
priority = sum * (input_value_in_base_units * input_age) / size_in_bytes
Ок, скоро проведу эксперимент.
legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
формат ключа  зависит от клиента, который формирует транзакцию
Вам известен какую-нибудь актуальный  клиент, формирующий такие транзакции?

Не-а, это вопрос скорее к igor72.  Я испокон веков использую Армори, и там нет сжатого формата.
Использую Electrum, Core и Ledger Nano S, там приватники на L и K, то есть сжатый формат. А какой смысл использовать несжатый, кроме ненужного раздувания блокчейна и переплаты комиссий?
member
Activity: 74
Merit: 100
формат ключа  зависит от клиента, который формирует транзакцию
Вам известен какую-нибудь актуальный  клиент, формирующий такие транзакции?
legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
1) Кол-во байт транзакции:   = (in х  180) + (out  х  34 )+10 ± in , где  in  - кол-во входов, out  - кол- во выходов.
Если мне память не изменяет, там не 180 байт на вход, а 148, и про "± in" не уверен. Кстати, для сегвит адресов эта формула не подходит.

...

мне не изменяет, так как эта формула у меня записана и пользуюсь ею более 5-ти лет, проверяю потом по блокчейн.инфо и все неплохо совпадает. Кстати  ± in это и есть  "степень неопределенности" в подсчете.
Типичная транзакция (1 вход, 2 выхода) с легаси-адреса занимает 225 или 226 байт. Как вы это объясните?
legendary
Activity: 996
Merit: 1133
Get Some!
Как выбрать адекватную комиссию? Где посмотреть состояние мемпула?

Рекомендую этот, этот и этот сервис. Если понять, что изображено на диаграмме, тяжело, просто открываем первую ссылку и рекомендацию сверху страницы вписываете в графу "custom transaction fee" при отправке транзакции.
Еще один сервис.
member
Activity: 74
Merit: 100
Для новичков очень полезная тема. А что скажете насчет сервисов, которые проталкивают зависшие транзакции?
2 бесплатных сервиса упомянуты в FAQ (со ссылками). Других бесплатных не встречал.
1) Кол-во байт транзакции:   = (in х  180) + (out  х  34 )+10 ± in , где  in  - кол-во входов, out  - кол- во выходов.
Это добавлю.
2) Приоритет транзакции зависит от "возраста" пропихиваемых монет. Иными словами более "старые" монеты проходят быстрее.
В этом я сомневаюсь. Знаю, что так было раньше. Мне казалось, что потом это условие было убрано. Кроме того, любому пулу выгодно учитывать только плату за байт, а не возраст. Если учесть, что выбор транзакций пулом никак и никем не контролируется, можно предположить, что на возраст монет никто из пулов не смотрит.

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

соображение - выделить ссылки в тексте цветом\подчеркиванием ?
Ок.
Читал про схемы мошенничества с долгими транзакциями биткоина. Там типа покупали биткоин, когда покупателю показывали отправленную транзакцию он пересылал фиат или другую крипту, и как только переслал первоначальные битки уходили на другой кошелек. То есть покупателю показывали транзу с мелкой комиссией чтобы долго шла, а после того как он переводил деньги отправляли себе на кошелек но с большой комиссией чтобы быстро дошла.
Блин вот не могли сразу написать защиту от подобных действий... Интересно сейчас такое прокатит или нет Huh
Это называется двойная трата (double spend), в первом посте есть об этом. Да, можно и сейчас такое устроить. Суть в том, что пока транзакция не подтверждена, она в блокчейн не записывается, а находится в мемпуле и ее можно "перебить" другой транзакцией. В описанной ситуации, во избежание мошенничества, нужно ждать подтверждения (а лучше двух).
Сейчас можно, но сложнее - последние месяцы мемпул обычно почти пуст. Для реализации надо хотя бы 5-10 мегабайт транзакций (это на глазок). Такое бывает, но нечасто.


legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
1) Кол-во байт транзакции:   = (in х  180) + (out  х  34 )+10 ± in , где  in  - кол-во входов, out  - кол- во выходов.
Если мне память не изменяет, там не 180 байт на вход, а 148, и про "± in" не уверен. Кстати, для сегвит адресов эта формула не подходит.

Читал про схемы мошенничества с долгими транзакциями биткоина. Там типа покупали биткоин, когда покупателю показывали отправленную транзакцию он пересылал фиат или другую крипту, и как только переслал первоначальные битки уходили на другой кошелек. То есть покупателю показывали транзу с мелкой комиссией чтобы долго шла, а после того как он переводил деньги отправляли себе на кошелек но с большой комиссией чтобы быстро дошла.
Блин вот не могли сразу написать защиту от подобных действий... Интересно сейчас такое прокатит или нет Huh
Это называется двойная трата (double spend), в первом посте есть об этом. Да, можно и сейчас такое устроить. Суть в том, что пока транзакция не подтверждена, она в блокчейн не записывается, а находится в мемпуле и ее можно "перебить" другой транзакцией. В описанной ситуации, во избежание мошенничества, нужно ждать подтверждения (а лучше двух).
newbie
Activity: 15
Merit: 0
Читал про схемы мошенничества с долгими транзакциями биткоина. Там типа покупали биткоин, когда покупателю показывали отправленную транзакцию он пересылал фиат или другую крипту, и как только переслал первоначальные битки уходили на другой кошелек. То есть покупателю показывали транзу с мелкой комиссией чтобы долго шла, а после того как он переводил деньги отправляли себе на кошелек но с большой комиссией чтобы быстро дошла.
Блин вот не могли сразу написать защиту от подобных действий... Интересно сейчас такое прокатит или нет Huh
member
Activity: 490
Merit: 13
Для новичков очень полезная тема. А что скажете насчет сервисов, которые проталкивают зависшие транзакции?
member
Activity: 74
Merit: 100
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 транзакции Smiley




ССЫЛКА НА ПРОДОЛЖЕНИЕ FAQ
Pages:
Jump to: