波场链/币安链/马蹄链2.0佛萨奇开发源码丨2.0佛萨奇马蹄链/币安链/波场链dapp智能合约系统开发(详情及规则)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:  归档后的节点在对其他节点提供区块同步信息时,无法提供已归档的区块信息,所以在需要同步的节点选择连接的peer节点时,会只选择已归档高度比自己高度低的节点。如果是高度为1的全新节点,则只能从未归档的节点(peer)同步区块

  实现原理

  1.数据归档

  数据归档主要针对Block DB和Result DB将平时不怎么需要访问的数据归档,目前也仅支持leveldb badgerdb这两种数据库归档,暂不支持mysql,节点启动文件存储(>=v2.2.x)之后,暂时不支持归档,归档实现方式:

  归档前设置不允许归档的高度(unarchive_block_height,默认300000,当设置值小于10时,自动设置成10),能归档的最高高度即为当前链高度-unarchive_block_height

  归档的内容会从链上删除,需要事先将数据转存到链外数据库

  归档会删除BlockDB中的tx详细内容和ResultDB中的RWSets,并记录当前归档的高度(该高度也会被归档),并触发kvDB的compaction

  归档过程中会跳过Genesis Block和Config Block,如果要归档的目标高度正好为这两种区块,归档会失败,可以将目标高度修改到普通区块的高度

  归档后的区块依然可以从链上获取区块的原数据(MetaBlock),,只是无法获取到交易内容和RWSets(读写集)。所以无法获取完整的区块信息。但Genesis Block和Config Block任然可以获取完整区块信息

  归档后的节点在对其他节点提供区块同步信息时,无法提供已归档的区块信息,所以在需要同步的节点选择连接的peer节点时,会只选择已归档高度比自己高度低的节点。如果是高度为1的全新节点,则只能从未归档的节点(peer)同步区块

  用户可以多次归档,每次归档接着上次归档的高度继续

  归档后的区块查询时会返回错误:

  区块错误信息:“archived block”

  交易错误信息:“archived transaction”

  读写集错误信息:“archived RWSet”

  2.归档数据恢复

  数据恢复时会将数据写回链上,链慢慢恢复未归档前的样子

  数据恢复时会将交易内容和读写集(RWSets)写回节点,节点恢复到未归档前样子

  恢复过程中区块内容按照高度从高到低写回BlockDB和ResultDB,Genesis Block和Config Block跳过(不需要恢复)

  更新最新的已归档的高度,同时触发kvdb的compaction

  用户可以多次恢复归档数据,每次恢复接着之前恢复的高度继续

  3.数据恢复(rebuild_dbs)

  操作步骤

  ./chainmaker rebuild-dbs-c../config/wx-org1-solo/chainmaker.yml ci-solo

  查看日志,确认恢复成功

  停止区块链服务

  执行数据恢复(执行过程如上图),示例如下

  使用限制

  当前仅支持leveldb存储方式的恢复

  其他

  storage:rebuild_block_height:10,

  可以在命令行末尾添加chainid来指定恢复的chainid

  ./chainmaker rebuild-dbs-c../config/wx-org1-solo/chainmaker.yml ci-solo--chain-id=chain1

  可以在命令行末尾添加need-verify,对于可靠的数据恢复原始数据跳过区块验证过程,提高恢复速度,默认true

  ./chainmaker rebuild-dbs-c../config/wx-org1-solo/chainmaker.yml ci-solo--chain-id=chain1--need-verify=false

  执行数据恢复,会自动备份原数据

  可以配置恢复区块高度,不配置则恢复全部

  用法

  数据库恢复:在数据库数据损坏时,需要完整的多个数据库文件夹,使用该工具重新生成数据到指定的数据未损坏时的高度

  回滚链到指定高度:在最新数据写入紊乱,数据库不可用时,也可以使用该工具恢复到数据未紊乱时的高度,达到数据回滚的效果

  数据库恢复:在数据库数据损坏时,使用block和ledgerData1文件夹的数据,可以重新生成其他文件夹的数据

  数据同步:在同步过程中,可以拷贝目标节点的block和ledgerData1数据,然后使用该工具在本地重新生成其他文件夹的数据,之后即可以快速启动链,达到快速同步的效果

  回滚链到指定高度:在最新数据写入紊乱,数据库不可用时,也可以使用该工具恢复到数据未紊乱时的高度,达到数据回滚的效果

  启用了文件存储功能(推荐启动):

  未启用文件存储功能:

  4.透明数据加密(TDE)

  透明数据加密(Transparent Data Encryption(简称TDE))是指可以在文件层对数据和文件进行实时加密和解密,落盘的文件是加密后的内容,而对于上层应用系统和开发人员而言,加解密过程是无感知的,写入和读取的内容是明文内容,所以叫做透明数据加密。长安链密码模块同时提供了软件实现和硬件集成,使用以下步骤即可完成TDE的配置。

  5.基于软件实现的TDE配置

  6.创建对称密钥

  长安链的透明数据加密默认支持AES和国密SM4两种对称加密算法。AES算法支持128位、192位、256位这3种密钥长度,SM4算法支持128位密钥长度。密钥长度必须与对应的算法匹配,如果长度不匹配则无法正常启动长安链。我们以国密SM4算法为例,密钥推荐使用随机密码生成器生成的密码,比如“0H#y EGXPOAScAnB”这样的形式,将有效提高数据的安全性,防止被字典破解。除了字符串形式的密钥,长安链还支持任意二进制形式的密钥,只要长度满足要求(国密SM4:128位)即可。新生成的密钥请做好安全备份,防止密钥丢失后数据无法解读。

  7.配置透明数据加密

  在长安链节点的配置文件,即chainmaker.yml文件中,storage配置项下提供了对该节点TDE的配置选项,形如:

  storage:encryptor:sm4#sm4/aes encrypt_key:"1234567890123456"#16 bytes key

  encryptor是采用的对称加密算法,目前支持sm4和aes两个选项。

  encrypt_key是对称加密的密钥,支持字符串、十六进制和文件路径三种形式。

  字符串,支持字母大小写、数字、符号、空格等,长度必须满足加密算法要求

  十六进制,必须以0x开头,后面跟对应密钥的十六进制内容

  文件路径,将密钥保存到一个文件中,然后将文件绝对路径配置到这里,并确保长安链进程用户具有读写该文件的权限。以下配置示例:

  storage:encryptor:aes#sm4/aes encrypt_key:"0x48656c6c6f20436861696e4d616b6572"#16 bytes keystorage:encryptor:sm4#sm4/aes encrypt_key:"/usr/key/my.key"#this file content is a 16 bytes key

  8.启用节点

  完成TED的配置后,请确保当前节点没有任何数据,如果之前已经有数据,需要完全删除。节点启动后将会从创世区块开始基于TDE的密钥对每个区块每个交易每个世界状态Value进行统一的加密存储。在encrypt_key上使用文件路径配置密钥的情况下,长安链在启动时将读取文件内容作为密钥,同时将文件内容清空,防止硬盘数据被盗时密钥也同时被盗。所以如果下次要重新启动长安链进程,必须重新在对应的密钥文件中写入密钥才能正常启动。

  9.基于硬件密码机的TDE配置

  基于软件的对称加密存在占用主机计算资源,密钥容易暴露的风险,基于硬件密码机的方案可以有效提升加解密的性能和密钥的安全性。长安链支持PKCS11标准的硬件密码机接入,以下为在TDE中启用硬件密码机集成的步骤。

  10.在加密中生成对称密钥

  基于硬件密码机的情况下,密钥都托管在密码机内部,外部程序无法获得密钥内容,只能通过标准接口进行密钥生成、加解密、签名、哈希等密码学操作。进入密码机自带的管理后台可以为TDE生成对应的密钥,对称加密算法可选择AES或者国密SM4。密钥生成后会有一个对应的KeyID作为该密钥在密码机中的唯一标识,在接下来配置中会用到。

  11.配置PKCS11

  长安链基于PKCS11标准与密码机进行通讯,其对应的配置在chainmaker.yml配置文件的node配置节点下,配置示例如下:

  node:pkcs11:enabled:true library:/usr/local/lib64/pkcs11/libupkcs11.so#path to the so file of pkcs11 interface label:HSM#label for the slot to be used password:11111111#password to logon the HSM session_cache_size:10#size of HSM session cache,default to 10 hash:"SHA256"#hash algorithm used to compute SKI

  具体配置因为对应的密码机不同而不同,具体参见硬件加密章节。

  12.配置透明数据加密

  在完成了node配置节点下的pkcs11配置后,接下来需要进行storage配置节点下关于TDE加密算法和密钥的配置,对于密码机,我们并不知道对应的密钥内容,只有密钥的ID,所以我们只需要配置成对应的KeyID即可,比如:

  storage:encryptor:sm4#sm4/aes encrypt_key:"MasterKey1"#密码机上对应KeyID

  13..启用节点

  在完成配置后,同样是需要保证本节点的数据库是空的,如果之前已经同步过区块或者已经写入了创世区块,都需要删除。启动节点后,长安链将会把所有写入数据库的键值对数据中的Value部分发送给密码机进行加密,将加密后的内容进行存储。

 

