美文网首页
btcd版比特币节点-启动过程源码分析

btcd版比特币节点-启动过程源码分析

作者: 链人成长chainerup | 来源:发表于2019-08-24 01:38 被阅读0次

    本文是《循序渐进比特币》第三篇。为什么要讲解启动过程呢?只有找到了程序入口,学会调试,开始尝试着阅读源码,才能更好地了解系统运行原理。btcd启动的源码位于这儿

    btcd 启动主要分了三步:

    • 加载配置
    • 新建server
    • server启动。

    其他步骤(比如启动关闭监听routine、cpu profile等)不是核心流程,我们暂时忽略。如果感兴趣,可以自己阅读源码哦~
    下面我们来分析一下每一步的主要流程。

    1 加载配置

    加载配置的代码位置: loadConfig 函数
    流程图如下:

    loadConfig

    其中,如下几点需要关注一下,在以后的文章中,可能会用到这些点,或者重点展开讲解这西点。

    • Listener 配置:是指节点的ip、port, 如果不配置,会读取默认值。
    • rpc Server: 只有配置了rpc相关的设置,才会启动rpc server。
    • addPeer: 是指启动时链接特定的peer。 如果指定了,则使用这些peer信息; 如果没有指定,在mainnet的场景下,会使用DNSSeed中指定的peer。
    • minrelaytxfee: 设定了交易手续费的最低金额,如果低于这个金额,则交易很难被打包。
    • BlockMaxSize: 设定了区块的大小,这也限制了每个区块最大能够打包的交易数目。默认1M

    2 新建server

    newServer代码地址
    newServer的主要流程如下:

    newServer

    其中有几个点需要解释一下:

    • addrManager: 是地址管理器,可以理解是比特币中address的管理器
    • initListeners: 配置net listeners。
    • checkPoint检查: 是用来检查历史区块中,某些高度上比特币区块的正确性的,进而保证区块同步的准确性。如果你要使用比特币的源码创建自己的山寨币,checkPoint需要设置为空。
    • feeEstimator: 目前还没看到什么用途,等到后续用到时,再分析。如果你知道,可以留言告诉我哈,不胜感激~
    • syncManager创建: 这一步除了新建了一个同步管理器,而且还监听了链相关的通知消息,主要是NTBlockAccepted、NTBlockConnected、NTBlockDisconnected消息。 相关代码地址
    • rpcListener server创建: 除了创建了rpcServer, 而且新建了websocket 消息管理器,订阅了链相关的通知。同syncManager创建的消息类型一样。

    3 启动server

    server.Start代码地址
    流程图如下:

    server.Start

    看流程图就几步,其实内部不少。有几个注意点:

    • s.peerHandler: 很重要,里面有地址管理器、数据同步管理器、链接管理器的启动。
      (1)地址管理器启动时,定义了一个addressHandler的routine, 主要的作用是记录address,方便下次重启时可以直接读取 。
      (2)数据同步管理器则定义了一个blockHandler的routine,虽然叫blockHandler,实际会处理区块、消息、peer、库存等多种消息。感兴趣,自己看源码吧~。
      (3)链接管理器则对于”进来的peer请求(inbound)“、"要出去请求其他peer(outbound)"的操作分开了。其中定义了connHandler处理所有”进来的peer请求“,并且启动listenHandler 来处理即将建立链接的请求; 对于要链接其他peer的(outbound),则创建newConnReq. 这部分还涉及到了DNSSeed的问题,如果是主网而且没有指定链接哪个peer去同步数据,则默认使用DNSSeed列表中的peer。 如果你想创建自己的山寨币,这儿地方可以改成自己的peer地址信息哦~
    • rebroadcastHandler: 跟踪用户已经提交并发送,但是还没有被写入区块的库存信息。
    • rpcServer.start:分了http请求跟web socket请求两种。
    • cpuMiner.start: 核心的逻辑在miningWorkerController , 后续会有专门的文章分析挖矿逻辑。这儿不展开了。

    4 总结

    本文结合比特币源码,分析了btcd启动过程。从加载配置、服务定义、服务启动三个方面进行了讲解。虽然这篇是源码分析,但是文中并没有贴代码片段,而是放了链接。如果对实现细节感兴趣,可以根据链接,自己去探究。如果遇到问题,欢迎留言,我们一起讨论,提高。

    5 参考文献

    比特币源码

    6 其他

    本文是《循序渐进比特币》的第三篇-《btcd版比特币节点-启动过程源码分析》。
    如果有疑问,可以直接留言,也可以关注公众号 “链人成长chainerup” 提问留言,或者加入知识星球“链人成长”~

    相关文章

      网友评论

          本文标题:btcd版比特币节点-启动过程源码分析

          本文链接:https://www.haomeiwen.com/subject/vimxectx.html