Tento týden přinášíme popis návrhu nového protokolu spravovaného joinpoolu a souhrn nápadu na přeposílání transakcí pomocí protokolu Nostr. Též nechybí další příspěvek do naší krátké týdenní série o pravidlech mempoolu a naše pravidelné rubriky se souhrnem zajímavých otázek a odpovědí z Bitcoin Stack Exchange, seznamem nových softwarových vydání a popisem významných změn v populárních páteřních bitcoinových projektech.

Novinky

  • Přeposílání transakcí po Nostru: Joost Jager zaslal do emailové skupiny příspěvek se žádostí o poskytnutí zpětné vazby k nápadu Bena Carmana navrhující použít protokol Nostr k přeposílání transakcí, které mají potíže s propagací v bitcoinové P2P síti.

    Konkrétně se Jager zamýšlí nad možností použít Nostr pro přeposílání balíčků transakcí, jako je například přeposílání rodičovské transakce s příliš nízkým jednotkovým poplatkem spolu s jejím potomkem, který by svým poplatkem rodiče kompenzoval. To by učinilo CPFP spolehlivějším a efektivnějším pro navyšování poplatků. Tato schopnost se nazývá přeposílání balíčků („package relay”) a vývojáři Bitcoin Core již pracují na její implementaci pro P2P síť. Revizi návrhu a implementace přeposílání balíčků ztěžuje nutnost ujistit se, že nepřinesou nové možnosti odepření služby (DoS) jednotlivým uzlům ani těžařům (nebo obecně celé síti).

    Jager též poznamenal, že přeposílající servery Nostru mají možnost snadno používat jiné druhy ochrany proti DoS, jako např. požadavek malé platby. To by mohlo učinit přeposílání balíčků či jiných alternativních transakcí praktické, i kdyby zlomyslné transakce nebo balíčky vedly k drobnému plýtvání zdroji.

    V Jagerově příspěvku nechybí odkaz na video, ve kterém tuto funkci předvádí. Jeho příspěvek obdržel v době psaní pouze několik reakcí, byť pozitivních.

Čekání na potvrzení 3: aukce blokového prostoru

Krátká týdenní série o přeposílání transakcí, začleňování do mempoolu a výběru transakcí k těžbě včetně vysvětlení, proč má Bitcoin Core přísnější pravidla, než co je povoleno konsenzem, a jak mohou peněženky využít pravidla co nejefektivněji.

Minulý týden jsme zmínili, že transakce neplatí poplatky dle přenášené hodnoty, ale za použitý prostor v bloku. Také jsme vysvětlili, že těžaři vybírají transakce takový způsobem, aby poplatky činily co největší částku. Vyplývá z toho, že v nově nalezeném bloku jsou potvrzeny pouze transakce z vrcholu mempoolu. V tomto příspěvku popíšeme strategie optimalizace poplatků. Předpokládáme, že máme vyhovující zdroj odhadu výše jednotkového poplatku (příští týden si povíme více o odhadování jednotkového poplatku).

Během konstrukce transakcí jsou některé její součásti flexibilnější než jiné. Každá transakce musí mít hlavičku, výstupy (určené jednotlivými platbami) a výstup pro drobné. Odesílatel i příjemce by měli upřednostňovat takové typy výstupů, které jsou efektivní z hlediska využitého prostoru, aby snížili budoucí náklady na utracení svých výstupů. Konečnou podobu a váhu však dává transakci výběr vstupů. Jelikož transakce mezi sebou soutěží jednotkovým poplatkem (poplatek / váha), lehčí transakce vyžadují k dosažení stejného jednotkového poplatku nižší celkový poplatek.

Některé peněženky, například Bitcoin Core, se snaží zkombinovat vstupy takovým způsobem, aby se zcela vyhnuly nutnosti vytvářet výstup s drobnými. To vede nejen ke snížení váhy nyní, ale také ke snížení budoucích nákladů utracení tohoto výstupu. Bohužel takové kombinace vstupů jsou jen zřídka možné, pokud peněženka nemá k dispozici velké množství UTXO s různorodými částkami.

