Odeslání platby ještě není její potvrzení. Než ji těžař zahrne do bloku, uzly — programy, které ověřují a předávají bitcoinové transakce — ji mohou držet v Mempoolu, svém seznamu čekajících transakcí. RBF jim za určitých podmínek dovoluje přijmout místo ní novou transakci, která utrácí alespoň jedno stejné UTXO, tedy stejný dosud neutracený výstup. Náhrada musí mít platné podpisy a musí se dostat do sítě; vyšší poplatek sám o sobě nezaručí rychlé potvrzení.
Anna poslala 20 000 sat, ale platba stále čeká. Zkratka sat znamená satoshi, nejmenší jednotku bitcoinu. Její peněženka nabízí zvýšení poplatku pomocí RBF. V jednoduchém příkladu původní transakce utrácí 50 000 sat: příjemci dává 20 000 sat, poplatek činí 200 sat a zbývajících 29 800 sat se vrací Anně jako zbytek. V náhradě může příjemce stále dostat 20 000 sat, poplatek vzroste na 2 000 sat a Anně se vrátí 28 000 sat. Čísla jen vysvětlují princip, nejsou doporučením aktuálního poplatku. Anna před podpisem zkontroluje adresu, částku příjemce i nový celkový poplatek. Peněženka musí potřebné vstupy umět podepsat; u hardwarové peněženky může být znovu nutné připojit zařízení. Náhrada má nové txid, identifikátor transakce, takže příjemci může být potřeba poslat nový odkaz. Použít funkci zvýšení poplatku je něco jiného než vytvořit nezávislou druhou platbu z jiných UTXO: obě nezávislé platby se mohou potvrdit a zaplatil bys dvakrát. [1] [2] [12]
Příjemce může v peněžence vidět peníze ještě před prvním potvrzením. Takové platbě se říká zero-conf: byla zaznamenána, ale dosud není v bloku. Původní verzi může předběhnout jiná a zobrazený příjem zmizí. Samotný příznak „RBF vypnuto“ proto není důkazem, že je platba jistá. Při předání zboží je přijetí nepotvrzené platby vědomým obchodním rizikem. Po zahrnutí do bloku už RBF transakci nepřepisuje; riziko případné reorganizace řetězce je jiná otázka, kvůli které se u významnějších plateb čeká na více potvrzení. [1]
RBF samo nevyžaduje zachování původního příjemce. Náhradní transakce může zvýšit poplatek a platit dál stejné osobě, ale může poslat prostředky i jinam. Obě verze se snaží utratit stejné UTXO, takže jde technicky o konfliktní pokusy neboli Double Spend; tento pojem ještě sám nerozhoduje, zda jde o podvod. Útočník ovšem nemůže cizí platbu libovolně podepsat: i náhrada musí splnit podmínky utracení včetně potřebných podpisů. Pokud peněženka nabízí „zrušení“ pomocí náhrady platbou sobě, jde o pokus předběhnout původní transakci, ne o jisté odvolání platby. [1]
RBF mění samotnou čekající transakci. Child Pays for Parent (CPFP) postupuje jinak: původní transakce zůstane a nová utratí jeden z jejích výstupů. Aby těžař získal poplatek z nové transakce, musí zahrnout i tu původní; hodnotí proto jejich společnou sazbu. Nová transakce se označuje jako dítě a původní jako rodič. Vytvořit ji může ten, kdo umí daný výstup utratit, například příjemce platby nebo odesílatel se svým zbytkem. Rozhoduje podpora peněženky, potřebné podpisy a návaznost transakcí. CPFP původní platbu nenahrazuje a ani ono nezaručí termín potvrzení. [2]
Mempool není jedna společná fronta pro celý Bitcoin. Každý uzel má vlastní seznam a vlastní pravidla pro přijímání a předávání čekajících transakcí. RBF patří k těmto místním pravidlům, nikoli ke konsenzu, který určuje platnost bloků. Těžař proto může do bloku vybrat platnou konfliktní transakci, kterou jiný uzel předtím neuchovával. Full Node pak zkontroluje celý blok podle pravidel Bitcoinu; jeho dřívější preference v mempoolu výsledek neurčuje. Úspěch náhrady u jednoho uzlu není příslib jejího přijetí všude. [1] [6]
Pro běžného uživatele jsou důležitá dvě různá čísla: kolik celkem zaplatí a jak vysokou sazbu nabízí vzhledem k velikosti transakce. Při modelové velikosti 200 vB odpovídá 200 sat sazbě 1 sat/vB; při stejné velikosti je 2 000 sat sazbou 10 sat/vB. Virtuální bajt, vB, je jednotka velikosti odvozená z váhy transakce. Peněženka při přestavbě může velikost změnit, takže musí přepočítat i sazbu. Celkový poplatek je částka v satoshi, sazba poplatku je částka za virtuální bajt v sat/vB. U samostatné náhrady v Core 30 musí poplatek pokrýt součet poplatků všech vytlačovaných transakcí a navíc náklad podle incrementalrelayfee za velikost náhrady. Její sazba musí překonat sazby přímo konfliktních transakcí. Samotná vyšší sazba ani pouhé přidání satoshi nestačí; Core 30 má výchozí incrementalrelayfee 0,1 sat/vB, nastavení uzlu se ale může lišit. [2] [9]
Z čekající platby už může vycházet další čekající platba: někdo utrácí výstup první, dosud nepotvrzené transakce. Takovým navazujícím transakcím se říká potomci. Když zmizí jejich rodič, nejsou v mempoolu použitelné ani ony. Uzel proto musí posoudit celou dotčenou skupinu. Náhrada rodičovské transakce může z mempoolu vytlačit také potomky, kteří utrácejí její výstupy. Nejde tedy vždy o porovnání dvou transakcí. Core 30 u samostatné náhrady omezuje součet počtů potomků přímo konfliktních transakcí včetně jich samých na 100; tento výpočet může společné potomky započíst vícekrát. Poplatky a vztahy v balíčku proto mohou úspěch náhrady ovlivnit. [2]
Uzel také potřebuje zabránit tomu, aby ho někdo zahltil neustálým přepočítáváním náhrad. Tomu slouží ochrana před DoS, útokem na dostupnost služby. UTXO znamená neutracený výstup předchozí transakce; vstup nové transakce na něj odkazuje. Následující pravidla popisují konkrétně Bitcoin Core 30, nikoli neměnný zákon Bitcoinu. Politika Bitcoin Core 30 pro samostatnou náhradní transakci omezuje také nové nepotvrzené vstupy a počet vytlačovaných transakcí. Náhrada musí splnit místní pravidla pro přijímané podoby transakcí (standardnost), jejich šíření i pravidla platnosti, nikoli jen utratit stejný UTXO. Omezení chrání výpočetní kapacitu, paměť a přenosovou kapacitu; pravidla balíčkových náhrad je nutné posuzovat zvlášť podle verze uzlu. Core 31 tuto politiku změnil se zavedením Cluster Mempool: propojené čekající transakce posuzuje ve skupinách. Náhrada musí zlepšit takzvaný feerate diagram, který porovnává souhrnné poplatky s postupně zabíraným místem. Vedle toho dál platí další podmínky, například dostatečný celkový poplatek a příplatek za šíření náhrady. Výše uvedené limity Core 30 proto nepřenášej automaticky na novější verze; ověř pravidla svého uzlu. [2] [13]
Proč některé peněženky ještě ukazují přepínač RBF? Uzly s původní politikou opt-in RBF vyžadovaly předchozí signál souhlasu s náhradou. Bitcoin Core 24 dovolil nastavit full-RBF bez této podmínky, Core 28 ho zapnul výchozím nastavením a Core 29 odstranil přepínač mempoolfullrbf. Následující detaily BIP125 vysvětlují původní signalizaci, nikoli univerzální pravidlo všech dnešních uzlů. BIP125 popisuje explicitní opt-in signál, pokud má alespoň jeden vstup hodnotu nSequence nižší než 0xfffffffe, a také dědění signálu od nepotvrzeného předka. Jde o historickou politiku, nikoli podmínku konsenzu. Full-RBF dovoluje posoudit náhradu i bez tohoto signálu; chybějící signál neznamená, že platbu nelze nahradit. [1] [3] [4] [5] [6]
Následující část je pro práci s vlastním uzlem. RPC jsou příkazy, kterými se software dotazuje nebo ovládá; běžný uživatel je pro tlačítko zvýšení poplatku znát nepotřebuje. RPC getmempoolentry ukáže stav transakce, pokud ji daný uzel uchovává ve svém mempoolu; testmempoolaccept otestuje jednu podepsanou kandidátní náhradu proti aktuálnímu mempoolu a pravidlům vlastního uzlu, aniž ji odvysílá. Výsledek není příslib přijetí jinými uzly nebo vytěžení. Core 28 zapnul full-RBF výchozím nastavením mempoolfullrbf; Core 29 tuto volbu odstranil. RPC getmempoolinfo uvádí poplatkové parametry, ale pole fullrbf je v Core 30 označeno jako zastarávající; vždy ověř verzi a konkrétní konfiguraci. [5] [6] [7] [8] [10] [11]
Pro nejúplnější obraz čtěte toto heslo společně s Transaction Fees, Mempool, CPFP (Child Pays for Parent), Dvojí útrata, Potvrzení, Fee Rate. Opačným směrem na něj odkazují také Change Address, Potvrzení, Dvojí útrata, Fee Rate.