天天看点

如何加入比特币核心开发的介绍

如果你是开发人员并且你拥有任何比特币,那么为比特币核心做出贡献可能是你可以做的最好的事情之一,这可以帮助你进行投资。在本文中,我将简要介绍如何为Core开发做出贡献。

你想成为核心开发者

在我们深入了解为Core做出贡献的实际细节之前,需要了解一些可以解决问题的注意事项。

首先,比特币核心是高标准的。作为一个菜鸟,你不太可能将疯狂的工作量证明变更后提交请求合并到Core中。像任何高标准管理一样,你从零声誉开始,一路向上。

好消息是没有人关心你的背景。无论你是14岁的印度人还是45岁的财富500强公司的首席技术官,唯一真正重要的是你的工作质量。

坏消息是你必须愿意把自己留在门口。没有人关心你有多少年的经验或者你有什么好主意来修复比特币。你的代码,评论,文档和测试的质量是重要的。

其次,你应该相应地设定你的期望。值得注意的核心开发人员如Pieter Wuille,Cory Fields和Gregory Maxwell通过多年的血汗,泪水赢得了他们的尊重。添加一个纠正拼写错误的PR并不会赢得Pieter Wuille级别的尊重。好的工作会赢得你的认可和尊重,但只有在你生产了一段时间之后。

第三,这不是一条容易的道路。成为X公司的顶级开发人员并不一定会让你成为一名优秀的核心开发人员。造成这种情况的原因有很多种,但总的来说,你的工作必须满足一些非常高标准的测试,文档和代码审查,即使是非常称职的技术公司也是如此。

总而言之,如果你拥有谦逊,追求卓越的追求,那么Core的贡献将使你成为更好的开发人员,代码审阅者,记录员和测试人员。

先决条件

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

比特币核心主要有两种语言,C++和Python。如果你希望贡献,你最有可能必须学习至少其中一些。

源代码控制通过Git进行管理。至少,你应该知道如何从origin获取,如何创建主题分支以及如何rebase。如果你正在测试其他人的代码,你还应该知道如何将多个存储库添加到本地开发环境中,以便你可以获取并测试代码。

对Core的所有更改都在Github上以PR为基础合并,因此你需要一个GitHub帐户。

最后,你需要知道如何在平台上安装和删除软件包。这些说明非常详细,但它可以帮助你根据需要添加和删除ZMQ。

开始

开始时你想要做的第一件事是阅读一些文档。 README文件和贡献指南是开始的好地方。

然后,转到doc目录并阅读那里的README。doc目录中的所有文档都在README中描述,因此如果你在任何时候迷路或困惑,可以参考它。

请注意,你不必了解我建议的每个文档中的所有内容。如果你遇到一些你不理解的东西,IRC,StackExchange和Slack上有很多非常好的人可以帮你。

从源代码构建

既然你已经阅读了开发应该如何工作的基础知识,那么首先要从源代码构建比特币。首先,克隆比特币Git存储库:

git clone [email protected]:bitcoin/bitcoin
           

下一步将是设置你的开发环境。这在很大程度上取决于你所使用的平台,但编译是你需要经常进行的操作,因此将这部分放下来是非常值得的。

此外,你还需要运行所有集成测试,因此请务必在执行以下说明时打开GUI和ZMQ。

  • linux/unix说明在这里。
  • osx说明在这里。
  • Windows说明在这里。
  • openBSD说明在这里。

在你设置环境时,如果某些内容无效,请在提交文档PR之前先Google错误。如前所述,IRC,StackExchange和Slack是很好的资源,但请不要问简单问题而且耗尽每个人时间。

测试

既然你已经编译了所有内容,那么下一步就是测试软件。值得庆幸的是,比特币核心有各种单元和集成测试,以检查你刚刚编译的软件是否正常工作。

首先,运行位于此处的单元测试。单元测试与其他所有内容一起编译,因此你需要做的就是运行生成的二进制文件。检查所有测试是否通过。如果他们不这样做可能会错过一些指令。

如果所有单元测试都通过,请运行此处的集成测试。你将要运行扩展测试。特别是修剪测试需要很长时间才能运行,因此你希望在将来运行集成测试时排除该测试。

再次,检查所有测试是否通过。在最后显示摘要之前,你将看到很多点。如果某些事情没有通过,你可能会错过一些指令,尽管有时候,一些集成测试可能会因RAM和CPU而变得有点浮躁。

贡献类别

现在你已经设置了系统,你可以开始贡献!

你可能认为贡献意味着添加一堆代码,发送PR并获得荣耀。实际上,很多工作都围绕着其他人提交的审查和测试代码。它有助于理解PR如何合并所涉及的步骤。

  • 有人创建更改并通过Pull Request(PR)提交代码。
  • 一个或多个人查看代码。
  • 一个或多个人测试代码。
  • 当有足够的人审查并测试代码时,维护者将合并代码,只有少数人可以这样做。

大多数人认为对开源项目的贡献只是贡献代码,但实际上,测试和审查对项目的成功更为重要。正如我们在最近的以太坊奇偶校验中看到的那样,缺乏审查和测试通常是许多项目中出现安全漏洞的原因。

审查和测试也很关键,因为通常很难有涵盖所有案例的对抗心态。有许多眼睛看并测试代码有助于发现可以利用代码的可能方式。

