相里朋【原创】主流区块链技术比对研究综述(二)

  • 2017-10-16
  • 0

相里朋|顾欣【原创】主流区块链技术比对研究综述(二)

相里朋|顾欣【原创】主流区块链技术比对研究综述

相里朋|顾欣【原创】主流区块链技术比对研究综述(二)

前言

        从2009年比特币诞生,到以太坊和开源项目Hyperledger Fabric等等,至今,许多区块链技术架构或区块链平台不断被开发出来,区块链技术也发生着日新月异的变化。区块链技术是多种底层技术的融合:点对点网络技术、密码学技术、块链式结构和共识算法等等。虽然智能合约并不是区块链系统的必要组成部分,但由于区块链具备不可篡改、规则透明、多方执行等特性,使它可以很好地为智能合约提供可信的计算环境。

        因此,我们将对目前几个主流区块链技术进行比对,分析主流区块链技术架构的特点,以及相互之间的差别,最后对A、B、C、D四家单位的区块链产品进行简单类比。

主流区块链技术比对与分析

    紧接上文中所提到的这些区块链技术进行比对,从多个方面比较它们的特点

1
区块数据结构

序号

名称

区块哈希

父哈希

时间戳

默克尔根

1

比特币

2

以太坊

3

Fabric

4

Ripple

比特币区块结构包括区块大小、区块头、交易计数器、交易。其中,区块头结构主要包括版本、父区块头哈希值、默克尔根、时间戳、难度目标、Nonce;

以太坊区块结构包括区块哈希(blockHash)、区块号(blockNumber)、父哈希(parentHash)、时间戳(timestamp)、难度(nonce)、交易哈希、使用容量(gasUsed)、总容量(gasLimit)等;

Fabric区块结构包括版本、前一区块哈希(previousBlockHash),区块交易的默克尔根哈希(transactionsHash)、时间戳(timestamp)、世界状态的默克尔根哈希(stateHash)等;

Ripple区块结构包括区块索引、区块哈希(ledge_hash)、父哈希(Parent_hash)、账户哈希(account_hash)、时间戳(close_time)、总币数(total_coins)、交易哈希等。

2
网络结构

比特币、以太坊、Fabric、Ripple均使用点对点网络(P2P协议)来组织各个网络节点,执行对等节点的发现和节点间的通信。

3
密码学算法

序号

名称

哈希计算

签名机制

1

比特币

SHA256

ECDSA

2

以太坊

SHA3-256

ECDSA

3

Fabric

SHA3 SHAKE256

数字证书

4

Ripple

SHA512 half

ECDSA

比特币、以太坊、Fabric、Ripple均使用美国国家标准技术研究所发布的安全散列算法SHA,输出256位,同时我们比较下MD5、SHA1、SHA256算法与国密SM3杂凑算法,结果如下:

加密算法

安全性

运算速度

输出大小(位)

MD5

128

SHA1

160

SHA256

比SHA1略低

256

SM3

比SHA1略低

256

    比特币、以太坊、Ripple使用的是椭圆曲线数字签名算法(ECDSA),其中,Fabric支持使用Fabric CA进行数字签名,Fabric CA是Hyperledger Fabric的证书颁发机构,它提供的功能包括:1)身份的注册,或连接到LDAP作为用户注册表;2)发放注册证书(ECerts);3)发布交易证书(TCerts),在Hyperledger Fabric blockchain上进行交易时提供匿名性和不可链接性;4)证书更新和撤销。

4
共识机制

序号

名称

共识算法

出块时间

性能

容错力

公网TPS

1

比特币

PoW

≈600秒

每笔交易最终确认可能需要60分钟

49%故障

≈7

2

以太坊

PoW,PoS

≈15秒

≈15秒

49%故障

≈25

3

Fabric

多种,可插拔(PBFT、Noops),以PBFT为主

自定义

4次单程到最远验证节点的网络延迟(1000Km延迟20毫秒)

