2017-02-23 IRC 会议总结
概述
主要议题
- Git 和 SHA1 冲突
- 比特币核心 0.14.0 版本发布
- Travis CI 问题
- 代码重构
Git 和 SHA1 冲突
背景
在会议开始前几个小时,几名研究人员宣布他们已经产生了第一个案例,即两个不同的文件在使用 SHA1 哈希函数时具有相同的哈希值(这种情况称为哈希冲突)。
比特币核心和许多其他项目使用的 Git 版本控制系统使用 SHA1 哈希值来让人们确保他们拥有完全相同的代码。生成 SHA1 冲突的能力破坏了这种保证。
多年来,许多安全界成员一直在要求 Git 将 SHA1 更改为 SHA256 或其他更安全的哈希函数,但 Git 开发人员强烈反对这种更改(可能是因为它向后不兼容,这意味着所有 Git 用户可能都需要在几乎相同的时间进行升级)。
评论
讨论最初集中在澄清情况的严重程度,然后转向描述比特币核心项目在等待 Git 开发人员发布更安全的程序时可以处理此问题的潜在方法。提出的解决方案包括
-
“我想知道创建覆盖层以回溯历史、计算每个树和提交的 sha256,然后在这些内容上包含 GPG 签名有多难?”(Pieter Wuille)
-
“我们可以更新我们的开发脚本以对所有已提交文件执行 sha256sum 并对该文件进行签名 [...] 例如,合并脚本可以将 sha256sum * 的哈希值包含在提交消息中”(Matt Corallo)。 Gregory Maxwell 几乎同时提出了类似的建议。
-
“我有一个针对 Git 的补丁,可以使用 [sha1collissiondetect] 作为哈希函数,并在检测到潜在的错误哈希时中止()。”(Matt Corallo)
结论
没有达成明确的结论,但开发人员可能会调查上述某些或所有解决方案,同时 Git 开发人员也会努力升级他们的程序。
比特币核心 0.14.0 版本发布
注意,此标题涵盖了会议中的两个相关主题:(1)“帮助 cfields 添加与性能相关的发布说明”和 (2)“RC2 状态”。
背景
在上一周的会议之后,比特币核心 0.14.0 的第一个候选版本 (RC1) 发布了。没有发现重大问题,但仍然有一些小问题修复和功能需要合并。
0.14.0 中的许多重大升级都是性能改进。
会议评论
Wladimir van der Laan 要求在场人员提出量化性能改进的方法,以便 Cory Fields 可以执行任何建议的测量并将结果添加到 PR#9787 中的发布说明。
Gregory Maxwell 建议说:“与上次版本同步需要 N 小时,与新版本同步需要 Y 小时。”
Fields 同意说:“好的,我会添加一个模糊的 0.13 与 0.14 同步时间。不过,0.13 会花费时间,我还没有耐心完成一个。”
Jeremy Rubin 建议使用 Amazon EC2 作为测试环境,但 Wladimir van der Laan 提醒说:“EC 不是一个好的比较环境:I/O 太慢”。Fields 回复说:“我使用 EC 进行同步基准测试,因为我认为它代表了一个非常典型的用例。”
讨论转到了第二个候选版本 (RC2),该版本似乎已准备好标记到 Git 中,除了一个小翻译更新和 PR#9829 已准备好合并,但 Travis 持续集成 (Travis CI) 测试失败。
结论
Cory Fields 将在 EC2 上执行初始同步的测试(此操作已完成,比特币核心 0.14.0 在初始同步方面的性能比比特币核心 0.13.2 快 5.7 倍)。在作者 Russell Yanofsky 表明他认为这些测试失败是由于 Travis CI 的间歇性问题后,PR#9829 的测试重新启动了。
会议结束后,RC2 被标记了。
Travis CI 问题
背景
比特币核心开发使用 Travis CI 测试平台对每个拉取请求 (PR) 运行项目的测试。这些测试仅在 PR 中的代码存在问题时才应失败,但有时这些测试会因与 Travis CI 相关的原因而失败。过去,这些问题包括 Travis 的错误以及比特币核心达到 Travis 的资源限制。
评论
在会议前大约一周,测试可执行文件 test_bitcoin
在 Travis CI 测试期间开始间歇性地失败。问题 9825 被打开来诊断问题并寻找解决方案。
会议评论集中在测试代码如何为构建日志创建堆栈跟踪,以及如何更改测试以获取可执行文件、核心转储以及其他构建和测试工件以供开发人员分析。
结论
继续调查故障,隔离问题,并努力修复它。
代码重构
背景
许多经济型完整节点使用比特币核心来执行共识规则。其他程序将从重用比特币核心使用的相同代码中受益,以确保它们符合共识规则,因此一些开发人员一直在努力使比特币核心代码库更加模块化,以便其部分内容可以在其他程序中使用。
尽管使代码库更加模块化的目标得到了项目贡献者的良好支持,但实际上移动代码往往会破坏其他开发人员的待处理更改,并消耗专家可用于审查比特币核心更改的宝贵时间,同时不会提供任何新功能或性能改进。这使得代码移动成为团队讨论的好主题,以便可以提前就更改达成一致,从而最大限度地减少中断。
评论
Jeremy Rubin 开始说:“我有一个 [概念证明] 分支,将大多数纯数据结构移动到一个 datastructures 目录。”他补充说:“非比特币特定 [数据结构]。例如,prevector。”
Gregory Maxwell 回复说:“我不认为我们中的任何人都关心维护像 prevector 这样的东西以供其他用途。创建一个好的库需要大量的努力。”
Wladimir van der Laan 同意说:“我认为比特币数据结构库没有意义。如果我们提供一个库,它应该对比特币用户有用。”
结论
会议期间没有明确结论(会议在此议题上时间用完)。会议结束后,Maxwell 和 Wladimir van der Laan 继续讨论,进一步阐述了他们的观点。
轻松一刻
<jonasschnelli> or syncs are roughly XYZ% faster...
<jonasschnelli> use the ~ and nobody will blame you afterwards. :)
<jeremyrubin> use two ~~ to be extra approximate
<wumpus> it's marketing not science :p hehe
<gmaxwell> but ~~ will just give you the same number you put in!
<jeremyrubin> The is-approximately operator is non-involutive ;)
<gmaxwell> Well people just have no general idea of the impact. Marketing would be saying that it's 2x faster rather than 3x faster because 2x is more plausible. :P
<gmaxwell> sipa: e.g. someday libstdc++ could get something that generalizes prevector, if it did, we'd drop prevector and use that.
<sipa> c++23
<gmaxwell> sipa: C++23 will just integrate libconsensus of course. template cryprocurrency.
参与者
IRC 昵称 | 姓名/匿名 |
---|---|
achow101 | Andrew Chow |
BlueMatt | Matt Corallo |
btcdrak | BtcDrak |
cfields | Cory Fields |
gmaxwell | Gregory Maxwell |
jeremyrubin | Jeremy Rubin |
jnewbery | John Newbery |
jonasschnelli | Jonas Schnelli |
jtimon | Jorge Timón |
kallewoof | Karl-Johan Alm |
kanzure | Bryan Bishop |
luke-jr | Luke Dashjr |
MarcoFalke | Marco Falke |
morcos | Alex Morcos |
petertodd | Peter Todd |
ryanofsky | Russell Yanofsky |
sdaftuar | Suhas Daftuar |
sipa | Pieter Wuille |
wumpus | Wladimir van der Laan |
免责声明
此总结是在没有征求任何参与讨论的人员意见的情况下编写的,因此任何错误都是总结作者的责任,而不是讨论参与者。