Author

Topic: FAQ: всё про REPLACE-BY-FEE транзакции (Read 350 times)

member
Activity: 74
Merit: 100
Хорошая тема. Можно было бы ещё включить информацию про то, какие кошельки это поддерживают, а какие нет и как это включать, отсюда: All about "stuck" transactions and what you can do to fix them.

Спасибо. Про bitcoin core и electrum скоро добавлю. Про остальные кошельки - когда проверю сам или проверит кто-нибудь ещё.
Копировать оттуда информацию по кошелькам без перепроверки не хочу - она могла устареть.

И, пользуясь случаем - предлагаю всем поучаствовать в конкурсе.
staff
Activity: 3444
Merit: 4037
Crypto Swap Exchange
Хорошая тема. Можно было бы ещё включить информацию про то, какие кошельки это поддерживают, а какие нет и как это включать, отсюда: All about "stuck" transactions and what you can do to fix them.
staff
Activity: 2436
Merit: 2347
А зачем новую тему создавать? Ведь это по сути расширение к вот этой. Было бы там - выглядело бы органично, а так все  разорвано и разбросано, что есть не хорошо, ИМХО

Не влезет туда, там и так уже более 11.000 символов.
member
Activity: 74
Merit: 100
А зачем новую тему создавать? Ведь это по сути расширение к вот этой. Было бы там - выглядело бы органично, а так все  разорвано и разбросано, что есть не хорошо, ИМХО
Та и так сильно разрослась. Если ещё и всё это туда впихнуть - будет совсем каша. Плюс информация по конкретным пулам, разные подробности - туда уже совсем плохо подходят. А выкидывать жалко - слишком дорого добывалась эта информация.

Лучше в нужных местах ссылки межлу темами проставлю.
member
Activity: 74
Merit: 100
Резерв
member
Activity: 74
Merit: 100
FAQ: всё про REPLACE-BY-FEE транзакции
Этот FAQ был написан мной с нуля 03.03.19. Замечания и дополнения приветствуются.
Серым цветом выделены технические подробности, которые читать не обязательно.
FAQ по зависшим транзакциям (любым - не только rbf) - тут

Что такое replace-by-fee (opt-in RBF) транзакция?
Это транзакция, которая при создании была помечена как заменяемая (replaceable).

Чем отличаются такие транзации?
Они легко могут быть изменены отправителем произвольным образом (практически - и отменены) в любой момент до включения в блок (получения подтверждений). На самом деле при этом происходит двойная трата (даблспенд); только в отличие от обычной транзакции, здесь это признано нормальным (BIP-125, англ.).

Зачем мне такие транзакции?
Они позволяют в большинстве случаев поднять комиссию нажатием кнопки в интерфейсе кошелька в случае необходимости. Как использовать на примере bitcoin core:
Quote
открываем вкладку с транзакциями, правой кнопкой по проблемной транзакции, затем "Increase transaction fee".
Кошелек сам создаст новую транзакцию, в которой будет больше комиссия и меньше сдача. Входы и остальные выходы останутся те же. Потом он её разошлёт и ноды заменят старую на новую в своём мемпуле.Если у транзакции не было сдачи, будет сообщение об ошибке и вопрос надо будет решать по-другому: создать вручную транзакцию через Coinb.in, затем разослать. Для RBF-транзакций с рассылкой проблем нет.

Какие минусы по сравнению с обычными?
  • В редких случаях вы можете дольше ждать зачисления средств на сервисе. Если обычные неподтвержденные транзакции могут приниматься некоторыми сервисами, то для replace-by-fee транзакции точно придется ждать подтверждения.
  • Если кто-то завладел вашими приватными ключами, то срочно переводить монеты на новый адрес надо обычной транзакцией. Иначе ваша транзакция может быть заменена транзакцией похитителя.

В каких блокчейн-эксплорерах можно посмотреть заменённые транзакции?
https://tradeblock.com, bitaps.com и btc.com.

