摘要

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项目。

现有市场中的BaaS服务

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三者都是作为开发框架提出的,有着各自的独特功能,服务于不同的场景。

  1. Hyperledger Fabric支持隐私数据存储。Hyperledger Fabric的设计中,允许区块链上的部分数据只对授权的节点开放读权限,其他节点则无法同步到这些数据。这一设计使得区块链可以用于一些对数据隐私有要求的场景中。

  2. Substrate支持定制状态转移函数。这表示Substrate既可以定制成传统的有币区块链,也可以成Hyperledger Fabric那样的无币区块链,更加灵活用于不同的场景。

  3. 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.

Qtum研究院:市面上企业级解决方案都有哪些亮点?相关推荐

  1. FLINK 基于1.15.2的Java开发-Watermark是怎么解决延迟数据唯一正确的生产级解决方案-目前市面上的例子都有问题

    至此篇,已经完成高级生产应用,至此只剩"码需求"了. 开篇 Watermark这一块国内中文相关资料没有一篇是写完整或者写对的.源于:官网的watermark理论是对的,中文相关博 ...

  2. 云渲染那个好?云渲染测评终极章。市面上在的都在了!

    最近有很多小主让我帮忙测评一下各个平台的云渲染使用情况. 谁叫我心美人更美呢?找朋友要了模型,下载了一堆软件,开始了我的测评! ​ 首先我们测评的是渲染100,这里因为都是新注册的账户,所以我是填了他 ...

  3. 大数据领域的12大工具,市面上主要的大数据分析工具都在这了!

    大数据工具让企业能够从数据仓库获得洞察力,从而在数据驱动的业务环境中提供重要的竞争优势. 为了满足旺盛需求,大数据工具在迅速遍地开花.在大数据这一概念和业务战略出现以来的十年间,市面上出现了成千上万执 ...

  4. 市面上免费的PDF编辑器都是假的,试试这一款真免费

    现在市面上到处都是用免费的标题党,吸引大家点击,最后花了时间看完文章,高高兴兴的去下载使用,依然是要收费的,或者功能缺失,我们日常的工作学习中能正常的浏览PDF文件,但是想要编辑它却没有那么简单,一般 ...

  5. 市面上的数学规划求解器都有哪些?

    运筹学从形成到发展,在此过程中积累的大量理论和方法在国防.能源.制造.交通.金融.通信等各个领域发挥着越来越重要的作用.我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学 ...

  6. 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了

    最近系统门窗群里,不少读者粉丝在咨询关于Low-e玻璃的问题,大家越来越重视好的门窗对于隔热.隔音.隔辐射的作用.我汇总了群里大家咨询最多的20个问题,希望对大家在挑选门窗玻璃时起到一些帮助. 在介绍 ...

  7. 这个工具秒杀市面上各种可视化,可惜90%的人都没用过!

    如果大家日常工作中经常要和数据打交道,做Excel,做报表,看数据. 那么不妨建议大家涉猎一下数据分析. 如今它已不是商业分析师.数据科学家的专属. 随着百花齐放的学习课程和分析工具的出现,它的入门难 ...

  8. 市面上比较好用的钣金展开软件都有哪些?

    市面上比较好用的钣金展开软件有以下几种: SolidWorks:SolidWorks 是一款知名的三维设计软件,其中包含了钣金设计和展开模块.它可以根据所选材料和工艺,快速地生成精确的钣金展开图. A ...

  9. 市面上常见的TCP/IP以太网一卡通设备硬件产品电路拆解分析

    从业十多年了,经常听到业务员抱怨单丢是因为别家产品与我们相同,当问到为什么客户选择别家产品时,业务员一般也总是会说:"都是一样的产品,别家的便宜几十块嘛.",当问及怎么会是一样的呢 ...

最新文章

  1. windows2003 mstsc 远端连线,减少可会话数目 ,同一用户只允许一个会话
  2. [转]孙鑫VC教程例子代码1---Windows程序内部运行原理
  3. 如何选购晨检机器人_扫地机器人好不好用?如何选购?答案在这
  4. Makefile 自动产生依赖
  5. Linux升级openssh一次成功版本
  6. 关于样式表setStyleSheet
  7. android实操--练习2
  8. matlab地址结构与转换,matlab数据类型和转换
  9. oracle rac升级补丁及中间的错误提示
  10. Machine Learning Yearning 中文翻译稿
  11. cpu高 rust腐蚀_木器漆如何选购,Rust-Oleum户外防水防腐木器漆怎么样?
  12. Java到底如何更优雅的处理空值?
  13. buuct 假如给我三天光明 misc_【习作园地】假如给我三天光明读后感
  14. ios状态栏字体颜色设置白色
  15. 二叉树遍历算法的应用
  16. hp linux还原系统还原,酷越一键备份还原(惠普电脑系统还原)精简美化版...
  17. LayUI树形表格treetable使用详解
  18. 一条来自水圈的鄙视链
  19. 尹语堂®公益20210906
  20. JavaFX报错: Exception in thread WindowsNativeRunloopThread java.lang.NoSuchMethodError

热门文章

  1. 关于Vector,map等迭代器问题
  2. MongoDB运行状态、性能监控,分析
  3. USDT(omniCore)测试环境搭建
  4. Kotlin(android)协程中文翻译
  5. Shell学习笔记一
  6. 在英文Win7操作系统上部署C#开发的Web系统出现乱码的解决方法
  7. C#时间判断的循环刻度判断
  8. 续《用最简单的例子实现jQuery图片即时上传》之多图上传实现
  9. 解决WORD无法多次编辑保存
  10. mac os 10.9 mysql_MAC OSX 10.9 apache php mysql 环境配置