Qtum主网于2017年9月14日上线至今,也在一年时间迅速成长为全球最有影响力的公链项目之一,同时Qtum也将技术输出到更多的区块链应用中作为技术使命。因此,我们启动了Qtum Enterprise项目[1],目标是实现一套区块链的开发框架,帮助开发者一键搭建自己的区块链网络[2]。为了让公众更好地了解Qtum 企业版解决方案,我们将其与市场上的其他区块链开发框架进行了全面且深入的对比。从功能、性能等多个角度出发,并提出了我们的理解和未来规划。
在互联网领域内,随着一个系统的成熟,必然会衍生出相应开发框架。开发框架通常实现了一些底层的通用功能,帮助开发者快速进行上层应用的开发,避免了重复造轮子开发同样工具。同时,还会制定上层的开发规范,使得上层的代码模块更加标准化,在可读性和通用性方面都得到提升。互联网领域内常用的开发框架有深度学习的Tensorflow、服务端的Spring和前端的React等。
随着区块链和加密货币应用的日趋广泛,也产生了一些开发框架帮助开发者搭建更多的去中心化系统。早期的区块链主要基于成熟的公链系统的源码进行开发,例如比特币的Bitcoin Core[3],以太坊的Go Ethereum[4]。后来,一些开发框架逐渐成熟,如Graphene[5]、Hyperledger Fabric[6]等。近期,Parity团队推出的Substrate[7]更是引起了公众的关注。
Qtum作为一个成熟的公有链系统,也将自己的技术输出到更多的区块链应用中作为技术使命。Qtum基于比特币的UTXO数据结构和以太坊的EVM智能合约进行搭建,并采用了PoS共识算法,在兼容性、性能等方面都有不错的表现。为了让开发者可以基于Qtum搭建更多的区块链系统,我们启动了Qtum Enterprise项目[1],目标是基于Qtum的底层技术提供一套区块链的开发框架,帮助企业和个人一键搭建自己的区块链系统[2]。通过Hackathon、技术合作等方式,一些开发者基于Qtum Enterprise开发了自己的应用。
区块链领域技术的更新迭代非常迅速,所以我们关心业内一些新的技术是否能给区块链的应用带来新的解决方案。随着近期Parity Substrate项目的推出,引起了我们对区块链领域内的所有开发框架进行一次重新审视。我们选取了业内应用最为广泛的区块链开发框架,Bitcoin Core、Go Ethereum、Graphene、Hyperledger Fabric、Substrate,再加上Qtum Enterprise,从背景、功能、性能、开发和社区多个角度进行了一次全面的对比分析。从而帮助开发者更好地了解区块链技术和Qtum Enterprise项目。
01
Bitcoin Core
Bitcoin Core是比特币的主要实现,采用C++编写,代码位于[3]。Bitcoin Core由比特币核心成员进行维护,近期平均每月发布一个新版本。Bitcoin Core出现最早,且仅包含了加密货币的功能,因此许多较早的加密货币项目是在其基础上进行的开发,例如Litecoin、Zcash等。比特币的Go语言实现btcd [4] 也常被用于开发新的区块链系统,由于其技术实现和Bitcoin Core一样,仅仅是编程语言不同,在此不再赘述。
02
Go Ethereum
Go Ethereum是以太坊的主要实现之一,代码位于[4]。Go Ethereum由以太坊官方团队进行开发。相比其他语言的以太坊实现,Go实现代码更为简洁易懂,吸引了更多的开发者。由于以太坊第一个实现了智能合约,所以很多区块链应用类的项目会基于Go Ethereum进行开发。另外,以太坊的侧链、跨链项目也都会使用Go Ethereum的代码。以太坊的另一实现Parity Ethereum [10] 也非常热门,但较少被用于开发新的区块链。
03
Graphene
Graphene框架由Dan Larimer(即BM)创始,代表项目包括BitShares、Steem、和EOS。Graphene基于C++实现,原始代码[5]并不继续维护,但是其应用的项目(尤其是EOS[8])由开发团队进行着不断的更新。Graphene框架的特点是DPoS共识,即通过投票得到的矿工进行区块的生产,从而实现了更短的区块间隔时间。
04
Hyperledger Fabric
Hyperledger Fabric[6]是由Linux基金会发起的Hyperledger项目中的一个区块链解决方案,Go语言实现,由IBM等众多企业共同维护。Hyperledger Fabric主要面向区块链的商业应用场景,提出了一套基于联盟链的解决方案。方案注重于数据管理和隐私,而不包含加密货币的实现。Hyperledger Fabric的文档最为丰富全面,易于开发人员上手学习。
05
Substrate
Substrate[7]是由Parity团队近期推出的区块链开发框架。Parity团队维护着以太坊的主要实现之一Parity Ethereum,同时正在进行跨链项目Polkadot的开发。Substrate是Polkadot项目的组件之一,基于Rust语言编写,采用了区块链领域内的最新解决方案——基于WASM的智能合约和基于Libp2p的网络。另外,Substrate的数据结构高度可定制,开发者既可以用其存储交易账本,也可以是其他任何数据。Substrate目前仍在功能开发阶段。
06
Qtum Enterprise
Qtum Enterprise[1]是由Qtum团队实现的区块链开发框架。Qtum Enterprise基于Qtum公链进行开发,C++编写。系统兼容比特币的UTXO交易模型和以太坊的EVM智能合约,采用PoA共识并由DGP协议选举超级节点。相比其他开发框架,Qtum Enterprise的优点在于兼容性强,能够适用比特币钱包应用和以太坊的Solidity智能合约代码。另外,Qtum Enterprise提供了一键发链的工具[2],帮助开发者快速搭建自己的区块链网络,而不必过多了解区块链的技术细节。
01
数据结构
Bitcoin Core
Transaction, UTXO
Go Ethereum
Transaction, State, Receipt
Graphene
Transaction, Action, Handler
Hyperledger Fabric
Transaction, State
Substrate
Extrinsic, Runtime
Qtum Enterprise
Transaction, UTXO
区块链上的数据结构主要分为两类:
UTXO——以Bitcoin Core、Qtum Enterprise为代表的UTXO结构。UTXO结构下,一个地址上的余额由该地址的所有UTXO相加而成。UTXO结构的优点是节省存储空间,即仅仅记录数据的变化,而不记录最终状态。并且能够在一个交易中实现一对多、多对一的转账,并发能力较好。最后。UTXO的缺点是难以直接用于基于账户的智能合约系统中,所以Qtum通过研发的AAL(Account Abstraction Layer)实现了UTXO到智能合约的中间件。
State——由于UTXO和智能合约的不兼容,所以其余包含智能合约的区块链开发框架大多数基于了State结构。在State结构中,区块链的数据是以map的形式进行存储的,map的key是账户地址,value则是地址上的余额、合约等数据。而Transaction的功能就是修改这个map,例如转账操作就是减少一个地址的余额并增加另一个地址的余额。
Go Ethereum、Graphene、Hyperledger Fabric和Substrate都采用了这种模式,但三者在Transaction的逻辑上有一定区别:
Go Ethereum中,任何节点消耗一定的代币则能发送Transaction,即通过经济的方式控制了区块链的写操作。
Graphene和Hyperledger Fabric中,普通节点需要向管理节点申请账号或证书,然后才能发送Transaction,即通过授权的方式控制了区块链的写操作。
Substrate允许开发者自定义State(叫做Runtime)和Transaction(叫做Extrinsic)的逻辑和数据结构,所以可以定制成更多的模式。
02
共识算法
Bitcoin Core
Sha256 (PoW)
Go Ethereum
Ethash (PoW), Clique (PoA)
Graphene
DPoS
Hyperledger Fabric
Kafka (PoA)
Substrate
Aurand (PoA)
Qtum Enterprise
PoA
Bitcoin Core和Go Ethereum都支持PoW共识,这种共识完全去中心化,需要消耗巨大的算力,主要应用于公有链中。Ethash和Sha256相比,除了消耗算力之外,还需要占用一定的内存资源。
对于企业应用而言,更多会考虑使用联盟链,即DPoS、PoA这类共识算法,从而获得更高的性能和充分的管理权限。除了Bitcoin Core之外,其余开发框架都支持联盟链的共识算法,这些算法之间有一些区别,列举如下:
超级节点投票方式。DPoS中所有节点都可以参与投票,更加去中心化。而在其他共识算法中,往往是由一小部分节点完成投票,例如上一轮的超级节点或是一些预先定义的管理节点。
CFT(Crash Fault-Tolerant)和BFT(Byzantine Fault-Tolerant)——对于超级节点的行为可以有两种假设:一种是CFT,认为超级节点除了正常工作之外仅有可能出现失效的情况,例如断网或挂机;另一种是BFT,认为超级节点除了失效之外还有可能存在恶意行为,例如发送错误或相反的消息。CFT假设下共识算法能容忍1/2以下的超级节点失效,而BFT假设下仅能容忍1/3以下的超级节点有恶意行为。经常用于公链系统的DPoS算法基于的是BFT假设,而其余共识算法都主要应用于联盟链,因此基于的是CFT假设,因为联盟链中的超级节点通常是不会有恶意行为的。BFT共识要比CFT共识对区块链的性能损耗更大,所以如非必要,使用CFT共识即可。
区块链分叉——除了Kafka之外,其他共识算法都允许区块链出现分叉。在联盟链中,分叉主要是因为部分超级节点不能正常工作导致。这同样是性能和一致性的取舍。允许分叉的共识算法可以达到更短的区块间隔时间,即交易能更快被确认。对于一般应用而言,超级节点绝大多数情况下是正常工作的,出现分叉的几率很小,所以没有必要为了不分叉而牺牲性能。
03
智能合约
Bitcoin Core
Script
Go Ethereum
EVM
Graphene
WASM
Hyperledger Fabric
Chaincode
Substrate
WASM
Qtum Enterprise
EVM
智能合约分为4种实现:
比特币支付脚本Script。仅能实现简单的逻辑,无法实现复杂的应用。
EVM。目前使用最广泛的智能合约引擎,文档和示例最多,编程语言是Solidity。
WASM。原本为浏览器设计的高性能引擎,最近开始逐渐用于区块链。编程语言目前主要是C++,未来会支持更多。
Chaincode。仅在Hyperledger Fabric使用,编程语言是Go,文档和示例都比较少。
因为EVM在当前阶段最为成熟,有比较多的文档和示例,所以基于EVM的开发框架更容易吸引开发者。但同样可以看到的是,WASM由于性能优越,受到大众的认可,正在迅速的发展中。Qtum目前也在进行WASM的研发工作。
04
特色功能
Hyperledger Fabric、Substrate和Qtum Enterprise三者都是作为开发框架提出的,有着各自的独特功能,服务于不同的场景。
Hyperledger Fabric支持隐私数据存储。Hyperledger Fabric的设计中,允许区块链上的部分数据只对授权的节点开放读权限,其他节点则无法同步到这些数据。这一设计使得区块链可以用于一些对数据隐私有要求的场景中。
Substrate支持定制状态转移函数。这表示Substrate既可以定制成传统的有币区块链,也可以成Hyperledger Fabric那样的无币区块链,更加灵活用于不同的场景。
Qtum Enterprise支持一键发链。Qtum Enterprise的一键发链[2]工具,帮助开发者快速定制自己的区块链,即使对底层技术不了解的开发者也可以快速上手开发,有效降低了学习成本和开发难度。
经过对比可以看到,所有开发框架中,Bitcoin Core、Go Ethereum、Graphene适合用于公链的开发,而Hyperledger Fabric、Substrate、Qtum Enterprise更加专注于联盟链的开发。从联盟链的应用场景而言,如果应用场景注重隐私,需要选择Hyperledger Fabric;如果注重智能合约的应用,Substrate、Qtum Enterprise都是较好的选择。从定制角度而言,如果需要对区块链进行深度定制,则可以尝试Substrate,如果只是想基于成熟的底层系统去构建应用,则建议选择Qtum Enterprise。
[1] Qtum Enterprise. https://github.com/qtumproject/qtum-enterprise.
[2] QtumX一键发链. https://qtumx.net/.
[3] Bitcoin Core. https://github.com/bitcoin/bitcoin.
[4] Go Ethereum. https://github.com/ethereum/go-ethereum.
[5] Graphene. https://github.com/cryptonomex/graphene.
[6] Hyperledger Fabric. https://github.com/hyperledger/fabric.
[7] Substrate. https://github.com/paritytech/substrate.
[8] EOS. https://github.com/EOSIO/eos.
[9] Btcd. https://github.com/btcsuite/btcd.
[10] Parity Ethereum. https://github.com/paritytech/parity-ethereum.