区块链作为近两年的热门领域引起了社会的广泛关注。随着比特币价格不断攀升,ICO 从国内的雨后春笋到国家政策的封杀,区块链这种新兴的技术从炙手可热的炒作阶段逐步走向了更加理性的发展阶段,社会各行各业均对区块链技术表示出了关注和兴趣,随着行业关注度的提升,区块链从“黑科技”中脱胎换骨,一跃成为炙手可热的技术新星。对于企业来说,现在关心区块链,并且想和业务结合的企业越来越多,但是区块链的落地仍然存在许多的问题。区块链虽然是一门新兴技术(尽管其依赖的密码学和分布式技术早已在其他系统中使用已久),区块链的落地,本质上仍然是软件开发与交付运营的过程。面对这些问题,本文希望能采用Oracle在客户实践中总结出的合适的过程方法去帮助区块链应用落地。
对于大多数企业而言想问的第一个问题是:我从该如何构建一个的区块链网络?回答这个问题需要从以下几个角度入手:
企业级区块链技术选择
基础支撑平台选择
构建去中心化架构
区块链网络构成
企业级区块链技术选择
企业想要构建区块链应用,首先必须选择正确的区块链平台技术,一个企业级区块链技术必须具有以下特征:
共享的许可制账本 (Shared, Permissioned Ledger) 是仅可附加的记录系统 (SOR) 和单一事实来源。它对业务网络的所有参与成员均可见。
共识协议 (Consensus Protocol) 是业务网络的所有参与成员都赞同的协议,可确保仅使用经过网络验证的交易来更新账本。
加密 (Crytography) 可确保交易的防篡改安全性、身份验证和完整性。
智能合约 (Smart Contract) 封装了在网络上发生的交易的参与者协议条款;它们存储在区块链中的验证节点上并通过交易触发。
除了这些属性之外,企业区块链技术还需要支持关键的行业要求,比如,可扩展性、性能、经过验证的身份,以及私下和机密的交易。
下面表格从不同技术维度简单对比了比特币,以太坊和超级账本的某些技术特性。从企业应用的角度而言,这些因素都是企业平台选型中必须考虑的因素。
目前在私有链,公有链和联盟链等不同领域都有核心玩家。而在云服务领域只有非常少数的服务提供商并且很少有商用的案例。开源项目中玩家较多,其中以超级账本影响力最大,Hyperledger 的重心是为企业构建区块链平台,它的设计重点放在安全性、可扩展性和隐私上面。以太坊试图跨越公有链的壁垒进度企业级联盟链市场,不过鉴于企业以太坊联盟( EEA) 成立时间较短,超级账本Hyperledger在企业级联盟链场景中仍是企业搭建企业级区块链网络最佳选择。
基础设施选择
如何选择基础设施?是采用云服务的方式还是采用自建的方式?对一个大型企业内部的而言,或是对一个成型的商业联盟而言,区块链未来更应该成为基础设施的一部分,就像今天用云计算来提供计算、存储和网络资源一样,区块链网络也会作为一种资源提供出来, 为需要利用区块链技术的应用提供基础架构。这包括了区块链运行的载体(虚拟机或容器)以及区块链网络的基础架构(共享账本,区块链网络,共识算法,安全机制等)。而区块链项目往往是作为内部创新或者技术突围的试点,采用云平台是企业搭建区块链服务最佳选择也是未来的趋势。但是由于企业对敏感数据保存在云端仍然比较抗拒,对大多数的大中型企业而言,混合云的平台仍是首选。同时就目前市场上存在的区块链云服务平台来看,仍不具备大规模部署生产环境的能力。这既是因为区块链技术仍处于早期发展阶段,大部分 BaaS 平台仅停留在 PaaS 层面,不具备提供应用场景 SaaS 的能力;而对很多企业而言如何使用这种技术恰恰是面临的最大问题。
构建去中心化系统架构
要构建去中心化架构,首先得正确理解什么是去中心化架构。那么部署在Oracle区块链云服务上的区块链网络是否是一个“中心化”的架构呢?区块链是一种“去中心化的”技术,在理解去中心化的含义的时候很容易进入一个误区,即认为去中心化等于分布式。去中心化而相对于传统应用中心化架构而言,是指在区块链网络中没有中心化的节点和机构,区块链网络中的节点是平等的。其根本含义是指网络中不存在中心化节点和机构,即是说任何机构和节点都不能操纵区块链网络的行为,整个网络的行为是由网络中全体成员决定。这样的网络特性,和真正的物理节点分布没有必然联系。很多人一谈到去中心化,就想到要把各个节点物理分散,认为这样的架构才是去中心化的,而实际上,现存的所有中心化应用如银行,政府和大型企业的系统,也都是分散在不同的物理节点上的,物理节点的分散并不能说明系统是去中心化的。去中心化的本质是系统架构和应用架构在设计的时候就按照去中心化的目标去设计,应用程序的逻辑必须是按照去中心化的思路去实现。一个中心化的应用,不管分散到多少个物理节点上始终还是中心化的应用;而一个去中心化的应用,即使都运行在一台服务器上,本质还是去中心化的。
创建并运行区块链网络
为了构建一个区块链网络,需要理解以下概念:
1. 组织:组织是区块链网络的参与者,可以是不同的公司,也可以是公司内的不同部门,甚至可以根据业务需求将一个部门逻辑区分为不同组织用于业务逻辑的实现
2. 节点:每个组织都拥有若干个节点用于交易和记账,这些节点逻辑或物理分散,是区块链业务逻辑的实际承载者
3. 记账节点:记账节点用于记录和同步账本数据,记账节点会在本地存储和本节点相关通道的全部账本数据,并在通道中通过gossip协议进行同步
4. 背书节点:背书节点是一种特殊的记账节点,除了承担记账节点的全部功能之外,背书节点还承担了对交易进行背书的功能。简单的说,背书用于描述一笔交易在什么条件下能够被网络接受并在通道中处理,不符合背书策略的交易将被拒绝;背书策略可以根据实际业务情况进行灵活的设定;
5.成员服务:Fabric中的成员服务可以分为Fabric CA和非Fabric CA;其中Fabric CA是默认提供的MSP,可以提供完整的自签名的机于PKI体系的签名和验签体系;Fabric通过BCCSP(BlockChainCrypto Service Provider)模块提供标准的加密算法接入;其他非Fabric CA可以通过BCCSP接入Fabric实践课插拔的CA体系。
6.排序节点:Ordering Service是Fabric中用于对交易的时序达成一致的服务。Fabric目前提供两种排序节点Orderer的选项,一个Solo,另一个是Kafka,具体的参数设置需要根据不同的接单数量进行调整。
SOLO模式:只需要一个共识节点,简单、快速,建议在开发测试环节使用。
基于Kafka/Zookeeper高速共识算法:总节点数没有特定要求,能容忍半数一下节点发生故障。
了解了区块链网络中的节点类型之后,需要回答的问题如下:
1. 确定区块链网络有多少个参与者。一般来说一个公司或者机构会作为一个区块链的组织;这里假设当前业务是由两个参与方来完成,因此组织数量是 2 个。
2. 确定每个组织的节点数。每个组织应该有一定数量的节点,这些节点就是记账节点,用来存储账本数据。默认的记账节点也是背书节点,会参与交易背书过程。一个典型的场景中,每个组织拥有 2 个记账/背书节点
3. 确定通道的数量。一般来说,一个通道代表一个业务场景。
4. 确定通道中的成员。只有相同通道中的成员才能进行交易,其他不在通道中的节点无权查看通道中的账本,也不会接收到有关交易的任何请求。这里我们假设全部的节点都需要参与交易。
5. 确定背书策略。背书策略描述了一笔交易在何等条件下会被网络接受、在交易提交之后由背书节点进行背书签名并由客户端进行验证;背书策略在记账节点写入账本之前会被再次确认,之后验证通过的交易才会被写入账本,否则会被丢弃。默认的背书策略(包括不指明背书策略的情况)是两个组织中任意一个节点背书交易就会被接受。
Oracle自治区块链云服务
针对上述企业区块链应用落地需要解决的问题,甲骨文正式推出 Oracle 自治区块链云服务(Oracle AutonomousBlockchain Cloud Service),通过Oracle 自治区块链云服务能够帮助企业轻松高效搭建企业级区块链网络,使企业更安全、高效地处理区块链交易,具体特点如下:
1.高可用的基础设施:Oracle 自治区块链云服务是一个可用性 SLA 高达 99.95% 的Oracle托管云平台,其内置高可用性、自治性恢复代理以及持续的分类帐备份功能,实现跨可用性区域的多数据中心灾难恢复。
2.端到端的管理:Oracle 自治区块链云平台基于 Linux 基金会的 Hyperledger Fabric 技术构建,预装有所有底层基础设施相关技术,包括容器生命周期管理、事件服务、身份管理、REST 代理以及集成在单独操纵台的一系列运营及监测工具,可加快应用搭建和开发的过程。
3.广泛的集成:同时Oracle自治区块链云服务能够快速集成Oracle SaaS及其他现有的第三方应用,以及其他区块链网络和Oracle PaaS服务。得益于Oracle 云平台的广泛功能,它还支持与现有云和内部部署应用、API 管理以及各种应用开发环境和工具的即插即用集成。甲骨文还提供了一些全新的SaaS应用,将区块链技术运用到各类常见场景中,如跟踪与追溯、物源识别、担保和使用以及冷链等。支持 Oracle 应用和第三方应用的即插即用,能够加快与各种记录系统的集成,从而极大地加快产品上市速度,并使得在各应用场景中使用区块链平台的回报倍增。
接下来我们尝试基于Oracle自治 区块链云服务快速创建一个多方参与的区块链的网络,部署并调用智能合约,实现区块链网络端到端的管理。
创建区块网络
如下图所示:首先创建多方共同参与的区块链网络,oracle BCS提供的配置页面简单易用,仅需配置几个参数如:区块链组织名称、共识算法类型、节点数、控制台端口,链码服务代理端口等即可完成区块链服务网络的创建和部署。对于网络创建者,选择“创建块链网络”单选按钮。然后配置如下图
对于网络参与者加选择“创建块链组织”按钮,创建好的组织列表如下:
组织成员管理
OABCS的云服务是一个“许可”的网络,需要利用MSP(Membership Service Provider)对成员管理进行抽象,每个MSP都会建立一套根信任证书体系,利用PKI(Public Key Infrastructure)对成员身份进行认证,验证用户提交请求的签名。区块链网络组织者需要参与者的证书信息用来验证户身份,交易签名和TLS传输。OABCS提供了证书管理和配置共识服务的向导界面,帮助我们轻松管理证书和共识信息。
在每个网络参与者管理控制台点击"导出证书"。
在组织者管理控制台导入成员的证书信息
在区块链网络中各成员组织是已知的,通过上述操作建立了组织成员信任关系,只有该区块链网络的成员能够操作分布式账本。
配置共识服务信息
在Oracle BCS的分布式节点环境下,共识服务要实现同一链上不同节点区块的一致性,同时要确保区块里的交易有效和有序,排序服务可以采用集中式共识服务,也可以采用分布式共识服务。配置共识服务信息,首先在网络创建者中导出共识节点信息。
在网络参与者的向导界面导入组织者共识节点信息。
建好后可以在界面查看网络节点拓扑结构,如下图区块链网络由3个成员组成,一个创建方 和两个参与方 。在Oracle BCS中节点是区块链中通讯主体,有多个类型节点Peer节点、排序服务节点、CA节点。图中每个组织参与者有两个Peer节点,所有的Peer节点都是记账节点,负责验证从排序服务节点区块里的交易,同时部分节点会执行交易并对结果进行签名背书。区块链网络的组织者有两个Peer节点,一个排序服务节点(orderer)和一个CA认证授权节点。
创建网络通道
在OABCS中,通道是两个或多个特定网络成员之间的通信的私有“子网”,用于进行需要数据保密的交易。网络上的每个transaction都在一个channel上执行,每个通信方必须经过身份验证并授权在该channel上进行交易。加入channel的每个peer都具有由成员服务提供商(MSP)给出的自己的身份。
从创建者控制界面选择 “通道” 选项卡,然后点击“创建通道”. 配置通道名称,成员操作权限,以及加入通道的Peer节点信息。
其他网络参与者为了加入创建的通道,请访问参与者的控制台。从那里导航到“节点”选项卡,单击要添加到通道的对等点的名称并加入通道。
网络组织者导入参与者对等节点信息
为了让组织者知道其他参与者的对等节点信息,我们必须先导出节点信息,并将其导入组织者节点信息。在参与者管理控制台中,导航到“节点”选项卡,然后单击“导出/导入”按钮导出节点信息。选择参与者的两个对等点,然后单击“导出”并保存结果文件。
在节点信息被导出后,在组织者控制台中,导航到“节点”选项卡,点击“导出/导入”按钮,导入节点信息。
在完成上述操作步骤后,其他参与者的对等节点的信息会出现在节点列表中,节点与MSP ID列中的组织关联,MSP(会员服务提供商,负责跟踪参与网络的组织)。
浏览通道网络拓扑
到目前为止,已经建立好一个多方参与的完整的区块链网络,可以从区块链组织者控制台导航到“节点”选项卡,点击“浏览拓扑”,见下图网络拓扑所示,组织者以及两个参与者的所有对等节点都加入到了一个通道中。
区块链网络管理
OABCS云服务提供联盟链的管理方式,每个联盟成员独立管理自己的节点和账本;点击不同的参与者组织,可以进入各个组织的独立区块链管理界面,每个组织管理员可以进入管理控制台进行各自区块链系统的部署,管理,运维等工作,实时查看区块链服务里节点的类型、数量和状态,方便管理员实时了解每个区块链服务的状况。
配置Rest Proxy
OABCS提供了方便快捷的rest proxy网关服务,方便客户端对智能合约的操作和访问,在安全方面,网关服务通过OracleIDCS安全云服务提供身份认证和授权;要通过Rest Proxy开放智能合约的访问,需要在参与者各方导航到“节点”选项卡并定位网关节点(gateway0.dauto.com或类似)。使用上下文菜单单击“编辑”。配置每个通道,链码和Peer节点,然后点击“提交”。BCS为每个区块链网络组织提供了独立的网关服务,你需要为每个网络成员重复这些步骤。
部署链码
OABCS实现“可编程的账本”,通过链码执行提交的交易,实现基于区块链的智能合约业务逻辑。我们可以把开发好的chain code部署到BCS上面。OBCS提供了快速部署和高级部署的向导,快速部署将采用默认的背书策略,而高级部署可以灵活的配置通道信息,选择Peer节点,以及配置背书策略,部署链码可以从组织者控制台导航到“链码”选项卡如下图:
测试链码
OABCS提供的Node js,Go,Java开发工具包,您可以安装和使用Hyperledger Fabric SDK来为OABCS开发应用程序。
通过Oracle BCS可以快速开测试和部署区块链业务应用和智能合约代码,降低用户开发成本,提高用户开发效率;
也可以通过OABCS提供的图形化测试界面直接调用链码,同时也可以利用REST工具来直接调用OABCS网关并测试链码实现逻辑验证chaincode的业务逻辑,具体的请求调用格式如下:
POST http://url:port/bcsgw/rest/v1/transaction/invocation
Headers:
Content-Type:application/json
Body:
{
"channel":"<channel_name>", 通道名称
"chaincode":"<chaincode_name>",// 链码名称
"method":"<function_name>",//链码的方法名
"args":[<argumentsas an array>], 链码的参数信息
"chaincodeVer":"<chaincode_version>"//链码版本信息
}
总结
综上所述,面对企业级区块链应用落地的诸多难题,Oracle自治区块链云服务有针对性的面向企业及开发者提供高性能、高可用、高安全的公有云区块链服务,帮助企业及开发者在Oracle云上快速、低成本的创建、部署和管理区块链应用,将企业从繁琐耗时的区块链基础开发和部署中解放出来。

作者简介
贺杨,甲骨文PaaS云平台资深咨询顾问,Oracle云及AWS云认证架构师,专注于甲骨文PaaS云平台及中间件相关产品及架构解决方案。具有15+年的中间件技术,云计算技术相关解决方案、架构及项目实施经验。熟悉制造业,烟草及大政府行业。您可以通过yang.he@oracle.com与他联系。
了解更多,敬请关注甲骨文开发者社区......