Moderní druhy výstupů jsou prostorově efektivnější než starší typy. Například utracení P2TR vstupu přispěje méně než dvěma pětinami váhy P2PKH vstupu (viz kalkulátor velikosti transakce). Multisig peněženky mohou těžit z nedávno dokončeného schématu MuSig2 a protokolu FROST, díky kterým mohou být multisig operace kódovány způsobem, který připomíná běžný vstup s jedním podpisem. Peněženky používající moderní druhy výstupů mohou obzvláště v době vysoké poptávky po blokovém prostoru dosáhnout vysokých úspor.

Přehled vah vstupů a výstupů

Chytré peněženky mění strategii výběru na základě jednotkového poplatku: při vyšších jednotkových poplatcích dosahují použitím méně vstupů a moderních druhů vstupů nejnižší možnou váhu pro danou množinu vstupů. Vybírat pokaždé nejlehčí množinu vstupů by sice minimalizovalo náklady na tuto aktuální transakci, ale také by štěpilo zásobu UTXO na malé fragmenty. To by si později mohlo vynutit transakce s příliš velkou množinou vstupů v době s vysokým jednotkovým poplatkem. Je tedy prozíravé, aby peněženky v dobách s nízkým jednotkovým poplatkem také vybíraly více těžších vstupů, aby dosáhly konsolidace prostředků do menšího množství moderních výstupů a tím se připravily na pozdější vysokou poptávku po blokovém prostoru.

Vysoce používané peněženky často slučují několik plateb do jediné transakce, aby dosáhly snížení váhy transakce na platbu. Vyhnou se tak platbě za hlavičku a výstup pro drobné za každou platbu; namísto toho všechny platby sdílí tento náklad pouze jednou. Sloučení několika málo plateb rychle snižuje náklady za platbu:

Úspory za sloučení plateb v P2WPKH

I když mnoho peněženek jednotkový poplatek nadsazuje, někdy transakce čeká na potvrzení déle, než se plánovalo. V takových případech může odesílatel nebo příjemce změnit transakci prioritu.

Uživatelé mají zpravidla k dispozici dva nástroje, které jim pomohou navýšit prioritu transakce: CPFP (child pays for parent, potomek platí za předka) a RBF (replace by fee, nahrazení poplatkem). V případě CPFP utrácí uživatel svůj výstup, aby tím vytvořil potomka této transakce, který bude mít vyšší jednotkový poplatek. V minulém příspěvku jsme si vysvětlili, že je v zájmu těžařů vybrat rodičovskou transakci do bloku, aby mohl být začleněn i její potomek s vysokým poplatkem. CPFP je dostupné každému, komu je platba v transakci směrována, čili buď příjemce nebo odesílatel (pokud vytvořil i výstup pro drobné).

V případě RBF připraví odesílatel transakci s vyšším jednotkovým poplatkem, která nahradí transakci původní. Nahrazující transakce musí použít alespoň jeden vstup shodný s původní transakcí; tento konflikt zaručí, že pouze jediná z těchto dvou transakcí bude začleněna do blockchainu. Obvykle tato nahrazující transakce obsahuje platby z původní transakce, ale odesílatel by též mohl prostředky přesměrovat jinam či zkombinovat platby z více transakcí do jedné. V minulém příspěvku jsme popsali, že uzly vyloučí původní transakci z mempoolu, neboť je pro ně výhodnější začlenit nahrazující transakci.

I když je poptávka i produkce blokového prostoru mimo naši kontrolu, mají peněženky k dispozici mnoho prostředků, kterými mohou dosáhnout efektivního využití blokového prostoru. Peněženky mohou ušetřit na poplatcích vytvářením lehčích transakcí eliminací výstupu pro drobné, utrácením nativních segwit výstupů a defragmentací svého UTXO setu v době nízkých poplatků. Peněženky, které podporují CPFP a RBF, mohou také začít s konzervativnějším jednotkovým poplatkem a bude-li potřeba, mohou transakci pomocí CPFP nebo RBF navýšit prioritu.

Vybrané otázky a odpovědi z Bitcoin Stack Exchange

Bitcoin Stack Exchange je jedním z prvních míst, kde hledají přispěvatelé Optechu odpovědi na své otázky a kde – najdou-li volnou chvíli – pomáhají zvědavým či zmateným uživatelům. V této měsíční rubrice nabízíme některé z otázek a odpovědí, které obdržely vysoký počet hlasů.

Vydání nových verzí

