Hyperledger Fabric on SAP Cloud Platform

今天的文章来自Wen Aviva, 坐Jerry面对面的程序媛。java

Jerry在以前的公众号文章《在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图》已经介绍过Aviva了,SAP成都C4C开发团队中其余同事评价她为:“美腻与智慧的化身”,“云时代女王”,“是你们前沿技术的引路人”。由于Jerry和Aviva就在一个组,因此个人见解是,这些评价都实至名归。node

好比Jerry了解到的Javascript 3D渲染,加强现实(Argument Reality)和这篇文章谈到的Hyperledger Fabric, 所有都是从Aviva那里学到的。算法

SAP成都研究院的每位同事,只要是参加了2017年岁末年会扫福字领红包的活动,则理论上都使用了Aviva和成都另外一位程序媛Zhao Rina开发的基于AR的小应用。数据库

2017年7月初成都C4C开发团队刚刚建立,除了老大Max以外,只有5位组员:哈公子,大卫哥,象老师,勇哥和阿爽。当时这支新的开发团队面临的最紧迫问题,就是赢得C4C美国开发总部的信任,从而从总部揽活到成都本地来作。用什么得到信任呢?对程序猿来讲,固然是talk is cheap, show me the code。当时这支刚刚组建起来的五人小团队对C4C绝不了解,可是却选择了一个中国客户呼声很是高,很是但愿可以添加到C4C标准产品去的backlog。短短一个月时间,这个五人小团队完成了从现学C4C产品知识和先后台开发知识,到将backlog实现成一个原型的全过程。当原型录成的视频给美国开发老大过目以后,获得了极高的评价,惊叹这只团队从建立到productive只花了短短一个月的时间。这个原型的顺利完成,为成都C4C团队后续的发展壮大打下了一个坚实的基础。编程

这个原型最后的交付形式是iOS应用。当时五位同事都没有作过iOS平台上的开发,不过幸亏咱们有Aviva。Max从SAP成都数字创新空间租借了Aviva。在她的帮助下,原型发布顺利完成。更使人敬佩的是,Aviva将她的iOS开发经验无私地分享给了团队其余同事,如今C4C团队已经有多位同事可以在iOS平台上进行工做。我想,今年三月成都C4C团队参加编程马拉松时,在组队阶段给队伍取名为“Hi Aviva!”, 或许是想经过这种方式感谢Aviva对C4C团队作出的贡献。网络

Jerry很庆幸天天能够和这样的同事一块儿工做。数据结构

下面是Aviva的正文。分布式


什么是区块链?简单来讲区块链就是一个分布式的记帐本,或者分布式的数据库。

区块链的数据结构是一个链表,交易数据被存储到链表的区块中,区块链的第一个区块叫创世区块,除了创世块之外,每一个区块还包含前一个区块的哈希指针,这个哈希指针的值是根据前一个区块的实际数据计算出来的。哈希指针指向前一个区块,后面的区块能够查找前面全部区块的信息。ide

帐本的数据结构就是这样的一个链表,那么分布式的含义是什么呢?区块链

区块链的众多参与者组成了一个松散自治的P2P网络,咱们把区块链网络的参与者叫作节点,每一个节点都拥有一个帐本拷贝,全部帐本的信息都是一致的,在区块链里没有中心节点。每当有新的交易进来,全部节点的帐本都会更新,而且最终保持一致。更新的方式不是去修改某个区块的值,而是保存交易记录。好比在比特币系统中,它没有用户资产记录这样的概念,不像普通数据库那样用一条数据存储资产,比特币用户资产的值是经过把全部的交易记录串联聚合后获得的,帐户里资产的来源能够一直向上追溯,直到创世块为止。区块链里的交易数据根据具体场景,能够是任何须要记录的信息。                  

智能合约

为了支持信息的持续更新,以及对帐本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对帐本的访问和控制。智能合约不只仅可用于在区块链网络中打包信息,它们也能够被用于自动的执行由参与者定义的特定交易操做。

好比智能合约能够规定物流中的运输费用,根据物流的快慢收取不一样的费用,根据货物的到达时间进行自动转帐等。上传到区块链网络中的的智能合约会被打包到某一个区块中,所以智能合约一旦写入区块链,也是不可更改的。

共识机制

区块链网络中交易信息同步的过程,确保交易只有得到适当参与者批准后才更新,全部的参与者都会将一样的信息按照一样的顺序更新,这样的过程叫作共识。共识机制是区块链的核心之一。

区块链的第一个应用比特币,采用的是Proof of Work(工做量证实)的共识机制。简单介绍一下比特币的共识机制,算法的具体细节你们能够去查白皮书。节点收到一个交易后,会根据判断标准对该交易进行有效性校验,无效的交易会被废弃。经过有效性验证以后的交易将会被广播给其余节点。其余节点会作一样的独立校验,当有效的交易达到整个网络全部节点时,即全网达成了“该交易有效”的共识。每一个节点都会收到不少有效可是还未被打包到区块中的交易,这些交易被组装成Merkle Tree,Merkle Tree的第一个交易比较特殊,叫作coinbase,由节点本身建立,将挖矿奖励支付到矿工本身的地址。挖矿奖励包括新建立的比特币和打包进该区块全部交易的手续费总额。而后节点计算一个符合难度的哈希值,挖矿就是经过修改参数不断计算区块哈希值,直至达到难度要求,也就间接证实了该节点付出了对应的工做量,这就是工做量证实。Jerry的公众号文章《300行ABAP代码实现一个最简单的区块链原型》里用了一个ABAP方法CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR来计算区块的哈希值。