f/(3f+1)故障

≈100K

4

Ripple

RPCA

/

3~6秒

49%

≈1000

注:f代表出席拜占庭故障的节点数量。

共识机制是区块链技术的核心,数据分散在各个参与验证的节点中,共识算法的作用是使数据保持一致性,否则系统将无法正常工作。由于区块链是一个去中心化或弱中心化的系统,所以它可能会面临拜占庭问题。

比特币和以太坊1.0版采用了PoW机制来保证账本数据的一致性。PoW通过经济激励的方式来鼓励节点参与区块的构造过程,节点在构造区块的时候需要穷举一个随机数以使得区块符合规定的难度要求,为了维护区块链,则需要全网具备较大算力支撑来保证网络的安全性,否则账本数据就有可能被篡改。此外,即使维持较大算力来保护网络,PoW也无法从根本上保证交易的最终性,比如比特币就经常产生孤立区块,而包含在孤立区块中的交易就有可能被撤销。因此比特币通常要求用户等待6个区块的确认,即1小时左右的时间。而为了维护算力而支出的电力成本也是相当可观。

目前以太坊1.5版采用了类PoS的Casper算法。PoS主要思想是节点记账权的获得难度与节点持有的权益成反比,相对于PoW,一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性弱。该共识机制容错性和PoW相同。总结来说,PoS是PoW的一种升级共识机制,根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度。

Ripple引入了一个“RPCA”机制,通过特殊节点的投票,在很短的时间内就能够对交易进行验证和确认。Ripple的交易确认过程可在几秒钟之内完成,当确认交易的节点百分比低于某一阈值时,交易未能通过一轮共识。每一轮都是一个迭代过程。在首轮投票开始时,至少50%的节点必须同意。达成共识的最后一个阈值是80%的节点同意。这些特定的值会发生变化。

Hyperledger则是采用类似“Ripple共识”机制,达成共识则是通过拜占庭容错算法机制。节点被分为普通节点和记账节点(Validating Peer),只有记账节点才会参与到区块的构造过程,这种角色的分离使得算法的设计者有机会将运行共识算法的节点数量限定在一个可控的规模内。

拜占庭容错模型对网络中的节点做出了假设和要求:如果共识中有f个节点会出现拜占庭故障,那么至少需要3f+1个节点参与共识才能避免网络出现分叉。在这个模型下,每个区块的构造过程都需要至少2f+1个节点的参与才能够完成,而不像工作量证明机制下每个节点都独立构造区块。一旦区块被构造出来,它就无法被撤销,因为2f+1个诚实的记账节点不会在同一高度对两个不同的区块进行签名认证。

相比较而言,工作量证明、权益证明机制提供了极高的灵活性和可用性,因为每个节点都独立构造区块而几乎不需要其它节点的参与,节点可以随时加入或者退出网络,即使全网只剩下一个节点,网络还是可以继续工作,但是挖矿造成大量的资源浪费,共识达成的周期较长,不适合商业应用;而拜占庭容错的机制则与之相反,牺牲了一定的灵活性和可用性,记账节点必须在线提供服务而不能退出网络,一旦出现1/3的记账节点停机,那么网络将变得不可用。

5
智能合约

序号

名称

智能合约

执行环境

合约语言

1

比特币

内置脚本引擎

P2SH脚本

2

以太坊

EVM

Solidity

3

Fabric

Docker

Java/C#/Go等

4

Ripple

Codius(beta)

JavaScript等web语言

比特币内置了一套基于栈的脚本执行引擎,可以运行一种独有的脚本代码,用于对交易进行简单的有效性验证。这套脚本语言被有意设计成非图灵完备的,简单却也可以应对货币转账的各种需求。

