Tento týden shrnujeme sezení Bitcoin Core PR Review Club a popisujeme novinku bitcoinové implementace v Rustu.

Novinky

Tento týden nepřinesl žádné významné novinky. Mnoho nového bylo řečeno v diskuzích o tématech, o kterých jsme již hovořili – mezi nimi např. OP_CHECKTEMPLATEVERIFY a SIGHASH_ANYPREVOUT – ovšem většina příspěvků nebyla technické povahy či se týkala detailů, které nepovažujeme za relevantní. Několik zajímavých příspěvků bylo zasláno do emailových skupin během vzniku tohoto čísla, budeme se jimi podrobně zabývat příští týden.

Bitcoin Core PR Review Club

V této měsíční rubrice shrnujeme nedávné sezení Bitcoin Core PR Review Club a vyzdvihujeme některé z důležitých otázek a odpovědí. Klikněte na otázku a odpověď se vám odhalí.

Improve Indices on pruned nodes via prune blockers je PR od Fabiana Jahra, které přidává „prune locks” (zámky ořezávání) jako nový způsob rozhodování, zda a kdy může ořezaný (pruned) uzel bezpečně smazat blok z disku. Tato nová metoda umožňuje ořezaným uzlům udržovat index pro coinstats a odstraňuje závislost validačního modulu na kódu indexace.

  • Jaké indexy v současnosti obsahuje Bitcoin Core a co je jich účelem?

    Uzly mohou udržovat až tři volitelné indexy, které jim pomáhají efektivně získávat data z disku. Transaction index (-txindex) mapuje hash transakce na blok, který transakci obsahuje. Block filter index (-blockfilterindex) indexuje pro každý blok filtry podle BIP157. Coin stats index (-coinstatsindex) ukládá statistiky UTXO. 

  • Co jsou kruhové závislosti? Proč se jim chceme vyvarovat?

    Kruhová závislost mezi dvěma moduly existuje, pokud žádný z nich nemůže být použit bez druhého. I když kruhové závislosti nepřináší bezpečnostní problémy, ukazují na špatnou organizaci kódu a ztěžují vývoj, jelikož je kvůli nim obtížnější samostatně sestavovat, používat a testovat dané moduly nebo funkce. 

  • Jak fungují prune locks představené v tomto commitu?

    Tento PR přidává ke každému indexu seznam prune locks, což jsou nejnižší výšky bloků, které nesmí být smazány. Když se uzel v metodě CChainState::FlushStateToDisk rozhoduje, které bloky budou smazány, použije tento seznam, aby zamezil smazání bloků vyšších než daná výška. Prune locks jsou aktualizovány vždy, když je aktualizován příslušný index. 

  • Jaké jsou výhody a nevýhody tohoto řešení v porovnání s předchozím?

    Aby zjistila maximální výšku bloků k odstranění, dotazovala se dříve implementace v CChainState::FlushStateToDisk indexu napřímo. To však vyžadovalo vzájemné provázání logiky validace a indexace. Nově jsou tyto výšky (v podobě prune locks) proaktivně počítány indexovací logikou; mohou být sice počítány častěji, není však již vyžadováno, aby se validační logika dotazovala indexu. 

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) a Lightning BOLTs.

  • Rust Bitcoin #716 přidává amount::Display, konfigurovatelné rozšíření pro Display vhodné pro zobrazování peněžních částek a jiných hodnot. V základním nastavení formátuje čísla do co nejkratší podoby; nepřidává již tedy nadbytečné nuly, což dříve generovalo zbytečně dlouhé BIP21 adresy a velké QR kódy.