Fabric和以太坊具有截然不同的设计思路,充分体现了传统企业信息系统思维设计模式和区块链原教旨主义思维设计模式的区别。
区块链发展到了现在,产生了很多不同形式的区块链技术。随着技术的发展,目前比较公认的看法是区块链已经走进了2.0时代。区块链1.0是以比特币为代表的去中心化数字货币区块链系统,而2.0则是引入了智能合约的区块链系统。
在支持智能合约的区块链系统中,Linux基金会所属的Hyperledger Fabric(由IBM贡献)和Vitalik Buterin所领导的以太坊基金会所创造并管理的Ethereum(以太坊)是两个典型。这两种区块链系统具有截然不同的设计思路,充分体现了传统企业信息系统思维设计模式(Fabric)和区块链原教旨主义思维设计模式的区别。
首先看一下Ethereum,Ethereum是非常典型的受到Bitcoin(比特币)架构影响的一个区块链系统。其最典型的特点是——链是基础。所有的信任都来自与基于Hash密码学安全的链式数据结构,在这个信任基础上,架构所有的功能。
而对于Fabric来说,系统一定要有一个漂亮的技术架构:可插拔的模块化设计、高扩展性、高内聚低耦合。在一个漂亮的技术架构上,调用各个模块,来构造一个功能——链,每增加一个功能,可以使用已有的链,也可以创建一个新链。
Ethereum使用了虚拟机方式实现智能合约,Ethereum中的虚拟机叫做EVM,是一个轻量级的沙盒执行环境。为了让智能合约更加方便,以太坊开发者创造了新的语言来编写智能合约,目前最流行的EVM编程语言是Solidity。EVM的一大特点就是只能对链上的数据进行读写,非链上的数据只能在调用智能合约的时候,由调用者通过函数参数传递到智能合约中。(EVM的这个特点确保了智能合约的结果是确定的,不会因不同的节点执行而导致不同的结果。)而智能合约本身和智能合约的调用过程(或者叫做使用智能合约的交易)都会记录在链上。
因此,我们可以看出,以太坊的架构中,“链”是信任的锚点,所有的信任都来自于链。
而Fabric使用了Docker机制实现智能合约。相比于Ethereum的EVM,Docker可以算是一个重量级的沙盒执行环境。由于Docker的特性,Fabric可以使用很多语言开发智能合约,同时也可以使用很多库函数和系统函数,因此,Fabric的智能合约灵活性更高,(比如可以和物联网设备通讯),但是这种灵活性也导致了可能不同的节点执行后产生不同的结果而无法达成共识的风险。而Channel的引入,使得Fabric的智能合约是直接部署在某几个节点上的。每个智能合约可以创建新的链,也可以和其他智能合约共用一个链。“链”在Fabric的架构里,相当于实现某个功能时,参与该功能的几个节点所共用的一个存储空间。
明白了这两种智能合约的实现方式区别后,我们就会发现这两种典型的区块链的设计思路的区别了——“链”到底应该位于架构的哪一层?
在区块链原教旨主义中,由于大家都不可信,所以只能相信由Hash算法串起来的一个完整的数据系统。而在面向企业间应用的联盟链中,由于节点都是需要身份认证才能加入的,因此可信程度高一些。所以,只要关键的一些数据达成共识实现可信就可以了。
正是由于这种设计思路上的区别,在Ethereum中,所有的智能合约都运行在同一个链上,大家共用一个可信的基础设施;而在Fabric中,一个应用对应一个链,整个系统由很多子链构成,这些子链共用一套基本互信的基础设施。
从系统架构角度看,Ethereum是一个完整基础设施,不会拆散了来用。虽然Ethereum内部的设计耦合性很高,各个模块依赖性极强,甚至整个系统都依赖于某些基础的智能合约(例如以太币合约),但这可以看做是整个基础设施的内聚性导致的。
而Fabric更像是一个区块链云服务平台,能够让用户方便的在基础平台上,使用各个模块创建一个一个的链进而实现一个一个的应用。所以,Fabric是低耦合设计的一个平台。
本文来源:雷锋网
作者:腾讯云金融业务中心区块链首席架构师敖萌博士