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、验证块是否有效,执行交易,执行后再验证、数据库的开/初始化/保存并关闭、管理缓存


相关文章
|
9月前
|
存储 算法
TreadLocal源码分析
TreadLocal源码分析
|
9月前
vivid源码分析
vivid源码分析
41 0
|
存储 分布式计算 监控
【源码解读】|SparkEnv源码解读
【源码解读】|SparkEnv源码解读
104 0
|
存储 SQL 分布式计算
【源码解读】| LiveListenerBus源码解读(下)
【源码解读】| LiveListenerBus源码解读
132 0
【源码解读】| LiveListenerBus源码解读(下)
|
缓存 分布式计算 监控
【源码解读】| LiveListenerBus源码解读(上)
【源码解读】| LiveListenerBus源码解读
133 0
【源码解读】| LiveListenerBus源码解读(上)
|
存储 Java 应用服务中间件
SpringMVC源码分析 RequestContextHolder使用与源码分析
SpringMVC源码分析 RequestContextHolder使用与源码分析
SpringMVC源码分析 RequestContextHolder使用与源码分析
|
iOS开发
fishhook源码分析
最早了解到[fishhook](https://github.com/facebook/fishhook)是看了下面两篇文章之后,顿时让我觉得这是一个非常好的东西。总共210行代码,收获了1500+个star,神作啊。 1. [iOS Lazy Binding](http://www.atatech.org/articles/68014),使用fishhook拦截NSSetUncaughtE
2395 0
|
移动开发 Java 开发者
Stresstester源码分析
stresstester-1.0.jar是早期淘宝的一个压力测试工具,很方便开发人员进行本地代码的压力测试,其他专门压力测试工具也有很多,如:jmeter loadrunner 等等,本篇文章主要讲一下stresstester的源码设计
10582 0
|
大数据 DataX 分布式计算
gobblin 源码分析
最近,开始搞些大数据相关的内容,遇到的第一个问题,就是数据入库,小白刚入手,又不想写太多代码,于是从网上找,入库手段很多: DataX,Sqoop,以及Flume 等以及直接使用 Spark 进行入库,想了下当下的场景(不是简单的倒库,要从kafka拉...
1380 0
|
区块链 数据安全/隐私保护 索引
FISCO-BCOS源码分析(四)——libethcore
libethcore是区块链核心数据结构目录。如ABI、密钥管理、区块头、预编译、交易结构等等