简述比特币区块读写、同步、挖矿的执行过程

一、应用程序启动

  1. 解析命令行参数及配置文件加载配置
  2. 加载区块及状态数据,数据目录不存在则创建
  3. 启动P2P端口监听
  4. 与指定节点建立连接
  5. 监听RPC server端口
  6. 开启地址管理模块addrManager,加载已有地址,定时对已连地址保存
  7. 开启同步管理模块syncManager,处理新节点、交易、区块等消息。
  8. 开启连接管理模块connManager,先进行DNSSeed从种子域名获取解析地址加入到地址管理里。
    8.1 开启请求连接处理
    8.2 接受P2P端口进来的连接并开启通信
    8.3 建立默认8个随机地址的出口连接并开启通信
    8.4 维护每个连接的是否在线可用stallHandler、接受数据处理inHandler、发送数据处理outHandler、发送数据队列queueHandler、定时Ping处理。
  9. server处理newpeer donepeer等

建立连接后的通信过程(FromP->ToP)

  1. FromP Dial到ToP Listen的端口,双方已建立连接
  2. FromP发送version消息到ToP,等待处理ToP的version消息
  3. ToP处理version消息后,再发送version到FromP,如收到的version消息版本或服务与自己不匹配则发送reject消息,version协商成功,10秒定时发送inv消息
  4. FromP处理version消息,如收到的version消息版本或服务与自己不匹配则发送reject消息,判断是否需要更多节点地址(<1000),需要则发送getaddr消息到ToP,version协商成功将节点标记为候选同步节点。若此时没有正在同步的节点,则开启同步,发送getheaders或getblocks消息到ToP
  5. FromP发送verack到ToP
  6. ToP收到getaddr后调用地址管理模块,从所有地址里获取不超过比例23%数量不超2500个打乱顺序的地址,过滤已发送的地址,构造包含这些地址的addr消息发送到FromP,并记录发送地址的记录。
  7. FromP收到addr消息,循环地址,添加到地址管理模块
  8. ToP收到getheaders消息,取相应的头信息,封装成headers消息发送给FromP
  9. FromP收到headers消息,通知同步模块
  10. FromP收到inv消息,会发送getdata消息获取最新的区块hash

 

三、交易广播过程

  1. 钱包或客户端调用createrawtransaction传入input/output/locktime/sequence,获得原生交易
  2. 离线签名或调用signrawtransactionwithkey传入rawtx/privkey/preutxo/signtype,进行签名
  3. 签名后调用sendrawtransaction发送signedtx到节点机
  4. 节点机通过rpc server获取到签名后的交易,先进行验证有效性,比如输入输出是否合法、签名是否正确等等
  5. 节点机将合法的交易存放到mempool中,并通过p2p广播到其他节点
  6. 矿工节点对交易进行打包,生成新区块,最后再广播区块

 

 

 

 

 

你可能感兴趣的:(Bitcoin比特币)