本文内容代码位于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、获取给定区块后N个hash值、为一些区块获取区块blooms、判断交易是否已知、从交易hash获取交易本身、由给定区块hash获取RLP索引和交易、获取给定区块中的全部交易、由给定的hash获取number、获取给定区块的RLP、数据、获取创世区块hash、获取所有【不允许作为给定父区块的叔区块】的区块、遍历数据库并验证所有区块、改链头、抢救数据库、(疑似)检查分叉往哪走、存储各种数据占用空间的结构体、统计各类数据占据空间、释放未使用数据、当新区快被导入时执行的函数的函数、验证签名、获取【准备完成的创世区块】的State对象、为准备区块的发布而进行验证、转储数据库、检查区块限制、区块nonce、验证块是否有效,执行交易,执行后再验证、数据库的开/初始化/保存并关闭、管理缓存