Bitcoin Core 开发流程简介

  • BTCStudy
  • 发布于 2022-09-24 19:36
  • 阅读 17

本文是Jimmy Song撰写的关于如何为Bitcoin Core做贡献的指南,面向有一定编程基础并希望参与比特币开发的开发者。文章详细介绍了贡献流程、所需技能、环境搭建、测试方法以及如何进行代码审查。强调了谦逊、学习和耐心在贡献过程中的重要性,并鼓励新手从评审和测试他人代码开始,逐步提升自己的贡献能力。

作者:Jimmy Song

来源: https://bitcointechtalk.com/a-gentle-introduction-to-bitcoin-core-development-fdc95eaee6b8

如果你是一个开发者而且拥有比特币,给 Bitcoin Core 作贡献可能是你助力投资的最好办法之一。在本文中,我会给 Bitcoin Core 软件的贡献流程作一个轻松的分步介绍。

你想成为 Bitcoin Core 开发者吗?

在我们讨论为 Bitcoin Core 作贡献的实际细节之前,有几件事得先明确。

首先(也是最重要的),Bitcoin Core 是一个精英治理体系。作为一个初学者,你想提出一个对比特币工作量证明的变更并让它合并到 Bitcoin Core 代码库中是不太可能的。就像其它精英体制一样,你要从默默无名开始,自己努力前进。

好消息是,在这里也没有人在乎你的背景。无论你是一个 14 岁的印度少年,还是一个世界 500 强公司的 45 岁 CTO,唯一重要的是你的工作质量。

相应的坏消息,就是你必须自觉把你的自大丢在一边。没人在乎你有多少年的工作背景、你有多么棒的想法来修复比特币的缺点。你的代码、评审意见、文档和测试的质量,是大家唯一重视的事。

其次,你应该相应调整自己的预期。重要的 Bitcoin Core 开发者,比如 Pieter Wuille、Cory Fields 和 Gregory Maxwell,都是在 多年 的呕心沥血和笑泪相加之后才得到尊重的。提出一个矫正了拼写错误的 PR 不会让你获得 Pieter Wuille 那样的尊重。优秀的工作会让你获得理解和尊重,但也只有在你持续产出一段时间以后。

第三,这条路不好走。能够成为某个公司的顶级开发者,并不必然意味着你能成为一个好的 Bitcoin Core 开发者。这里面有许多原因,但总的来说,你的工作必须符合非常高的测试、文档和代码评审标准,这一切甚至在非常有能力的技术公司中也不常见。

这一切的意思就是说,如果你拥有谦虚的品质、自我驱动力和追求卓越的愿望,那么为 Bitcoin Core 作贡献将让你成为一个更好的开发者、代码评审员、文档撰写人和测试员。

前提条件

你需要一些知识和技能才能开始。

Bitcoin Core 主要是用 C++Python 两种语言编写的。如果你想参与开发,你可能两种语言都得至少懂一点。

源代码控制是通过 Git 来管理的。最起码,你要懂得如何 从远程仓储 fetch、创建新的主题分支以及 rebase。如果你要测试其他人的代码,你还得懂得如何为你本地的开发环境添加多个代码库,这样你才能 fetch 和测试代码。

Bitcoin Core 所有的代码变更都是通过基于 Github PR 请求的 PR 来合并的,所以你需要一个 Github 账户

最后,你还需要知道如何在你的平台上 安装和移除代码包。这个操作非常细致,但很有用,比如在你想按需要添加和移除 ZMQ 的时候。

起步

起步要做的第一件事是阅读文档。这份 README贡献手册 都是很好的起点。

然后,请转到 doc 目录并阅读那里的 README 文档。doc 目录中所有的文档都可以在 README 中找到,所以你无论是迷失了还是感到困惑了都可以跳转回来。

注意,你不需要理解我推荐的所有文档里面的所有东西。在 IRCStackExchangeSlack 上你会遇到许多友好的人,可以帮你解答你不理解的东西。

从源代码构建

