近日,长安链发布“可验证数据库”实现了链上链下协同存储及数据完整性保证,显著提升长安链存储能力的可扩展性。
可信存证是联盟链最典型的应用场景,被广泛应用在司法、工业、农业、贸易等领域。联盟链的存证应用主要分为两个阶段:存证和用证。存证阶段由相关参与方将原始数据或其散列值写入到区块链,用证阶段由用户或司法机关从区块链上取回数据,或由相关参与方提供数据并通过区块链验证其散列值。
但是原始数据上链和散列值上链这两种方式都存在一定的不足:原始数据上链会占用大量的存储,每个节点都需要保存数据副本,远高于分布式系统“两地三中心”的冗余要求,因此对所有节点都会造成极大的存储压力和开销;散列值上链能够在一定程度上压缩链上存储成本,但是在查询链下存储的数据时,通过散列值只能验证参与方提供数据的真实性,而无法确保参与方提供了全部相关数据,即数据查询结果的全面性无法得到保证。
可信存证典型应用场景
“区块链可扩展性关键技术研究”是由未来区块链与隐私计算高精尖创新中心任务团队针对可信存证等联盟链应用场景特点,兼顾链下业务系统数据存储和链上智能合约完整性验证的需求,实现并开源了链下可验证数据库及配套智能合约。这一成果主要从两个方面解决区块链的存储扩展问题:一是区块链参与者将数据写入具有Merkle B+树索引结构的链下数据库,并将根节点信息定期上链,使链上数据规模极小且增长速度只与时间相关。二是智能合约能够查询链下数据,并且能够在查询结果的基础上通过 Merkle证明和范围证明验证查询结果的正确性、真实性和全面性。
链下可验证数据库索引结构
可验证数据库支持以数据库模式独立运行和作为MySQL存储引擎加载运行两种运行方式,用户可以通过可验证数据库内置的命令行终端或者使用MySQL开源生态工具与数据库交互,大大降低了业务开发人员的使用和迁移成本。同时,本成果提供了配套的智能合约,用户可以通过调用智能合约完成数据库查询任务下发和查询结果的完整性验证。因此在存证等区块链典型场景中能够在确保数据可信、可用的前提下,降低存储成本,并可根据存储需要弹性扩展存储能力。
链上链下交互过程
数据完整性能够通过Merkle证明和范围证明保证。本项目的Merkle证明与Merkle树中的Merkle证明是相同的,范围证明由查询条件边界和Merkle证明共同组成。由于存储引擎中的数据记录是有序的,因此只要查询结果中包含查询条件边界,范围证明就能够保证所有满足查询条件的记录都已经包含在查询结果中。因此能够通过遍历数据保证其正确性,通过Merkle证明保证其真实性,通过范围证明保证其全面性。此外,由于只需要定期将根节点信息发送到区块链,因此链上数据规模很小且与原始数据的大小和数量都无关。
本项目与其他常用方案的对比如下: