|
| 1 | +--- |
| 2 | +title: 'Zpravodaj „Bitcoin Optech” č. 349' |
| 3 | +permalink: /cs/newsletters/2025/04/11/ |
| 4 | +name: 2025-04-11-newsletter-cs |
| 5 | +slug: 2025-04-11-newsletter-cs |
| 6 | +type: newsletter |
| 7 | +layout: newsletter |
| 8 | +lang: cs |
| 9 | +--- |
| 10 | +Zpravodaj tento týden popisuje návrh na urychlení úvodního stahování |
| 11 | +bloků v Bitcoin Core s ukázkovou implementací demonstrující |
| 12 | +pětkrát kratší stahování oproti výchozímu nastavení Bitcoin Core. |
| 13 | +Též nechybí naše pravidelné rubriky se souhrnem sezení Bitcoin Core PR Review |
| 14 | +Clubu, oznámeními nových vydání a popisem významných změn v populárních |
| 15 | +bitcoinových páteřních projektech. |
| 16 | + |
| 17 | +## Novinky |
| 18 | + |
| 19 | +- **SwiftSync urychlující úvodní stahování bloků:** Sebastian |
| 20 | + Falbesoner zaslal do fóra Delving Bitcoin [příspěvek][falbesoner ss1] |
| 21 | + s ukázkou implementace a s výkonnostními výsledky _SwiftSync_u, nápadu |
| 22 | + [navrženého][somsen ssgist] Rubenem Somsenem během nedávného setkání |
| 23 | + vývojářů Bitcoin Core. Později příspěvek [zaslal][somsen ssml] i do emailové |
| 24 | + skupiny. V době psaní zpravodaje tvrdila [většina výsledků][falbesoner |
| 25 | + ss2] ve vlákně 5,28× zrychlení _úvodního stahování bloků_ (IBD) oproti |
| 26 | + výchozím nastavením Bitcoin Core (používajícím [assumevalid][] bez [assumeUTXO][topic |
| 27 | + assumeutxo]). Díky tomu se podařilo snížit čas úvodní synchronizace ze zhruba 41 |
| 28 | + hodin na osm. |
| 29 | + |
| 30 | + Před tím, než je možné SwiftSync používat, musí někdo s uzlem |
| 31 | + synchronizovaným na nějaký nedávný blok vytvořit _hints file_ určující, |
| 32 | + které výstupy budou součástí množiny UTXO v jeho výšce (tedy které |
| 33 | + výstupy jsou neutracené). To lze při současné velikosti množiny UTXO |
| 34 | + efektivně zakódovat do několika set megabajtů. Hints file také určuje, |
| 35 | + pro který blok byl vygenerovaný, nazvěme ho _terminální blok SwiftSyncu_ |
| 36 | + (terminal SwiftSync block). |
| 37 | + |
| 38 | + Uživatel, který chce SwiftSync použít, stáhne tento soubor a pomocí |
| 39 | + něj zpracuje každý blok až do terminálního bloku. Přitom ukládá do množiny UTXO |
| 40 | + pouze výstupy obsažené v hints file. Tento způsob masivně snižuje počet |
| 41 | + položek, které jsou do UTXO databáze během IBD přidány a později z ní odstraněny. |
| 42 | + |
| 43 | + Aby byla zajištěna správnost hints file, je každý výstup, který do databáze |
| 44 | + UTXO nemá být uložen, přičten do [kryptogafického akumulátoru][cryptographic |
| 45 | + accumulator]. Každý utracený výstup je z akumulátoru odečten. Při dosažení |
| 46 | + terminálního bloku musí být akumulátor prázdný, tedy každý výstup, který |
| 47 | + byl do něj přidán, z něj byl posléze také odebrán (tj. byl utracen). Pokud |
| 48 | + tomu tak není, znamená to, že byl hints file nesprávný, a IBD musí být |
| 49 | + provedeno znovu od začátku a bez SwiftSyncu. Tímto způsobem nemusí uživatelé |
| 50 | + tvůrcům hints file důvěřovat, neboť škodlivý soubor nemůže vyústit ve |
| 51 | + správný stav UTXO. Může jen vést k proplýtvaným několika hodinám práce počítače. |
| 52 | + |
| 53 | + Další možností SwiftSyncu, která ještě nebyla naimplementována, je možnost |
| 54 | + paralelní validace bloků během IBD. To je možné, jelikož assumevalid nekontroluje |
| 55 | + skripty starších bloků, položky nejsou z databáze UTXO nikdy odstraňovány |
| 56 | + (před dosažením terminálního bloku) a akumulátor pouze sleduje součet výstupů |
| 57 | + přidaných (vytvořené výstupy) a odebraných (utracené výstupy). Díky |
| 58 | + tomu nejsou do dosažení terminálního bloku žádné závislosti mezi jednotlivými |
| 59 | + bloky. Z podobných důvodů nabízí paralelní validaci během IBD i |
| 60 | + [Utreexo][topic utreexo]. |
| 61 | + |
| 62 | + Diskutující se zabývali několika aspekty návrhu. Falbesonerova původní |
| 63 | + implementace používala akumulátor [MuHash][] (viz [zpravodaj č. 123][news123 |
| 64 | + muhash], _angl._), u kterého [byla ukázána][wuille muhash] odolnost vůči |
| 65 | + [generalizovanému narozeninovému útoku][generalized birthday attack]. Somsen |
| 66 | + [popsal][somsen ss1] alternativní přístup, který by mohl být rychlejší. |
| 67 | + Falbesoner pochyboval, že by byl tento alternativní přístup kryptograficky |
| 68 | + bezpečný, avšak díky jeho jednoduchosti ho i přesto naimplementoval a zjistil, |
| 69 | + že SwiftSync urychluje ještě více. |
| 70 | + |
| 71 | + James O'Beirne [se ptal][obeirne ss], zda je SwiftSync užitečný, když |
| 72 | + assumeUTXO nabízí ještě výraznější zrychlení. |
| 73 | + Somsen [odpověděl][somsen ss2], že SwiftSync zrychluje u assumeUTXO |
| 74 | + validaci na pozadí, je tedy i pro uživatele assumeUTXO přínosný. Dále poznamenal, |
| 75 | + že pokud někdo stahuje potřebná data pro assumeUTXO (databázi UTXO v určité |
| 76 | + blokové výšce), nemusí zvlášť stahovat ještě hints file (jsou-li oba |
| 77 | + generované pro stejnou výšku). |
| 78 | + |
| 79 | + Vojtěch Strnad, 0xB10C a Somsen [diskutovali][b10c ss] o komprimování dat |
| 80 | + v hints file, které by mohlo snížit velikost souborů o 75 % s výslednou |
| 81 | + velikostí pro blok 850 900 kolem 88 MB. |
| 82 | + |
| 83 | + Diskuze v době psaní nadále probíhala. |
| 84 | + |
| 85 | +## Bitcoin Core PR Review Club |
| 86 | + |
| 87 | +*V této měsíční rubrice shrnujeme nedávné sezení [Bitcoin Core PR Review Club][] a |
| 88 | +vyzdvihujeme některé z důležitých otázek a odpovědí. Klikněte na otázku a odpověď se vám odhalí.* |
| 89 | + |
| 90 | +[Přidej správce prediktorů poplatků][review club 31664] je PR od vývojáře |
| 91 | +[ismaelsadeeq][gh ismaelsadeeq], které zlepšuje logiku předpovídání transakčních |
| 92 | +poplatků (též nazývaného [odhadování][topic fee estimation]). Přináší novou třídu `ForecasterManager`, |
| 93 | +která umožňuje registraci více `Forecaster`ů. Stávající `CBlockPolicyEstimator` |
| 94 | +(který bere do úvahy pouze potvrzené transakce) je refaktorován do jednoho |
| 95 | +z takových prediktorů a je přidán nový `MemPoolForecaster`. Ten pro výpočet |
| 96 | +používá nepotvrzené transakce v mempoolu, a proto umí na změny poplatků |
| 97 | +reagovat rychleji. |
| 98 | + |
| 99 | +{% include functions/details-list.md |
| 100 | + q0="Proč se tento nový systém nazývá „prediktor” (forecaster) a |
| 101 | + „správce prediktorů” (forecaster manager) a ne „odhadce” (estimator) |
| 102 | + a „správce odhadování poplatků” (fee estimation manager)?" |
| 103 | + a0="Systém předpovídá (predikuje) budoucí dopad na základě současných |
| 104 | + a minulých dat. Na rozdíl od odhadce, který aproximuje aktuální podmínky |
| 105 | + s určitou dávkou náhodnosti, prediktor předpovídá budoucí události, |
| 106 | + což je v souladu s prediktivní povahou tohoto systému." |
| 107 | + a0link="https://bitcoincore.reviews/31664#l-19" |
| 108 | + |
| 109 | + q1="Proč nebyla do `CBlockPolicyEstimator` přidána reference na mempool, |
| 110 | + podobně jako v PR #12966? Jaký je aktuální přístup a proč je lepší než |
| 111 | + držet referenci na mempool? (Tip: podívejte se na PR #28368)" |
| 112 | + a1="`CBlockPolicyEstimator` dědí z `CValidationInterface` a |
| 113 | + implementuje jeho virtuální metody `TransactionAddedToMempool`, |
| 114 | + `TransactionRemovedFromMempool` a `MempoolTransactionsRemovedForBlock`. |
| 115 | + To poskytuje `CBlockPolicyEstimator` všechna data o mempoolu, aniž by s ním |
| 116 | + musel být úzce provázán přes referenci." |
| 117 | + a1link="https://bitcoincore.reviews/31664#l-26" |
| 118 | + |
| 119 | + q2="Jaké jsou kompromisy mezi novou architekturou a přímou změnou |
| 120 | + `CBlockPolicyEstimator`u?" |
| 121 | + a2="Nová architektura s třídou `FeeRateForecasterManager`, do které |
| 122 | + se může registrovat více prediktorů (`Forecaster`), je modulárnějším |
| 123 | + přístupem, který umožňuje lepší testování a vynucuje lepší dělení |
| 124 | + zodpovědností. Umožňuje později snadno přidat nové strategie předpovídání. |
| 125 | + Daní za to je větší množství kódu, který se musí udržovat, a možná i |
| 126 | + zmatení uživatelů, kteří si musí vybrat konkrétní metodu." |
| 127 | + a2link="https://bitcoincore.reviews/31664#l-43" |
| 128 | +%} |
| 129 | + |
| 130 | +## Vydání nových verzí |
| 131 | + |
| 132 | +*Vydání nových verzí oblíbených páteřních bitcoinových projektů. Prosíme, |
| 133 | +zvažte upgrade či pomoc s testováním.* |
| 134 | + |
| 135 | +- [Core Lightning 25.02.1][] je údržbovým vydáním současné hlavní verze |
| 136 | + tohoto oblíbeného LN uzlu přinášejícím několik oprav. |
| 137 | + |
| 138 | +- [Core Lightning 24.11.2][] je údržbovým vydáním předchozí hlavní verze |
| 139 | + tohoto populárního LN uzlu. Obsahuje opravy několik chyb, některé z nich |
| 140 | + jsou stejné jako ve vydání 25.02.1. |
| 141 | + |
| 142 | +- [BTCPay Server 2.1.0][] je hlavním vydáním tohoto platebního procesoru s vlastním |
| 143 | + hostováním. Obsahuje nekompatibilní změny pro uživatele některých altcoinů, |
| 144 | + vylepšení navyšování poplatků pomocí [RBF][topic rbf] i [CPFP][topic cpfp] |
| 145 | + a lepší proces vícenásobného podepisování v případech, kdy všichni podepisující |
| 146 | + používají BTCPay Server. |
| 147 | + |
| 148 | +- [Bitcoin Core 29.0rc3][] je kandidátem na vydání příští hlavní verze tohoto |
| 149 | + převládajícího plného uzlu. Prosíme, přečtěte si [průvodce testováním verze |
| 150 | + 29][bcc29 testing guide]. |
| 151 | + |
| 152 | +- [LND 0.19.0-beta.rc2][] je kandidátem na vydání tohoto oblíbeného LN uzlu. |
| 153 | + Jedním významným vylepšením, které by si zasloužilo důkladné testování, je |
| 154 | + nové schéma RBF navyšování poplatků během kooperativního zavření kanálu. |
| 155 | + |
| 156 | +## Významné změny kódu a dokumentace |
| 157 | + |
| 158 | +_Významné změny z tohoto týdne v [Bitcoin Core][bitcoin core repo], [Core |
| 159 | +Lightning][core lightning repo], [Eclair][eclair repo], [LDK][ldk repo], |
| 160 | +[LND][lnd repo], [libsecp256k1][libsecp256k1 repo], [Hardware Wallet |
| 161 | +Interface (HWI)][hwi repo], [Rust Bitcoin][rust bitcoin repo], [BTCPay |
| 162 | +Server][btcpay server repo], [BDK][bdk repo], [Bitcoin Improvement |
| 163 | +Proposals (BIPs)][bips repo], [Lightning BOLTs][bolts repo], |
| 164 | +[Lightning BLIPs][blips repo], [Bitcoin Inquisition][bitcoin inquisition |
| 165 | +repo] a [repozitáři BINANA][binana repo]._ |
| 166 | + |
| 167 | +- [LDK #2256][] a [LDK #3709][] vylepšují informace o původci selhání (viz |
| 168 | + [zpravodaj č. 224][news224 failures], _angl._) dle specifikace v [BOLTs #1044][]. |
| 169 | + Přidává novou strukturu `AttributionData` a do stávající struktury `UpdateFailHTLC` |
| 170 | + přidává volitelné pole `attribution_data`. Dle tohoto protokolu připojí každý |
| 171 | + přeposílající uzel do chybové zprávy příznak `hop_payload`, dobu, po kterou uzel HTLC |
| 172 | + držel, a HMAC na odpovídající pozici v cestě. Pokud nějaký uzel chybovou hlášku |
| 173 | + pozmění, nesoulad v HMAC může identifikovat, mezi kterými dvěma uzly se tak stalo. |
| 174 | + |
| 175 | +- [LND #9669][] mění [jednoduché taprootové kanály][topic simple taproot |
| 176 | + channels], aby vždy používaly zastaralý druh kooperativního zavření, i když |
| 177 | + je nastavený nový druh s [RBF][topic rbf] (viz [zpravodaj č. 347][news347 coop]). |
| 178 | + Dříve uzel s aktivovanými oběma funkcemi nenastartoval. |
| 179 | + |
| 180 | +- [Rust Bitcoin #4302][] přidává do builder API skriptu novou metodu `push_relative_lock_time()`, |
| 181 | + které se předává jako argument relativní [časový zámek][topic timelocks]. |
| 182 | + Zároveň změna zastarává metodu `push_sequence()`, jejímž argumentem bylo |
| 183 | + prosté číslo sekvence. Tato změna odstraňuje potenciální zmatení vývojářů, |
| 184 | + kteří neúmyslně přidali do skriptů prosté číslo sekvence namísto relativního |
| 185 | + časového zámku, který je zkontrolován oproti číslu sekvence vstupu pomocí |
| 186 | + `CHECKSEQUENCEVERIFY`. |
| 187 | + |
| 188 | +{% include snippets/recap-ad.md when="2025-04-15 15:30" %} |
| 189 | +{% include references.md %} |
| 190 | +{% include linkers/issues.md v=2 issues="2256,3709,9669,4302,1044" %} |
| 191 | +[bitcoin core 29.0rc3]: https://bitcoincore.org/bin/bitcoin-core-29.0/ |
| 192 | +[bcc29 testing guide]: https://github.com/bitcoin-core/bitcoin-devwiki/wiki/29.0-Release-Candidate-Testing-Guide |
| 193 | +[lnd 0.19.0-beta.rc2]: https://github.com/lightningnetwork/lnd/releases/tag/v0.19.0-beta.rc2 |
| 194 | +[wuille muhash]: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014337.html |
| 195 | +[falbesoner ss1]: https://delvingbitcoin.org/t/ibd-booster-speeding-up-ibd-with-pre-generated-hints-poc/1562/ |
| 196 | +[somsen ssgist]: https://gist.github.com/RubenSomsen/a61a37d14182ccd78760e477c78133cd |
| 197 | +[falbesoner ss2]: https://delvingbitcoin.org/t/ibd-booster-speeding-up-ibd-with-pre-generated-hints-poc/1562/7 |
| 198 | +[assumevalid]: https://bitcoincore.org/en/2017/03/08/release-0.14.0/#assumed-valid-blocks |
| 199 | +[cryptographic accumulator]: https://en.wikipedia.org/wiki/Accumulator_(cryptography) |
| 200 | +[news123 muhash]: /en/newsletters/2020/11/11/#bitcoin-core-pr-review-club |
| 201 | +[muhash]: https://cseweb.ucsd.edu/~mihir/papers/inchash.pdf |
| 202 | +[generalized birthday attack]: https://www.iacr.org/archive/crypto2002/24420288/24420288.pdf |
| 203 | +[somsen ss1]: https://delvingbitcoin.org/t/ibd-booster-speeding-up-ibd-with-pre-generated-hints-poc/1562/2 |
| 204 | +[obeirne ss]: https://delvingbitcoin.org/t/ibd-booster-speeding-up-ibd-with-pre-generated-hints-poc/1562/5 |
| 205 | +[somsen ss2]: https://delvingbitcoin.org/t/ibd-booster-speeding-up-ibd-with-pre-generated-hints-poc/1562/6 |
| 206 | +[b10c ss]: https://delvingbitcoin.org/t/ibd-booster-speeding-up-ibd-with-pre-generated-hints-poc/1562/4 |
| 207 | +[somsen ssml]: https://mailing-list.bitcoindevs.xyz/bitcoindev/CAPv7TjaM0tfbcBTRa0_713Bk6Y9jr+ShOC1KZi2V3V2zooTXyg@mail.gmail.com/T/#u |
| 208 | +[core lightning 25.02.1]: https://github.com/ElementsProject/lightning/releases/tag/v25.02.1 |
| 209 | +[core lightning 24.11.2]: https://github.com/ElementsProject/lightning/releases/tag/v24.11.2 |
| 210 | +[btcpay server 2.1.0]: https://github.com/btcpayserver/btcpayserver/releases/tag/v2.1.0 |
| 211 | +[news224 failures]: /en/newsletters/2022/11/02/#ln-routing-failure-attribution |
| 212 | +[news347 coop]: /cs/newsletters/2025/03/28/#lnd-8453 |
| 213 | +[review club 31664]: https://bitcoincore.reviews/31664 |
| 214 | +[gh ismaelsadeeq]: https://github.com/ismaelsadeeq |
| 215 | +[forecastresult compare]: https://github.com/bitcoin-core-review-club/bitcoin/commit/1e6ce06bf34eb3179f807efbddb0e9bca2d27f28#diff-5baaa59bccb2c7365d516b648dea557eb50e63837de71531dc460dbcc62eb9adR74-R77 |
0 commit comments