2018-05-03 IRC 会议总结

概述


本次每周会议讨论的主题包括:项目成员希望审查人员在下周重点关注哪些拉取请求;调试日志是否应该移动到单独的线程,以便不会减慢某些用例的速度;是否发布包含一些错误修复和标准交易策略更改的 0.16.1 次要版本;以及如何允许并行处理从网络上其他节点接收到的消息。

审查优先级

背景:在每次会议上,比特币核心开发者都会讨论会议参与者认为在下周最需要审查的拉取请求 (PR)。其中一些 PR 与贡献者特别希望在下一次版本中看到的代码相关;另一些 PR 则阻塞了进一步的工作,或者需要进行重大维护(变基)才能保持挂起状态。任何有能力的审查人员都鼓励访问项目的当前高优先级 PR 列表

讨论 (日志):会议期间讨论的具体 PR 包括:

  1. BIP 158:轻客户端的紧凑区块过滤器 (#12254),由 Jim Posen 提名列入名单。此 PR 允许比特币核心为块中包含的一些信息生成紧凑索引。然后,这些索引可以与轻量级客户端共享,以允许它们确定块是否包含与客户端钱包相关的信息,此时客户端可以请求下载整个块(可能来自不同的节点)。

  2. [钱包] loadwallet RPC - 运行时加载钱包 (#10740),由 John Newbery 提名列入名单。这是 PR 集群中的一员,如果被接受,将允许比特币核心在比特币核心 0.15.0 中添加的多钱包模式的上下文中,在运行时创建、加载和卸载钱包。

  3. UI:支持动态加载的钱包 (#13097),由 Joao Barbosa 提名列入名单。建立在前面提到的 PR #10740 的基础上,这为比特币核心图形用户界面 (GUI) 中的钱包动态加载提供了支持。

在本次会议中,再次简要提到了某些 GitHub 页面无法加载(“独角兽”)的问题,这已经是连续第四周出现这种情况了。

删除 0.8、0.9 和 0.10 的 git 分支

背景:比特币核心的新开发通常发生在 Git 存储库的master分支上。要创建稳定版本,master 分支会被 git 分叉到一个稳定分支,并以预期版本的名称命名,例如,对于版本 0.8,分支为0.8。此分支上的代码经过测试、成熟并发布,并且次要版本发布(例如 0.8.1)的后续错误修复也在此分支上进行。

讨论 (日志):Marco Falke 在会议开始前不久提出了该主题,并在介绍时说:“这些分支上最后标记的版本已经超过一年处于生命周期结束 (EOL) 状态了。出于存档目的,可以保留标签,但不再需要分支。请参阅 https://bitcoincore.org.cn/en/lifecycle/#schedule。”

所有在会议中对此事发表评论的人都表示同意。Luke Dashjr 建议,如果每个分支上的最终提交没有附加到版本标签(指示特定版本使用了哪些代码),则应添加一个标签,以确保任何需要该特定代码的人仍然可以获取它。其他会议参与者也表示同意。

结论:这些分支在会议结束后不久就被删除了。

将日志记录移动到单独的线程

背景:默认情况下,比特币核心会将有关其正在执行的操作的某些信息写入日志文件,以防出现问题并且用户需要找出触发该问题的因素。目前,此日志记录是在程序执行的顺序步骤中完成的,因此日志记录后的下一步要等到日志记录完成后才会执行,这被描述为日志记录步骤“阻塞”后续步骤。线程是一种程序告诉操作系统可以并行执行多个步骤的方法,这可以允许程序中的下一步在日志记录完成之前开始(称为“非阻塞”)。

讨论 (日志):James O’Beirne 建议了该主题,并在介绍时说:“我认为将日志记录移动到单独的线程可能是有价值的。”他提到了与日志记录相关的两个最近的 PR,#13099#12970

Matt Corallo 对这个想法表示热烈支持,他说“ACKACKACKACKACKACKACKACKACK”,并指出“这对矿工来说是一个出乎意料的高延迟来源,至少对于那些使用旋转磁盘支持或云托管机器的矿工来说是这样。”他还链接到他自己的项目比特币 FIBRE(比特币核心的软件分支,不用于共识执行)的提交,该项目实现了日志记录的基本线程化。

其他几位开发人员也支持这个想法,讨论的重点是如何以最佳方式实现此行为,尤其是如何确保如果出现问题,仍然可以将尽可能多的信息写入日志。

一些参与者还讨论了如果将日志记录移动到单独的线程,比特币核心速度会提高多少。普遍意见似乎认为,这可以帮助某些时间关键型应用程序(例如矿工宣布新发现的块),并且在用户启用可选的详细日志记录进行调试时也会有所帮助。后者是开发人员经常执行的操作,并且比特币核心测试套件的部分内容会自动使用它。但是,对于其他用例,预计不会带来显著的改进。

结论:James O’Beirne 在讨论结束时说:“除非有人反对,否则我将在不久的将来开始着手开发一个线程从环形缓冲区中读取的实现。”

0.16.1

背景:比特币核心的最新主要版本 0.16.0 约两个月前发布。通常在发布后,会修复影响该版本的错误,并且某些新功能被认为足够重要,可以回传到该版本,从而产生新的次要版本。

讨论 (日志):Matt Corallo 提出该主题并介绍道:“对于那些没有注意的人来说,[Jesse Cohen] 在#13092中发现了一些特别新颖的块处理竞争条件。因为它们是线程问题,所以几乎肯定只会影响 submitblock 用户(即矿工),并且只会在罕见的竞争条件 [情况?] 下发生,但是,考虑到这一点以及我们拥有的其他一些修复程序,我认为可能值得回传。”

引用的问题 #13092 是 Suhas Daftuar 对 Cohen 在 PR #13023 中编写的集成测试发现的问题进行的分析。在最坏的情况下,矿工可能会认为他们已使用submitblock RPC 将新发现的块发送到网络,却发现比特币核心由于竞争条件(程序执行步骤的顺序与程序员预期的顺序不同)而静默忽略了该块。Cohen 的测试发现了这个问题,因为它们在极短的时间内创建了多个测试块(没有工作量证明)。主网上的块之间几乎总是存在更大的间隔,因此希望到目前为止还没有矿工受到此错误的影响。

虽然有一个 PR 用于修复此问题,但 Daftuar 认为需要进行额外的讨论才能“确定正确的修复方法”。Cohen 建议#12988 是“类似类型的错误”,也可能应该在此次要版本中修复。

Corallo 还建议 0.16.1 应该包含 Johnson Lau 的 PR #11423,以使CodeSeparator操作码在旧版(非隔离见证)输入的支出中变得非标准。非标准意味着节点不会将包含这些输入的交易添加到内存池;如果它们出现在块中,它们仍然会接受它们。这应该消除对名为FindAndDelete()的功能的使用,该功能具有问题历史(请参阅12)。隔离见证是在无需使用 FindAndDelete 的情况下实现的,但仍然提供CodeSeparator操作码,NBitcoin 开发人员 Nicholas Dorier 一直在使用它作为Tumblebit实现的一部分,因此在隔离见证支出中使CodeSeparator变得非标准尚未正式提出。

关于 Lau 的 PR 是否已准备好合并进行了一些讨论。Corallo 认为 Lau“想向 [Lau 的 PR] 中添加一条额外的策略规则”。Corallo 说他会联系 Lau 询问此事。

结论:所有参与者似乎都赞成发布 0.16.1 版本以修复竞争条件并包含额外的标准规则。在会议期间和之后,讨论的各种 PR 都被添加到项目的0.16.1 里程碑中。

异步调用 ProcessNewBlock

背景:比特币核心目前在一个线程中处理从其对等节点网络上的对等节点接收到的消息。如果可以将其重写为使用多个线程,它可以并行处理某些消息,这可以提高性能。但是,因为它经常从多个对等节点接收相同的基本消息,所以这带来了如何避免重复工作的挑战。

讨论 (日志):Matt Corallo 提出该主题并介绍道:“PR #12934 [当然] 还没有准备好进行审查,但我们可能应该讨论一下对等节点之间的并发性将是什么样子。有两种主要方法,但两者最终都需要对大部分工作进行类似的重构。过去,我曾考虑过并行执行 ProcessMessages();在 [前面链接的 PR 中,Jesse Cohen] 将 [交易和块] 的验证处理移动到队列中,并在单独的线程中执行。在这两种情况下,我们最终都会构建逻辑来‘暂停’对等节点的处理,直到它刚刚生成的任何消息都已处理完毕。”

Gregory Maxwell 和 Corallo 简要讨论了哪些系统部分会特别受益于并发性。对于 Maxwell 来说,它是初始块下载 (IBD),其中下载新块会延迟“在一次连接多个块时(由于 IBD 中的无序获取)”。对于 Corallo 来说,它将是在使用紧凑块 (BIP152) 接收新块时转发gettxn(获取交易)请求,“块中继延迟 [改进] 方面剩下的一个大型廉价胜利。”

随后,Corallo 指出,并发性将允许来自多个节点的新接收数据在具有多个 CPU 内核的系统上同时反序列化为可用的数据结构,Maxwell 同意这可能是一个不错的收益。他们还一致认为,过去一年对代码进行的许多改进使其更简单,也更容易实现此类更改。

结论:Cohen 写道:“不错——所以,如果没有对这种方法的强烈反对或担忧,我将继续进行下去,并在它更准备好审查时再回来。”

轻松一刻

       <wumpus>  #10740 given me an unicorn though
<jonasschnelli>  has also a unicorn, reload solved
       <wumpus>  yes
       <LukeJr>  unicorns probably have a high street value
     <jnewbery>  not any more. The market's been flooded
       <LukeJr>  shows what I know of unicorn markets
       <wumpus>  LukeJr: yes, I"m trying to farm them and sell them,
                 but I have more now than atoms in the knows universe
                 so you could say the supply is more than the demand...

参与者

IRC 昵称 姓名/匿名
BlueMatt Matt Corallo
wumpus Wladimir van der Laan
gmaxwell Gregory Maxwell
LukeJr Luke Dashjr
skeees Jesse Cohen
jamesob James O’Beirne
jnewbery John Newbery
sipa Pieter Wuille
cfields Cory Fields
MarcoFalke Marco Falke
jonasschnelli Jonas Schnelli
sdaftuar Suhas Daftuar
jimpo Jim Posen
promag Joao Barbosa
jtimon Jorge Timón
achow101 Andrew Chow
jcorgan Johnathan Corgan
kanzure Bryan Bishop

免责声明

此摘要是在未征求讨论参与者任何意见的情况下编写的,因此任何错误均由摘要作者负责,而非讨论参与者。特别是,摘自讨论的引语对其大小写、标点符号和拼写进行了修改,以生成一致的句子。括号中的词语和片段,以及背景叙述和说明,均由本摘要的作者添加,可能会意外地改变某些句子的含义。如果您认为有任何引语脱离了上下文,请与我们联系,我们将更正错误。