长安链可验证数据库,保证数据完整性的可信存证方案

近日,长安链发布“可验证数据库”实现了链上链下协同存储及数据完整性保证,显著提升长安链存储能力的可扩展性。

可信存证是联盟链最典型的应用场景,被广泛应用在司法、工业、农业、贸易等领域。联盟链的存证应用主要分为两个阶段:存证和用证。存证阶段由相关参与方将原始数据或其散列值写入到区块链,用证阶段由用户或司法机关从区块链上取回数据,或由相关参与方提供数据并通过区块链验证其散列值。

但是原始数据上链和散列值上链这两种方式都存在一定的不足:原始数据上链会占用大量的存储,每个节点都需要保存数据副本,远高于分布式系统“两地三中心”的冗余要求,因此对所有节点都会造成极大的存储压力和开销;散列值上链能够在一定程度上压缩链上存储成本,但是在查询链下存储的数据时,通过散列值只能验证参与方提供数据的真实性,而无法确保参与方提供了全部相关数据,即数据查询结果的全面性无法得到保证。

图片

可信存证典型应用场景

“区块链可扩展性关键技术研究”是由未来区块链与隐私计算高精尖创新中心任务团队针对可信存证等联盟链应用场景特点,兼顾链下业务系统数据存储和链上智能合约完整性验证的需求,实现并开源了链下可验证数据库及配套智能合约。这一成果主要从两个方面解决区块链的存储扩展问题:一是区块链参与者将数据写入具有Merkle B+树索引结构的链下数据库,并将根节点信息定期上链,使链上数据规模极小且增长速度只与时间相关。二是智能合约能够查询链下数据,并且能够在查询结果的基础上通过 Merkle证明和范围证明验证查询结果的正确性、真实性和全面性。

图片

链下可验证数据库索引结构

可验证数据库支持以数据库模式独立运行和作为MySQL存储引擎加载运行两种运行方式,用户可以通过可验证数据库内置的命令行终端或者使用MySQL开源生态工具与数据库交互,大大降低了业务开发人员的使用和迁移成本。同时,本成果提供了配套的智能合约,用户可以通过调用智能合约完成数据库查询任务下发和查询结果的完整性验证。因此在存证等区块链典型场景中能够在确保数据可信、可用的前提下,降低存储成本,并可根据存储需要弹性扩展存储能力。

图片

链上链下交互过程

数据完整性能够通过Merkle证明和范围证明保证。本项目的Merkle证明与Merkle树中的Merkle证明是相同的,范围证明由查询条件边界和Merkle证明共同组成。由于存储引擎中的数据记录是有序的,因此只要查询结果中包含查询条件边界,范围证明就能够保证所有满足查询条件的记录都已经包含在查询结果中。因此能够通过遍历数据保证其正确性,通过Merkle证明保证其真实性,通过范围证明保证其全面性。此外,由于只需要定期将根节点信息发送到区块链,因此链上数据规模很小且与原始数据的大小和数量都无关。

本项目与其他常用方案的对比如下:

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169212.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark算子

一、编写spark程序的准备工作(程序入口 SparkContext) 1.创建SparkConf val conf new SparkConf().setMaster("local[2]").setAppName("hello-app") 2.创建sparkContext val sc: SparkContext new SparkContext(conf) 二、基…

SpringMVC使用AOP监听方法推送数据

导入aop的maven依赖 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.12</version> </dependency>创建一个spring的XML文件编写aop配置 <?xml version"1.0" …

Swift 常用类别整理

生成颜色&#xff0c;传入16进制数字生成对应颜色 个人不喜欢传字符串的写法&#xff0c;比如 "0x0080FF" 或者 "0080FF"&#xff0c;原因如下&#xff1a; 传了字符串最后还是要解析成数字参与颜色运算的&#xff0c;需要额外做字符串转数字的操作&…

C++套接字库sockpp介绍

sockpp是一个开源、简单、现代的C套接字库&#xff0c;地址为&#xff1a;https://github.com/fpagliughi/sockpp&#xff0c;最新发布版本为0.8.1&#xff0c;license为BSD-3-Clause。目前支持Linux、Windows、Mac上的IPv4、IPv6和Unix域套接字。其它*nix和POSIX系统只需很少的…

链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)

目录 前言 1.反转一个单链表。 2. 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 3.链表的回文结构。 4.链表带环问题&#xff08;*****&#xff09; 4.1是否带环 4.2 入环的节点 5.随机链表的复制&#xff08;链表的深拷贝&#xff09; 前言…

Http状态码502常见原因及排错思路(实战)

Http状态码502常见原因及排错思路 502表示Bad Gateway。当Nginx返回502错误时&#xff0c;通常表示Nginx作为代理服务器无法从上游服务器&#xff08;如&#xff1a;我们的后端服务器地址&#xff09;获取有效的响应。导致这种情况的原因有很多&#xff1a; 后端服务器故障ngin…

「题解」反转链表 返回中间节点

文章目录 &#x1f349;题目1&#xff1a;反转链表&#x1f349;解析&#x1f34c;解法一&#xff1a;创建一个新链表&#x1f34c;解法二&#xff1a;直接操作原链表 &#x1f349;题目2&#xff1a;返回中间节点&#x1f34c;解法一&#xff1a;快慢指针&#x1f34c;解法二&…

【Linux】 reboot 命令使用

reboot 命令用于用来重新启动计算机。 语法 reboot [参数] 命令选项及作用 执行令 man --reboot 执行命令结果 参数 -n : 在重开机前不做将记忆体资料写回硬盘的动作-w : 并不会真的重开机&#xff0c;只是把记录写到 /var/log/wtmp 档案里-d : 不把记录写到 /var/log…

第25章_索引优化与查询优化

文章目录 1. 数据准备2.索引失效案例2.1全值匹配2.2最佳左前缀法则2.3主键插入顺序2.4 计算、函数导致索引失效2.5 类型转换导致索引失效2.6 范围条件右边的列索引失效2.7 不等于(! 或者<>)索引失效2.8 is null可以使用索引&#xff0c;is not null无法使用索引2.9 like以…

机器学习——奇异值分解案例(图片压缩-代码简洁版)

本想大迈步进入前馈神经网络 但是…唉…瞅了几眼&#xff0c;头晕 然后想到之前梳理的奇异值分解、主成分分析、CBOW都没有实战 如果没有实际操作&#xff0c;会有一种浮在云端的虚无感 但是如果要实际操作&#xff0c;我又不想直接调用库包 可是…如果不直接调包&#xff0c;感…

【Linux网络】系统调优之聚合链路bonding,可以实现高可用和负载均衡

一、什么是多网卡绑定 二、聚合链路的工作模式 三、实操创建bonding设备&#xff08;mode1&#xff09; 1、实验 2、配置文件解读 3、查看bonding状态,验证bonding的高可用效果 三、nmcli实现bonding 一、什么是多网卡绑定 将多块网卡绑定同一IP地址对外提供服务&#xf…

C++进阶-STL set/multiset容器和map容器的简单认识

set/multiset容器的简单认识 set基本概念set与multiset 的区别&#xff1a;set容器的构造和赋值set容器的大小和交换set容器的插入与删除set容器的查找和统计set容器-set和multiset的区别set容器内置类型指定排序规则set容器自定义数据类型指定排序规则 pair对组创建map容器的基…