比特币go版本BTCD架构
比特币go版本BTCD架构
BTCD的源码仓库地址:
https://github.com/btcsuite/btcd
对于刚入门的区块链从业者,先从这个老外的代码学习下:
https://github.com/Jeiwan/blockchain_go
如果要看代码有点烦人,可以看看我的简单讲解,最后一个版本有比较详细的注释:
https://www.jianshu.com/p/3b66489899b9
btcd和Bitcoin Core有一个核心的区别:btcd还不包括钱包功能,这是一个非常有意的设计。这意味着不能够直接用btcd发起和接收支付。这部分功能将由btcwallet和Paymetheus项目来支持,目前这两个项目正在努力开发中。
架构图
imageBTCD包括部分P2P网络,BlockChain,交易池TxPool,挖矿PoW,RPC接口。
P2P网络
P2P网络分为三个部分:地址管理,连接管理,协议数据。
-
地址管理:
P2P连接地址的管理,包括未链接地址和连接成功地址。目录:addrmgr
-
连接管理:
通过tcp协议连接外部节点,打开自己的tcp服务器;同时用于接收比特币协议数据。
目录:connmgr -
同步管理器:
用于统一处理各个节点发送和接收到的数据,以便同步区块链和同步交易。
目录:netsync
BlockChain
BlockChain包括ffldb存储,数据结构和Chain基本逻辑
-
ffdb存储:
是基于goleveldb(嵌入式数据库leveldb的go语言版本),开发了上层API。目录:database
-
数据结构:
包括BlockChain的地址数据结构,块数据结构,链的数据结构,还包括Merkle树的逻辑,椭圆曲线算法的接口,比特币脚本Script逻辑。目录:blockchain
交易池TxPool
交易池TxPool用来管理所有接收到的交易Tx。
目录:mempool
挖矿PoW
定时获取交易池TxPool中的交易Tx,算出头Hash,遍历maxExtraNonce int64数,输出一定难度值的hash值。
目录:mining
目录结构
addmgr : 地址管理
blockchain : 实现比特币区块处理和链选择规则
blockchain/fullblocktests : 提供一组用于测试共识验证规则的块测试
btcec : 实现对比特币脚本所需的椭圆曲线密码函数的支持
btcjson : 为底层的JSON-RPC命令和返回值提供一个扩展API
chaincfg/chainhash : 提供通用的散列类型和相关函数,允许抽象特定的散列算法
connmgr : 连接管理器
database : 为比特币区块链提供数据库接口,实现了ffldb
mempool : 比特币交易池
mining : PoW挖矿
netsync : 同步管理器,同步区块链和交易
peer : 创建和管理比特币对等网络,及上行下行数据库的处理
rpcclient : 实现一个强大且易于使用的支持websocket的比特币JSON-RPC客户端
txscript : 实现比特币交易脚本语言
wire : 实现比特币网络协议
接下来将按照目录和架构图,一个一个模块进行源码剖析,敬请期待...