FISCO-BCOS源码分析(二)

简介: 本文内容代码位于FISCO-BCOS/libethereum/

本文内容代码位于FISCO-BCOS/libethereum/

BlockChain:实现区块链数据库。

此类功能有:

0.     构造/解构自己;

1.     根据某种hash(或需与index组合使用)获取某种数据(如各种RLP数据、各种数据本身、各种数据hash、各种hash列表等等)

2.     数据库开关、初始化、读写(写:导入新区快)、抢救、数据验证

3.     检查/确认某个区块状态(如是否已知、是否合法/有效、检查签名、检查nonce)

4.     处理分叉(确定主链)

5.     统计空间使用状况、及时释放无用数据

6.     缓存一些数据如各种hash、地址、数据本身等

各种功能详见附录1

 

BlockChainSync

此类包含了基本的区块链同步策略

同各节点同步,并保持最新状态。解决区块下载问题等,但不包含状态转移逻辑的细节

功能大概有:

0.     构造/结构自己;

1.     改变同步状态、进行同步相关操作;

2.     完成某部分的同步后进行可定义操作;

另,此类保存了用于验证区块头身份的数据、同步状态、各种用于识别的数据(如块号、块头、块体的记录、块hash、节点难度等)

 

BlockDetails

里面一票结构体,用于存储各类数据

包括:区块日志Blooms、区块Blooms、区块中的收据、区块的hash、交易地址

且定义了上述数据的hash们

 

BlockQueue

此类是:存在于【网络或其他I/O】与【区块链】间的区块队列

功能包括:

向链中插入区块、验证导入的数据、为准备插入区块链的区块进行排序、获取队列中区块的信息、中止对象操作准备解构、获取给定区块中的信息

另,存储了:

目标区块链、集合的锁、所有准备被导入的和被正导入的区块的hash、等待父区块的区块、无效区块集、按时间戳排序的暂时无效区块集、已排序并验证完毕准备插入的区块集、正被验证的区块集、等待验证的列表、队列中的总难度/区块难度等

 

ChainParams

存储了区块配置、创世节点信息等。作为区块链的参数存在


附录1

构造/解构区块链对象、打开/关闭/重启数据库、process()、用新发来的区块同步链条、向区块链中导入给定区块、将区块导入磁盘上的数据库、检查区块是否已知、获取(局部)区块头、根据hash获取RLP区块、根据hash获取RLP区块头、获取区块细节/log blooms/交易收据、通过区块hash和索引获取交易、通过交易hash获取收据、获取给定区块的交易hash列表、获取给定区块的叔区块hash列表、为给定区块的number获取hash、获取给定区块后Nhash值、为一些区块获取区块blooms、判断交易是否已知、从交易hash获取交易本身、由给定区块hash获取RLP索引和交易、获取给定区块中的全部交易、由给定的hash获取number、获取给定区块的RLP、数据、获取创世区块hash、获取所有【不允许作为给定父区块的叔区块】的区块、遍历数据库并验证所有区块、改链头、抢救数据库、(疑似)检查分叉往哪走、存储各种数据占用空间的结构体、统计各类数据占据空间、释放未使用数据、当新区快被导入时执行的函数的函数、验证签名、获取【准备完成的创世区块】的State对象、为准备区块的发布而进行验证、转储数据库、检查区块限制、区块nonce、验证块是否有效,执行交易,执行后再验证、数据库的开/初始化/保存并关闭、管理缓存


相关文章
|
存储 Nacos 数据库
在 Docker 中部署 Nacos 并挂载配置文件
在 Docker 中部署 Nacos 并挂载配置文件
开源测试平台横向测评系列『流马』篇:流马使用及总结
【使用篇】 ● 接口测试:创建接口(添加引用公共参数、添加引用自定义参数)、测试用例(参数关联)、业务流程测试实践 ● web自动化测试:元素管理(添加元素)、测试用例(添加元素)、设计测试场景 ● 测试计划、测试集合与测试用例相互之间的关系 【总结篇】 ● 使用总结:常见的使用注意事项,如变量引用、函数引用、关联参数引用等 ● 优化建议:结合真实使用过程,从用户角度出发,提出的7条优化建议 ● 优缺点总结:优点、缺点、评分(从不同角度评测打分)
开源测试平台横向测评系列『流马』篇:流马使用及总结
|
XML 数据格式
IDEA中创建xml文件
IDEA中创建xml文件
IDEA中创建xml文件
|
XML 编解码 编译器
Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程-第八天
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
2120 0
|
10月前
|
运维 网络协议 Linux
网络故障排除的7个关键维度
网络故障排除是确保网络稳定运行的关键,能减少停机时间、提升服务质量。本文介绍7个排查步骤:1. 检查硬件连接;2. 使用ipconfig检查IP配置;3. 进行DNS检查;4. 验证网络配置;5. 用其他设备测试;6. 检查IP冲突;7. 测试网络带宽和延迟。通过这些方法,可快速定位并解决问题,保障网络顺畅运行。
937 5
|
机器学习/深度学习 自动驾驶 PyTorch
“深度学习遇上自动驾驶:图像识别如何成为智能驾驶的‘超强大脑’?一场技术革命,带你领略未来出行的奇迹!”
随着科技的进步,自动驾驶成为汽车行业热点。图像识别技术,尤其是深度学习中的卷积神经网络(CNN),在自动驾驶系统中扮演了关键角色,负责从摄像头捕捉的图像中提取车辆、行人等信息。其应用涵盖目标检测、语义分割及行为预测等方面,为系统决策提供依据。尽管已取得显著进展,但面对复杂环境和极端天气等挑战,仍需不断研究优化。
311 0
IDEA中返回上一步和下一步快捷键失效【Ctrl+Alt+左箭头】
这篇文章提供了解决IntelliJ IDEA中"返回上一步"和"下一步"快捷键失效的方法,通常是因为与其他软件的快捷键发生冲突,解决方法是更改快捷键设置。
|
编解码 自动驾驶 计算机视觉
【保姆级教程】【YOLOv8替换主干网络】【1】使用efficientViT替换YOLOV8主干网络结构(1)
【保姆级教程】【YOLOv8替换主干网络】【1】使用efficientViT替换YOLOV8主干网络结构
|
存储 Prometheus 监控
Redis 调优指南:提高性能和稳定性的全面策略
Redis 调优指南:提高性能和稳定性的全面策略
991 0
|
编解码 边缘计算 安全
阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效
云端AV1视频编码服务发布,节省25%以上码率,屏幕编码和可变分辨率编码工具,让视频体验再升级。
4482 0
阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效