最后,不仅审查和测试对项目有益,而且它们对你有好处!审查和测试将迫使你了解有关代码库的更多信息,并且甚至比编写代码更能让你理解。

开始

为了适应贡献过程,你不应该首先添加大量的PR。相反,作为一个没有声誉的新开发者,最好的办法是开始审查和测试其他人的工作。审查和测试往往是瓶颈,因此你可以同时在社区中贡献并赢得一些声誉。

值得一提的是,Greg Maxwell在开发人员中享有如此良好声誉的部分原因是他是一位非常优秀的评论家和测试人员。当他找到可能破坏的方法时,他拥有世界级的才能,他审查和测试的代码多于写作。我保证在你自己审查并测试一些代码之后,你会更加感激他。

此外,代码通常只写一次,但它读了很多次。因此,审查是一个非常重要的步骤,因为它揭示了代码的“可读性”。一般的经验法则是,对于你执行的每个pull请求,你应该查看大约3个pull请求。一开始你可能希望这个评论比率pull请求更高。

如何评论

通常,在了解代码执行的操作之前,你将无法对Pull请求进行良好的审核。正如他们在编码中所说,写作比阅读容易得多,所以花些时间来真正理解代码。

通常,为了掌握PR中发生的事情,你必须查找正在使用的函数和方法,并仔细检查代码的上下文。如果你感到困惑,并且你正在审核的代码在IRC上,你可能需要直接提问。大多数时候,公关作者非常感谢评论者,并乐意为你提供帮助。

就像回顾一篇文章或一本书一样,你应该注意很多事情,即:

  • 代码是否在做它应该做的事情?
  • 代码是否经过充分测试?
  • 围绕代码的所有评论是否有用且准确?
  • 代码是否清晰,以后可以轻松修改?

作为一般规则,如果你不同意某些事情的完成情况,最好假设你不了解正在发生的事情而不是开始长篇大论。理智和机敏会让你在这里走很长的路。记住,你是在很多方面评论某人的孩子。提问并温和,至少在开始时。通常情况下,这些程序员不了解你或你的意图。当一些东西是一个小问题而非一个可能破坏某些东西的重大问题时,要非常清楚。听起来像学生试图掌握改进的内容比偷听更好。

一旦你确定代码试图实现的是什么,那么你可以评论这是否值得做。在你建立一些声誉之前,请远离任何可能被认为是消极的评论。

查看完代码后,请使用适当的同行评审评论对PR进行评论。如果你想要NACK,请重新开始并假设你不明白发生了什么,与作者交谈并提出问题,直到你肯定这是一个糟糕的公关。即便如此,与更有经验的人交谈以确保。

如何测试

为了正确测试,你必须从pull请求下载代码,再次编译并运行测试。如果你能想到一种以某种方式手动测试该功能的方法,那就更好了,但这不是必需的。

大多数情况下,pull请求将包括一个或多个测试。如果编码器没有提供测试覆盖,请尝试理解为什么,重构通常不会出于明显的原因。如果你认为应该进行测试,你可以在PR中写下“这需要测试”。更好的是,自己编写测试并让作者知道它可以在公关中挑选出来!这是一个很好的方式来建立你正在审查的代码的人的一些善意。

你作为测试人员的工作是确保测试通过,并且他们充分涵盖了所引入的功能。评论中的一个好评可能是“如果这样的情况可以被做到这一点的测试所涵盖,那就太好了”。

经过测试,请务必在PR中注明你已经过测试。

更好pull请求

最终,当你感觉自己创建自己的pull请求时,你将达到一定程度。pull请求可以是从添加文档到共识关键功能的任何内容。无论发生什么变化,提出良好pull请求的关键是让它易于理解,无需审查。

为此,请不要通过让你的公关单一次提交3000行更改来折磨你的审稿人。将这些更改分成易于审核的提交,少于300行(或者可能少于100行!)并进行适当分组。例如,你应该将格式更改放入一个提交中,将实际编码更改为另一个中的另一个代码块的大型移动。

努力解释你正在做什么以及你在每次提交中所做的事情背后的原因。我不能足够强调这一部分。逆向思考使PR中的所有内容都易于理解!如果你不这样做,你将不会让任何人审查你的代码。

当评论者评论某些内容或建议更改时,请尝试了解其原因。如果你不理解,请询问,直到明确他们想要你做什么为止。如果你同意,请进行适当的更改并让你的审核人员知道,但如果没有,请确保你与他们进行成熟,机智的对话,以了解如何获得他们的确认。

开始时的PR理念

以下是你可以立即提供的一些公关想法(请记住,请查看你提交的PR的3倍!)

  • 制作文档,特别是有关设置的文档,清晰。
  • 为尚未测试的东西编写单元或集成测试。
  • 在未记录的代码中编写注释以帮助其他人找到自己的方式。

结论

比特币核心使用的软件开发实践在其他环境中通常不会被遵循。进入Core开发的大多数人发现这个过程过于严格和限制。我保证每一步都有理由。

记住要有礼貌,温柔和委婉。以谦虚的态度和渴望学习的方式进来,这将使你不仅成为更好的开发者,而且还成为比特币社区的优秀力量。

======================================================================

分享一些比特币、以太坊、EOS、Fabric等区块链相关的交互式在线编程实战教程:

  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、频道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是比特币核心开发的介绍