从零开始学习比特币源码-大纲
前期准备
基础的C++知识,阅读比特币白皮书,《精通比特币》第二版
比特币的开发文档
比特币中本聪客户端源码(原始并且简单的源码),最新版本的比特币代码迭代了太多版本,新手很难一下子弄懂,中本聪发布的第一个版本的代码足够我们入门了。
计划
比特币中本聪客户端的代码数量并不庞大,约16000行,但是,总体涉及非常多领域的知识和新概念。
很容易就陷入代码的海洋不能自拔,看不懂,理解不了。
我们可以分小块,逐个攻克。为了更容易理解,我们在阅读代码的时候,处理要关心代码的执行流程,也不能离开相关的重要的数据结构
- 比特币客户端启动,退出
当我们运行一个比特币客户端的时候,必然有一系列的初始化过程。由于比特币是一个基于C++语言,wxWidgets UI框架的GUI客户端,所以,它的启动流程和我们平时看的不太一样。
同理,当关闭一个比特币客户端,必然需要进行资源的清理。
我们可以先简单了解些比特币启动的初始化操作,退出的清理操作,为下一步分析建立信心。
比特币的交易构造
比特币的主要功能就是将比特币发送给某人。
首先就需要创建一个交易,交易本身只是谁支付给谁以及他支付了多少的记录。与其他比特币应用程序沟通
新创建的交易需要广播给其他连接到比特币网络的应用程序。
比特币节点之间使用对等协议(p2p)通信,无需中介服务器挖掘一个区块
一个比特币的节点接收到足够多的交易后,把它们组合成一个区块,并通过工作量证明。
然后区块被广播到所有网络。维护区块链
一个节点接收到新块,比特币应用程序会尝试先验证所有的交易,验证工作量证明,然后把这个节点链接到上一个节点上面。每个节点都要自己的本地区块链,整个比特币网络以合法的最长的区块链为共识。
相关资料:
有关比特币协议如何工作的信息,请参阅原始智能白皮书:
http://bitcoin.org/bitcoin.pdf
关于bitcoin.it Wiki的文章:
https://en.bitcoin.it/wiki/Category:Technical
特别提及协议规范: