Home 比特币源码学习-区块头验证
Post
Cancel

比特币源码学习-区块头验证

最近开始看比特币的源码(版本 0.17),会逐渐更新一些文章。

这篇学习下“验证区块头”的流程。

从 ProcessNewBlockHeaders(validation.cpp)开始:

下面是 AcceptBlockHeader (validation.cpp)函数:

这里面主要有两个函数:

  • CheckBlockHeader ,根据当前区块头提供的信息,检查这个区块头本身,即 PoW 是否有效
  • ContextualCheckBlockHeader,这个就不止根据当前区块的信息了,还要考察当前提供的信息是否有效,时间、checkpoint 等,很多方面,这主要是靠之前区块的信息,所以叫做上下文检查。

下面就一个个看下,先是 CheckBlockHeader(validation.cpp) :

CheckProofOfWork (pow.cpp):

ContextualCheckBlockHeader(validation.cpp) :

GetNextWorkRequired(pow.cpp):

MedianTime < 区块的时间戳 <= 现在时间 + 2h,这里的 MedianTime (chain.h)是取之前 11 个区块的中间时间。

checkpoint (chainparams.cpp)当前的代码中包含下面这些:

CalculateNextWorkRequired(pow.cpp):

到这里区块头的检查和记录就完成了,整个流程涉及到的文件:

  • validation.cpp
  • pow.cpp

  • chainparams.cpp
  • chain.h
This post is licensed under CC BY 4.0 by the author.