Archives

All posts for the month May, 2018

从程序上看,比特币程序采用一个进程多个线程的结构,既是服务器,又是客户端。

如没有特殊说明,本系列以最新的0.16版本为准进行分析。

主要模块:
初始化
区块
交易
网络
挖矿
钱包
RPC
GUI

主要依赖:
berkeley-db
boost
level db
libevent
miniupnpc
openssl
protobuf
qrencode
qt
zmq

主要入口:

文件 函数
bitcoind.cpp main AppInit AppInitMain
bitcoin-cli.cpp main AppInitRPC CommandLineRPC CallRPC
bitcoin-tx.cpp main AppInitRawTx CommandLineRawTx MutateTx OutputTx

主要线程:

线程 作用
主线程 创建其它线程,等待interrupt
ScriptCheck 脚本检查
scheduler 执行一般任务例如定时任务
HTTP Server 提供RPC REST服务接口
import 加载区块数据
TorControl Tor线程(Optional)
UPnP UPnP线程(Optional)
net 接收连接,封装消息
dnsseed DNS地址种子解析
addcon 处理-addnode
opencon 主动向外连接
msghand 消息处理