主页 > imtoken钱包开发 > 比特币源代码结构和分析
比特币源代码结构和分析
一、概念
2.源码分析 2.1 src目录模块说明
来源:
bench:基于Microbenchmark(微基准测试)的代码测试模块
compat:系统适配,大小端,字节操作部分改写,glibc特定函数判断处理。
配置:配置
共识:共识模块、merkle计算、分叉规则、一致性验证。
crypto:安全模块、加密算法、哈希算法
index:读写交易比特币源码解析,查询交易数据并同步到leveldb; 包括区块链数据索引的基础类,实现了CValidationInterface的虚类。
interfaces:接口模块:事件接口(handler)、钱包功能接口(chain(为客户端提供连接状态、接收通知、费率计算、交易确认等接口)、wallet)、节点功能接口(node);
leveldb:nosql 数据库
节点:在内存池和UTXO集合中查找币种,统计未花费的交易输出,提交交易
policy:费率标准、交易选择规则、交易规则参数定义、rbf交易选择; PS:交易流程:发起交易->交易池->交易桶->写区块
原语:构建块,输出和输入交易的签名验证
qt:qt项目
rpc:网络通信,json协议
脚本:签名、交易溯源、交易脚本....
secp256k1:椭圆曲线数字签名算法
支持:内存控制和管理,服务于内存池
测试:测试代码
单值:一致性
util:杂项、客户端、服务器环境、时间、url、错误码等。
钱包:钱包类
zmq:zeroMQ消息队列
2.2 src源文件说明
描述src目录下所有一级文件的作用
2.2.1 P2P网管:
addrdb:P2P网络地址库(peer.dat),禁止地址(banlist.dat);
addman:地址存入内存,一步转储到peer.dat
net:网络节点管理
Net_processing:节点通信操作、广播通知、状态校验等。
Netaddress:网络地址对象
Netbase:网络通信基础类
协议:网络通讯协议
random:ssl随机数种子
Timedata:P2P网络时间同步
2.2.2 非对称密钥管理
key:调用secp256k1的公私钥处理
key_io:签名加密后重新编码
密钥库:**经理
pubkey:公钥管理
2.2.3 挖矿
init:系统初始化,各个线程的初始化
Txmempool:交易池
merkleblock:以merkletree的形式生成块体
miner:矿工从txpool中选择tx到区块中,准备写入
Pow:工作量证明算法
2.2.4 线程管理
调度器:线程调度器
Sync:死锁处理
ThreadInterrupt:线程中断
2.2.5 链
Chain:区块链对象,维护着整个链条的状态和各种参数;
Chainparams:区块链对象的一些可调参数(抗碰撞哈希函数),包括主链、公测链、私有链
Chainparamsbase:区块链对象的基本参数
Chainparamsseeds:P2P网络的DNS节点,用于解析和发现节点
检查点:链索引检查点
2.2.6 算法
Base58:编码器; 用于生成比特币钱包地址。与Base64相比,Base58没有使用数字“0”、大写“O”、大写“I”、小写“l”,以及“+”和“/” " 符号
Bench32:字符串编码器比特币源码解析,base32的变体,用于比特币地址格式的bech32
哈希:sha-256 哈希
Compressor:输出脚本压缩编码
Bloom:布隆过滤器,一种复杂度为O(1)的海量数据查询算法,用于查找区块链数据;
2.2.7 数据类型与类型转换
amount:最大交易金额,系统常量(CAmount MAX_MONEY = 21000000 * COIN)
Arith_uint256:256 位无符号大整数
Uint256:256 位不透明二进制对象
amountarith_uint256:无符号大整数的模板基类
limitedmap:有限类型(map)的哈希结构
撤销:序列化和反序列化
Utilmoneystr:转账金额到字符串
Utilsrencoding:删除字符串中的不安全字符
core_io:类型转换、hex、string、hash; tx对象与str对象相互转换
2.2.8 流程入口文件
Bitcoind:服务节点守护进程
Bitcoin-cli:命令行客户端(rpc客户端)
Bitcoin-tx:比特币交易处理器
bitcoin-wallet: 钱包入口
bitcoind:app初始化入口
2.2.9 交易与区块相关
Blockencodings:交易被加载到块中
checkqueue:待校验信息队列,主线程放数据,多线程并行校验校验
Coins: Unspent Transaction Output 入口是比特币交易的币实体,因为比特币的每一笔交易都来自UTXO
psbt:PSBT功能实现;
core_read:实际是脚本解析,检查交易的所有输入输出脚本是否包含有效代码
核心写入
Validation:确认接受新区块
Versionbits:区块链版本维护
2.2.10 系统与网络
Cuckoocache:基于布谷鸟哈希的内存缓存
compat:兼容32、64; 视窗/Linux
memusage:监控内存使用情况
net_permissions:网络权限参数控制
网路传讯者
threadsafety:线程安全
torcontrol:洋葱网络控件,即匿名通信网络
banman:检测对等点的不当行为,然后禁用或断开它们,防止损坏整个网络