佛萨奇2.0马蹄链开发源码丨佛萨奇2.0马蹄链智能合约系统开发详细及功能

简介:  存储模块负责持久化存储链上的区块、交易、状态、历史读写集等账本数据,并对外提供上述数据的查询功能。区块链以区块为单位进行批量的数据提交,一次区块提交会涉及到多项账本数据的提交,比如:交易提交,状态数据修改等,所以存储模块需要维护账本数据的原子性。长安链支持常用的数据库来存储账本数据,如LevelDB、BadgerDB、TikvDB、MySQL等数据库,业务可选择其中任意一种数据库来部署区块链。

  数据存储

  1.概述

  存储模块负责持久化存储链上的区块、交易、状态、历史读写集等账本数据,并对外提供上述数据的查询功能。区块链以区块为单位进行批量的数据提交,一次区块提交会涉及到多项账本数据的提交,比如:交易提交,状态数据修改等,所以存储模块需要维护账本数据的原子性。长安链支持常用的数据库来存储账本数据,如LevelDB、BadgerDB、TikvDB、MySQL等数据库,业务可选择其中任意一种数据库来部署区块链。

  账本数据主要分为5类:

  区块数据,记录区块元信息和交易数据:

  区块元数据包括:区块头、区块DAG、区块中交易的txid列表,additionalData等;

  交易数据,即序列化后的交易体,为了提供对单笔交易数据的查询,所以对交易数据进行了单独存储。

  状态数据,记录智能合约中读写的链上状态数据,即世界状态。

  历史数据,长安链对每笔交易在执行过程中的状态变化历史、合约调用历史、账户发起交易历史都可以进行记录,可用于后续追溯交易、状态数据的变迁过程。

  合约执行结果读写集数据,长安链对每笔交易在执行过程中的所读写的状态数据集进行了单独保存,方便其他节点进行快速的数据同步。

  事件数据,合约执行过程中产生的事件日志

  2.存储模块运行逻辑

  针对上述5类账本数据,长安链分别实现了5个DB类,分别是:Block DB、State DB、History DB、Result DB和Contract Event DB。采用多个数据库之后,就需要维护数据库之间的数据一致性,避免仅有部分数据库提交后,发生程序中断而导致不同数据库间的数据不一致,因此,长安链引入了Block binary log组件来持久化存储区块的原始内容,用于重启过程中的数据恢复,类似于数据库中的预写式日志(wal)的功能。需要注意的是,历史数据、结果数据并不是每个节点必须保存的,节点可以根据自己的业务需要在配置文件中启用或者关闭历史数据库和结果数据库。

  1.存储模块未开启区块文件存储时运行逻辑

  2.存储模块开启区块文件存储时运行逻辑

  3.区块提交流程

  首先将序列化后的区块、读写集数据、以及最新的区块高度写入Block binary log,用于异常中断后的数据恢复。为了提高性能,加入一层cache,新区块提交请求在更新完Block binary log之后,再将区块数据写入cache,在更新完log和cache后,提交即可返回,由后台线程异步更新Block DB、State DB、ContractEvent DB、History DB和Result DB。

  在Block DB中记录区块元信息与交易信息,其中交易信息以TxID作为主键存储,区块信息以BlockHeight作为主键存储,区块元信息中只记录交易ID列表,同时索引BlockHash到BlockHeight的映射关系。Block DB中额外记录了当前最新的区块高度(LastBlockHeight)作为checkpoint,用以重启后的数据恢复。

  在State DB中保存state数据,key为合约名与对象主键的组合:<contractName,ObjectKey>,同时记录最新的区块高度(LastBlockHeight)作为checkpoint。

  在History DB中记录交易产生的三种类型的索引:

  状态变更历史,以<contractName,ObjectKey,TxId>为索引

  合约调用历史,以<contractName,TxId>为索引

  账户交易历史,以<accountId,TxId>为索引

  在Result DB中记录交易的读写集,读写集以TxID作为key,同时记录最新的区块高度(LastBlockHeight)作为checkpoint。

  在ContractEventDB中记录下交易结果的EventLog,并记录最新区块高度作为checkpoint。

  4.账本恢复流程

  如果区块正在提交过程中,节点因异常退出,节点在下次启动时存储模块会进入恢复流程:

  分别从Block binary log、Block DB、State DB、ContractEvent DB、History DB、Result DB中获取最新的区块高度,以Block binary log中的区块高度作为基准高度,判断其他DB是否落后基准高度。

  如果有某个DB落后基准高度,则从Block binary log中获取缺失的区块及读写集,依次提交到落后DB中。

  所有DB同步到基准高度后,存储模块启动完成,节点进入正常流程。

相关文章
|
4月前
|
Java 区块链 数据安全/隐私保护
马蹄链佛萨奇2.0开发运营版丨佛萨奇2.0马蹄链智能合约系统开发(详细及案例)丨佛萨奇2.0马蹄链源码
  FORCE原力第一个推出的是Classic经典矩阵   Classic经典矩阵总共有12个矩阵,最低的矩阵只要5U即可参与(早期加入的朋友都可以享受半价优惠),下一个矩阵的价格是上一级的两倍。
|
6月前
|
存储 安全 区块链
Matic马蹄链Meforce佛萨奇3.0系统开发设计及方案
信大家对智能合约的优点和缺点是什么,以及为什么智能合约很重要,有了一定的了解
|
监控 算法 区块链
Metaforce佛萨奇2.0系统开发(马蹄链)源码部署
共识机制是指在区块链网络中public boolean equals
|
前端开发 安全 JavaScript
TRX波场链/HECO火币链/BSC币安链DAPP智能合约发行代币项目系统开发案例分析/稳定版/源码技术
  DApp是指基于区块练技术的去中心化应用程序,它的特点是去中心化、透明、安全、不可篡改等,DApp is an inevitable trend because it can solve problems such as centralization,data privacy,and security in traditional applications,while also achieving more fair,transparent,and decentralized application scenarios.
|
存储 安全 测试技术
佛萨奇链上DAPP系统开发|佛萨奇2.0版上链开发技术
去中心化应用(DApp)是这些传统应用的基于区块链的等效物。DApp是各种相互关联的智能合约的集合。在幕后,每种智能合约都在应用中履行特定的职能。
佛萨奇链上DAPP系统开发|佛萨奇2.0版上链开发技术
|
资源调度 前端开发 JavaScript
马蹄链智能合约系统开发功能需求丨MetaForce佛萨奇2.0波场链
马蹄链智能合约系统开发功能需求丨MetaForce佛萨奇2.0波场链
118 0
|
机器学习/深度学习 PyTorch 区块链
佛萨奇Polygon马蹄链智能合约系统开发(成熟及技术)丨佛萨奇Polygon马蹄链智能合约开发源码运营版
Matic PoS Chain,称之为“提交链”(commit chain)。它不同于侧链,尽管Matic PoS Chain有自己的共识机制,但在验证节点staking和检查点方面,它也依赖于以太坊的安全性。它与以太坊链并行运行,且该链由具有自身验证节点的权益证明共识机制来保护,保证了它的去中心化特性。此外,Matic PoS Chain与以太坊虚拟机(EVM)兼容,那些基于以太坊的项目可便捷地迁移其智能合约至Matic PoS链上。
DAPP马蹄链系统开发(方案详解)丨DAPP马蹄链系统开发(源码项目)
  大公排指的是全网排列,小公排指的是单体伞下排列,一条线公排指的是按一条线排列,跳排指的按指定某代数为推荐关系。
|
安全 区块链 vr&ar
DAPP马蹄链Polygon智能合约系统开发(2.0佛萨奇运营版)丨Polygon马蹄链DAPP智能合约系统开发(佛萨i奇2.0开发)
 Web 3.0 promotes the implementation of distributed economic models such as NFT,Defi,cryptocurrencies,and decentralized autonomous organizations(DAOs).The feature of Web 3.0 co construction and sharing is different from that of Web 2.0 where users are only users,enabling users in Web 3.0 to actively