Vydání nových verzí oblíbených páteřních bitcoinových projektů. Prosíme, zvažte upgrade či pomoc s testováním.

  • Bitcoin Core 25.0 je vydáním další hlavní verze Bitcoin Core. Vydání přidává nové RPC volání scanblocks, zjednodušuje používání bitcoin-cli, přidává do volání finalizepsbt podporu miniscriptu, ve výchozím nastavení snižuje paměťové nároky s aktivovanou volbou blocksonly a zrychluje reskenování peněženky po aktivaci kompaktních filtrů bloků a další nové funkce, zlepšení výkonnosti a opravy chyb. Další podrobnosti lze najít v poznámkách k vydání.

Významné změny v kódu a dokumentaci

Významné změny z tohoto týdne v Bitcoin Core, Core Lightning, Eclair, LDK, LND, libsecp256k1, Hardware Wallet Interface (HWI), Rust Bitcoin, BTCPay Server, BDK, Bitcoin Improvement Proposals (BIPs), Lightning BOLTs a Bitcoin Inquisition.

  • Bitcoin Core #27469 zrychluje prvotní stahování bloků (IBD, „Initial Block Download”), pokud jsou používány peněženky. S touto změnou budou transakce peněženky v bloku skenovány jen, pokud byl blok vytěžen po vzniku peněženky.

  • Bitcoin Core #27626 povoluje spojení, které náš uzel požádalo o poskytování přeposílání kompaktních bloků ve velkokapacitním režimu, vyžádat až tři transakce z posledního bloku, o kterém jsme toto spojení informovali. Náš uzel pošle odpověď, i když jsme jim kompaktní blok neposkytli. To umožní spojení, které obdrží kompaktní blok od jiného svého spojení, vyžádat od nás kteroukoliv chybějící transakci. To může být užitečné, pokud ono jiné spojení nereaguje. Naše spojení může díky tomu validovat blok rychleji, a tak jej může dříve použít v časově kritických funkcích, jako je těžba.

  • Bitcoin Core #25796 přidává nové volání descriptorprocesspsbt, které může být použito k přidání informací do PSBT, které jim později usnadní podepsání nebo finalizování. Deskriptor předaný tomuto volání se použije k získání informací z mempoolu a množiny UTXO (a také kompletní potvrzené transakce, pokud má uzel aktivovánu volby txindex). Obdržené informace budou posléze použity k doplnění PSBT.

  • Eclair #2668 zabraňuje Eclairu pokoušet se zaplatit za nárokování HTLC větší poplatky, než kolik činí hodnota tohoto HTLC.

  • Eclair #2666 umožňuje vzdálenému spojení přijímajícímu HTLC jej akceptovat, i kdyby potřebný poplatek za transakci snížil zůstatek na straně spojení pod minimální rezervu kanálu. Rezerva kanálu existuje, aby spojení ztratilo alespoň malé množství peněz v případě pokusu o zavření kanálu se starým stavem. Avšak akceptuje-li spojení HTLC, které mu v případě úspěšného vyřešení platí, budou mít více než je rezerva. A v případě neúspěchu budou mít stejně jako před HTLC.

    Jedná se o řešení problému uvízlých prostředků, který se objevuje, když by strana zodpovědná za placení poplatku musela platit větší hodnotu, než je její aktuální zůstatek, i když je tato strana příjemcem prostředků. Předchozí diskuzi o tomto problému lze nalézt ve zpravodaji č. 85.

  • BTCPay Server 97e7e počíná nastavovat BIP78 parametr minfeerate (minimální jednotkový poplatek) pro payjoin platby. Viz též hlášení o chybě, které vedlo k této změně.

  • BIPs #1446 činí drobou změnu a několik přídavků do BIP340, specifikace Schnorrových podpisů pro bitcoinové protokoly. Změna povoluje, aby podepisovaná zpráva měla libovolnou délku (předchozí verze vyžadovaly 32 bytů). Viz související změna v knihovně Libsecp256k1 popsaná ve zpravodaji č. 157. Změna nemá dopad na způsob používání BIP340 v aplikacích, neboť podpisy používané v taprootu i tapscriptu (BIP 341, resp. 342) používají 32bytové zprávy.

    Přidán byl popis efektivního použití zpráv o libovolné délce a doporučení o používání hashovaných tagovaných prefixů. Též poskytuje doporučení pro zvýšení bezpečnosti během používání stejného klíče v různých doménách (např. podepisování transakcí vs. podepisování prostého textu).