本周 Newsletter 总结了一篇关于如何将谨慎日志合约(DLC)与闪电网络通道整合的帖子、近期闪电网络开发者会议的详细总结链接,并描述了关于如何对致密区块过滤器进行额外验证的想法。此外还包括常规栏目:Bitcoin Core PR 审查俱乐部会议总结、关于准备 taproot 激活的最终专栏、新版本与候选版本描述,以及热门基础设施软件的重大变更列表。

新闻

  • 闪电网络上实现 DLC: Thibaut Le Guilly 在 DLC-Dev 邮件列表上发起了一个讨论,主题是将谨慎日志合约(DLCs)与闪电网络(LN)整合。初始帖子描述了几种在直接 LN 对等节点(例如共同运营通道的 Alice 和 Bob)之间的交易中嵌入 DLC 的可能方案。帖子还讨论了在通过 LN 网络路由的 DLC 中创建所面临的挑战。*

  • 2021 年闪电网络峰会纪要: Olaoluwa Osuntokun 发布了近期苏黎世线上线下混合举行的闪电网络开发者会议的详尽总结。纪要内容包括关于在 LN 中使用 taproot 的讨论,涉及 PTLCs、用于多签MuSig2 以及 eltoo;将规范讨论从 IRC 迁移至视频会议;当前 BOLTs 规范模型的变更;洋葱消息与报价;无卡支付(见周报 #53);通道阻塞攻击及多种缓解措施;以及蹦床路由。*

  • 致密区块过滤器的额外验证: Neutrino 轻客户端包含了一种启发式方法,用于检测致密区块过滤器是否可能包含错误数据。该方法曾错误地报告了一个包含 taproot 交易的测试网区块的正确过滤器存在问题。该问题已在 Neutrino 源代码中修复,其他致密区块过滤器实现不受影响。但 Olaoluwa Osuntokun 在 Bitcoin-DevLND-Dev 邮件列表上发起讨论,提出了未来可能的改进方向:*

    • 新型过滤器: 创建额外的可选过滤器类型,允许轻客户端搜索其他类型的数据。

    • 新增 P2P 协议消息: 添加新的 P2P 协议消息以获取区块撤销数据。区块撤销数据包含每个区块输入所花费的先前输出(及相关信息),结合区块数据可完整验证过滤器的生成过程。在节点间数据不一致时,撤销数据本身可被验证

    • 多区块过滤器: 进一步减少轻客户端需下载的数据量。

    • 承诺的区块过滤器: 要求矿工对其区块的过滤器进行承诺,减少轻客户端需下载的数据量以监测不同节点提供的过滤器差异。

Bitcoin Core PR 审查俱乐部

在本月栏目中,我们总结近期一次 Bitcoin Core PR 审查俱乐部会议,重点呈现部分重要问答。点击下方问题查看会议讨论摘要。

添加 ChainstateManager::ProcessTransaction 是 John Newbery 提出的拉取请求,旨在新增 ChainstateManager::ProcessTransaction() 接口函数,负责将交易作为候选加入内存池并执行内存池一致性检查。审查俱乐部讨论了当前向内存池添加交易的接口。

  • 什么是 cs_main?为何如此命名?

    cs_main 是一个互斥锁,用于同步多线程对验证状态的访问。实际上,它也保护了非验证数据(包括 P2P 逻辑使用的数据)。多位贡献者希望减少 cs_main 的使用范围。该变量在验证功能位于 main.cpp 文件时命名,前缀 cs 代表临界区(critical section)。 

  • 当前哪些组件调用 AcceptToMemoryPool?哪些调用来自外部客户端代码,哪些来自验证内部?

    排除测试中的调用,共有四个调用点:

    1. 节点启动时,从 mempool.dat 加载 交易并调用 ATMP 重新验证交易以恢复内存池内容。此为内部验证调用。
    2. 从 P2P 网络接收的交易通过 ATMP 验证并提交 至内存池。此调用源自验证外部的组件。
    3. 重组期间,断开区块中存在但未包含在新链尖的交易通过 ATMP 重新提交 至内存池。此为内部验证调用。
    4. RPC(如 sendrawtransaction)和钱包(如 sendtoaddress)等客户端通过 BroadcastTransaction() 调用 ATMP 提交交易。testmempoolaccept RPC 也会调用 ATMP 并设置 test_accepttrue。这些属于外部组件的调用。 
  • CTxMemPool::check() 的作用是什么?调用该函数是谁的职责?

    CTxMemPool::check() 检查所有交易输入是否对应可用 UTXO,并执行内存池内部一致性检查。例如,统计每笔交易的祖先和后裔数量以确保缓存的 ancestorsizeancestorcount 等值准确。当前 ATMP 调用者需负责在之后调用 check()。但与会者认为应由 ChainstateManager 负责执行其内部一致性检查。 

  • bypass_limits 参数的作用是什么?在哪些情况下 ATMP 会设置该参数为 true?

    bypass_limits 为 true 时,内存池最大容量和最低费率限制将被忽略。例如,若内存池已满且动态最低费率为 3 sat/vB,单笔 1 sat/vB 费率的交易仍可能被接受。在重组期间会以 bypass_limits 调用 ATMP;这些交易可能单独费率低但后裔费率高。重新加入内存池的交易总大小限制为 MAX_DISCONNECTED_TX_POOL_SIZE(20 MB)。 

准备 Taproot #21:感谢!

关于开发者和服务提供商如何为区块高度 709,632 激活 taproot 做准备的系列文章的最终篇。

Taproot 将在区块 709,632 激活,预计于本文发布后数日内完成。作为本系列的终篇,我们谨向众多参与开发与激活 Taproot 的人士致谢——他们即将开始执行这一升级。未提及的诸多贡献者同样值得感谢,我们为所有疏漏致歉。

Bitcoin-Dev 邮件列表讨论

Taproot 的核心构想萌芽于 2019 年 1 月 22 日早晨几位密码学家的会议,并于当日通过邮件列表发布。以下人士参与了主题含 “taproot” 的讨论:

Adam Back、 Andrea Barontini、 Andreas Schildbach、 Andrew Chow、 Andrew Poelstra、 Anthony Towns、 Antoine Riard、 Ariel Lorenzo-Luaces、 Aymeric Vitte、 Ben Carman、 Ben Woosley、 Billy Tetrud、 BitcoinMechanic、 Bryan Bishop、 Carlo Spiller、 Chris Belcher、 Christopher Allen、 Clark Moody、 Claus Ehrenberg、 Craig Raw、 Damian Mee、 Daniel Edgecumbe、 David A. Harding、 DA Williamson、 Elichai Turkel、 Emil Pfeffer、 Eoin McQuinn、 Eric Voskuil、 Erik Aronesty、 Felipe Micaroni Lalli、 Giacomo Caironi、 Gregory Maxwell、 Greg Sanders、 Jay Berg、 Jeremy Rubin、 John Newbery、 Johnson Lau、 Jonas Nick、 Karl-Johan Alm、 Keagan McClelland、 Lloyd Fournier、 Luke Dashjr、 Luke Kenneth Casson Leighton、 Mark Friedenbach、 Martin Schwarz、 Matt Corallo、 Matt Hill、 Michael Folkson、 Natanael、 Oleg Andreev、 Pavol Rusnak、 Pieter Wuille、 Prayank、 R E Broadley、 Riccardo Casatta、 Robert Spigler、 Ruben Somsen、 Russell O’Connor、 Rusty Russell、 Ryan Grant、 Salvatore Ingala、 Samson Mow、 Sjors Provoost、 Steve Lee、 Tamas Blummer、 Thomas Hartman、 Tim Ruffing、 Vincent Truong、 vjudeu、 yancy、 yanmaani—— 以及 ZmnSCPxj。

Taproot 整合的 schnorr 签名MAST 等概念源起更早,我们同样感谢相关贡献者。

Taproot BIP 审查

自 2019 年 11 月起,大量用户和开发者参与了 Taproot 的系统化审查

achow101、 afk11、 aj、 alec、 amiti、 _andrewtoth、 andytoshi、 ariard、 arik、 b10c、 belcher、 bjarnem、 BlueMatt、 bsm1175321、 cdecker、 chm-diederichs、 Chris_Stewart_5、 cle1408、 CubicEarth、 Day、 ddustin、 devrandom、 digi_james、 dr-orlovsky、 dustinwinski、 elichai2、 evoskuil、 fanquake、 felixweis、 fjahr、 ghost43、 ghosthell、 gmaxwell、 harding、 hebasto、 instagibbs、 jeremyrubin、 jnewbery、 jonatack、 justinmoon、 kabaum、 kanzure、 luke-jr、 maaku、 mattleon、 michaelfolkson、 midnight、 mol、 Moller40、 moneyball、 murch、 nickler、 nothingmuch、 orfeas、 pinheadmz、 pizzafrank13、 potatoe_face、 pyskell、 pyskl、 queip、 r251d、 raj_149、 real_or_random、 robert_spigler、 roconnor、 sanket1729、 schmidty、 sipa、 soju、 sosthene、 stortz、 taky、 t-bast、 theStack、 Tibo、 waxwing、 xoyi—— 以及 ZmnSCPxj。

GitHub 拉取请求

Taproot 在 Bitcoin Core 中的主要实现于 2020 年 1 月通过两个拉取请求提交审查。以下人士参与了代码审查:

Andrew Chow (achow101)、 Anthony Towns (ajtowns)、 Antoine Riard (ariard)、 Ben Carman (benthecarman)、 Ben Woosley (Empact)、 Bram (brmdbr)、 Cory Fields (theuni)、 Dmitry Petukhov (dgpv)、 Elichai Turkel (elichai)、 Fabian Jahr (fjahr)、 Andreas Flack (flack)、 Gregory Maxwell (gmaxwell)、 Gregory Sanders (instagibbs)、 James O’Beirne (jamesob)、 Janus Troelsen (ysangkok)、 Jeremy Rubin (JeremyRubin)、 João Barbosa (promag)、 John Newbery (jnewbery)、 Jon Atack (jonatack)、 Jonathan Underwood (junderw)、 Kalle Alm (kallewoof)、 Kanon (decryp2kanon)、 kiminuo、 Luke Dashjr (luke-jr)、 Marco Falke (MarcoFalke)、 Martin Habovštiak (Kixunil)、 Matthew Zipkin (pinheadmz)、 Max Hillebrand (MaxHillebrand)、 Michael Folkson (michaelfolkson)、 Michael Ford (fanquake)、 Adam Ficsor (nopara73)、 Pieter Wuille (sipa)、 Sjors Provoost (Sjors)、 Steve Huguenin-Elie (StEvUgnIn)、 Tim Ruffing (real-or-random)、 以及 Yan Pritzker (skwp)。

Taproot 激活讨论

社区围绕激活方式展开了数月讨论,主要参与者包括:

6102bitcoin、 AaronvanW、 achow101、 aj、 alec、 Alexandre_Chery、 Alistair_Mann、 amiti、 andrewtoth、 andytoshi、 AnthonyRonning、 ariel25、 arturogoosnargh、 AsILayHodling、 averagepleb、 bcman、 belcher、 benthecarman、 Billy、 bitcoinaire、 bitentrepreneur、 bitsharp、 bjarnem、 blk014、 BlueMatt、 bobazY、 brg444、 btcactivator、 btcbb、 cato、 catwith1hat、 cguida、 CodeShark__、 conman、 copumpkin、 Crash78、 criley、 CriptoLuis、 CubicEarth、 darbsllim、 darosior、 Day、 DeanGuss、 DeanWeen、 debit、 Decentralizedb、 devrandom、 DigDug、 dome、 dr_orlovsky、 duringo、 dustinwinski、 eeb77f71f26eee、 eidnrf、 elector、 elichai2、 Emcy、 emzy、 entropy5000、 eoin、 epson121、 erijon、 eris、 evankaloudis、 faketoshi、 fanquake、 fedorafan、 felixweis、 fiach_dubh、 fjahr、 friendly_arthrop、 GeraldineG、 gevs、 gg34、 ghost43、 ghosthell、 giaki3003、 gloved、 gmaxwell、 graeme1、 GreenmanPGI、 gr-g、 GVac、 gwillen、 gwj、 gz12、 gz77、 h4shcash、 harding、 hebasto、 hiro8、 Hotmetal、 hsjoberg、 huesal、 instagibbs、 Ironhelix、 IT4Crypto、 ja、 jaenu、 JanB、 jeremyrubin、 jimmy53、 jnewbery、 jonatack、 jonny100051、 jtimon、 kallewoof、 kanon、 kanzure、 Kappa、 keblek、 ksedgwic、 landeau、 lucasmoten、 luke-jr、 maaku、 Majes、 maybehuman、 mblackmblack、 mcm-mike、 Memesan、 michaelfolkson、 midnight、 MikeMarzig、 mips、 mol、 molz、 moneyball、 mrb07r0、 MrHodl、 murch、 naribia、 newNickName、 nickler、 nikitis、 NoDeal、 norisgOG、 nothingmuch、 occupier、 OP_NOP、 OtahMachi、 p0x、 pinheadmz、 PinkElephant、 pox、 prayank、 prepaid、 proofofkeags、 provoostenator、 prusnak、 qubenix、 queip、 r251d、 rabidus、 Raincloud、 raj、 RamiDz94、 real_or_random、 rgrant、 riclas、 roasbeef、 robert_spigler、 rocket_fuel、 roconnor、 rovdi、 rubikputer、 RusAlex、 rusty、 sanket1729、 satosaurian、 schmidty、 sdaftuar、 setpill、 shesek、 shinobiusmonk、 snash779、 solairis、 somethinsomethin、 stortz、 sturles、 sugarpuff、 taPrOOteD、 TechMiX、 TheDiktator、 thomasb06、 tiagocs、 tomados、 tonysanak、 TristanLamonica、 UltrA1、 V1Technology、 vanity、 viaj3ro、 Victorsueca、 virtu、 walletscrutiny、 wangchun、 warren、 waxwing、 Whatisthis、 whuha、 willcl_ark、 WilliamSantiago、 windsok、 wumpus、 xxxxbtcking、 yanmaani、 yevaud、 ygrtiugf、 Yoghurt11411、 zmnscpxj、 以及 zndtoshi。

矿工信号

我们感谢自区块 681,408 以来所有发出 Taproot 准备就绪信号的矿工。

生态项目

Taproot 激活仅是起点,开发者与用户将开始运用其新特性。我们感谢多年筹备 MuSig 等生态项目的贡献者。

全节点运营者

最关键的致谢致予数千名 Bitcoin Core 0.21.1 及以上版本(或兼容软件)的运营者。他们通过升级节点确保从区块 709,632 开始仅接受符合 Taproot 规则的交易,为全网的升级安全提供经济保障。

发布与候选发布

热门比特币基础设施项目的新版本发布。请考虑升级至新版本或协助测试候选版本。

值得注意的代码和文档变更

本周 Bitcoin CoreC-LightningEclairLNDRust-Lightninglibsecp256k1硬件钱包接口 (HWI)Rust BitcoinBTCPay ServerBDK比特币改进提案(BIPs)闪电网络规范(BOLTs)的显著变更。