技术研究

走进“比特币代码审查”

微信扫一扫,分享到朋友圈

走进“比特币代码审查”
0 0

6月19日,Chaincode开发者约翰•纽贝里(John Newbery)召集了一组开发人员,以对比特币代码的一项拟议更改进行审查。
 
此次会议通过互联网中继聊天(IRC)展开,主要讨论这一旨在防止流氓矿工膨胀比特币通货的变更是积极且低风险的,还是存有负面影响。
 
因此,纽贝里的目标是将他所掌握的这类代码审查知识分享给其他人。

但这一能阻止“时间扭曲攻击”(timewarp attack)的变更真的可靠吗?
 
纽贝里在解释攻击矢量时写道:“时空扭曲攻击利用了这一点,将难度调整块区推至未来,然后将下一个区块推回到现在。”
 
我们完全可以将这些讨论的开展视作比特币开发者社区成熟的标志之一,因为这表明该项目的顶级程序员们一直在致力于让项目变得更加包容。审查代码的过程以前或许还没有进行过如此公开和深入的讨论。
 
纽贝里成立了比特币核心审查俱乐部(Bitcoin Core Review Club),旨在向程序员们提供建议,以帮助他们理清如何审查一项代码更改并判断它是否对当前加密货币有益。同时,会议记录每周都发布在网站上。
 
这是可能做到的。因为比特币的代码是开源的,其保存在GitHub上,任何人只要能联上网,就可以查看甚至进行代码更改。这一过程将整个项目从代码人员口中的“单一混合(monolithic blob)”转变成了更容易被他们阅读的软件,同时减少了关键漏洞。当前,人们仍在努力对其进行改进,最终目标是使其成为未来货币一个有价值的代码基础。
 
所以,任何人都有可能成为比特币代码的贡献者之一。与私有代码不同,所有人都可以查看和使用比特币代码,即“开源”。
 
它被称为“可编程货币”的原因之一是,与其他数字货币不同,任何具有这方面知识的人都可以尝试为该货币添加新的代码特性。学习代码库的方法之一就是去审查和测试程序员提交的代码,以确保它确实有效,并且不会引入漏洞或酿成灾祸,如意外地将比特币网络一分为二。
 
但是,这么多代码页和如此数百个提议更改却有些让人无从下手。
 
该俱乐部网站解释道:“每周举办的IRC俱乐部那就是为那些想要帮助审查Bitcoin Core的拉取请求(pull request),但却发现整个过程望而生畏的人而设的。”
 
“审查和测试拉取请求是为Bitcoin Core做贡献的最佳方式,但要知道从何处着手确实很难。开放的拉取请求有数百个,其中大多需要大量背景知识,且贡献者和审阅者通常对术语使用不够熟悉。”
 
正因如此,即便这种数字货币的代码是公开的,且任何人都可以查看或更改,但要做到却绝非易事。要掌握该如何审查,审查什么,还得大量实践。
 
下面是审查过程。
任何人都能做到
 
首先,用户可以访问GitHub,这是一个负责托管各种开源代码项目的网站。网站上有一个专门针对Bitcoin Core这一大多数用户运行比特币软件的底层实现代码库。
 
你会看到GitHub有很多功能,但是审查代码主要就是查看“拉取请求”,即整个生态系统的开发人员所提交的供审查的一系列更改。

也就是说,上面有近300项更改还没有经过充分审查,它们尚未被正式添加到代码库中。这些代码有些使描述代码的文档更容易阅读,有些提高比特币的性能,种类和范围很广。
 
从这一点来说,开发人员正试图决定这些更改是否应该给予批准。问题是,有足够经验来审查代码更改从而确定是否应该将它们正式添加到代码库中的开发人员非常有限。正因如此,一位Bitcoin Core贡献者曾将拉取请求列表形容为一个“堆砌奇思妙想的墓地”。
 
这也正是纽贝里试图助力这一进程的原因。
 
那么,如何具体审查一项代码更改呢?正如纽贝里在俱乐部网站上所述,可以从下面几个关键步骤开始,如浏览“Bitcoin Core贡献指南”并使用比特币核心的编程语言C++进行修改。
 
下一步就是选择要审查的更改。面对300多个拉取请求,该从哪里开始呢?对于那些还不了解代码库的人来说,最佳选择是那些被明确标记为“优质问题”(good first issues)的代码更改。
 
当准备工作完成后,开发人员需要“克隆”存储库,或者使用git将代码库复制到自己的计算机上,以便他们可以随时检测更改是否可以按设计运行。
 
只需一个简单的命令就可以将整个代码库复制到你的计算机上了。

现在,你可以查看拉取请求。相关开发人员也可以运行所有“测试”,以确保代码更改不会意外触发另一段代码,然后可以继续检查其余代码。
代码审查者的想法
 
代码审查者需要考虑什么?
 
首先是优先级问题。要去判定一项更改是否应该进行,尤其是那些关键更改,主要基于“粗略共识”,即大多数的活跃贡献者都会同意进行的更改。
 
纽贝里在一次俱乐部会议上说道:
 
“我这样看待创建拉取请求:没有人必须为你作审查。审查你代码的人是在为你帮忙。所以,你所创建的拉取请求不过是在和其他拉取请求一起在争夺审查时间而已。”
 
另一个IRC小组的开发人员在该小组中问到与Bitcoin Core开发相关的问题,纽贝里补充道:
 
“如果有人质疑你提出的拉取请求的实用性,若你对此有疑问,请用# Bitcoin-Core –dev进行提问,或者直接咨询其他贡献者。”
 
这表明,开发人员并不就某一更改是否值得添加总是达成一致。有一周,开发人员集中讨论了一项颇有争议的代码更改。一些认为该更改弊大于利,而其他仍然坚持该更改可能有用。
 
即使所建立的更改总体上被认为是好的,也存在一些次要担忧。如会有漏洞吗?是否有测试确保代码更改按计划工作?这些问题都是在代码审查过程中需要花费大量时间来回答的。
 
例如,在5月29日的一次会议上,开发人员查看了与比特币节点钱包部分性能增强有关的代码更改。
 
一位昵称为“Ariard”的贡献者主持了这次会议,他回顾了他们多年来形成的审查流程。他说道:“我首先试着确定这是哪种类型的拉取请求:Doc、代码风格、漏洞修复、新功能,还是测试添加。因为(在我看来),掌握这些将指导你如何读取提交事务,了解需要多少时间进行审查,以及需要哪些测试。”
 
另一位审查人员指出,他们注意到,检查代码运行的时间(之前和之后)可以带来改进。另一位名为“jb55”的用户说道,“我的10000个密钥导入时间从原来的8分钟缩短为了3秒钟。”
 
会议记录中还包括关于如何简化这一过程并使其更方便审查的其他技巧,并且未来还将安排更多会议。接下来的几个部分将由比特币技术作家兼贡献者大卫•哈丁(David Harding)负责。
展开阅读全文
我还没有学会写个人说明!

比特币的密码学

上一篇

美国加密经济社区CryptoMico接受LBTC作为支付手段

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
走进“比特币代码审查”

长按储存图像,分享给朋友