Představ si, že ti někdo poslal bitcoin s nízkým poplatkem a platba stále nemá potvrzení. Pokud ji tvá peněženka umí použít pro CPFP, můžeš z ní vytvořit navazující transakci, třeba na jinou vlastní adresu. Původní transakci se říká rodič a nové potomek: potomek utrácí výstup, tedy částku s podmínkami utracení, kterou rodič vytváří. Aby těžař získal poplatek potomka, potřebuje i rodiče. Původní platba zůstává stejná; vyšší nabídka poplatků může pomoci s potvrzením, ale nezaručí jeho termín.
Anna čeká na 100 000 sat. Zkratka sat označuje satoshi, nejmenší jednotku bitcoinu. Platbu už vidí, ale odesílatel nastavil malý poplatek a dosud není v bloku. Její peněženka umožňuje utratit tento nepotvrzený výstup. Anna z něj vytvoří novou transakci na vlastní adresu a nabídne vyšší poplatek. Neplatí odesílateli ani neposílá odměnu zvláštní službě: hradí běžný bitcoinový transakční poplatek. Těžař nemůže potvrdit tuto novou transakci bez původní, protože by v ověřovaném řetězci chyběl výstup, který nová transakce utrácí. Rodič musí být potvrzen už dříve nebo uveden před potomkem ve stejném bloku, spolu s dalšími potřebnými nepotvrzenými předky. Obráceně to neplatí: rodič se může potvrdit i bez potomka. [3] [5]
Uvažujme jednoduchý příklad bez dalších nepotvrzených předků. Rodič má velikost 200 vB a poplatek 200 sat. Virtuální bajt, vB, vyjadřuje velikost odvozenou z váhy transakce; sazba sat/vB říká, kolik satoshi připadá na jednu takovou jednotku. Potomek má 100 vB a Anna za něj zaplatí 2 800 sat. Z přijatých 100 000 sat jí při jediném výstupu potomka zbude 97 200 sat. Obě transakce dohromady zaplatí 3 000 sat za 300 vB, tedy 10 sat/vB. Samotný potomek má sazbu 28 sat/vB, ale těžař potřebuje zahrnout i rodičovskou transakci s nízkým poplatkem. Proto nestačí hledět jen na jeho vysoké číslo. Jde o modelový výpočet, nikoli doporučení dnešní sazby; skutečné velikosti a požadovaný celkový poplatek ověří peněženka. Další potřební předci výpočet mění. Pokročilý detail: při místním přijetí balíčku se už přijaté transakce nezapočítávají znovu a uzel — program ověřující a předávající transakce — může použít upravené poplatky. Takto zobrazená sazba proto nemusí odpovídat prostému společnému výpočtu pro těžaře. Upravený poplatek je zde místní hodnota pro rozhodování uzlu; nemění částku skutečně zaplacenou transakcí. [3]
CPFP není tlačítko, kterým může kdokoli urychlit cizí transakci. Potřebuješ oprávnění utratit některý rodičův výstup a splnit jeho podmínky včetně podpisů. Anna má tuto možnost jako příjemkyně; odesílatel ji může mít díky vlastnímu výstupu s vráceným zbytkem, označovanému change. Pouhé zobrazení částky v průzkumníku nebo Watch-only Wallet nestačí. Watch-only Wallet slouží ke sledování plateb a sama neuchovává soukromé klíče potřebné k jejich utracení. Peněženka navíc musí práci s nepotvrzeným výstupem podporovat. Před podpisem zkontroluj, který výstup utrácíš, kam peníze půjdou, kolik jich zbude a jaký celkový poplatek zaplatíš. Je-li výstup malý, může poplatek pohltit značnou část jeho hodnoty. [5]
Pomocí Replace-by-Fee (RBF) vznikne nová konfliktní transakce, která má nahradit původní. Sdílí s ní alespoň jeden utrácený vstup, nemusí však mít všechny vstupy stejné. CPFP naproti tomu původní platbu ponechá včetně jejího identifikátoru a přidá další transakci. Pro RBF potřebuješ splnit podmínky vstupů náhrady; pro běžný CPFP podmínky výstupu původní platby. Proto může mít příjemce možnost CPFP, přestože neumí podepsat odesílatelovu náhradu. Pouhé odeslání jiné nezávislé platby s velkým poplatkem nepomůže: potomek musí na čekající platbu skutečně navazovat. [3]
Vyšší společná sazba dává těžaři lepší důvod vzít obě transakce, nerezervuje však místo v příštím bloku. Mezitím mohou přijít lépe placené transakce nebo se balíček nedostane k některým těžařům. Sleduj proto potvrzení původní platby i potomka. Samotný údaj o přijetí uzlem ještě není potvrzení v bloku. Pokud odesílatel původní platbu nahradí přes RBF, potomek odkazující na její starý výstup nemůže navázat na odlišnou novou transakci; bude potřeba situaci znovu posoudit. Ani vytvoření potomka nedělá z nepotvrzeného příjmu jisté peníze. [3]
Následující části vysvětlují pravidla pro pokročilejší čtení a vlastní uzel. Mempool je seznam čekajících transakcí u konkrétního uzlu, ne jedna společná fronta celé sítě. Balíček znamená skupinu transakcí předložených společně. Je důležité odlišit tři rozhodnutí: zda je transakce platná, zda ji uzel přijme a zda ji těžař vybere. Konsenzus určuje platnost transakcí a bloků. Politika mempoolu určuje místní přijetí a šíření; pravidla těžaře určují výběr do kandidátního bloku. CPFP nemění konsenzus. Ekonomicky výhodný balíček může nevyhovět místním pravidlům a jeho přijetí jedním uzlem nezavazuje ostatní uzly ani těžaře. [3] [5]
Možnosti společného předávání rodiče a potomka se vyvíjejí. Název package CPFP označuje právě posouzení souvisejících transakcí jako balíčku. RPC je příkaz pro práci s uzlem; minrelaytxfee označuje jeho minimální sazbu pro běžné šíření. TRUC je zvláštní režim transakcí s omezenými vztahy mezi předky a potomky. Následující historie se týká uvedených verzí Bitcoin Core. Bitcoin Core 26 přidal RPC submitpackage a package CPFP: potomek mohl pomoci rodiči pod dynamickou minimální sazbou mempoolu, tehdy však nikoli pod minimum relay feerate. Toto omezení není nadčasové. Core 31 dovoluje při podporovaném relay balíčku jeden rodič a jeden potomek i rodiče pod minrelaytxfee, včetně nulového poplatku, také pro transakce mimo TRUC; další nepotvrzení rodiče potomka už musí být v mempoolu. Místní přijetí stále nezaručuje stejné šíření celou sítí. [1] [2]
Uzel nemůže přijímat libovolně velké sítě závislostí. Předek je transakce potřebná před jinou transakcí, potomek naopak navazuje na její výstupy. WU označuje jednotky váhy transakce a topologie způsob, jak jsou transakce propojené. Tyto technické meze patří k pravidlům příslušné verze uzlu. Limity chrání paměť, výkon procesoru a přenosovou kapacitu. Starší Core omezoval počty a velikosti předků i potomků; Core 31 tyto mempoolové limity nahradil limity propojených clusterů. Samostatné package limity zůstávají: dokumentace Core 31 uvádí nejvýše 25 transakcí a celkovou váhu 404000 WU. Váha není virtuální velikost. Nesprávná topologie, konflikt nebo nesplnění místních pravidel pro přijímané podoby transakcí (standardnosti) může CPFP zablokovat i při dostatečném poplatku. [2] [3]
Když mají čekající transakce společné vazby, nelze každou vždy ekonomicky hodnotit odděleně. Cluster Mempool umožňuje uzlu posuzovat jejich propojené skupiny. Cluster je celá propojená skupina; menší skupina zpracovávaná při výběru transakcí se nazývá chunk. Nejde o části bloků, které by už byly potvrzené. Bitcoin Core 31 používá Cluster Mempool: cluster tvoří transakce propojené vztahy rodič–potomek v libovolném směru. Výchozí limity jsou 64 transakcí a 101 kB virtuální velikosti na cluster; lze je nastavit. Pořadí zohledňuje společně těžené skupiny zvané chunks a jejich sazby. Historický CPFP carveout dovoloval omezenou výjimku z limitu potomků; Core 31 jej odstranil a limit počtu transakcí clusteru takto obejít nelze. [2] [4]
Příkazy v této části nejsou zaměnitelné. Test může pouze popsat výsledek; odeslání balíčku už může skutečně přijmout a šířit podepsané transakce. Pole vsize vyjadřuje virtuální velikost. Běžná peněženka tyto podrobnosti může řešit za uživatele. V Core 31 RPC getmempoolentry pro transakci uloženou v mempoolu daného uzlu ukáže poplatky, vsize, závislosti a údaje o chunku; getmempoolcluster zobrazí související cluster. RPC testmempoolaccept provede místní test bez přijetí a odvysílání; u více transakcí musí předci předcházet potomkům a transakce nesmějí konfliktovat mezi sebou ani s mempoolem. RPC submitpackage skutečně předkládá podporovaný balíček k přijetí do mempoolu a šíření, není to pouze test. Kontroluj výsledky jednotlivých transakcí, verzi a konfiguraci; žádný výsledek nezaručuje zařazení transakce do bloku. [2] [6] [7] [8] [9]
Pro nejúplnější obraz čtěte toto heslo společně s Replace-by-Fee (RBF), Transaction Fees, Fee Rate, Mempool, Transakce, UTXO. Opačným směrem na něj odkazují také Change Address, Potvrzení, Dvojí útrata, Fee Rate.