当节点计算出一个符合难度的区块哈希时,即说明该矿工挖矿成功了,该节点将该区块组装到本地的区块链,同时也将此区块广播给其余节点。其余节点接收到该区块后会验证该区块是否有效,有可能有两个节点同时挖出了新的区块B1和B2,它们的上一个区块都是同一个区块P。有的节点可能会先收到B1,有的会先收到B2,这时区块链出现了暂时性的两个分叉。要打破这种局面,要看下一个区块是基于B1生成仍是基于B2生成。若是基于B1,B1这条链就变成了最长链,其余包含B2的节点会从新选择最长链,而B2做为孤块被丢弃掉。

到目前为止,咱们能够将区块链看作是一个共享的,去中心化的多备份系统,经过智能合约更新交易数据,同时借助共识的协做流程使网络中全部的节点保持一致。

这里的交易能够指代任何数据,例如:数字货币,合同,记录或者其它任何信息。

区块链的类型

  • 公有链:网络中的节点能够任意接入,网络中数据读写权限不受限制,全部节点都参与共识过程。比特币,以太坊等数字货币都属于公有链。

  • 私有链:网络中的节点被一个组织控制,由其独享该区块链的写入权限,私有链和其余的分布式存储没有太大区别。

  • 联盟链:多个公司或组织经过受权接入,由某些节点参与共识过程。Hyperledger Fabric属于联盟链。

什么是Hyperledger Fabric?

Hyperledger Fabric 是Linux基金会发起的Hyperledger项目之一。Hyperledger Fabric 专为在企业环境中使用而设计的开源的基于区块链的分布式帐本。Hyperledger Fabric可用于全球供应链管理、金融交易、资产记帐、人力资源、保险、健康和数字音乐等领域。

Hyperledger Fabric中的帐本子系统(ledger)包括两个组件:**世界观(world state)和事务日志(**transaction log)。世界观记录了帐本在特定时间点的现状,是一个键值数据库。交易日志记录产生世界状态当前值的全部交易,是世界观的更新历史。帐本的世界观的底层数据库能够更换,能够选择使用levelDB或couchDB。

Hyperledger Fabric是第一个支持以通用语言编写智能合约的区块链平台,可使用java,nodejs和go语言来编写智能合约。Hyperledger Fabric中的智能合约也叫链码(chain code)。

和其余公有区块链平台最大的不一样,Hyperledger Fabric 是私有的而且须要受权才能接入,它拥有一个**MSP(**Membership Service Provider)模块专门提供成员管理服务。

CA(Certificate Authority)负责权限管理,成员身份相关证书管理(Enrollment CertificateAuthority)和维护交易相关证书管理(Transaction Certificate Authority)等等。

Hyperledger Fabric提供了创建channel的功能,这容许参与者为交易新建一个单独的帐本。当网络中的一些参与者是竞争对手时,这个功能变得尤其重要。由于这些参与者并不但愿全部的交易信息——好比提供给部分客户的特订价格信息——都对网络中全部参与者公开。只有在同一个channel中的参与者,才会拥有该channel中的帐本,而其余不在此channel中的参与者则看不到这个帐本。

Hyperledger Fabric使用独立的排序节点(order)来提供共识服务,负责排序交易,提供全局确认的交易顺序。

应用程序经过SDK访问Hyperledger Fabric。

最新版Hyperledger Fabric的设计中,根据功能将节点角色解耦开,让不一样节点处理不一样类型的工做负载。从业务逻辑上又将节点分为背书节点(Endorser)和提交节点(Committer)。

  • Endorser peer:负责对来自客户端的交易进行合法性和权限检查(模拟交易),通 过检查则签名并返回结果给客户端。

  • Committer peer:负责维护帐本,将达成一致顺序的批量交易结果进行状态检查,生成区块,执行合法的交易,并写入帐本,同一个物理节点能够同时担任endorser和committer两个角色。

Hyperledger Fabric 交易流程:共识

共识流程主要分Proposal,Packaging和Validation三个阶段。

Proposal

应用提交一个交易proposal,而后将其提交给全部的背书节点,后者接到后,将其做为输入执行链码生成相应的交易proposal响应。此时并不会更新Ledger,而是对交易proposal 响应签名,并将其返回给应用。应用收到签名后的响应,共识流程的第一阶段就完成了。

Packaging

这个阶段是order节点对交易进行排序打包。Order节点从各个应用接收交易proposal响应,而后对这些交易进行排序,排序以后打包成区块。

相关文章
相关标签/搜索