52 / 691BIP125

Replace-by-Fee (RBF)

Заміна непідтвердженої транзакції версією з вищою комісією

Replace-by-Fee (RBF) — місцева політика mempool і поширення транзакцій Bitcoin. Вона дозволяє прийняти конфліктну заміну непідтвердженої транзакції, якщо та відповідає правилам вузла щодо комісій, чинності та захисту від DoS.

RBF стосується транзакцій до підтвердження. BIP125 описав opt-in сигналізацію й правила заміни, пов’язані з Bitcoin Core 0.12. Full-RBF не потребує такого сигналу: Core 24 дозволив його налаштовувати, Core 28 увімкнув за замовчуванням, Core 29 прибрав перемикач mempoolfullrbf. RBF не змінює консенсус чи підтверджені блоки; він впливає на те, яку чинну непідтверджену конфліктну транзакцію вузол зберігає й поширює.

RBF замінює одну чи кілька непідтверджених транзакцій у mempool, з якими має принаймні один спільний витрачуваний вхід. Він не переписує транзакції, уже підтверджені в блоці. Заміна змінює дані й має інший txid; вона сама мусить виконувати умови витрачання входів, зокрема мати потрібні підписи. [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core v30.0 — Mempool replacement policy]

BIP125 описує явний opt-in сигнал, коли принаймні один вхід має nSequence нижче 0xfffffffe, а також успадкування сигналу від непідтвердженого предка. Це історична політика, не вимога консенсусу. Full-RBF дозволяє оцінювати заміну без цього сигналу; його відсутність не гарантує незамінності платежу. [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core 0.12.0 release notes]

RBF є місцевою політикою mempool і relay, а не правилом консенсусу. Майнер може вибрати чинну за консенсусом конфліктну транзакцію, якої інший вузол раніше не мав у mempool. Full Node перевіряє отриманий блок за консенсусом незалежно від попереднього вибору свого mempool. [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core 29.0 release notes]

Політика Bitcoin Core 30 для однієї транзакції заміни також обмежує нові непідтверджені входи й кількість витіснених транзакцій. Заміна має відповідати правилам стандартності, поширення й чинності; самого витрачання того ж UTXO недостатньо. Обмеження захищають CPU, пам’ять і пропускну здатність; пакетні заміни слід оцінювати окремо для конкретної версії вузла. [Bitcoin Core v30.0 — Mempool replacement policy]

Загальна комісія — сума в satoshi, ставка — сума за віртуальний байт у sat/vB. Для окремої заміни в Core 30 комісія має покривати суму комісій усіх витіснених транзакцій та додаткову вартість за incrementalrelayfee відповідно до розміру заміни. Її ставка має перевищувати ставки безпосередньо конфліктних транзакцій. Самого підвищення ставки чи додавання satoshi недостатньо; Core 30 має типове incrementalrelayfee 0,1 sat/vB, але налаштування вузла можуть відрізнятися. [Bitcoin Core v30.0 — Mempool replacement policy] [Bitcoin Core 30.0 release notes]

Заміна батьківської транзакції може витіснити з mempool і нащадків, які витрачають її виходи. Отже, не завжди порівнюються лише дві транзакції. Для окремої заміни Core 30 обмежує суму кількостей нащадків безпосередньо конфліктних транзакцій, включно з ними самими, числом 100; спільні нащадки можуть рахуватися кілька разів. Комісії та зв’язки пакета впливають на успішність заміни. [Bitcoin Core v30.0 — Mempool replacement policy]

RBF підвищує комісію, замінюючи саму транзакцію витрачання. Child Pays for Parent (CPFP) залишає батьківську й додає дочірню з достатньою комісією, щоб майнер оцінював їхню спільну ставку. Вибір залежить від контрольованих виходів, можливості підписати потрібні входи та графа транзакцій; CPFP не замінює батьківську. [Bitcoin Core v30.0 — Mempool replacement policy]

Подвійне витрачання — це конфліктні спроби витратити той самий UTXO. RBF визначає, як вузол вибирає між такими непідтвердженими транзакціями за своєю політикою. Заміна може чесно підвищити комісію або перенаправити непідтверджений платіж. RBF не дозволяє сторонній особі витрачати входи без виконання їхніх умов. [BIP 125 — Opt-in Full Replace-by-Fee Signaling]

Zero-conf означає платіж без підтвердження в блоці, а не без конфігурації. Bitcoin не гарантує, що перша транзакція, яку бачить продавець, потрапить у блок. Full-RBF підкреслює цю межу: прийняття zero-conf — рішення про комерційний ризик, не остаточний розрахунок у Bitcoin. [BIP 125 — Opt-in Full Replace-by-Fee Signaling]

RPC getmempoolentry показує стан непідтвердженої транзакції; testmempoolaccept перевіряє одну підписану заміну-кандидата щодо поточного mempool і правил вузла, не поширюючи її. Результат не обіцяє прийняття іншими вузлами чи включення в блок. Core 28 увімкнув full-RBF типовим значенням mempoolfullrbf; Core 29 прибрав цю опцію. getmempoolinfo показує комісійні параметри, але поле fullrbf у Core 30 позначене застарілим; завжди перевіряй версію й конфігурацію. [Bitcoin Core 28.0 release notes] [Bitcoin Core 29.0 release notes] [Bitcoin Core getmempoolinfo RPC] [Bitcoin Core testmempoolaccept RPC] [Bitcoin Core getmempoolentry RPC] [Bitcoin Core v30.0 — Mempool RPC implementation]

Для повної картини прочитайте також Комісії за транзакції, Mempool, CPFP (Child Pays for Parent), Подвійна витрата, Підтвердження, Fee Rate. На цю статтю також посилаються Вихід решти, Підтвердження, Подвійна витрата, Fee Rate.

DOC · 001BIP 125 — Opt-in Full Replace-by-Fee SignalingСпецифікація ↗DOC · 002Bitcoin Core v30.0 — Mempool replacement policyДокументація ↗DOC · 003Bitcoin Core 0.12.0 release notesДокументація ↗DOC · 004Bitcoin Core 24.0.1 release notesДокументація ↗DOC · 005Bitcoin Core 28.0 release notesДокументація ↗DOC · 006Bitcoin Core 29.0 release notesДокументація ↗DOC · 007Bitcoin Core getmempoolinfo RPCДокументація ↗DOC · 008Bitcoin Core testmempoolaccept RPCДокументація ↗DOC · 009Bitcoin Core 30.0 release notesДокументація ↗DOC · 010Bitcoin Core getmempoolentry RPCДокументація ↗DOC · 011Bitcoin Core v30.0 — Mempool RPC implementationПервинне джерело ↗
Спочатку джерела · Не інвестиційна порада