美文网首页
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版比特币节点-启动过程源码分析

    本文是《循序渐进比特币》第三篇。为什么要讲解启动过程呢?只有找到了程序入口,学会调试,开始尝试着阅读源码,才能更好...

  • 比特币btcd P.2.P 流程分析

    本文主要从源码角度,分析了比特币btcd 版 的网络相关流程的分析。 1 主要流程 2 Addrmgr.New 地...

  • 比特币源码研读

    forest21000版 比特币源码研读之一比特币源码研读之二比特币源码研读之三比特币源码研读之四比特币源码研读之...

  • 比特币go版本BTCD架构

    比特币go版本BTCD架构 BTCD的源码仓库地址: 对于刚入门的区块链从业者,先从这个老外的代码学习下: 如果要...

  • btcd解读

    bctd目录 btcd启动流程 比特币数据传输协议 数据存储 基于leveldb,参照boltdb的接口规范,在l...

  • 比特币客户端启动过程

    我们以前的源码分析路径其实就是一条,就是比特币客户端的启动过程,其中内容最多的就是init.cpp 中的A...

  • 比特币源码分析——共识模块

    title: 比特币源码分析——共识模块date: 2021-11-02 18:39:52 前言 分析比特币系统的...

  • 2018-08-16

    上文《比特币btcd代码之初体验》提到比特币除了主网外,还有Testnet以及Regtest网络。 Testnet...

  • btcd代码之私钥、公钥及地址

    上文《比特币btcd代码之初体验》提到比特币除了主网外,还有Testnet以及Regtest网络。Testnet是...

  • 2018-08-15

    最近在看比特币源码,从Golang版本入手,一来最近也在写Golang语言,二来btcd版本的代码模块设计以及单元...

网友评论

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

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