Глоссарий / Транзакции и комиссии
Замена с доплатой (Replace-by-fee)
Другие названия: Replace-by-fee, RBF, Замена по комиссии, Опциональная замена по комиссии, Full-RBF.
- Что такое замена с доплатой (Replace-by-fee)?
- Replace-by-fee позволяет заменить неподтвержденную транзакцию ее версией с более высокой комиссией, а современные версии Bitcoin Core передают такую замену независимо от того, была ли исходная транзакция помечена для нее.
Определено в BIP-125.
Оценки комиссии устаревают, поэтому биткоин позволяет отправителю переписать платеж, который еще не добыт. Замена должна заново оплатить всю комиссию исходной транзакции плюс как минимум один дополнительный сатоши за виртуальный байт, так что повышение комиссии никогда не бывает бесплатным. Для вас практическое правило однозначно: все, что не подтверждено, не является окончательным, и повысить комиссию может только отправитель.
Как это работает
Замена является политикой ретрансляции, а не правилом консенсуса, поэтому ее поведение менялось дважды без какого-либо форка.
BIP125 определил опциональную версию, и Bitcoin Core включил ее в 0.12.0 23 февраля 2016 года. Отправитель отмечал готовность к замене, устанавливая номер последовательности хотя бы одного входа в 0xfffffffd или ниже, и тогда узлы пересылали конфликтующую транзакцию, которая платила больше. Кошельки, которые не ставили этот флаг, создавали платежи, которые их собственные пользователи не могли исправить.
Это различие исчезло. Bitcoin Core 28.0, выпущенный в октябре 2024 года, переключил параметр -mempoolfullrbf по умолчанию в положение «включен», так что хорошо подключенный узел теперь пересылает конфликт с более высокой оплатой независимо от того, что сигнализировала первая транзакция. Любой экран кошелька, который до сих пор обещает, что платеж без флага «не может быть заменен», описывает сеть, которая больше не существует.
Четыре условия решают, примет ли узел замену, и они существуют, чтобы замена не использовалась для перегрузки сети бесплатными перезаписями:
- Замена должна платить более высокую абсолютную комиссию, чем каждая вытесняемая ею транзакция, а не просто более высокую ставку комиссии.
- Она также должна платить дополнительную сумму как минимум в размере инкрементальной комиссии ретрансляции, которая по умолчанию равна 1 сатоши за виртуальный байт, умноженному на размер новой транзакции.
- Она не может включать неподтвержденные входы, которые исходная транзакция еще не тратила.
- Она не может вытеснить более 100 транзакций за раз, считая потомков всего, с чем она конфликтует.
Правило абсолютной комиссии удивляет людей больше всего. Замена, которая сокращает крупную транзакцию до меньшей с лучшей ставкой, все равно может быть отклонена, потому что общая комиссия уменьшилась. Учтите также, что вы платите новую комиссию, а не обе: исходная транзакция отбрасывается и никогда не добывается, поэтому старая комиссия никогда не взимается.
Bitcoin Core предоставляет это как RPC-вызов bumpfee, и большинство настольных кошельков оформляют его кнопкой с надписью "increase fee" или похожей. Обычный механизм состоит в уменьшении выхода со сдачей на сумму дополнительной комиссии, поэтому платеж, который отправил весь баланс без сдачи, нельзя повысить без добавления еще одного входа.
Почему это важно, когда вы покупаете биткоин
Замена становится вашей проблемой в тот момент, когда вы выводите средства с биржи в свой кошелек или отправляете из этого кошелька кому-то другому.
Отправка из собственного кошелька является хорошим случаем. Если вы выбрали ставку комиссии в 2:00, а пул памяти проснулся, откройте транзакцию и повысьте комиссию. Выберите кошелек, который предлагает эту кнопку, до того, как она понадобится: это обычная функция в Bitcoin Core, Sparrow, Electrum и Trezor Suite, и отсутствующая функция во многих мобильных кошельках, которые выбирают комиссию за вас и не дают никакого способа вернуться.
Вывод с биржи является плохим случаем. Биржа построила эту транзакцию, у нее ключи от входов, и только она может ее заменить. Службы поддержки обычно этого не делают, потому что их пакеты выводов обслуживают десятки клиентов одновременно. Единственным рычагом на стороне получателя является child pays for parent (дочерняя транзакция платит за родительскую), который работает потому, что поступающий к вам биткоин доступен для траты с момента, когда он существует, даже неподтвержденный.
Именно при получении замена меняет то, как вам следует себя вести. Продавец на одноранговом рынке, участник сделки лицом к лицу или оператор биткоин-банкомата, который выдает товар по неподтвержденному платежу, доверяет транзакции, замену которой может наблюдать любой, у кого есть пул памяти. Поскольку полная замена является поведением по умолчанию, старый совет о том, что транзакцию без флага безопасно принимать при нуле подтверждений, устарел. Дождитесь блока. Для сумм, которые имеют значение, дождитесь нескольких.
Повышение комиссии застрявшего вывода с 3 sat/vB
Рассмотрите случай: вы отправляете 0,05 BTC из своего кошелька с одним входом нативного SegWit и двумя выходами, один получателю и один для сдачи. Эта транзакция занимает около 141 виртуального байта и при 3 sat/vB несет комиссию в 423 сатоши.
На следующее утро самая дешевая ставка, которая подтверждается, составляет 20 sat/vB, а ваш платеж не сдвинулся. Вы повышаете комиссию. Замена занимает те же 141 виртуальный байт, поэтому 20 sat/vB означает комиссию в 2820 сатоши, взятых из выхода со сдачей, а не из суммы получателя. Нижний порог политики для этой замены составляет исходные 423 сатоши плюс 1 sat/vB на 141 байт, то есть 564 сатоши, так что 2820 проходит с запасом.
Вы не платите 3243 сатоши. Вы платите 2820, а первая версия исчезает, не будучи добытой. Получатель по-прежнему получает ровно 0,05 BTC, а идентификатор транзакции меняется, так что если вы уже сообщили кому-то старый идентификатор, нужно отправить ему новый.
Это становится дорого тогда, когда не остается выхода со сдачей, который можно уменьшить. Тогда кошельку приходится добавить еще один вход, транзакция вырастает примерно до 209 виртуальных байт, и те же 20 sat/vB теперь стоят 4180 сатоши.
Replace-by-fee vs двойная трата
Replace-by-fee и попытка двойной траты используют один и тот же механизм и различаются только тем, куда в итоге попадают деньги. Замена обычно сохраняет того же получателя и берет дополнительную комиссию из сдачи. Двойная трата переписывает выходы так, что биткоины возвращаются отправителю или уходят куда-то совсем в другое место, и продавец, который передал товар, не получает ничего.
Ни один узел не может их различить, потому что обе являются просто конфликтующими транзакциями, и побеждает та, что платит больше. В этом весь аргумент в пользу ожидания подтверждений вместо доверия к метке, которую ваш кошелек ставит на входящий платеж. Защитой является глубина в цепи, а не заявленное намерение отправителя.