相关文章
|
4月前
|
Java 区块链 数据安全/隐私保护
马蹄链佛萨奇2.0开发运营版丨佛萨奇2.0马蹄链智能合约系统开发(详细及案例)丨佛萨奇2.0马蹄链源码
  FORCE原力第一个推出的是Classic经典矩阵   Classic经典矩阵总共有12个矩阵,最低的矩阵只要5U即可参与(早期加入的朋友都可以享受半价优惠),下一个矩阵的价格是上一级的两倍。
|
监控 算法 区块链
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.
|
存储 监控 安全
波场链(TRON)智能合约dapp开发部署指南
波场链(TRON)智能合约dapp开发部署指南
|
资源调度 前端开发 JavaScript
马蹄链智能合约系统开发功能需求丨MetaForce佛萨奇2.0波场链
马蹄链智能合约系统开发功能需求丨MetaForce佛萨奇2.0波场链
118 0
|
区块链 数据安全/隐私保护
马蹄链DAPP合约模式系统开发技术(原理)
马蹄链DAPP合约模式系统开发技术(原理)
DAPP马蹄链系统开发(方案详解)丨DAPP马蹄链系统开发(源码项目)
  大公排指的是全网排列,小公排指的是单体伞下排列,一条线公排指的是按一条线排列,跳排指的按指定某代数为推荐关系。
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会采用不同的底层区快开发平台和共识机制,或者自行发布代币(也可以使用基于相同区快平台的通用代币)。