Надіслати платіж — ще не означає підтвердити його. Поки майнер не включив його в блок, вузли — програми, що перевіряють і передають транзакції Bitcoin, — можуть зберігати його у своєму Mempool, локальному списку непідтверджених транзакцій. За певних умов RBF дозволяє прийняти натомість нову транзакцію, що витрачає принаймні один із тих самих UTXO — ще не витрачених виходів. Заміна має містити дійсні підписи, і її потрібно передати мережі; сама вища комісія не гарантує швидкого підтвердження.
Анна надіслала 20 000 sat, але платіж досі очікує. Скорочення sat означає satoshi — найменшу одиницю біткоїна. Її гаманець пропонує підвищити комісію через RBF. У простому прикладі початкова транзакція витрачає 50 000 sat: 20 000 sat отримує адресат, 200 sat становить комісія, а 29 800 sat повертаються Анні як решта. Заміна може залишити адресатові 20 000 sat, збільшити комісію до 2 000 sat і повернути Анні 28 000 sat. Цифри пояснюють принцип, а не рекомендують поточну комісію. Перед підписом Анна перевіряє адресу, суму для одержувача й нову загальну комісію. Гаманець має вміти підписати потрібні входи; апаратний гаманець, можливо, доведеться під’єднати знову. Заміна має новий txid — ідентифікатор транзакції, тож одержувачеві може знадобитися нове посилання для відстеження. Підвищення комісії відрізняється від другого незалежного платежу з інших UTXO: обидва незалежні платежі можуть підтвердитися, і ти заплатиш двічі. [1] [2] [12]
Гаманець може показати надходження ще до першого підтвердження. Такий платіж називають zero-conf: його вже побачили, але в блоці його немає. Інша версія може підтвердитися першою, а показане надходження — зникнути. Тому позначка ‘RBF вимкнено’ не доводить надійності платежу. Передаючи товар за непідтверджений платіж, продавець свідомо бере на себе комерційний ризик. Після включення в блок RBF не переписує транзакцію. Можлива реорганізація ланцюга — інший ризик, через який для вагоміших платежів чекають кількох підтверджень. [1]
Сам RBF не вимагає залишати початкового одержувача. Заміна може збільшити комісію й платити тій самій людині або спрямувати кошти деінде. Обидві версії намагаються витратити той самий UTXO — технічно це конфліктні спроби, Double Spend. Цей термін сам по собі ще не означає шахрайства. Проте нападник не може довільно підписати чужий платіж: заміна теж мусить виконати умови витрачання, зокрема мати потрібні підписи. Якщо гаманець пропонує ‘скасування’ через заміну платежем собі, це спроба випередити початкову транзакцію, а не гарантоване відкликання. [1]
RBF змінює саму непідтверджену транзакцію. Child Pays for Parent (CPFP) залишає її й створює нову, яка витрачає один з її виходів. Щоб отримати комісію нової транзакції, майнер мусить включити й початкову та може оцінювати їхню спільну ставку. Нову транзакцію називають дочірньою, початкову — батьківською. Створити дочірню може той, хто здатен витратити відповідний вихід: наприклад, одержувач або відправник зі своєю рештою. Можливості залежать від гаманця, потрібних підписів і зв’язків транзакцій. CPFP не замінює початковий платіж і також не гарантує часу підтвердження. [2]
Mempool — не єдина спільна черга всього Bitcoin. Кожен вузол веде власний список і застосовує свої правила приймання та передавання непідтверджених транзакцій. RBF належить до цієї місцевої політики, а не до консенсусу, який визначає чинність блоків. Тому майнер може вибрати чинну конфліктну транзакцію, якої інший вузол раніше не зберігав. Full Node потім перевіряє весь блок за правилами Bitcoin; попередній вибір його mempool не визначає результат. Прийняття заміни одним вузлом не обіцяє її прийняття всюди. [1] [6]
Для користувача важливі два різні числа: скільки він заплатить загалом і яку ставку пропонує з огляду на розмір транзакції. За умовного розміру 200 vB комісія 200 sat означає 1 sat/vB; за того самого розміру 2 000 sat означає 10 sat/vB. Віртуальний байт, vB, — одиниця розміру, похідна від ваги транзакції. Під час перебудови розмір може змінитися, тож гаманець має перерахувати й ставку. Загальна комісія — сума в satoshi, ставка — сума за віртуальний байт у sat/vB. Для окремої заміни в Core 30 комісія має покривати суму комісій усіх витіснених транзакцій та додаткову вартість за incrementalrelayfee відповідно до розміру заміни. Її ставка має перевищувати ставки безпосередньо конфліктних транзакцій. Самого підвищення ставки чи додавання satoshi недостатньо; Core 30 має типове incrementalrelayfee 0,1 sat/vB, але налаштування вузла можуть відрізнятися. [2] [9]
Від першого непідтвердженого платежу вже може залежати наступний: хтось витрачає вихід першої, ще не підтвердженої транзакції. Такі наступні транзакції називають нащадками. Коли батьківська зникає, вони теж стають непридатними в mempool, тому вузол мусить оцінити всю пов’язану групу. Заміна батьківської транзакції може витіснити з mempool і нащадків, які витрачають її виходи. Отже, не завжди порівнюються лише дві транзакції. Для окремої заміни Core 30 обмежує суму кількостей нащадків безпосередньо конфліктних транзакцій, включно з ними самими, числом 100; спільні нащадки можуть рахуватися кілька разів. Комісії та зв’язки пакета впливають на успішність заміни. [2]
Вузол також мусить захищатися від перевантаження безперервними перерахунками замін. Це захист від DoS — атаки на доступність сервісу. UTXO є невитраченим виходом попередньої транзакції; вхід нової посилається на нього. Далі описано саме Bitcoin Core 30, а не незмінний закон Bitcoin. Політика Bitcoin Core 30 для однієї транзакції заміни також обмежує нові непідтверджені входи й кількість витіснених транзакцій. Заміна має відповідати місцевим правилам щодо прийнятних форм транзакцій (стандартності), а також правилам поширення й чинності; самого витрачання того ж UTXO недостатньо. Обмеження захищають обчислювальні ресурси, пам’ять і пропускну здатність; пакетні заміни слід оцінювати окремо для конкретної версії вузла. Core 31 змінив цю політику із запровадженням Cluster Mempool: пов’язані непідтверджені транзакції розглядаються групами. Заміна має поліпшувати так звану діаграму ставок комісії — feerate diagram, яка зіставляє накопичені комісії з поступово займаним місцем. Інші умови також залишаються, зокрема достатня загальна комісія та доплата за поширення заміни. Тому не застосовуй наведені вище ліміти Core 30 автоматично до новіших версій: перевір правила свого вузла. [2] [13]
Чому в деяких гаманцях досі є перемикач RBF? Вузли з початковою політикою opt-in RBF вимагали попереднього сигналу згоди на заміну. Bitcoin Core 24 дозволив налаштувати full-RBF без цієї умови, Core 28 увімкнув його за замовчуванням, а Core 29 прибрав перемикач mempoolfullrbf. Наведені далі деталі BIP125 пояснюють початкову сигналізацію, а не універсальне правило всіх сучасних вузлів. BIP125 описує явний opt-in сигнал, коли принаймні один вхід має nSequence нижче 0xfffffffe, а також успадкування сигналу від непідтвердженого предка. Це історична політика, не вимога консенсусу. Full-RBF дозволяє оцінювати заміну без цього сигналу; його відсутність не гарантує незамінності платежу. [1] [3] [4] [5] [6]
Цей розділ призначений для роботи з власним вузлом. RPC — команди для отримання даних від програми або керування нею; для кнопки підвищення комісії знати їх не потрібно. RPC getmempoolentry показує стан транзакції, якщо вона є в mempool цього вузла; testmempoolaccept перевіряє одну підписану заміну-кандидата щодо поточного mempool і правил вузла, не поширюючи її. Результат не обіцяє прийняття іншими вузлами чи включення в блок. Core 28 увімкнув full-RBF типовим значенням mempoolfullrbf; Core 29 прибрав цю опцію. getmempoolinfo показує комісійні параметри, але поле fullrbf у Core 30 позначене застарілим; завжди перевіряй версію й конфігурацію. [5] [6] [7] [8] [10] [11]
Для повної картини прочитайте також Transaction Fees, Mempool, CPFP (Child Pays for Parent), Подвійна витрата, Підтвердження, Fee Rate. На цю статтю також посилаються Change Address, Підтвердження, Подвійна витрата, Fee Rate.