学习
实践
活动
工具
TVP
写文章

探索比特币源码0-bitcoin的编译

1LSGO软件技术团队

贡献人:马燕鹏

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。

If you like the content here, the greatest helpyou can give meis forwarding, so tell your friends and encourage them to learn together.

前言

区块链领域作为一个新兴的热点,迭代的实在是太快了,刚刚入门,必须要抓紧追赶。

在阅读了一些优秀的文档之后,已经对比特币及其背后的实现技术——区块链有了一定的理解。

为了更深入的理解比特币及其实现技术的各种细节,开始进行比特币源码的学习。

我学习源码过程中遇到的优秀资源,推荐如下,后续会不断更新。

比特币开发者手册 https://bitcoin.org/en/developer-documentation

精通比特币 https://github.com/bitcoinbook/bitcoinbook

比特币其实是一种协议,而这个基于信任协议的第一个实现版本,叫做“比特币(Bitcoin)”或者“Satoshi客户端”。现在它已经被大大的改进了,演变成所谓的比特币核心——Bitcoin Core,以区别于其它兼容的实现方式。

比特币核心是比特币系统的参考实现,这意味着它是如何实施的权威参考。Bitcoin Core实现了比特币的所有方面,包括钱包,交易和区块验证引擎,以及P2P网络中的完整网络节点。

因此让我们从Bitcoin Core入手,学习源码,全面了解比特币。

下载比特币源码

我们使用 命令来创建源代码的本地副本

当 克隆操作完成后,进入到项目中

选择Bitcoin Core版本

在编译代码之前,我们需要先切换到一个稳定的release版本。

首先,要找到可用release的标签,我们使用 命令:

根据惯例,用于测试的发布候选版本具有后缀“rc”

因此我们选一个没有后缀的版本check下来,就选最新的吧

通过输入命令 来确认所需的版本

完成后可以简单观察下比特币项目的结构

配置构建Bitcoin Core

现在尝试构建命令行比特币客户端,也称为比特币(bitcoind)。

我是在Linux下进行,可以在 中查看编译 bitcoind 命令行客户端的说明。

其他系统可以在 doc 目录中找到替代说明,如 macOS 和 Windows 的说明,分别为或。

Bitcoin Core 的构建过程从 0.9 版本开始更改为使用 系统。也就是说,构建的流程如下:

一步步来, 文件是一个shell脚本,我们可以通过使用 脚本生成一组 build 脚本来启动 build 过程。

我们尝试运行 脚本

得到的结果如下:

出现了配置错误,我们需要预先安装

如官方文档所述,很友好的是,它会询问系统以发现正确的设置,并确保你拥有编译代码所需的所有库。

也就是说,它会机智的检查你缺什么依赖,缺什么包。按照 中的提示,各种依赖的安装走一波

再次运行 脚本,成功~

目前我还不了解shell,但我又有点好奇 脚本都做了什么,于是调用如下命令,查询当前目录下的文件及最后修改时间,并按时间排序:

仔细对比,可以看出脚本没有在当前目录下生成新文件,但修改了如下文件:

这些都是和配置有关的,其中最重要的是 脚本,它提供了许多不同的选项来自定义构建过程。

键入 查看各种选项:

看的有点蒙,也不得不说,功能真强大!

脚本允许您通过使用 和 标志来启用或禁用 bitcoind 的某些功能,其中 FEATURE 由功能名称替换,如帮助输出中所列。

我还没有搞清这些功能,这里我们构建具有所有默认功能的 bitcoind 客户端。 我们不会使用配置标志。

调用 脚本,报了这样一个错

错误显示,我没有安装钱包的一个依赖库

这才回想起来,错误原因一定是我偷懒了,没有把 读完,所以重要的事情说三遍

仔细阅读 文档,并安装所有的依赖项!

仔细阅读 文档,并安装所有的依赖项!

仔细阅读 文档,并安装所有的依赖项!

认真安装所有依赖项后,重新运行 脚本,成功~

构建Bitcoin Core可执行文件

下一步,编译源代码,这个过程根据 CPU 和内存资源不同,但一般可能需要 1 个小时完成。输入 命令就可以开始编译了:

如果一切顺利,bitcoind 现在已经编译完成。

最后一步就是通过 命令,安装 可执行文件到你的系统路径下,可能会提示您输入用户密码,因为此步骤需要管理员权限:

默认的安装位置是 。你可以通过询问系统下面 2 个可执行文件的路径,来确认 是否安装成功。

从当前来看,我觉得对编程爱好者最友好的就是区块链领域了,因为这个领域中所有的代码都是开源的,代码决定一切!哪怕项目方牛皮吹得天花乱坠,也不可能忽悠到我们,只有代码最可靠!为了更好的了解区块链这个领域,目前 LSGO软件技术团队 的一个小组,正在看BTC的源码,这是他们提交的学习成果!如果你对区块链领域感兴趣,可以加入进来,大家一起学习!

经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。

欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。

本微信公众平台长期系统化提供有关机器学习、软件研发、教育及学习方法、数学建模的知识,并将以上知识转化为实践。拒绝知识碎片化、耐心打磨技能、解决实际问题是我们的宗旨和追求。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180730B00LTY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券