区块链一开始问世是以比特币之姿,公开透明、公平竞争。随后世界开始探索如何把区块链用在各种场景,许多人就想到,也许不需要全世界人的参与,也不需要挖矿,我们只需要用到区块链去信任、可追溯的特性,透过较少节点达到拜占庭将军容错,于是私有链就诞生了。
但私有链仍是中心化,难以维持去中心化的优势:共识决。因此又有了为企业体联盟而生的联盟链(consortium blockchain)。
公有链
公有链向全世界任何人公开,所有人都可访问,发送、接收、认证交易。所有人都能参与其中共识过程的区块链——共识过程决定哪个区块可被添加到区块链中,也因此公有链“通常”被认为是完全去中心化的。
- 特色:不可篡改,匿名公开,技术门槛低,是真正的去中心化。每个参与者可以看到所有的帐户馀额和其所有的交易活动。
- 缺点:分散式治理仰赖共识决,更新迭代慢、自行开发的话,目前技术发展框架,初期建置成本高昂。若企业直接採用公有链,则会受限于扩容问题、以及企业需求无法满足(通常会以侧链妥协,但侧链则容易陷入中心化疑虑)。
- 举例:比特币、以太坊。
私有链
私有链是完全私有的区块链,指写入权限仅限于在一个组织手裡的区块链。读取权限或者对外开放,或者被一定程度地进行了限制。整个网络由成员机构共同维护,网络接入一般通过成员机构的网关节点接入,共识过程由预先选好的节点控制。这类区块链被认为是“部分去中心化”。
- 特点:交易速度快,保护隐私,交易成本极低;仍保有不可篡改性。
- 缺点:由于完全中心化的特性,私有链是的代币(若有发行的话)价格是可以被操作的,代码也是可以修改的,集中风险较大。
- 在近年因为企业对区块链的探索与需求,发展出了在这两种区块链的混合,有一种区块链称为联盟链,保有私有链的隐私性,又能维持多节点共识治理的特性。
联盟联
联盟链适合于机构间的交易、结算或清算等 B2B 场景。例如在银行间进行支付、结算、清算的系统就可以採用联盟链的形式,将各家银行的网关节点作为记帐节点。
通常情况下,外部观察者可以查询,但是不可交易,联盟链是指其共识过程受到预选节点控制的区块链;区块链或许允许每个人都可读取,区块的 Root Hash 及其 API(应用程式接口)对外公开,API 可允许外界用来作有限次数的查询和获取区块链状态的资讯。这些区块链可视为“部分去中心化”。
联盟链与私链类似,其开放程度和去中心化程度是有所限制的,其读写权、记帐权由组织决定。与私有链最大的不同在于,联盟链是为一个联盟,比如一个行业服务的;而私链则是为一个组织,比如一家公司内部服务。
区块链目前正在四个方面进行技术性的优化。
- 一是共识算法,正在由低频低效向高频高效转变;
- 二是治理方式,从链上处理到链上链下协同;
- 三是服务分片,由全员周知到范围通知;
- 四是组织架构,从单一链条到多链组合。
究竟联盟链的优势在哪裡,该企业或组织该如何挑选适合自己商业模式的区块链开发方式,接下来进行比较。
公、私有区块链有共同之处?
首先,两者都是分散的“对等”网络,其中“每个参与者”都负责维护数字签名交易的共享,并在每个节点附加分类帐的副本,而两者都通过称为共识的协议保持副本同步。
即使某些参与者怀有恶意,但两者都对帐本的不可改变性提供了一定程度上的保证。
也就是说,从区块链本身架构和主要属性的角度来看,我们在无论公、私区块链或其他公共分佈式帐本平台下理解的特点与内容(如去信任、不可篡改、去除中介、效率提升)都是接近的,只是规模上的不同。
不过这也导致了一个有趣的问题,即:是什麽特性把他们区别开来。
简单提出一个答案,区别主要在于谁被允许参与网络、执行共识协议和维护共享分类帐。这样的解释是部分正确的,除了要求认证和授权访问区块链之外,还要了解私有分佈式分类帐平台本身的潜力。
因此,要区别链的公私有性,简单理解的话就是内部参与节点与外部观察者的访问权限区分。但这样去区分会出现的问题是,实际上链的治理与参与者的能见透明度,该怎麽去制定会根据採用者的需求不同而有所权衡,实际上的影响这个平衡因素则在文章后半会提出。
企业的需求
本篇文章后段会分析企业该如何选择适合自己的链种。在讨论链之前,必须先让我们先从典型的企业客户需求开始。
- 保密性(Confidentiality)
保密性是确保只有参与特定交易的实体才具有该部分的知识和访问权限的特性。一个企业中,在潜在竞争者参与的联盟网络中,必须在同伴之间启用区块链通道,而这些通道对于联盟的所有成员都不可见。使用密码学或零知识证明(zero-knowledge-proof)方案可以在参与节点彼此之间保持数据机密性。只需了解联盟中同行之间需要透明的交易。在许多区块链平台上实现此要求非常困难,因为它们多数已经写定了交易执行架构,其中网络的每个成员在网络的区块中执行交易以同步其状态。一些私有和许可制区块链解决方案(如Hyperledger)可以实现利用不同架构(执行顺序验证)的机密性、以内建本地端支持创建私有通道,并在共享区块链基础架构上。 - 吞吐量(through-put)
吞吐量是按时间段处理的交易数量的度量标准。在区块链结构中是每秒写入到区块链上的速度。目前运行在关联数据库或分佈式数据库构建的解决方案,已经可以实现每秒数万个事务(交易)的吞吐量(Visa的TPS:22000),而区块链有较多的节点需要同步势必会妥协到效率的表现。但有些人可能会认为,倘若能建立信任、不变性等相比,较低的性能是可被妥协的在这方面,具有私有性质的大多数公有区块链都处于完全不同的境界。与大多数公有区块链相比,私人区块链提供了数量级更高的吞吐量,因为他们的共识设计不必包括对矿工的激励(Incentives),且区块链上成员的身份是已知的,激励因此可能丧失可信度,私链的可扩展性侧重于吞吐量而不是节点数量。 - 终局性(finality)
在区块链结构中,终局性指的是对所有的块一旦被提交到区块链就不会被撤销的结构完整的确定性难度。当用户进行交易时,他们希望在交易完成后确信交易不能随意更改或撤消。
终局性决定了企业必须等待多长时间才能得到保证的结果,因为用区块链写的交易是不可逆转的,或企业提交的事务不会成为孤儿块(orphaned block)。这也是商业的重要考量标准。像许多业务流程一样,如果区块链网络需要跟传统业务流仇等待一个小时。大多数公共区块链使用基于随机的的算法来选择节点以提出新块,这将会十分耗时。
因此,大多数私有区块链都採用基于投票的共识算法。当大多数节点投票时,该块就可以被最终确定。在公链上,由于共识需要更多的信息交换,它几乎直接的限制了终局扩展性。对于私有区块链而言,这通常不是一个大问题,因为与一般公有链环境相比,参与者数量低了几个数量级,并且部署在具有低延迟和保证吞吐量的WAN中。
联盟链介绍 — 以Hyperledger为例
Hyperledger (超级帐本)是一个旨在推动区块链跨行业应用的开源项目, 由 Linux基金会在2015年12月主导发起该项目,成员包括金融,银行,物联网,供应链,制造和科技行业的领头羊。
基本上各领域世界知名的企业或区块链新创公司都是Hyperledger的成员之一:
- 区块链新创: ConsenSys, Digital Asset, R3, Onchain
- 知名科技公司: Cisco, Fujitsu, Hitachi, IBM, Intel, NEC, NTT DATA, Red Hat, VMware)
- 知名金融企业:ABN AMRO, ANZ Bank, BNY Mellon, CLS Group, CME Group, the Depository Trust & Clearing Corporation (DTCC)
Linux基金会的超级账本项目,希望创建一个软体开发人员和公司社区会面和协调的环境,以构建区块链框架。它是一个基础设施,通常採用Hyperledger进行联盟或私有链开发的相关项目,都是无币的、产业级的应用。
“由于我们不发行一个货币,我们避免了维持一个全球一致货币体系的很多政治挑战。” 超级账本执行董事Brian Behlendorf表示。
HyperLedger Fabric是什麽?
Linux基金会在2015年创立了HyperLedger Fabric是一个许可制(Permissioned)的区块链架构(blockchain infrastructure)。其由IBM和Digital Asset最初贡献给Hyperledger项目。
以推进跨行业的区块链技术为目标,Fabric并没有制定单一的区块链标准,而是鼓励一种合作的方式,通过社区开源的方式开发区块链技术,并随着时间的推移採用关键标准。
HyperLedger Fabric是HyperLedger上的区块链项目之一,就如同其它区块链技术一样,它有一个账本,使用智能合约,并且是一个由参与者管理他们的交易的系统。
HyperLedger Fabric组织的成员必须通过注册才能访问,因此是私有的许可制联盟链。可以通过一个Membership Service Provider(MSP, 即成员服务提供者)来注册。
HyperLedger Fabric还提供了几个可插拔的组件。账本数据可以以多种格式存储,一致的机制可以被转换和输出,并且支持不同的MSPs。
HyperLedger Fabric也提供了创建通道(channel)的能力,允许一组参与者创建一个单独的共同维护的交易账本。对于有些参与者可能是竞争对手的网络来説,这是一个特别重要的选择,他们不希望自己的每笔交易都能被透明。举个简单的例子,某间联盟链裡的参与者只想向其中一间公司提供交易资讯,他们的价格不愿被其他成员看见。
共享帐本
HyperLedger Fabric 底下有分出两大子系统,包括:世界状态(world state)和事务日志(transaction log)。
每个参与者都有一份帐本的副本到他们所属的每一个HyperLedger Fabric的网络上。
首先,世界状态(world state)组件描述了总帐的状态,它是总帐本的数据库。
世界状态使程序可以轻鬆获取目前帐本状态的当前值,而不必通过遍览整个事务日志来计算它们。默认情况下, Ledger 状态表示为 Key-Value 对,Hyperledger Fabric 在这方面提供了一定程度灵活性:世界状态可以经常变化,因为可以创建、更新和删除状态。
其次,有一个区块链,一个记录决定世界状态的所有变化的事务日志。事务在块附加到区块链中的块内收集,使您能够了解是什麽事务(交易)导致当前世界状态历史记录的更改。区块链数据结构与世界状态非常不同,因为一旦编写,就无法修改。它是一个不可变的块序列,每个块都包含一组有序事务。
– Hyperledger Fabric 帐本与区块链的架构图 –
智能合约
HyperLedger Fabric 的智能合约是用 Chaincode 编写的,并且当应用进程需要与帐本进行交互时,被应用进程外部的应用进程调用。在大多数情况下, Chaincode 只与总帐的数据库组件互动,例如世界状态(查询它),而不会与事务日志互动。
Chaincode 可以用几种编程语言实现,目前支持的 chaincode 编写的是GO语言,在今后的发行版中将会逐步添加 Java 和其它语言的支持。
隐私
根据网络的需要,企业对企业(B2B)网络的参与者可能对他们所共享的信息非常敏感。对其他网络来説,隐私不会成为首要关注的问题。
HyperLedger Fabric 支持需要将隐私(使用信道)作为关键操作需求的网络,同时也是相对开放的网络。
共识
事务必须按照它们发生的顺序写在帐本上,即使它们可能是网络中不同的参与者生成的。要做到这一点,必须创建事务的顺序,并且必须在帐本中创建一种拒绝错误事务(或恶意的)的方法。
共识机制是一个经过彻底研究的计算机科学领域,目前有很多方法可以实现它,每一个都有不同的权衡。例如,PBFT(实用拜占庭式容错)可以为文档副本提供一种机制,使其能够相互通讯,进而保持每个副本的一致性,即使是在出现“节点腐败”的情况下。
或者,在比特币中,PoW(Proof-of-work)是通过一个名为“挖矿”的过程来实现的,在这个过程中,竞争的计算机竞争解决一个加密难题,该难题定义了所有流程随后构建的顺序。
HyperLedger Fabric 的设计使得网络启动者可以自行选择一种最能代表参与者之间关係的共识机制。就像隐私一样,需要有一系列的需求;从人际关係高度结构化的网络到更加对等的网络。
关于 HyperLedger Fabric 共识机制,它目前包括 SOLO 和 Kafka,并将很快扩展到 SBFT(简化的拜占庭式容错)。
企业该选那种链?
总归而言,而隐私则可透过设定参与者(节点)的加入权限是否须经认证分成许可制(Permissioned)以及非许可制、开放式(Permissionless),链的透明程度、以及加入可否是否向公众开放则是以公、私有链去区分。介于公、私链之间,为因应企业合盟的需求定义出了联盟链。
目前有四种常见的建构链的方式,下图以信任是否建立、依赖与参与网络的节点本身的公信力为横轴,纵轴则是结点能否保持匿名的程度来定量。例如:左上的示例为比特币的区块链、右上则可能是未来的以太坊(非许可制)、左下则为Hyperledger Fabric、右下可能是未来会出现符合企业需求客制出的私有链(如:J.P. Morgans的Quorom),企业可以以自己的需求去选择自己该往以下四种中的那一种方向去开发、导入:
参考资料:
- https://hackernoon.com/blockchain-architecture-analysis-private-vs-public-vs-consortium-65eb061b907b
- https://www.hyperledger.org/members
- https://hk.saowen.com/a/53d4367bda2f9cb60e02e5d7c70624a7ac38b596985da84e9d043af75b967f3e
- https://medium.com/@lkolisko/in-depth-on-differences-between-public-private-and-permissioned-blockchains-aff762f0ca24
- https://hyperledgercn.github.io/hyperledgerDocs/blockchain_zh/
- https://zh.wikipedia.org/wiki/%E8%B6%85%E7%BA%A7%E8%B4%A6%E6%9C%AC
- https://hyperledger-fabric.readthedocs.io/en/release-1.3/ledger/ledger.html