Может ли в рамках этого механизма быть отменена обычная транзакция?
Да, может. В том случае, если у неё есть неподтвержденная транзакция-предок, которая была помечена как replace-by-fee. Поэтому если вам отправили транзакцию с хорошей комиссией и она сама не помечена как RBF -- это ещё совсем не значит, что она обязательно потвердится. Не спешите делать перевод/отдавать товар - ждите подтверждений. Не верите? См опять же тут (англ), раздел Summary -> Inherited signaling.

При каких условиях replace-by-fee транзация А заменяется новой конкурирующей транзакцией B в мемпуле?
На каждой ноде могут быть установлены свои правила.
Условие по умолчанию (установлено на большинстве нод) такое: у B должна быть больше комиссия.
Более точно - абсолютная комиссия транзакции B должна быть больше хотя бы на (размер транзакции B)*(minimum relay fee). Minimum relay fee на большинстве нод установлен в 1 сатоши. Ещё более точный ответ см здесь (англ, раздел Implementation details).

Обязаны ли майнеры заменять replace-by-fee транзакции?
Нет. Но им выгодна такая замена.

Все ли майнеры принимают такие транзакции?
Принимают - да. Но заменяют на новые не все.
Мной были проверены и заменяют:
  • btc.com
  • poolin
  • f2pool
  • btc.top
  • slush
  • viabtc
  • dpool
  • bitclub
  • bitcoin.com
  • bixin
Если не ошибаюсь, антпул был против введения replace-by-fee. Механизм replace-by-fee выключен в сети Bitcoin Cash. Поэтому единственный крупный майнер, который не заменяет транзакции - antpool.com. В моих экпериментах замена антпулом была сделана в 1 случае из 4. Видимо, разные ноды у них сконфигурированы по-разному. Для майнеров нет никакой разницы - просто ли увеличивается комиссия за счет сдачи или же происходит замена адреса получателя.

Что мешает майнерам так же заменять обычные транзакции?
На самом деле - ничего. Но (можно считать это джентельменским соглашением) они не заменяют.

RBF придумал сам Сатоши?
Нет. У него был предусмотрен механизм замены транзакций, но другой.

RBF, Opt-in RBF, opt-in full RBF, full RBF, full opt-in rbf - это всё одно и то же?
Работающий механизм есть всего один, хотя во время его разработки было много разных предложений - как именно реализовать. С тех пор осталась эта путаница. Ещё некоторые зачем-то называют случаи даблспенда для обычных транзакций full RBF.

Как именно помечаются replace-by-fee транзакции?
Это описано в BIP-125 (англ): поставить у любого входа в поле nSequence любое значение меньше 0xfffffffe. Но так как то же поле используется для всяких других вещей, то на практике большиство кошельков ставит в поле nSequence каждого входа значение 0xfffffffd вместо 0xffffffff. Для примера (2 входа, 1 выход, без подписей):
0100000002a813c380ba5d8c0698004b12d0bbb69ba7434ed5126884370117d932d004402c00000 0001976a9141238e2a3bcbb814aedfb6f94eb453530602d45b088acffffffffd51680b172158a4c8de3e6b4417f435a2a27c135cb677f01f936b39de1fc5a1d000000001976a91 41238e2a3bcbb814aedfb6f94eb453530602d45b088acffffffff01c0270900000000001976a9143eed7387440ca17639fe59e45961dced3bb0cbd288ac00000000
0100000002a813c380ba5d8c0698004b12d0bbb69ba7434ed5126884370117d932d004402c00000 0001976a9141238e2a3bcbb814aedfb6f94eb453530602d45b088acfdffffffd51680b172158a4c8de3e6b4417f435a2a27c135cb677f01f936b39de1fc5a1d000000001976a91 41238e2a3bcbb814aedfb6f94eb453530602d45b088acfdffffff01c0270900000000001976a9143eed7387440ca17639fe59e45961dced3bb0cbd288ac00000000
Здесь видим fdffffff вместо fffffffd из-за того, что 4 байта nSequence хранятся в обратном порядке.


Jump to: