Page 287 - 《软件学报》2020年第9期
P. 287

2908                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         1.4   智能合约
             智能合约最早于 1994 年由 Szabo 提出       [58] ,其设想为:在一个计算机系统中,当一些事务被执行时,可以激发
         相应的代码自动执行,并产生相应的输出合约.但是由于很难确保智能合约的代码等不被篡改,因而其在实际的
         应用受到了很大的限制.随着区块链技术的发展,利用区块链所支持的数据不可篡改的特点,区块链上的智能合
         约得到了越来越多的重视.智能合约可以看作是一段区块链所有节点都认可的代码.部署在区块链上的智能合
         约需采用该区块链系统可执行的代码,并同样存储于区块中.当智能合约的条件被满足时,合约自动被激活并执
         行相应的代码.例如,一个执行转账功能的智能合约会首先判断其激活条件是否被满足:若被满足,则进一步验
         证相应的事务是否可执行,包括事务是否被篡改、支出账户的金额是否足够等.在验证合法之后,合约将自动执
         行相应的事务.
         1.5   区块链类型
             根据节点加入或退出区块链系统的方式,区块链系统可分为公有链、联盟链、私有链这 3 类.
             •   公有链系统也称为非许可链,允许任何节点参与区块链数据维护和读取,同时,节点也可以随时加入或
                                                                                         [1]
                离开该网络.因此,公有链系统是一个完全的去中心化的系统.典型的公有链系统包含比特币 、以太
                坊 [60] 等.在公有链中,其共识机制一般是基于计算的工作量证明共识.理论上,恶意节点需占有网络中
                51%的算力,才可以控制该区块链;
             •   联盟链也称许可链,是一种新加入的节点需要获得许可的区块链.联盟链限制可参与的成员节点,且节
                点的读写权限以及所负责的计算由联盟链的设计规则来确定.典型的联盟链包括 Hyperledger
                Fabric [59] 等.整个联盟链由所有节点共同维护,但是与公有链不同,联盟链可以假定网络中部分节点是
                可信的.节点的加入以及共识过程一般通过可信的节点控制.联盟链一般不采用工作量证明的共识机
                制,而是多采用 PBFT 等基于通讯的共识算法;
             •   私有链则仅限信任的个体使用,且不完全能够解决信任问题.网络节点彼此之间需要透明,但不对外
                公开.
         2    区块链的数据存储

             在区块链的各种应用中,数据的存储是底层设计中非常重要的层次.由于数据库的广泛应用及其丰富的数
         据管理工具,很多工作研究利用数据库的存储来实现区块链的数据存储管理.针对区块链数据的存储模式主要
         集中在两个方向.
             •   一个方向为基于键值对的存储模式,该模式下存储的任一数据记录包含一个可以确定该记录的主键,
                并将其余部分视为该主键所对应的数值进行存储.该模式数据结构简单,可以在处理大规模数据时获
                得很好的性能;
             •   另一个方向是采用关系型数据的存储模式,该模式将数据以关系模型的方式建模并存储.在该模式下,
                可以保证数据满足诸多限定条件,例如数据库的一致性、原子性等.因此,部分公司已经推出了基于数
                据库的区块链系统,包括 Amazon QLDB(https://aws.amazon.com/cn/qldb/)以及 ORACLE blockchain
                table(https://blogs.oracle.com/blockchain/)等.该类区块链在数据库的基础上,通过设计共识机制,确保各
                个节点数据的一致性.
             由于区块链上数据存储的成本远高于一般数据库,部分工作采用重新编码、链上-链下结合等方式来减少
         区块链数据存储的开销.因此,我们也将从键值对模型和关系数据模型两个方向对其进行综述,并介绍针对区块
         链数据存储的优化技术.表 1 分别从性能、可拓展性以及技术复杂度方面,比较现有关于数据存储的工作.
   282   283   284   285   286   287   288   289   290   291   292