/ home / newsletters /
Zpravodaj „Bitcoin Optech” č. 340
Zpravodaj tento týden oznamuje opravenou zranitelnost postihující LDK,
shrnuje diskuzi o gossipu s nulovou znalostí pro oznamování LN kanálů,
popisuje objevení starších studií, které mohou být použité pro hledání
optimální linearizace clusterů, poskytuje aktualizaci vývoje protokolu
Erlay, který má snížit síťové nároky přeposílání transakcí, nahlíží na
kompromisy mezi různými skripty pro implementaci LN dočasných anchorů,
sdílí návrh na emulaci opkódu OP_RAND
způsobem zachovávajícím soukromí
a bez nutnosti změn konsenzu a poukazuje na obnovenou diskuzi o snížení
minimálního transakčního poplatku.
Novinky
-
● Zranitelnost LDK během vynuceného zavření kanálu: Matt Morehouse zaslal do fóra Delving Bitcoin příspěvek s ohlášením zranitelnosti postihující LDK, kterou zodpovědně nahlásil a která byla opravena v LDK verzi 0.1.1. Podobně jako v případě jiné nedávno zveřejněné zranitelnosti LDK (viz zpravodaj č. 339), i zde smyčka v kódu LDK skončila, jakmile vyřešila první neobvyklý případ, aniž by pokračovala řešením dalších případů stejného druhu. V tomto případě to mohlo vést k neúspěšnému urovnání čekajících HTLC v otevřených kanálech, načež byla poctivá protistrana donucena zavřít kanály a urovnat tak HTLC onchain.
Zřejmě to k přímé krádeži vést nemohlo, ale oběť musela platit poplatky za zavření kanálů, za otevření nových kanálů a nemohla vydělávat na poplatcích za přeposílání.
Morehouseův kvalitní příspěvek zabíhá do dalších podrobností a navrhuje, jak by bylo možné v budoucnosti podobným chybám předejít.
-
● Gossip s nulovou znalostí pro oznamování LN kanálů: Johan Halseth zaslal do fóra Delving Bitcoin příspěvek s popisem rozšíření navrhovaného protokolu oznamování kanálů 1.75, který by ostatním uzlům umožnil ověřit, že za kanálem stojí skutečná otevírací transakce (čímž je možné zabránit několika laciným druhům DoS), avšak bez nutnosti odhalit, které UTXO otevírací transakci tvoří, což pozitivně dopadá na soukromí. Halsethovo rozšíření staví na jeho předchozím výzkumu (viz zpravodaj č. 321), který používá utreexo a systém dokladů s nulovou znalostí (zero-knowledge proof system, ZK). Byl by použit s jednoduchými taprootovými kanály založenými na MuSig2.
Diskuze se soustředila na kompromisy mezi Halsethovou myšlenkou, pokračujícím používáním veřejného gossipu a jinými metodami generování ZK dokladů. Mezi vyjádřené obavy patří zajištění, aby mohly všechny LN uzly doklady rychle ověřovat, a složitost systému dokladů a ověřování, neboť bude muset být implementován všemi LN uzly.
Diskuze v době psaní nadále probíhala.
-
● Objevení staršího článku užitečného pro hledání optimální linearizace clusterů: Stefan Richter zaslal do fóra Delving Bitcoin příspěvek, ve kterém odkazuje na vědecký článek z roku 1989, který nalezl. Článek obsahuje algoritmus (a důkaz), který může být použit k efektivnímu nalezení podmnožiny s nejvyšším jednotkovým poplatkem ve skupině transakcí, která zůstane topologicky validní, bude-li tato podmnožina začleněna do bloku. Též nalezl implementaci v C++ několika algoritmů řešících podobné problémy, které „by měly být v praxi ještě rychlejší.”
Předchozí práce na mempoolu clusterů se soustředila na zjednodušování a zrychlování porovnávání různých linearizací, aby mohla být použita ta nejlepší. Díky tomu by mohl být používán rychlý algoritmus k okamžité linearizaci clusteru a pomalejší – avšak optimálnější – algoritmus by mohl běžet v okamžiku, kdy by procesor nebyl využit naplno. Pokud by však tento algoritmus z roku 1989 (nebo jiný) řešící problém uzávěru s maximálním poměrem vah (maximum-ratio closure problem) běžel dostatečně rychle, mohl by být používán ve všech případech. I kdyby byl mírně pomalejší, mohl by být používán jako algoritmus, který běží v období s dostupnými procesorovými cykly.
Pieter Wuille odpověděl s nadšením a několika dalšími otázkami. Dále popsal nový algoritmus linearizace clusterů, který pracovní skupina zabývající se mempoolem clusterů vyvíjí. Tento nový algoritmus vychází z diskuze z Bitcoin Research Week, jejímiž účastníky byli Dongning Guo a Aviv Zohar. Převádí tento problém na jiný, který lze řešit lineárním programováním a který se jeví být rychlým a snadno implementovatelným a navíc vrací optimální linearizaci – pokud je konečný. Chybí však ještě dokázat, že algoritmus konečný je a že skončí v rozumném čase.
I když se to přímo bitcoinu netýká, přišel nám zajímavý Richterův popis, jak pomocí LLM od DeepSeek článek z roku 1989 nalezl.
V době psaní zpravodaje diskuze stále probíhala a byly zkoumány další články o této doméně. Richter napsal: „zdá se, že náš problém, nebo spíše jeho obecné řešení, které se nazývá parametrický minimální řez s monotónními kapacitami mezi zdrojem a stokem (source-sink-monotone parametric min-cut), má použití v agregaci polygonů při zjednodušování map a v počítačovém vidění.”
-
● Novinky u Erlay: Sergi Delgado popsal v několika příspěvcích do fóra Delving Bitcoin výsledek roční práce implementování Erlay v Bitcoin Core. Začíná přehledem, jak funguje současné přeposílání transakcí (tzv. fanout, přibližně „rozvíření” či „rozvětvení”) a jaké jeho změny Erlay navrhuje. Poznamenává, že nějaký fanout zůstane i v síti, kde každý uzel Erlay podporuje, neboť „fanout je účinnější a výrazně rychlejší než synchronizace množin (set reconciliation), pokud přijímající uzel oznamovanou transakci nezná.“
Používání kombinace fanoutu a synchronizace vyžaduje vybrat, kdy použít kterou metodu a se kterými spojeními. Jeho výzkum se tedy soustředí na hledání optimálního výběru:
-
● Filtrování na základě znalosti transakce zkoumá, zda by měl uzel mezi spojení pro fanout zahrnout i taková, která transakci již určitě mají. Například: náš uzel má deset spojení a tři z nich nám již oznámila nějakou transakci. Pokud chceme náhodně zvolit tři další spojení pro fanout této transakce, měli bychom vybírat ze všech deseti spojení nebo jen těch sedmi, která nám tuto transakci neoznámila? Simulace překvapivě odhalily, že „mezi těmito volbami není výrazný rozdíl.” Delgado tento překvapivý výsledek zkoumal a usoudil, že by měla být zvažována všechna spojení (čili žádné filtrování).
-
● Kdy vybírat kandidáty pro fanout zkoumá, kdy by měl uzel vybírat spojení pro fanout transakce (zbytek použije synchronizaci pomocí Erlay). Uvažuje se nad dvěma možnostmi: krátce po validaci nové transakce a přidání do fronty pro přeposlání nebo když nastane čas pro přeposlání transakce (uzly neodesílají transakce okamžitě; pro ztížení odhadování topologie sítě a pro ochranu soukromí původce transakce čekají náhodou dobu). Výsledky simulace opět ukázaly, že „neexistuje významný rozdíl,” i když „rozdíly mohou nastat v síti s částečnou podporou Erlay.”
-
● Kolik spojení by mělo obdržet fanout zkoumá míru fanoutu. Vyšší míra urychluje propagaci transakcí, ale snižuje úsporu přenosového pásma. Kromě míry fanoutu testoval Delgado též zvyšování počtu odchozích spojení, což je jeden z cílů nasazení Erlay. Simulace ukazuje, že aktuální přístup v Erlay snižuje využití přenosového pásma zhruba o 35 % při současném počtu odchozích spojení (osm) a 45 % při 12 odchozích spojeních. Latence se však zvyšuje zhruba o 240 %. Příspěvek na grafech zobrazuje další konfigurace a jejich kompromisy. Výsledky simulace budou užitečné nejen pro výběr parametrů, ale podle Delgada též pro hodnocení alternativních algoritmů pro fanout, které mohou nabídnout příznivější kompromisy.
-
● Míra fanoutu dle způsobu obdržení transakce zkoumá, zda by měla být míra fanoutu upravena podle toho, jestli byla transakce obdržena přes fanout nebo synchronizaci. A pokud by upravena být měla, jakým způsobem? Fanout je rychlejší a účinnější během počátku života přeposílané transakce, ale plýtvá přenosovým pásmem, když už transakce dosáhne většinu uzlů. Neexistuje možnost, jak by mohl uzel přímo určit, kolik jiných uzlů transakci již vidělo. Avšak pokud spojení, které mu transakci poslalo jako první, použilo fanout a nečekalo na další kolo synchronizace, jedná se zřejmě o transakci v rané fázi propagace. Tato data mohou být použita k mírnému navýšení vlastní míry fanoutu pro tuto konkrétní transakci a tím jí pomoci k rychlejší propagaci. Delgado tuto myšlenku simuloval a našel upravený poměr fanoutu, který snižuje čas propagace o 18 %, ale zvyšuje využití přenosového pásma pouze o 6,5 % oproti kontrolní simulaci, ve které použil stejnou míru fanoutu pro všechny transakce.
-
-
● Kompromisy dočasných anchor skriptů v LN: Bastien Teinturier zaslal do fóra Delving Bitcoin příspěvek s žádostí o názory, které dočasné anchor skripty by měly nahradit existující anchor výstupy jako jeden z výstupů LN commitment transakcí založených na TRUC. Použitý skript určuje, kdo a za jakých podmínek může commitment transakci zaplatit navýšení poplatku pomocí CPFP. Představil čtyři možnosti:
-
Pay-to-anchor (P2A) skript: ten zanechává onchain minimální stopu, avšak kvůli němu zřejmě skončí veškerý přebytek hodnoty ořezaných HTLC u těžařů (jako je tomu dnes).
-
Anchor s klíčem jednoho účastníka: umožní získat část hodnoty ořezaných HTLC účastníkovi, který je ochoten čekat několik desítek bloků, než bude moci peníze ze zavřeného kanálu použít. Každý, kdo vynuceně uzavírá kanál, musí čekat v jakémkoliv případě. Avšak ani jedna strana kanálu nemůže platbu poplatku delegovat na třetí stranu, aniž by jí nedaly možnost ukrást všechny prostředky kanálu. Pokud s protistranou soupeříte o získání přebytku, pravděpodobně stejně skončí u těžaře.
-
Anchor se sdíleným klíčem: též umožňuje získat přebytek hodnoty HTLC a umožňuje delegovat, ale ten, na kterého delegujete, může s vámi a s vaší protistranou soupeřit o nárokování přebytku hodnoty. V případě soupeření zřejmě opět připadne přebytek hodnoty těžařovi.
-
Anchor s duálním klíčem: každý účastník má možnost nárokovat přebytek hodnoty ořezaných HTLC bez čekání. Avšak delegování není možné. Obě strany kanálu spolu stále mohou soupeřit.
V odpovědích Gregory Sanders poznamenal, že v různých případech lze používat různá schémata. Například P2A by mohlo být použito, když nejsou žádná ořezaná HTLC. V ostatních případech lze použít některý s anchorů s klíčem. Pokud by byla ořezaná hodnota nad hodnotou prachu, mohla by být namísto anchor výstupu přidána do commitment transakce. Dále varoval, že by to mohlo vytvořit „podivnou situaci, kdy by se protistrana mohla pokusit nakopnout ořezanou částku a sama si ji vzít.“ David Harding v pozdějším příspěvku toto téma rozšířil.
Antoine Riard varoval proti používání P2A kvůli riziku, že těžaři budou provádět pinning transakcí (viz zpravodaj č. 339).
V době psaní diskuze nadále probíhala.
-
-
● Emulace OP_RAND: Oleksandr Kurbatov zaslal do fóra Delving Bitcoin příspěvek o interaktivním protokolu, který dvěma stranám umožňuje vytvořit kontrakt platící způsobem, který ani jedna ze stran nemůže předvídat. V důsledku se tak jedná o náhodný způsob. Dřívější práce na bitcoinových pravděpodobnostních platbách používala pokročilé skripty, avšak Kurbatovův přístup využívá speciálně konstruované veřejné klíče, které vítězovi umožní utratit prostředky v kontraktu. Tento způsob nabízí větší soukromí a flexibilitu.
Optech nebyl schopen protokol analyzovat, ale žádných zřejmých problémů jsme si nevšimli. Doufáme, že se myšlence dostane další diskuze, neboť pravděpodobnostní platby mají několik aplikací, například mohou uživatelům umožnit poslat onchain částky, které by jinak byly neekonomické, jako např. u ořezaných HTLC.
-
● Diskuze o snížení minimálního poplatku pro přeposílání transakcí: Greg Tonoski zaslal do emailové skupiny Bitcoin-Dev příspěvek o snížení výchozího minimálního jednotkového poplatku pro přeposílání transakcí. Toto téma se opakovaně diskutuje (a Optech o něm přináší souhrny) od roku 2018, naposledy v roce 2022 (viz zpravodaj č. 212, angl.). Za zmínku stojí, že nedávno zveřejněná zranitelnost (viz zpravodaj č. 324) odhalila možný problém, který mohl postihnout uživatele a těžaře, kteří v minulosti toto nastavení snížili. Optech bude o případném pokračování diskuze informovat.
Diskuze o změnách konsenzu
Měsíční rubrika shrnující návrhy a diskuze o změnách pravidel bitcoinového konsenzu.
-
● Deterministický výběr transakcí a závazek k mempoolu: vlákno z dubna 2024 získalo minulý měsíc novou pozornost. Již dříve zaslal Bob McElrath příspěvek o tom, jak by se těžaři museli zavazovat k transakcím ve svém mempoolu a pouze tehdy by mohli do svých bloků zařadit transakce, které byly deterministicky vybrané z předchozích závazků. McElrath vidí dvě možnosti použití:
-
Globálně pro všechny těžaře: to by odstranilo „riziko a odpovědnost za výběr transakcí“ ve světě, kde jsou těžaři často velké korporace, které se musí podrobovat zákonům, regulacím a radám risk managerů.
-
Lokálně pro jeden pool: nabízí většinu výhod globálně deterministického algoritmu, ale k implementaci nevyžaduje žádné změny konsenzu. Navíc může ušetřit velké množství síťového provozu mezi účastníky decentralizovaného těžebního poolu, jako je Braidpool, jelikož tento algoritmus určuje, které transakce musí kandidát na blok obsahovat, proto jakýkoliv share vytvořený z tohoto bloku nemusí explicitně poskytovat žádná data transakcí ostatním účastníkům poolu.
Anthony Towns popsal několik potenciálních problémů s globální možností se změnou konsenzu: jakákoliv změna výběru transakcí by vyžadovala změnu konsenzu (a možná i hard fork) a žádná nestandardní transakce by neměla možnost vytěžení ani ve spolupráci s těžařem. Mezi změny pravidel z posledních několika let, které by vyžadovaly změnu konsenzu, patří: TRUC, upravená RBF pravidla a dočasné anchory. Towns odkázal na známý případ, ve kterém byly neúmyslně zaseknuty milióny dolarů v nestandardním skriptu a které pomohl vysekat kooperující těžař.
Zbytek diskuze se soustředil na lokální přístup, tak jak byl koncipován pro Braidpool. Neobjevily se žádné námitky a dodatečná diskuze k tématu algoritmu úpravy složitosti (viz následující položku v této rubrice) ukázala, jak by mohl být obzvláště užitečný pro pool, který vytváří bloky s mnohem větší kadencí než bitcoin a kde by determinismus výběru transakcí výrazně snížil síťové nároky, latenci a náklady na validaci.
-
-
● Rychlý algoritmus úpravy složitosti u DAG blockchainů: vývojář Zawy zaslal do fóra Delving Bitcoin příspěvek o algoritmu úpravy složitosti (difficulty adjustment algorithm, DAA) pro blockchain v podobě orientovaného acyklického grafu (directed acyclic graph, DAG). Algoritmus byl navržen pro použití v místním konsenzu mezi účastníky Braidpoolu (a ne pro globální bitcoinový konsenzus), avšak diskuze se opakovaně dotýkala i aspektů globálního konsenzu.
V bitcoinovém blockchainu zavazuje každý blok právě jednomu rodiči. Několik potomků může zavazovat stejnému rodiči, ale uzly budou za validní v nejlepším řetězci považovat pouze jeden z nich. V DAG blockchainu může každý blok zavázat jednomu nebo více rodičům a může mít nula nebo více potomků, které mu zavazují. V DAG blockchainu lze mít ve stejné generaci několik validních bloků v nejlepším blockchainu.
Navržený DAA se zaměřuje na průměrný počet rodičů v naposledy spatřených 100 validních blocích. Pokud se průměrný počet rodičů zvýší, algoritmus zvýší složitost; pokud je méně rodičů, složitost klesá. Dle Zawyho cíl dvou rodičů v průměru poskytuje nejrychlejší konsenzus. Na rozdíl od bitcoinového DAA nepotřebuje mít tento navrhovaný DAA pojem o čase, avšak vyžaduje, aby účastníci poolu ignorovali bloky, které obdrží mnohem později než ostatní bloky stejné generace; jelikož by jinak nebylo možné dosáhnout konsenzu, byly by nakonec DAG s více proof of work upřednostňovány před těmi s méně proof of work. Bob McElrath, author tohoto DAA, problém a možné řešení analyzoval.
Pieter Wuille napsal, že tento návrh se podobá nápadu z roku 2012 od Andrew Millera. Zawy souhlasil a McElrath přidá do svého článku citaci. Sjors Provoost diskutoval složitost práce s DAG řetězci v současné architektuře Bitcoin Core, ale poznamenal, že libbitcoin by ji mohl zjednodušit a utreexo zefektivnit. Zawy podrobil protokol rozsáhlé simulaci a naznačil, že pracuje na simulacích dalších variant protokolu, aby nalezl nejlepší kompromis.
Poslední příspěvek ve vlákně se objevil zhruba měsíc před sepsáním tohoto shrnutí, očekáváme však, že Zawy a vývojáři Braidpoolu v analýze a implementaci protokolu pokračují.
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.
-
● BDK Wallet 1.1.0 je vydáním této knihovny pro budování aplikací s podporou bitcoinu. Ve výchozím nastavení používá transakce verze 2 (čímž zlepšuje soukromí, neboť BDK transakce splynou s transakcemi jiných peněženek, které musí používat v2 transakce za účelem podpory relativních časových zámků, viz zpravodaj č. 337). Dále přidává podporu kompaktních filtrů bloků (viz zpravodaj č. 339), opravuje chyby a přináší další vylepšení.
-
● LND v0.18.5-beta.rc1 je kandidátem na menší vydání této populární implementace LN uzlu.
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 #21590 implementuje algoritmus modulární inverze založený na safegcd určený pro MuHash3072 (viz zpravodaje č. 131 a č. 136, oba angl.). Kód je převzatý z libsecp256k1, navíc sjednocuje kód pro 32- a 64bitovou architekturu. Výsledky výkonnostního testu ukazují zhruba 100násobné zlepšení na x86_64, díky čemuž došlo ke snížení výpočtu MuHash z 5,8 ms na 57 μs.
-
● Eclair #2983 mění synchronizaci routovací tabulky během opakovaného připojení. Nově synchronizuje oznámení kanálů pouze se spojeními s nejvyšší sdílenou kapacitou kanálu. Výsledkem je redukce síťového provozu. Dále bylo upraveno výchozí chování whitelistu synchronizace (viz zpravodaj č. 62, angl.): pokud chce uživatel deaktivovat synchronizaci se spojeními mimo whitelist, musí nastavit
router.sync.peer-limit
na 0 (výchozí hodnota je 5). -
● Eclair #2968 přidává podporu splicingu ve veřejných kanálech. Jakmile se splicingová transakce potvrdí a uzamkne na obou stranách, uzly si vymění podpisy a zveřejní do sítě
channel_announcement
. Eclair nedávno přidal sledování nevlastních splicingů (viz zpravodaj č. 337). Toto PR dále znemožňuje používáníshort_channel_id
pro routování v soukromých kanálech; namísto toho používáscid_alias
, aby neodhalil UTXO kanálu. -
● LDK #3556 vyvolá selhání HTLC ve zpětném sledu, pokud se příliš přiblíží času expirace. Dříve uzel čekal další tři bloky navíc, aby měla nárokovací transakce čas na potvrzení. Avšak tato prodleva zvyšovala riziko vynuceného zavření tohoto kanálu. Dále bylo odstraněno pole
historical_inbound_htlc_fulfills
a přidánSentHTLCId
. -
● LND #9456 přidává varování o zastarání do
SendToRoute
,SendToRouteSync
,SendPayment
aSendPaymentSync
v přípravě na jejich odstranění v přespříštím vydání (0.21). Uživatelé by měli používat nové v2 metodySendToRouteV2
,SendPaymentV2
aTrackPaymentV2
.
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 11. 2. v 15:30 UTC. Diskuze jsou nahrávány a zpřístupněny na stránce našeho podcastu.
Poznámky
-
Co se týče P2SH a navrhovaného počítání sigops vstupů,
OP_CHECKMULTISIG
s více než 16 veřejnými klíči se počítá jako 20 sigops; pokud někdo použije 125×OP_CHECKMULTISIG
, pokaždé se 17 klíči, budou počítány jako 2 500 sigops. ↩