论文部分内容阅读
区块链作为比特币的底层技术在后者出现不久后,作为关键字出现在美国的一家报纸上,自此便开始走进大众的视野。在区块链中每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易数据,这样的设计使得区块内容具有难以篡改的特性。区块链的诸多优秀的特性引起了国内外的研究热潮,同时也推动着区块链技术的不断发展。从比特币、以太坊到超级账本Hyperledger象征着区块链技术的不断更新和升级,区块链数据存储与管理作为关键支撑部分也在不断的进步以适应更多应用场景。本文基于对现有区块链技术的研究,在综合考虑存储方式、数据模型以及易用性和通用性上设计和实现了区块链数据存储与管理。论文中首先描述了一个自主设计的区块链平台,在平台的架构下将区块链数据存储与管理的数据类型分为了三部分:链式结构的区块、世界状态以及回溯数据。链式结构的区块作为最重要的数据是一串相互链接的区块的序列化日志,保存业务对象的所有历史值。世界状态存储业务对象在区块中的最新值的集合,以支撑应用的智能合约逻辑的高效执行。回溯数据存储业务对象在区块链中的历史位置索引信息,以实现在特定应用场景下的智能合约可以快速访问某个业务对象在链式区块中的所有或者一部分历史值。其次结合了主流区块链技术数据存储的优缺点以及区块数据的特殊性,将链式结构的区块存储在文件中。对于世界状态,论文中分析和对比了比特币的UTXO模型和以太坊的账户余额模型,并且对以上两种模型进行总结和抽象出了(key,value)的数据模型,在该数据模型之上不仅可以实现比特币和以太坊两种应用,理论上可以支持比如版权、存证等更加复杂的应用场景。另外,为了提升应用的智能合约使用世界状态数据的能力以及区块链数据存储与管理的通用性,本文将(key,value)格式的数据进行解析和格式转换最终实现将状态数据存储在KV数据库、关系数据库以及文档数据库中,根据不同数据库支持的数据查询能力设计了一套统一的合约状态访问接口。为了解决双重支付的问题,论文中详细分析了比特币和以太坊针对此问题的解决方法,最后选择以记录业务对象的版本的方法并以UTXO模型为例分析了该方法是如何解决双重支付的。最后论文基于以上设计描述了区块链数据存储与管理的实现,并且基于该实现设计了一个简化版比特币并对其进行功能和性能测试,证明了设计的可靠性。