比特币源码研读(共识算法)之一(草稿)

2017-08-18  本文已影响293人  施二聿行

我加入的higer主持的一个区块链技术社区,简直就是疯狂的区块链中的一股清流。那些对白皮书说的头头是道的人,白皮书真能代表团队技术实现度吗??最终还是需要技术!技术!需要代码实现!代码!

是一篇比特币源码阅读笔记。我们十几个小伙伴正在阅读比特币源码,我领到的模块是共识算法。参考资料《Mastering Bitcoin》,和一些论文。

比特币代表了数十年的密码学和分布式系统的巅峰之作,汇集了四个关键的创新点。比特币由这些构成:

1. 一个去中心化的点对点网络(比特币协议)

2. 一个公共的交易账簿(区块链)

3. 一个去中心化的数学的和确定性的货币发行(分布式挖矿)

4. 一个去中心化的交易验证系统(交易脚本)

(摘自《mastering bitcoin》)

>> 工具

用的是mac,第一次用mac看代码,源码阅读工具选定为:Sublime Text 2

validation.cpp, file size 199k, 4414 lines

查询函数调用关系,跨文件查找还是不如当年sourseinsight方便,有好工具,希望推荐给我,O(∩_∩)O 谢谢!

相关文件:src/validation.cpp,文件199k,4414行(大家伙呢...)

重点函数:ConnectBlock()

每个区块里包含着从上一个区块产生到目前这段时间内发生的所有交易,这些交易被依次添加到区块链中。把包含在区块内且被添加到区块链上的交易称为“确认”交易,交易经过“确认”之后,新的拥有者才能够花费他在交易中得到的比特币。

函数 AcceptToMemoryPool

|__ AcceptToMemoryPoolWithTime

|__ AcceptToMemoryPoolWorker  // 接受交易,存入交易池

函数 GetTransaction

函数 WriteBlockToDisk // 包含 类 CBlock and 类 CBlockIndex

函数 ReadBlockFromDisk

函数 GetBlockSubsidy

函数 CheckForkWarningConditions

函数 CheckForkWarningConditionsOnNewFork

函数 InvalidBlockFound

函数 UpdateCoins

|__ AddCoins(inputs, tx, nHeight); // 添加输出,当前区块高度

函数 GetSpendHeight // 当前添加区块高度为之前高度+1

函数 FlushStateToDisk //

重点函数 CheckInputs // 检查所有本次交易的输入是否都合法

重点函数 ConnectBlock 

|__ CheckBlock  用给定的index应用新增区块。如果校验失败,则新增区块失败

|__UpdateCoins

函数 ProcessNewBlock

|____ AcceptBlock

|____ CheckBlockIndex

类 class ConnectTrace

函数 UpdateTip

函数 DisconnectTip

函数 ConnectTip

函数 ActivateBestChainStep

|___ ConnectTip  连接新的区块

函数 ActivateBestChain

重点函数 GenerateCoinbaseCommitment

|___ UpdateUncommittedBlockStructures

上一篇 下一篇

猜你喜欢

热点阅读