现在你已经知道开发的基本工作模式了,可以从源代码构建了。首先,克隆 Bitcoin Core 的 Git 仓库:

git clone git@github.com:bitcoin/bitcoin

下一步是设置你的开发环境。这一步主要取决于你使用的平台,但编译时你经常需要做的事,所以值得细说一番。

此外,你还需要运行所有的完整性测试,所以在执行下列指令时请确保打开了 GUI 和 ZMQ。

设置好你的环境之后,如果某部分没有正常运行,请先在谷歌使用错误信息搜索,然后再提交文档 PR。如前所述,IRC、StackExchange 和 Slack 是很好的资源,但请不要做伸手党(问过于简单的问题),这样会浪费所有人的时间。

测试

现在你编译好了所有东西了,下一步是测试软件。幸好,Bitcoin Core 安排了多种多样的单元和完整性测试,可以检查你编译出来的软件是正常的。

首先,在本地运行单元测试( 手册在此)。单元测试是跟其它所有东西一起编译的,所以你只需要运行最终的二进制就好。确保所有测试都通过了。如果某些测试没通过,可能你漏掉了一些指令。

所有的单元测试都通过了,你就可以在本地运行完整性测试了( 手册在此)。你可能想要运行扩展测试(extended tests)。修剪测试(pruning test)的某些任务会很费时间,所以你以后运行完整性测试时可能会排除掉其中一些。

同样,你要确定所有测试都通过了。在最终的测试结果出现之前,你会在窗口里看到很多点。如果有测试没通过,就说明你可能漏了某些指令。不过有时候,一些基于 RAM 和 CPU 的完整性测试会有点反复无常。

贡献的分类

现在,你的系统已经搭建好了,你可以开始作贡献了!

你可能会认为,贡献就是添加一堆代码、发送一个 PR 然后等待圣杯降临。事实上,许多工作都是围绕着评审和测试人们提交的代码展开的。评审和测试可以帮助你理解一个 PR 得到合并的所有步骤。

  1. 某人创建了一个变更,并通过一个 Pull Request(PR)提交了代码。
  2. 一个或多个人评审代码。
  3. 一个或多个人测试代码。
  4. 足够多的人评审及测试代码之后,代码库的一个管理员会合并这段变更 —— 只有少数几个人有权限做这件事。

大部分人都误以为给一个开源项目贡献的唯一方式就是贡献代码,实际上,测试和评审对项目的成功更加重要。缺乏评审和测试通常是出现安全漏洞的原因,就像我们在最近的 以太坊 Parity 客户端 Bug 中看到的那样。

最后,评审代码及测试不仅对项目有好处,对你也有好处!评审和测试会迫使你学习代码,给你更加深刻的理解,甚至比写代码还要多。

起步

为了熟悉贡献流程,你 不应该 从一开始就添加大量 PR。相反,作为一个新手,你最好从评审和测试其他人的代码开始。评审和测试往往也是瓶颈,所以你可以在贡献的同时为自己获得一些声誉。

值得一提的是,你知道为什么 Greg Maxwell 在开发者中拥有这么好的名声吗?因为他是一个非常棒的评审员和测试员。在指出代码可能会打破一些东西时,他拥有世界一流的耐心;他评审和测试的代码远比他自己编写的要多。我保证,在你自己评审和测试了一些代码之后,你会更佩服他。

此外,代码通常是一次写成,却要被阅读很多次。因此代码的评审是一个重要得多的步骤,因为它会暴露一段代码 “好不好读”。这里的经验法则是,你每发起一次 PR,都需要阅读三个 PR。在一开始,你的阅读比例甚至要比 3 更高。

如何评审代码

一般来说,你得先理解一段代码要做什么,然后才能为它给出高质量的评审意见。就像编程领域的老生常谈:写代码易,读代码难。所以你要花一些时间来深入理解代码。

为了理解一个 PR 的内容,你需要找出被使用的函数和方法,并在代码环境中仔细测试。如果你感到困惑,而写代码的人刚好在 IRC 中,你可以直接提问。大部分时候,PR 作者都非常欢迎评审员,因此会很乐意帮助你。

就像你评一篇文章或者一本书一样,你有许多需要关注的维度:

  • 这段代码是否做了它该做的事?
  • 这段代码是否经过了充分的测试?
  • 所有的注释都是有用、准确的吗?
  • 代码是否清晰、易于在未来修改?

一般来说,如果你发现代码的工作方式不同于你的想法,最好假设你其实搞不懂它在做什么,而不是开始说教。谦虚和机智可以让你走得更远。请记住,你这是在评论别人的 “孩子”。至少,你在一开始不妨问一些问题,绅士一点。通常来说这些程序员既不了解你,也不了解你的意图,所以要耐心一点。而且要分清楚到底是代码风格上的瑕疵,还是会导致程序崩溃的大问题。最好表现得像个尝试理解优化点在哪儿的学生,而不是一个门卫。

在你确定一段代码的目标之后,你就可以评论这个特性值不值得实现了。不过,在你建立起声誉之前,请不要表达可能被解读为负面意见的评论。

评审完代码之后,请使用 合适的同行评议风格,在 RP 页面留下你的评论。如果你想表达否定意见,请重新开始,假设你并没有理解代码,跟作者交谈并提问,知道你可以保证这是一个糟糕的 PR。即使如此,也应该跟更有经验的讨论,以交叉验证。

如何测试

为了合理地测试,你必须从 PR 下载代码、再一次编译并运行测试。如果你可以想出一种手动测试新特性的方法,那当然好,但不是必需的。

大多数时候,PR 都包括了一项乃至更多测试。如果 PR 作者并没有提供测试覆盖率(test coverage),请多多理解 —— 重构一般不会因为明显的原因而失败。如果你认为某处应该有测试,你可以留下评论:“此处应该有测试”。最好你可以自己写一个测试,并让作者知道可以放在 RP 的什么地方!这是在你的评审对象中建立好印象的最好方法。

你的工作是测试,你要确保 PR 可以通过测试,而且测试的内容足以覆盖新引入的功能。在评审中,一种比较好的评论语气是:“要是测试能够覆盖这些那些场景,并测试这个和那个,那就更好了。”

在测试之后,确保自己在 PR 中留下评论表示你测试过了。

更好的 PR

最终,你将成长到自信可轻松创建属于你的 PR。一个 PR 可以是任何内容,从添加文档到对共识关键的功能。无论变更的内容是什么,创造好的 PR 的秘诀都在于使之易于阅读、易于评审。

为此,请不要在你的 PR 中一次提交 3000 行代码,这会折磨你的评审员。将这些变更切分成小于 300 行的、易于评审的提交形式(甚至应该少于 100 行),然后恰当地分组。举个例子,你应该将格式更改放到一次提交中,而把编码更改放到另一次提交,把代码块的大变动放在另一次提交中。

当评审员指出了某些东西或者提出了修改建议时,尝试理解背后的理由。如果你不理解,请提问,直到你理解了他们想让你干什么。如果你同意,作合适的修改并让你的评审员知道;但如果你不同意,请确保你跟他们开展了成熟、机智的对话,看看你能如何获得他们的认可。

适合起步的 PR

这是一些你现在可以贡献的 PR 点子(请记住,提一个就要读三个!)

  • 制作文档,尤其是关于安装软件的,要清晰
  • 为还未测试的东西编写单元和完整性测试
  • 为尚未文档化的代码编写注释,以帮助其他人理解

结论

Bitcoin Core 所用的软件开发习惯跟其它领域的惯例有所不同。大部分加入 Bitcoin Core 开发的人都认为这个流程过于严格。但我向你保证,每一笔都是有原因的。

请记住,要礼貌、温和及明智。谦逊的态度和学习的愿望,不仅会帮助你成为一个更好的开发者,还会让你成为比特币社区的一股正面力量。

感谢 Aaron T casewll

(完)

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BTCStudy
BTCStudy
https://www.btcstudy.org/