/ home / newsletters /
Zpravodaj „Bitcoin Optech” č. 406
Zpravodaj tento týden odkazuje na diskuzi o aktualizaci obecného formátu podepsaných zpráv (BIP322) a popisuje nápad na používání TCP hole punchingu pro umožnění příchozích spojení bitcoinovým uzlům za NATem. Též nechybí naše pravidelné rubriky s popisem nedávných změn ve službách a klientském software a se souhrnem významných změn v populárním bitcoinovém páteřním software.
Novinky
-
● Významné změny BIP322: obecného formátu podepsaných zpráv: Oliver Gugger zaslal do emailové skupiny Bitcoin-Dev příspěvek o svém nápadu na doplnění BIP322. Během práce na přidání podpory do btcd si Gugger všiml v návrhu několika otevřených otázek a mezer. Navrhl tři významné úpravy:
-
Čitelné prefixy pro rozlišení všech tří variant podpisů.
-
Přidání informací o UTXO do varianty „Proof of Funds” (dokladu o prostředcích).
-
Podporu podepisování zpráv založeného na PSBT.
Po diskuzi a vypořádání zpětné vazby ohledně konstrukce PSBT byla tato aktualizace BIP322 zveřejněna (viz zpravodaj č. 405). Gugger změnil stav BIPu na Complete, čímž dal najevo, že je specifikace nyní považovaná za stabilní a připravená k implementaci. Po aktualizaci se ukázalo, že Coldcard již podporu pro BIP322 přidal v březnu.
Projekty, které již implementovaly podporu dřívějších verzí BIP322, by měly soulad s aktualizovanou specifikací prověřit, jelikož přinesla nekompatibilní změny, včetně nového čitelného prefixu a změněného formátu podpisu dokladu o dostupných prostředcích.
-
-
● TCP hole punching pro bitcoinové uzly za NATem: 0xB10C zaslal do fóra Delving Bitcoin příspěvek o nápadu na zpřístupnění většího množství uzlů za domácím NATem. Původní myšlenka vychází z pozorování, že volba
-natpmp=1, která je od Bitcoin Core v30.0 výchozí, nenavýšila počet dosažitelných uzlů z rezidenčních ISP, jak bylo očekáváno.Tento nápad využívá hole punching („děrování”), techniku, která dvěma stranám za určitými druhy NATu umožňuje přímé spojení bez přeposílání přes nějaký server. Proces funguje následovně: strany Alice a Bob, které nejsou přímo dosažitelné, si vymění své veřejné body (IP adresu a port) pomocí třetí strany a zároveň k sobě zahájí spojení. Tím se vytvoří v NATu mapování, které oběma stranám umožní kompletně navázat spojení. Jelikož tato navrhovaná technika funguje nad TCP, které vyžaduje přesnou synchronizaci mezi uzly, produkuje větší množství chyb ve srovnání s podobnými technikami používajícími UDP.
0xB10C zmínil několik přístupů k implementaci použitím bitcoinového P2P protokolu. První sada vyžaduje přemostění, označované jako styčný (rendezvous) server, které Alici a Bobovi umožní vyměnit si informace o kontaktním bodu. Server by mohl buď nabídnout službu hledání protistrany, která by nedosažitelným uzlům umožnila nabídnout své sloty pro připojení, nebo by se mohl rozhodnout předat jedno ze svých existujících spojení jinému peer spojení, aby ho nemusel vyloučit kvůli chybějícímu volnému příchozímu slotu. Dále popsal způsob provádění hole punchingu napřímo přes Tor/I2P, čímž by obešel nutnost používat pro navázání spojení server třetí strany. Tímto způsobem by mohla Alice začít poslouchat na vyhrazené Tor/I2P službě, ke které by se Bob připojil a začal tak proces hole punchingu.
Návrh ještě nebyl formalizován a zbývá zodpovědět mnoho otázek. 0xB10C požádal komunitu o zpětnou vazbu a vyzval k diskuzi ohledně mnoha otevřených otázek, mezi kterými jsou klasifikace takových spojení, spolehlivost TCP hole punchingu, možné útoky a snahy o implementaci.
Změny ve službách a klientech
V této měsíční rubrice upozorňujeme na zajímavé aktualizace bitcoinových peněženek a služeb.
-
● Ohlášena peněženka Ibis Wallet: Ibis Wallet je peněženka pro Android postavená nad BDK. Podporuje kontrolu mincí, správu poplatků pomocí RBF a CPFP, multisig, integraci s hardwarovými podpisovými zařízeními pomocí QR kódů, tiché platby a Tor. Též podporuje dodatečné systémy druhé vrstvy jako Spark, Liquid či v budoucnu Ark.
-
● Ohlášen LDK Server: Spiral ohlásil LDK Server, lightningový uzel určený primárně pro API volání a postavený nad LDK Node, sloužící platebním procesorům a poskytovatelům peněženek. Nabízí gRPC rozhraní, vestavěnou peněženku (BDK) a MCP server pro interakci AI agentů.
-
● Vydán Mempool.space v3.3.0: Mempool v3.3.0 přidává vizualizaci taprootových stromů skriptů, upravuje náhledy PSBT, vylepšuje odhad poplatků, podporu dočasného prachu, porovnání zastaralých bloků, ikony sighashů, API pro Merkleovy doklady a další.
-
● Nástroj pro monitorování P2P peer-observer: 0xB10C vyjmenovává některé open-source komponenty, které jeho peer-observer používá, včetně infrastruktury pro extrahování událostí z uzlů Bitcoin Core pomocí IPC, logů, P2P a RPC. Dále popisuje probíhající vývoj kolem archivace, detekce anomálií a nástrojů pro upozorňování.
Významné změny kódu a dokumentace
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, Lightning BLIPs, Bitcoin Inquisition a repozitáři BINANA.
-
● Bitcoin Core #29136 přidává RPC volání
addhdkey, které importuje daný rozšířený soukromý klíč dle BIP32 nebo ho generuje, pokud žádný klíč předán nebyl. Přitom negeneruje žádné výstupní skripty. To peněžence umožní uložit klíče pro podepisování pro budoucí použití (např. pro multisig skripty), aniž by bylo nutné z nich generovat adresy. PR dále přidává nový typ deskriptoruunused(KEY), který vracílistdescriptors. Uložené klíče tak mohou být součástí záloh peněženky. -
● Bitcoin Core #34893 mění chování RPC volání
combinepsbt, aby při kombinování PSBT zachovávalo proprietární pole dle BIP174 (viz zpravodaje č. 72 a č. 181, oba angl.). Dříve příkaz tato pole tiše zahodil, což vyústilo ve ztrátu aplikačních metadat. RPCdecodepsbttato pole řádně parsuje, serializuje i zobrazuje. -
● Bitcoin Core #34860 odstraňuje z metody
CreateNewBlock()(viz zpravodaj č. 392) volbuinclude_dummy_extranonce. Bitcoin Core nově vždy falešnou výplň připojí k internímu scriptSig mincetvorné transakce bloků 0 až 16, jelikož u nich je indikovaná výška dle BIP34 příliš krátká a nevyhovuje konsenzu. Tato výplň však není obsažena v poliscriptSigPrefixstrukturyCoinbaseTx, která je vystavena klientům Stratum V2 připojeným pomocí Mining IPC rozhraní (viz zpravodaje č. 310 a č. 388). -
● Bitcoin Core #31298 mění RPC volání
combinerawtransaction. Nově bude odmítat nesouvisející transakce namísto tichého vrácení první z nich bez hlášení. Bitcoin Core nyní z každé transakce odstraní vstupní scriptSig a witnessy, porovná haše výsledných nepodepsaných transakcí a vrátí chybovou hlášku, pokud si neodpovídají. -
● Bitcoin Core #28802 přidává do
ArgsManageru, parseru argumentů příkazové řádky Bitcoin Core, podporu pro volby konkrétních příkazů. Příkazy mohou nově deklarovat, které volby přijímají, cožArgsManageru umožňuje ve výstupu nápovědy vyjmenovat jen ty volby, které se příkazu týkají. Též může automaticky odmítnout nevalidní kombinace voleb. PR aplikuje tento mechanismus na volbu-dumpfilenástrojebitcoin-wallet(viz zpravodaj č. 32, angl.); tato volba je nyní registrována pouze pro příkazydumpacreatefromdump. -
● Eclair #3298 mění interní logiku RBF, aby byla v souladu s novým pravidlem navyšování poplatků dle BOLT2. Toto pravidlo bylo navrženo, aby zajistilo soulad s pravidly z BIP125 během období s nízkými jednotkovými poplatky. Dříve Eclair pouze aplikoval činitel 25/24, nově používá dodatečných 25 sat/kw, pokud je větší než činitel. Tím se dostává do souladu s chováním LDK (zpravodaj č. 400) a BOLT specifikací (zpravodaj č. 404).
-
● LDK #4575 přidává API
splice_in_inputs, které uživatelům umožňuje manuálně zvolit UTXO během přidávání prostředků do kanálu pomocí splicingu. Zvolená UTXO jsou kompletně zkonzumována, celá jejich hodnota (mínus poplatky) je přidána do kanálu a není vytvořen žádný výstup se zbytkem. Tato funkce doplňuje stávající možnost přidat určitou částku zvolenou uživatelem, kdy peněženka vhodné vstupy vybere sama. Tyto dvě možnosti nemohou být použity najednou. -
● LND #10814 odstraňuje zastaralé příkazy
SendPayment,SendPaymentSync,SendToRoute,SendToRouteSyncaTrackPayment, které byly naplánovány k odstranění ve verzi 0.21 (viz zpravodaj č. 340). Volající by měli používat tyto V2 náhrady:SendPaymentV2,SendToRouteV2aTrackPaymentV2. PR dále odstraňuje zastaralé poleoutgoing_chan_id, náhradou jeoutgoing_chan_ids(viz zpravodaj č. 33, angl.). -
● Rust Bitcoin #6191 přidává podporu pro kódování a dekódování P2P zprávy
sendtxrcnclpoužívané pro synchronizaci transakcí v Erlay. Bitcoin Core přidal podporu pro tuto zprávu v rámci Erlay podpory (viz zpravodaj č. 223, angl.). Plná podpora synchronizace transakcí ještě není implementována. -
● BLIPs #42 přidává BLIP42, specifikaci BOLT12 kontaktů. Jelikož mohou být BOLT12 nabídky opakovaně používány jako statické instrukce pro lightningové platby, mohou je peněženky ukládat jako kontakty. BLIP definuje volitelné pole
invoice_request, které může plátce připojit k odcházející platbě např. pro předání tajného kódu, vlastní nabídky nebo BIP353 jména. To příjemcům umožní rozpoznat platby od známých kontaktů, přidat nové kontakty a poslat prostředky zpět plátci bez nutnosti další interakce.
Chcete víc?
Další diskuze o tématech zmíněných v tomto zpravodaji proběhnou v týdenním Bitcoin Optech Recap na Riverside.fm dne 26. 5. v 16:30 UTC. Diskuze jsou nahrávány a zpřístupněny na stránce našeho podcastu.