Coin Selection je výběr peněz, ze kterých peněženka sestaví bitcoinovou transakci. Zůstatek totiž není jedna souvislá částka: tvoří ho samostatné neutracené výstupy dřívějších transakcí, označované UTXO. Peněženka z nich musí vybrat dost na platbu i poplatek. Obvykle to udělá automaticky; ruční výběr se nazývá Coin Control. Síť ověřuje platnost výsledné transakce, ale nepředepisuje všem peněženkám stejný způsob výběru.
Anna chce zaplatit 60000 sat. Platbu připraví její peněženka: aplikace nebo zařízení, které umožňuje přijímat a posílat bitcoiny. Zkratka sat označuje satoshi, nejmenší jednotku, v níž se zapisují částky v bitcoinových transakcích. Má k dispozici UTXO v hodnotě 100000 sat. Podobně jako bankovku jej nemůže při placení jen částečně odepsat: vstup nové transakce utratí tento výstup celý. Nová transakce vytvoří výstup 60000 sat pro obchodníka, při poplatku 1000 sat pak dalších 39000 sat pro Annu. Tomuto druhému výstupu se říká vratka neboli change. Není to pozdější refundace od obchodníka; vzniká přímo v její vlastní transakci. Poplatek je rozdíl mezi součtem vstupů a všech výstupů. [1] [7]
Peněženka může tutéž platbu sestavit z různých UTXO. Více vstupů ale obvykle znamená více dat, a tedy vyšší poplatek při stejné sazbě. Poplatek není procento z posílané částky. Počítá se podle virtuální velikosti transakce, měřené ve vB, tedy virtuálních bajtech; tato míra zohledňuje odlišnou váhu jednotlivých částí transakce. Uvažujme UTXO 10000 sat, jehož utracení přidá odhadem 68 vB. Při sazbě 10 sat/vB stojí tento vstup 680 sat, takže na zbytek platby přispěje 9320 sat. To je jeho efektivní hodnota. Ostatní části transakce mají vlastní náklady; skutečná velikost vstupu závisí na podmínkách utracení zapsaných ve skriptu a na podpisových datech. Skript je krátký program popisující podmínky utracení. U běžné platby peněženka pomocí soukromého klíče, tajného číselného údaje, vytváří digitální podpis: ověřitelné schválení útraty. [2] [3] [7]
Anna mohla postupně přijmout mnoho drobných částek. Jejich sloučení do většího vlastního výstupu se nazývá konsolidace. Později může potřebovat méně vstupů, ale sloučení stojí poplatek už dnes a veřejně spojí použité výstupy. Proto není rozumné automaticky slučovat všechno. Pro porovnání nákladů používá Bitcoin Core také waste metric: skóre, které zohledňuje rozdíl mezi cenou vstupů nyní a při předpokládané dlouhodobé sazbě, plus náklady vytvoření a pozdějšího utracení vratky, nebo přebytek odevzdaný na poplatek. Dlouhodobá sazba je pracovní předpoklad, nikoli předpověď. Toto skóre posuzuje náklady, ne soukromí. [2] [6]
Jeden příjem má Anna označený jako výplatu, druhý jako dar. Když je utratí společně, pozorovatel blockchainu získá vodítko, že spolu souvisejí. Není to důkaz, že všechny vstupy patří jediné osobě: existují i společně sestavené transakce. Coin Control umožňuje vybírat konkrétní UTXO a štítky pomáhají pamatovat si jejich původ. Štítek je poznámka v peněžence, nikoli zpráva zapisovaná do blockchainu. BIP 329 popisuje přenos těchto poznámek i informace o tom, zda peněženka považuje určitý výstup za použitelný k utracení. Jde o její vlastní nastavení, které nemění pravidla bitcoinové sítě. Tento formát sám peníze nevybírá. Export štítků může prozradit citlivé souvislosti a ani platba bez vratky nezaručuje anonymitu. [4] [6]
Zobrazený zůstatek nemusí být celý okamžitě použitelný. Některé výstupy peněženka záměrně vyřadila, jiné čekají na potvrzení nebo splnění podmínek utracení. Výběr navíc musí respektovat limity velikosti a váhy transakce. U nepotvrzeného příjmu nová platba závisí na dřívější transakci, která jej vytvořila; té se v této souvislosti říká předek. K potvrzení celé návaznosti může být potřeba vyšší poplatek. Rozhraní RPC, kterým programy ovládají Bitcoin Core 29.0, má v příkazu walletcreatefundedpsbt volbu include_unsafe. Ta dovolí zahrnout i rizikové nepotvrzené vstupy. Pokud je původní transakce nahrazena tak, že potřebný výstup přestane existovat, navazující platba se nemůže potvrdit. Samotné dočasné odstranění původní transakce z paměti uzlu však její platnost nemění. [3] [5]
Jak peněženka mezi možnostmi hledá? Branch-and-bound, zkráceně BnB, zkouší kombinace vstupů a opouští větve hledání, které nemohou vést k vhodnému výsledku. Cílem je sestavit platbu bez samostatného výstupu vratky. Nemusí jít o přesnou shodu: povolené rozmezí zahrnuje i přebytek až do nákladů na vytvoření a pozdější utracení vratky. Tento přebytek se stane poplatkem, nezůstane někde schovaný v peněžence. Proto platba bez vratky nemusí být absolutně nejlevnější. Hledání má omezený počet pokusů a nemusí najít existující řešení ani nejlepší ze všech možností. [2]
Bitcoin Core 29.0 porovnává návrhy z algoritmů BnB, Knapsack a Single Random Draw (SRD). Jsou to různé postupy hledání vhodné kombinace vstupů. CoinGrinder přidává při efektivní sazbě vyšší než trojnásobek dlouhodobé sazby; tento postup hledá kombinaci s malou vahou a vratkou. Výsledné kandidáty porovnává pomocí výše vysvětleného waste metric. Pokud uživatel nechá poplatek odečíst z částek pro příjemce, BnB se vynechává. Jde o popis této konkrétní verze, nikoli návod, jak musí pracovat každá peněženka, ani tvrzení o nejnovějším vydání. [3]
Pro běžnou platbu nepotřebujete znát programové parametry. Před podpisem ale vždy potřebujete rozumět příjemci, částce, celkovému poplatku a vlastní vratce. Pro pokročilé: walletcreatefundedpsbt v Bitcoin Core 29.0 dovoluje určit vstupy dvojicí txid, tedy identifikátorem původní transakce, a vout, pořadovým číslem jejího výstupu. add_inputs řídí, zda peněženka smí doplnit další vstupy. Pozor na rozdílné jednotky: fee_rate používá sat/vB, zatímco feeRate používá BTC/kvB, tedy bitcoiny za 1000 virtuálních bajtů. Výsledkem je PSBT, formát pro předávání připravované transakce k podpisu. Samotné vytvoření PSBT nic neodesílá a není potvrzením platby. Ruční výběr ani tento formát nezaručují správnost příjemce nebo platnost nepotvrzených vstupů. [5]
Pro nejúplnější obraz čtěte toto heslo společně s UTXO, Coin Control, Change Address, Fee Rate, PSBT, Soukromí v Bitcoinu. Opačným směrem na něj odkazují také Watch-only Wallet, Change Address, Inventing Bitcoin.