/ home / newsletters /
Zpravodaj „Bitcoin Optech” č. 331
Zpravodaj tento týden shrnuje několik nedávných diskuzí o dialektu Lispu pro skriptování v bitcoinu a přináší pravidelné rubriky s popisem oblíbených otázek a odpovědí z Bitcoin Stack Exchange, oznámeními nových vydání a souhrnem významných změn v populárních bitcoinových páteřních projektech.
Novinky
-
● Dialekt Lispu pro bitcoinové skripty: Anthony Towns zaslal několik příspěvků o své pokračující snaze vytvořit dialekt Lispu pro bitcoin, který by mohl být přidán jako soft fork.
-
● bll, symbll, bllsh: Towns poznamenává, že strávil mnoho času přemýšlením nad radou vývojáře Chia Lispu Arta Yerkese o zajištění bezchybného převodu mezi vysokoúrovňovým kódem (co vývojář píše) a nízkoúrovňovým kódem (co se nakonec spustí, obvykle vytvořen z vyšší úrovně kompilátorem). Rozhodl se pro přístup podobný miniscriptu, ve kterém „nakládáte s vysokoúrovňovým jazykem jako s přátelskou variantou nízkoúrovňového (jako miniscript a Script).“ Výsledkem jsou dva jazyky a jeden nástroj:
-
● Základový Bitcoin Lisp language (bll) je nízkoúrovňovým jazykem, který by mohl být soft forkem přidán do bitcoinu. Towns tvrdí, že bll je podobný BTC Lispu v jeho poslední aktualizaci (viz zpravodaj č. 294).
-
● Symbolický bll (symbll) je jazykem vyšší úrovně, který se překládá do bll. Měl by být pro vývojáře znalé funkcionálního programování poměrně snadný.
-
● Bll shell (bllsh) je REPL, který umožňuje vývojářům testovat skripty v bll a symbll, kompilovat ze symbll do bll a spouštět debugování kódu.
-
-
● Implementace kvantově bezpečných podpisů v symbll oproti GSR: Towns odkazuje na twitterový příspěvek Jonase Nicka o implementaci Winternitzových jednorázových podpisů (Winternitz One-Time Signatures, WOTS+) pomocí existujících opkódů a opkódů specifikovaných v návrhu great script restoration (GSR) od Rustyho Russella. Towns ji nato porovnává s implementací WOTS+ v symbll a bllsh. Dosáhl tím snížení množství onchain dat přinejmenším o 83 % a možná i o více než 95 %. Mohlo by to přinést kvantově bezpečné podpisy s náklady pouze 30× vyššími než P2WPKH výstupy.
-
● Flexibilní účelové dělení mincí: Towns popisuje obecnou konstrukci kompatibilní se symbll (a pravděpodobně i se Simplicity), která umožní rozdělit nějaké UTXO dle konkrétních částek a platebních podmínek. Pokud se platební podmínky naplní, příslušná částka může být utracena a zbytek hodnoty UTXO je vrácen na nové UTXO se zbývajícími podmínkami. Může být také určena alternativní podmínka, která by utratila celé UTXO; umožnilo by to na příklad se všem stranám dohodnout na změně podmínek. Jedná se o flexibilní druh kovenantů, podobný Townsově předchozímu návrhu na
OP_TAP_LEAF_UPDATE_VERIFY
(TLUV, viz zpravodaj č. 166, angl.), avšak Towns již dříve napsal, že nepovažuje kovenanty za „přesný a užitečný termín.”Příspěvek obsahuje několik příkladů použití tohoto flexibilního účelového dělení mincí (flexible coin earmarks), včetně zlepšení bezpečnosti a použitelnosti LN kanálů (též kanálů založených na LN-Symmetry), alternativní verzi úschoven k BIP345 či platebního poolu podobného příkladu použití TLUV, avšak bez problémů spojených s používáním x-only veřejných klíčů.
-
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ů.
-
● Jak ColliderScript vylepšuje Bitcoin a jaké možnosti nabízí? Victor Kolobov vyjmenovává možná použití ColliderScriptu (viz zpravodaj č. 330 a podcast č. 330) včetně kovenantů, úschoven, emulace CSFS a validity rollups (viz zpravodaj č. 222, angl.) a poukazuje na vysoké výpočetní náklady těchto transakcí.
-
● Proč omezují pravidla standardnosti váhu transakcí? Murch poskytuje důvody pro a proti omezením váhy v pravidlech standardnosti v Bitcoin Core a nastiňuje, jak by mohla ekonomická poptávka po větších transakcích efektivitu tohoto pravidla poznamenat.
-
● Musí být scriptSig utrácející PayToAnchor výstup prázdný? Pieter Wuille vysvětluje, že kvůli způsobu konstrukce musí pay-to-anchor (P2A) výstupy následovat segwitové podmínky utrácení včetně prázdného scriptSigu.
-
● Co se stane s nepoužitými P2A výstupy? Instagibbs poznamenává, že nepoužité P2A výstupy budou smeteny, až to bude ekonomicky výhodné, a tím budou odstraněny z množiny UTXO. Dále odkazuje na nedávno začleněné PR o dočasném prachu, které povolí jeden výstup s neekonomickou hodnotou v transakci s nulovým poplatkem, pokud ho potomek okamžitě utrácí.
-
● Proč nepoužívá bitcoinový PoW algoritmus posloupnost hašů s nižší složitostí? Pieter Wuille a Vojtěch Strnad popisují tlak na centralizaci těžby, pokud by byla podobným přístupem narušena absence progresivity (tedy že výpočet jednoho haše nepřináší žádnou výhodu následujícím pokusům).
-
● Objasnění false hodnoty ve Scriptu. Pieter Wuille vyjmenovává tři hodnoty, které se v bitcoinovém Scriptu vyhodnotí jako false: prázdné pole, pole s nulovými bajty a pole s nulovými bajty a 0x80 na konci. Všechny ostatní hodnoty jsou vyhodnoceny jako true.
-
● Co je zač tato divná transakce v mé peněžence? Vojtěch Strnad vysvětluje mechanismus otravy adres (address poisoning) a způsoby bránění těmto útokům.
-
● Existují UTXO, která není možné utratit? Pieter Wuille poskytuje dva příklady výstupů, které jsou bez ohledu na prolomení kryptografických předpokladů neutratitelné:
OP_RETURN
výstupy a výstupy se scriptPubKey delšími než 10 000 bajtů. -
● Proč nebyl BIP34 implementován pomocí locktime nebo nSequence v coinbasové transakci? Antoine Poinsot přidává k této starší otázce vysvětlení, že hodnota
nLockTime
coinbasové transakce nemůže být nastavena na aktuální výšku, neboť locktime představuje poslední blok, ve kterém je transakce nevalidní.
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.
-
● Core Lightning 24.11rc2 je kandidátem na vydání následující hlavní verze této oblíbené implementace LN.
-
● BDK 0.30.0 je vydáním této knihovny pro budování peněženek a jiných bitcoinových aplikací. Přináší opravy několika drobných chyb a přípravy na očekávaný upgrade na verzi 1.0.
-
● LND 0.18.4-beta.rc1 je kandidátem na menší vydání této oblíbené implementace LN.
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, Bitcoin Inquisition a repozitáři BINANA.
-
● Bitcoin Core #31122 přidává do mempoolu rozhraní pro operace nad množinou změn. Tím umožní uzlu vypočítat dopad navržených změn na stav mempoolu: na příklad zkontrolovat, zda by byly při přijetí transakce nebo balíčku narušeny limity předků, potomků či TRUC/clusterů, nebo určit, zda by RBF navýšení zlepšilo stav mempoolu. PR je součástí projektu mempoolu clusterů.
-
● Core Lightning #7852 vrací pole popisku do pluginu
pyln-client
, čímž obnovuje zpětnou kompatibilitu s verzemi před 24.08. -
● Core Lightning #7740 přináší API abstrahující složitost řešení problému nejlevnějšího toku (minimum cost flow, MCF) v pluginu
askrene
(viz zpravodaj č. 316). Tím umožní snazší integraci nově přidaných grafových algoritmů pro výpočet toku. Algoritmus hledající řešení používá stejnou linearizaci funkce nákladů kanálu jakorenepay
(viz zpravodaj č. 263), čímž zlepšuje schopnost hledání cest. Dále přináší podporu pro definici uživatelských jednotek mimo msat. PR přidává metodysimple_feasibleflow
,get_augmenting_flow
,augment_flow
anode_balance
, které celkově vylepší efektivitu výpočtů toku. -
● Core Lightning #7719 přináší interoperabilitu s Eclair pro vykonávání splicingu. PR představuje několik změn včetně podpory pro rotaci vzdálených funding klíčů, přidání
batch_size
pro commitmentové podepsané zprávy (zabrání tím posílání starších otevíracích transakcí), odstranění hašů bloků ze zpráv a úpravě přednastavených zůstatků. -
● Eclair #2935 pošle provozovateli uzlu zprávu v případě vynuceného zavření kanálu iniciovaného protistranou.
-
● LDK #3137 přidává podporu pro přijímání kanálů s oboustranným financováním iniciovaných protistranou. Financování či vytváření těchto kanálů zatím podporováno není. Je-li
manually_accept_inbound_channels
nastaveno na false, kanály jsou automaticky přijaty. MetodaChannelManager::accept_inbound_channel()
řídí jejich manuální přijetí. Bylo přidáno nové polechannel_negotiation_type
pro rozlišení mezi druhy kanálů. 0-conf oboustranně financované kanály ani RBF navyšování poplatků financujících transakcí podporováno není. -
● LND #8337 přidává modul
protofsm
, framework pro vytváření konečných automatů pro protokoly založené na událostech. Namísto psaní hromady kódu pro zpracování stavů, jejich přechodů a událostí mohou vývojáři definovat stavy, spouštěče událostí a pravidla pro pohyb mezi nimi a rozhraníState
poskytne zbytek výpočtů. Adaptéry budou mít na starosti vedlejší efekty jako posílání transakcí a zpráv.