群组架构

如下图,FISCO BCOS支持多群组架构,群组间共享网络,通过网络准入模块实现各账本间网络消息隔离。

../../../_images/ledger.png群组架构

群组间数据隔离,每个群组独立运行各自的共识算法,不同群组可使用不同的共识算法。每个账本模块自底向上主要包括三层,即:核心层、接口层和调度层,通过这三层相互协作,FISCO BCOS可保证单个群组独立健壮地运行。

核心层

核心层负责将群组的区块数据、区块信息、系统表以及区块执行结果写入底层数据库。 如下图,按照功能,存储可以分为两部分,即:state和storage。state负责存储state信息,用于追踪交易历史状态;storage则负责将区块数据、区块信息、系统参数等写入系统表中。

storage向外暴露简单的查询(select)、提交(commit)和更新(update)接口,具有可插拔特性,后端可支持多种数据库类型,目前仅支持LevelDB数据库,后期会把基于mysql的AMDB集成到系统中。

../../../_images/storage.png核心层

接口层

接口层主要包括交易池(TxPool)、区块链(BlockChain)和区块执行器(BlockVerifier)三个模块。

  • 交易池(TxPool): 与网络层以及调度层层交互,负责缓存客户端或者其他节点广播的交易,上层应用(主要是同步模块和共识模块)会从交易池中取出交易进行广播或者区块打包。
  • 区块链(BlockChain): 与核心层和调度层交互,是调度层访问底层存储的唯一入口,上层应用(同步、共识模块)可通过区块链接口查询块高、获取指定区块、提交区块。
  • 区块执行器(BlockVerifier): 与调度层交互,负责执行从调度层传入的区块,并将执行结果写入传入的区块中返回给调度层。

调度层

调度层包括共识模块(Consensus)和同步模块(Sync)。

  • 共识模块:主要负责从交易池(TxPool)取交易,并基于数据库最新区块将交易打包在新区块中进行共识,共识过程中会执行区块,共识成功后,将区块以及区块执行结果提交到区块链(BlockChain),区块链统一将这些信息写入底层存储,并触发交易池删除上链区块中包含的所有交易、将交易执行结果以回调的形式通知客户端。目前FISCO BCOS主要支持PBFTRAFT共识算法。
  • 同步模块:主要负责广播交易和获取最新区块。由于共识过程中,Leader负责打包区块,而Leader随时有可能切换,因此必须保证客户端的交易尽可能发送到每个区块链节点,节点收到新交易后,同步模块会将这些新交易广播给所有其他节点。考虑到区块链网络中机器性能不一致或者新节点加入都会导致部分节点区块高度落后于其他节点,因此同步模块还提供了区块同步的功能,该模块会向其他节点发送自己节点的最新块高,其他节点发现块高落后于其他节点后,会主动下载最新区块。