现今我们一般认知的区块链技术,也就是公有链(Public Chain),首先起源于骇客圈,其强调的是去中心化的治理与无需许可的参与,以太坊便是箇中代表。尽管这些技术是完全开源的,企业若想直接应用这些成果,则会碰到一些问题:
企业应用区块链的首要考量就是「提升效率、降低成本」,当碰到上述这些问题时,企业便无法保证这一点。因此,专属企业的区块链:「联盟链」应运而生。以太坊是目前汇聚最多开发者投入的公有链,因此它的企业化也标志了一个里程碑。
在这篇文章中,我们将回答以下问题:
顾名思义,企业以太坊联盟(EEA)是在企业界推动区块链的一个「联盟」,它成立于2017,是一个由成员主导的行业组织(Industry Organization),其目标是推动以太坊于企业间的开放标准,以促进所有企业在同一套标准体系下运用该技术。
具体来说,EEA 在做的事情有:
EEA 的成员包含知名企业如Microsoft/Intel/Fedex、区块链新创如Consensys/Chainlink、金融业如JP Morgan Chase,还有其他数十个来自不同产业的企业,这里就不一一列举。
在阅读这篇文章之前,你可能还没听过EEA ,但是知道其他两个联盟:
这些联盟之间并非只存在竞争关系,它们彼此也会互相合作,例如:Hyperledger 本身是EEA 成员之一,而EEA 和R3 也都加入了Hyperledger 。
EEA为企业以太坊提供了标准化的规格,依照规格实作的客户端(Client)即为企业以太坊(Enterprise Ethreum, EE)。这些客户端可以由不同团队开发,简单来说就是「一个标准,各自实作」,这一点与以太坊也是如出一辙,例如以太坊2.0就有多达7种不同的客户端!
这里列出两个比较知名的EE:
BSOS 同时也是Quorum 在台湾唯一的技术大使
那么EE 跟以太坊到底哪里不一样呢?EEA 把区块链整个架构略分为5 个抽象层(Layer),我们就来看看EEA 在每个层次分别多做了哪些事情:
在软件架构方面,EE 可以视为以太坊的「扩充」,它于既有以太坊客户端之上增添了以下两个组件:
接下来我们就深入看看EEA 对于企业PPP 层中的权限(Permission)与隐私(Privacy)的具体规格,以及核心层中Clique 的运作机制。
权限简单来说指的是两件事:「谁可以跟我连线」以及「谁可以发出交易」。具体来说,EEA支持以下不同层级的权限控管。
例如,在网络(Network)层级,节点可以:
而在帐号(Account)层级,每个帐号可以:
为了提供开发者最大的弹性及最好的开发体验,EE的设计哲学是:使用智能合约实现权限控管,这些合约也称为权限合约(Permissioning Contract),并且在权限合约中可以使用基于角色的存取控制(Role-based Access Control, RBAC)。
EEA制定了利用智能合约实作网络层与链层权限管理的介面(Interface),例如:权限合约必须实作connectionAllowed方法以支持网络层的权限控管,以及实作transactionAllowed方法以支持链层的权限控管。
相关作法可见于Quorum的实作,这里列出的数个合约共同协作实现了权限控管。
隐私就是「我知道你是谁,但是我不知道你在做什么」。隐私可以略分为链上与链下:
虽然隐私性是区块链的其中一个大难题,但近期以太坊社群中也有愈来愈多支持隐私的提案出现,例如Tornado Cash与Semaphore。
EEA 规范了两种私密交易:
EEA 虽然没有明确规范这一块的实作方式,但交易各方另组覆盖网络是比较常见的做法,例如:Alice 跟Bob 可以在另一个网络中进行Charlie 无法解密的私密交易,这里「另一个网络」的意思就是「不透过区块链网络传送资料」,也就是符合「链下」的定义。
类似作法可见于Quorum的实作:在发出交易时,A发起的交易T1会经由A节点的TxMgr加密,这个交易密文会透过另一个网络传送给B节点的TxMgr,而交易杂凑值(Transaction Hash)T1_hash则会透过区块链网络广播出去。所有节点在收到T1_hash后会检查这个交易是否为私密交易,以及这个交易自己是否能解开,而只有A/B才能解开交易密文。
区块链的共识机制可以略分成两种:可以是「从乐透机里面抽号码球」或者「投票表决」。主流公有链采取的工作证明(Proof of Work, PoW)就好比是「从乐透机里面抽号码球」,是一个完全奠基于机率的赛局。但正是如此简单暴力的解决方案造就了加密货币数千亿美元的市值!如果想了解更多关于共识机制运作原理的话可以参考这里。
然而,工作证明只能在算力接近上限的条件下保有「安全性」(Safety)与「活跃性」(Liveness)。在算力不足的场景,例如公有链的测试网(Testnet),很容易沦为骇客攻击的目标。为了解决这个问题,以太坊核心团队提出了「权威证明」(Proof of Authority, PoA)以作为测试网的共识机制,这个实作也被称为Clique,是EE必须内建的共识机制。
Clique可视为「有限个出块节点的中本共识」(Nakamoto Consensus),它最大的特色是:在不修改现有的资料格式之下,重新利用(Re-purpose)区块标头(Block Header)的各个栏位。
Clique的运作方式如下:首先,各节点需维护一份权威清单(Authorization List),这份清单内载明了N个具有出块权力的「签名节点」(Singer),且各签名节点需「轮替」出块,并且都有一个最适合出块的高度。如果签名节点出块的高度正好吻合它最适合的高度,那这个区块就会具有较高的难度值;反之难度值则较低—也就是说,这里的「难度」不像工作证明是透过算力决定的,而是透过在「权威」清单里的顺序决定,因此可以大幅提升共识形成的效率。
同时,为了不让所有签名节点每个高度都「同时出块」使网络壅塞,出块后的节点只能在经过N/2+1 个区块后才能再度出块。
接下来各节点收到区块时,会做三件事:
另一个Clique的特色是:签名节点可以透过「投票」更新权威清单:
在正确性分析方面,由于Clique 的本质还是中本共识,因此它没有即时敲定性(Instant Finality),还是有一定机率发生分岔(Fork);并且由于签名节点只能每N/2+1 个区块出一次块,若有N/2 个签名节点离线,或者恶意不出块,则其他签名节点也无法出块,整个区块链会陷入停摆的状况。
Clique所具有的「轮替」以及「投票」的特性,很符合企业应用的场景,也使得它适合作为企业以太坊的共识机制。由于Clique是以太坊原生就有的实作,因此所有EE可以直接使用Clique。值得一提的是:除了Clique之外,大部分EE都还会支持其他共识机制,例如IBFT / RAFT等等。IBFT可以视为结合PBFT与Clique的共识机制:各节点透过类似Clique的投票机制维护验证节点(Validator)清单,而这些验证节点则轮流出块并使用PBFT达成共识与出块节点的轮替。关于PBFT详细说明可以参考这篇文章。
EE与Hyperledger Fabric这两者经常被开发者或媒体拿来比较,他们在许多方面都有或大或小的差异,例如:它们有不同的智能合约管理模式、不同的分散式计算模型,并支持不同的椭圆曲线(ECC)。更详细的技术比较就留待日后详述,不过这边笔者想举出一个他们在设计哲学上的差异:Hyperledger Fabric使用凭证机构(Certificate Authority, CA)管理身份,并设计了一个称为「会员服务提供者」(Membership Service Provider, MSP)的组件搭配CA控管权限,整体来说比较中心化;EE则沿袭区块链原生的公私钥对,具有整合去中心化身份(DID)的发展潜力,并可利用智能合约实现权限控管,比较贴近原生区块链「去中心化」的设计。
除了设计哲学的差异,另一个笔者认为的较大差别是:EEA奠基于目前世界最活跃的区块链开发者社群:以太坊社群。目前已有超过1000个开发者贡献在各项EE专案之上!在这个软件都是开源的时代,复制程式码也只是弹指间的事,但唯有「人」才有赋予技术长期发展的能量。
所以企业以太坊到底解决了什么问题呢?
尽管EE 解决了企业对于权限与隐私的问题,企业在真正导入区块链时其实还有一些挑战,例如: