佛萨奇2.0开发源码丨佛萨奇2.0波场链+币安链+马蹄链DAPP智能合约系统开发实现技术案例及流程

简介: tx_ids`longtext COLLATE utf8mb4_general_ci COMMENT'区块中交易ID列表',`additional_data`longblob COMMENT'区块产生以后附加的数据',PRIMARY KEY(`block_height`),KEY`idx_hash`(`block_hash`))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

  MySQL数据库表

  长安链支持选用MySQL作为账本存储引擎,节点启动会自动创建数据库,使用chainId作为数据库名,同时也会自动创建相应的表:

  区块元信息表

  CREATE TABLEblock_infos(chain_idvarchar(128)COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT'链标识',block_heightbigint(20)NOT NULL COMMENT'区块高度',pre_block_hashvarbinary(128)DEFAULT NULL COMMENT'上个区块的散列值',block_hashvarbinary(128)DEFAULT NULL COMMENT'本区块的散列值',pre_conf_heightbigint(20)DEFAULT'0'COMMENT'上一次修改链配置的区块高度',block_versionvarbinary(128)DEFAULT NULL COMMENT'区块版本',dag_hash

  varbinary(128)DEFAULT NULL COMMENT'当前区块Dag的散列值',rw_set_rootvarbinary(128)DEFAULT NULL COMMENT'区块读写集的Merkle Root',tx_rootvarbinary(128)DEFAULT NULL COMMENT'区块交易的Merkle Root',block_timestampbigint(20)DEFAULT'0'COMMENT'区块时间戳',proposerblob COMMENT'区块的生产者标识',consensus_argsblob COMMENT'共识参数',tx_countbigint(20)DEFAULT'0'COMMENT'交易数量',signatureblob COMMENT'区块生成者的签名',dagblob COMMENT'区块内交易的执行依赖顺序',

  tx_idslongtext COLLATE utf8mb4_general_ci COMMENT'区块中交易ID列表',additional_datalongblob COMMENT'区块产生以后附加的数据',PRIMARY KEY(block_height),KEYidx_hash(block_hash`))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

  交易表

  CREATE TABLEtx_infos(chain_idvarchar(128)COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT'链标识',senderblob COMMENT'交易发送者信息',tx_idvarchar(128)COLLATE utf8mb4_general_ci NOT NULL COMMENT'交易ID',tx_typeint(11)DEFAULT NULL COMMENT'交易类型',block_heightbigint(20)DEFAULT NULL COMMENT'交易所在区块高度',offsetint(11)DEFAULT NULL COMMENT'交易在区块链中的位置',timestampbigint(20)DEFAULT'0'COMMENT'链标识生成交易的unix时间戳',expiration_timebigint(20)DEFAULT'0'COMMENT'交易过期的unix时间戳',request_payloadlongblob COMMENT'交易的载荷数据',request_signatureblob COMMENT'交易发送者的签名',codeint(11)DEFAULT NULL COMMENT'交易执行结果的状态',contract_resultlongblob COMMENT'合约执行返回结果',rw_set_hashvarbinary(128)DEFAULT NULL COMMENT'交易执行结果的读写集哈希',PRIMARY KEY(tx_id),KEYidx_height_offset(block_height,offset))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

  世界状态表

  CREATE TABLEstate_infos(contract_namevarchar(128)COLLATE utf8mb4_general_ci NOT NULL COMMENT'合约名',object_keyvarbinary(128)NOT NULL DEFAULT''COMMENT'状态数据的key',object_valuelongblob COMMENT'状态数据的value',block_heightbigint(20)DEFAULT NULL COMMENT'该状态数据被修改时的区块高度',updated_atdatetime(3)DEFAULT NULL COMMENT'该状态数据被修改时的节点本地时间',PRIMARY KEY(contract_name,object_key),KEYidx_height(block_height))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

  历史读写集表

  CREATE TABLEhistory_infos(tx_idvarchar(128)COLLATE utf8mb4_general_ci NOT NULL COMMENT'交易ID',rw_setslongblob COMMENT'读写集序列化后的数据',block_heightbigint(20)DEFAULT NULL COMMENT'该交易所在的区块高度',PRIMARY KEY(tx_id),KEYidx_height(block_height))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

  链上数据归档

  归档需求

  数据转移到独立存储

  归档数据应具备可查询

  归档数据还可以再恢复到区块链节点中

  总体方案

  1.对区块链中的账本数据分类

  状态数据,仅存储最新的数据快照,无历史版本,数据量相对较少,而且数据是否冷热由业务决定,因此不考虑对状态数据做归档。

  非状态数据,如:区块、交易、历史读写集,数据量大,随交易不断膨胀,而且只读不修改,适合对某个区块高度之前的数据做归档。

  归档后节点对其他节点提供同步服务时,其他节点需选择已归档高度低于同步节点高度的节点

  归档只对单个节点,由节点运营方发起对自己节点的归档

  2.数据迁移

  使用cmc依次查询节点的区块数据。

  将区块备份到链外存储,链外存储可以是数据库或IPFS,当前已支持mysql,其他存储形式后续进行支持。

  备份完成后,发起清理区块数据的系统合约调用。存储模块提供清理区块数据的接口,将交易、读写集数据删除,索引数据保持不变,也就是说仍然可以在链上判断区块、交易是否存在。

  leveldb/badgerdb在清理数据后,需要主动调用compaction释放空间,采用异步执行。

  3.数据查询

  使用现有cmc查询区块或交易内容,也可通过使用sdk自定义开发的app(以下简称”custom app”)进行查询。

  如果返回数据已归档,可以使用cmc(提供了查询链外归档数据的命令)或者custom app在链外存储中查询已归档数据。

  4.数据恢复

  cmc从链外存储获取归档数据,以区块为单位。

  cmc以区块为单位向链上发起区块恢复请求,链上存储模块提供恢复区块数据的接口,以区块为单位,将归档后的payload数据复原。

  cmc会自动更新链外存储中区块数据的状态为已恢复。

  leveldb/badgerdb在恢复数据后,需要主动调用compaction释放空间,采用异步执行。

相关文章
|
区块链 安全
马蹄链DAPP智能合约系统开发详细说明及方案源码
Decentralized storage is a storage solution based on a blockchain decentralized network, rather than relying on a single centralized entity. Data is stored on various nodes in a distributed network, rather than on a single server under the control of a single organization.
DAPP马蹄链系统开发(方案详解)丨DAPP马蹄链系统开发(源码项目)
  大公排指的是全网排列,小公排指的是单体伞下排列,一条线公排指的是按一条线排列,跳排指的按指定某代数为推荐关系。
|
区块链 数据安全/隐私保护
马蹄链DAPP合约模式系统开发技术(原理)
马蹄链DAPP合约模式系统开发技术(原理)
117 0
|
前端开发 JavaScript Java
马蹄链DAPP合约项目系统开发技术方案丨(源码搭建)
马蹄链DAPP合约项目系统开发技术方案丨(源码搭建)
122 0
|
区块链 数据安全/隐私保护
DAPP马蹄链智能合约开发功能丨DAPP马蹄链智能合约系统开发技术详细及分析丨DAPP马蹄链智能合约源码版
  什么是智能合约?智能合约,又称加密合约,是在一定条件下可以直接控制数字资产或资产在各方之间转移的一种计算机程序z--Guts。智能合约不仅以与传统合约相同的方式定义了协议的规则和处罚,还可以自动强制执行这些义务。它通过接受信息作为输入,通过规则为输入赋值,在合约中列出并执行这些合约条款所要求的行为。
DAPP马蹄链系统开发(方案及项目)丨DAPP马蹄链系统开发(源码详情)
  Metaverse is a virtual world constructed by humans using digital technology,mapped or transcended by the real world,and can interact with the real world.It is a digital living space with a new social system.
|
区块链
DAPP马蹄链智能合约系统开发功能详情丨DAPP马蹄链智能合约开发源码部署
 DAPP是DecentralizeDAPPlication的缩写,中文叫分布式应用/去中心化应用)。通常来说,不同的DAPP会采用不同的底层区快开发平台和共识机制,或者自行发布代币(也可以使用基于相同区快平台的通用代币)。
|
区块链
马蹄链智能合约开发正式版丨马蹄链dapp智能合约系统开发(开发规则 )丨马蹄链智能合约源码案例
  本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。
|
存储 开发框架 前端开发
BSC链Defiswap丨IPPswap丨NFTswap丨OMNIswap智能合约去中心化项目系统开发成熟技术/项目案例/源码说明
  区块链是一个分布式账本,使用密码学原理来记录数据,并且按照时间顺序进行记录。在区块链中,数据可以进行高度地分散,因为数据分布在不同的节点上。当一个区块链被添加到一个新的区块上时,它将包含以前的所有交易记录。
|
存储 算法 NoSQL
波场链/币安链/马蹄链2.0佛萨奇开发源码丨2.0佛萨奇马蹄链/币安链/波场链dapp智能合约系统开发(详情及规则)
 归档后的节点在对其他节点提供区块同步信息时,无法提供已归档的区块信息,所以在需要同步的节点选择连接的peer节点时,会只选择已归档高度比自己高度低的节点。如果是高度为1的全新节点,则只能从未归档的节点(peer)同步区块

热门文章

最新文章