尽管区块链具有基本统一的技术构成和逻辑架构,但由于不同的企业主导,适用于不同的应用,所使用的理念、共识算法、合约规则等的不同,出现了不同的开发应用平台,有代表性且应用较多的有比特币系统、以太坊系统、超级账本等。电子档案管理的应用大多是联盟链形式的超级账本,因此本节对比特币系统和以太坊系统进行简要介绍,对超级账本做详细介绍。
比特币系统是区块链系统的第一个典型应用,也是为比特币这个加密数字货币设计的专用系统。
在比特币系统中,没有严格意义上的“账户”概念,取而代之的是,比特币系统提出了其独特的未消费的交易输出(Unspent Transaction Output, UTXO)模型。UTXO是一个包含交易数据和对应的执行代码的数据结构,所有的UTXO条目构成了比特币的“账本”,其中每个传统意义上的“账户”的数据可以通过与它相关的UTXO推断出来。
在比特币系统中,交易的合法性验证依赖锁定脚本与解锁脚本。实际上,在比特币的交易过程中,要在交易输入中提供一个用于解锁UTXO的脚本,是一类能够“解决”所引用的交易输出上设定的花费条件的脚本;同时,交易的输出需要指向一个用于锁定当前交易的输出脚本,这类脚本即“锁定脚本”。比特币的交易脚本是一种基于逆波兰表示法的堆栈的执行语言。为了进一步保证比特币的安全性,比特币开发者对客户端可以操作的脚本类型进行了限制,规定了客户端可运行的5种标准交易脚本,分别为P2PKH、P2PK、P2SH、MS和OP_Return,这5种脚本分别对应着不同的特性和用处。
比特币的安全性保证源于其独特的PoW共识机制,以及其每个节点都可以独立正确验证的交易脚本机制。在当前的比特币系统中,由于参与计算的算力总量是十分可观的,攻击者所能够掌控的算力的总比例实际上是非常小的。因此,目前的比特币系统一般取6个区块作为交易确认时间,即在交易被写入区块后再等待6个基于该区块的区块生成(一般是60分钟),再实际进行该交易其他资产的交接。
然而需要指明的是,比特币系统虽然可以通过地址和用户不对应的方式对用户隐私进行保护,但其账本完全公开的特性,也给所有人提供了分析账本数据、找出特定地址交易规律从而定位地址与人的对应关系的可能。
以太坊系统是一个开源的、有智能合约功能的区块链平台。程序员维塔利克·布特林受比特币启发后组织开发了这个平台,用于除比特币以外的各种基于智能合约的去中心化应用,如社交、众筹、游戏等。
以太坊采用了与比特币类似的PoW共识机制,但其所选用的挖矿算法却与比特币不同。在比特币所使用的SHA-256挖矿算法中,挖矿的速度与机器的算力成正比,从而催生了利用大规模的专用矿机的集群进行合作挖矿的集中式矿场,降低了比特币的去中心化程度。因此,以太坊采取了Ethash这种算法作为其工作量证明算法。Ethash算法具有挖矿效率与内存大小和内存带宽正相关的特点,这就防止了部分矿场通过堆叠专用矿机算力而获取挖矿效率上的提升。
随着以太坊系统的不断“进阶”,以太坊社区正不断地对这些缺陷进行改善,使人们能够更方便地利用以太坊系统进行各类去中心化应用的开发,从而进一步扩大区块链的应用范围。
超级账本(Hyperledger)是一个由Linux基金会牵头并创立的开源分布式账本平台,于2015年12月正式宣布启动,由若干个各司其职的顶级项目构成。与其他区块链平台不同,超级账本的各个子项目都是锚定“平台”的,仅提供一个基于区块链的分布式账本平台,并不发币。
超级账本项目的整体目标是区块链及分布式记账系统的跨行业发展与协作,并着重发展性能和可靠性,使之可以支持主要的技术金融和供应链公司中的全球商业交易。它的目标是为开发一个开源的分布式账本框架构建强大的行业特定应用、平台和硬件系统,以支持商业级交易。加入超级账本联盟的首批成员,大多是银行、金融服务公司或IT公司。但随着时间的推移,越来越多的公司加入了该项目。截至2018年9月26日的官方名单显示,有超过270家来自不同领域和地区的组织加入了超级账本这一项目,其中不乏知名公司及初创公司,涉及行业从物流到医疗保健,涉及领域从金融到政府组织。截至2018年7月,超级账本拥有了10个子项目,涉及代码360万行,近28000名参与者参加了超级账本的110多场相关主题的聚会。
自成立以来,超级账本社区已吸引了国内外各行业的大量关注,并获得了飞速的发展。社区的各类参与者包括会员企业、开源平台开发者等,共同构造了完善的企业级区块链生态。除项目外,超级账本开源社区的发展也极为繁荣。
为了利用区块链的特性,同时避免复杂的系统治理,超级账本采用了带有许可认证的节点管理方式,也就是系统是在一系列已知的、具有特定身份标识的成员之间进行交互。虽然对于系统来说节点本身的身份是已知的,但是节点之间并不互相信任,所以节点之间还是需要一个一致性的算法来保证数据是可信的。区别于比特币等公有链系统的PoW算法,在节点可知的Fabric系统中,可以采用传统的类似于BFT的共识算法。
Fabric的一个具有创新意义的做法是采用“执行——排序——验证——提交”模型。传统的区块链系统采用的是一种顺序执行的方式,交易是在排序完成之后或者是排序的过程中执行智能合约生成的,这使所有节点都必须按顺序执行智能合约,限制了系统的可扩展性和性能。Fabric充分利用模块化的设计、容器技术和密码学技术,使系统具有可扩展、灵活和安全等特性。
区别于比特币的UTXO模型,Fabric项目使用的是账户余额模型。类似于日常使用的银行卡,银行系统记录了银行卡对应账户剩余的金额,当我们需要使用银行卡去交易时,银行会在批准交易前检查以确保我们有足够的余额。账户余额模型更加简单和高效,基于Fabric的智能合约开发者可以直观地根据账户是否有足够的余额来判断交易是否可以进行,因此也可以开发出更加复杂的智能合约。
共识服务在Fabric系统中占有十分重要的地位。所有交易在发送到Fabric系统中后,都要经由共识服务对交易顺序进行共识,然后将交易按顺序打包进入区块链,这保证了任意一笔交易在区块链中的位置,以及在整个Fabric系统中各节点的一致性和唯一确定性。
智能合约是区块链的重要组成部分之一,在Fabric系统中,智能合约被称为链码。链码分为两类,分别是系统链码和用户链码。
如图1-3所示为Fabric的参考应用架构。区块链应用通常可分为呈现层、应用层、业务层和数据层。
图1-3 Fabric的参考应用架构
呈现层包含了我们通常所说的用户界面,如注册界面、交易界面、应用管理界面等,这一层和传统的Web应用和移动App并无差别,用户在这一层对区块链的存在无感知。
应用层为应用逻辑所在的位置。这一层处理用户的输入数据,根据这些数据判断出具体的业务,然后调用相应的业务处理接口。如果为企业传统内部业务则通过传统的业务接口(如数据库)处理,如果为区块链业务则通过区块链智能合约调用接口处理。
业务层封装了Fabric应用的全部业务逻辑,是整个应用的核心部分。业务层可分为两类:企业传统内部业务逻辑和跨企业/区块链业务逻辑。企业传统内部业务逻辑和传统应用业务逻辑实现方法一样,跨企业/区块链业务逻辑则由智能合约具体实现。
数据最终存储在数据层。数据层分为传统数据库存储和Fabric存储。企业传统内部业务逻辑的数据会存储在传统数据库中,这部分数据是企业的内部隐私数据。另外,跨企业/区块链业务逻辑的数据则存在Fabric区块链数据库中,各企业间通过Fabric区块链共享这些数据。