之前学习了隔离见证,这篇主要介绍下生成区块的流程,中间会有部分前面提到的函数。
generatetoaddress(mining.cpp) 是 cli 用来给特定地址生成区块的命令,从这个函数开始。
其中的 DecodeDestination(key_io.cpp) 之前在看隔离见证的时候,讲过后面部分,下面看下前面部分:
得到地址之后,函数里生成了 scriptPubkey,使用的是 GetScriptForDestination(standard.cpp):
这个函数没什么东西,主要看下 CScriptVisitor(standard.cpp):
接下来就是创建主流程了,位于函数 generateBlocks(mining.cpp):
这里最重要的函数是 CreateNewBlock(miner.cpp):
整个创建区块的流程就这些,其中 addPackageTxs 和 ComputeBlockVersion 涉及到内存池和 BIP9,内容很多,以后单独介绍。
整个流程涉及的文件:
- mining.cpp
- key_io.cpp
- standard.cpp
- miner.cpp