主页 > imtoken钱包开发 > 比特币源代码结构和分析

比特币源代码结构和分析

imtoken钱包开发 2023-11-11 05:08:26

一、概念

2.源码分析 2.1 src目录模块说明

bitcoin比特币源码结构与分析

来源:

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目录下所有一级文件的作用

bitcoin比特币源码结构与分析

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:检测对等点的不当行为,然后禁用或断开它们,防止损坏整个网络