以太坊是以图灵完备智能合约为主要功能的区块链,用户可以在以太坊的平台上创建自己的合约,而合约的内容可以包含货币转账在内的任意逻辑。合约使用一种名为Solidity的语言来编写,语法类似Java,最终被编译成字节码并运行在EVM(Ethereum Virtual Machine)之中。EVM提供了堆栈、内存、存储器等虚拟硬件,以及一套专用的指令集,所有的代码都在沙盒中运行。它提供了合约间相互调用的能力,甚至可以在运行时动态加载其它合约的代码来执行。这种能力使得以太坊的合约具有非常高的灵活性,但也可能会使合约的功能具有不确定性。

与以太坊学新的开发语言、虚拟机的思路不同,Fabric选择了使用现有的容器技术来支持智能合约功能。Fabric的智能合约理论上可以用任何语言来编写,这一点对开发者相当友好,他们将无需学习新的语言,并且可以复用现有的业务代码和丰富的开发库,并使用自己熟悉的开发工具。相对的,采用docker的智能合约架构也有大量的问题:首先,它很难对智能合约的执行流程进行控制,从而无法对其功能进行限制;其次,它无法对合约运行所消耗的计算资源进行评估;此外,运行docker相对而言是极其耗费资源的操作,这就使得难以在移动设备上运行合约;最后,不同节点的硬件配置、合约引用的开发库等,都有可能会使合约的行为具有很强的不确定性。

Ripple开发了Codius平台(仍处于beta),在这样一个系统里,开发者可以用任何编程语言撰写规则,任何接受加密签署指令的服务之间都可以通过合同交易。

6
其它方面

对于区块链的类型、开发语言、内置代币、账户、身份认证以及存储方面也做了比对,结果如下:

序号

名称

类型

开发语言

内置代币

账户

身份认证

存储

1

比特币

公有链

C++

BitCoin

区块压缩

2

以太坊

公有链

GO

ETH

普通账户+合约账户

状态快照

3

Fabric

联盟链

GO

chaincodeID

数字证书

状态快照

4

Ripple

联盟链

C++

XRP

/

关于账户方面,比特币里没有账户概念,所有余额均通过UTXO计算而得。而以太坊和Fabric里均有账户概念。以太坊的账户分为普通账户和合约账户,每个账户对应有永久存储空间,存储该账户的以太币余额等。Fabric中账户即为chaincodeID,每个被部署的chaincode(chaincode是Fabric中对智能合约的叫法)就是一个账户,每个账户也对应有永久存储空间,存储自定义的键值对。

关于身份认证,比特币和以太坊基本没有身份认证的设计,原因很简单,因为这两者的设计思想都是强调隐私和匿名,而反对监管和中心化,而身份认证就势必要引入一些中心或者弱化的中心机构,而Fabric使用数字证书进行身份认证,Ripple主要面向金融结算,是一个半去中心化的区块链,通过RippleTrade进行身份认证。

关于存储,由于区块链要记录完整的数据信息,不能删除或修改区块记录,所以区块会不断增加,存储空间将受到威胁,比特币提出了使用默克尔树来存放交易散列的方式,当需要回收硬盘空间时,只需将老旧的交易从默克尔树中剔除即可。一个不含交易信息的区块头大小仅有80字节。按照比特币区块生成的速率为每10分钟一个,那么每一年产生的数据约为4.2MB,即使将全部的区块头存储于内存之中都不是问题。

以太坊、Fabric在比特币区块压缩的基础上,又采用了状态快照的方式来节约硬盘空间。具体来说,就是在区块头的结构中不但记录了当前区块所有交易的根散列,还记录了当前区块及过去所有区块中的状态根散列。这些状态包括所有的UTXO、账户余额、合约存储等信息,所以节点只需要保留最新的区块和完整的状态信息即可。

IABThinkTank

IAB智囊团聚焦范围:新一代信息技术、人工智能、大数据、区块链、物联网的政策咨询、产业实施、技术服务和质量保障。

相里朋|顾欣【原创】主流区块链技术比对研究综述(二)

始发于微信公众号:区块链大数据人工智能质量测试

通过「BeePress|微信公众号文章采集」WordPress 插件生成