彩世界开奖app官网-彩世界平台官方网址(彩票平台)
做最好的网站
来自 计算机编程 2019-10-11 06:25 的文章
当前位置: 彩世界开奖app官网 > 计算机编程 > 正文

Hyperledger 法布里c Chaincode 开荒彩世界开奖app官网

多机部署

彩世界开奖app官网 1

04 chaincode-docker-devmode目录

该目录演示在开发网络时,利用预生成的order和chanel来启动“开发模式”。 这样,用户可以立即进入编译链码和驱动调用的过程。

通常,链码由peer节点启动和维护。 然而,在“开发模式”中,链码由用户构建和启动。在链代码开发阶段,此模式非常有用,可用于快速代码/构建/运行/调试。

fabric 部署

所以,针对这个问题,fabric又提供了开发模式。在这种模式下chaincode直接运行在本地,这样chaincode的调试过程就与普通程序的调试过程完全一样,因此开发调试过程就更加容易。

01 balance-transfer目录

这是一个转账的案例,通过node.js SDK完成如下功能:创建通道,加入通道,部署链码(chaincode-就是智能合约),实例化链码,调用链码完成交易,以及查询链码等功能。链码的编程语言提供了两种语言的示例:golang和node.js语言。而app端又提供了两种语言的示例:node.js和typescript。整体如下图。

彩世界开奖app官网 2360截图20180806161613515.png

项目演练

彩世界开奖app官网 3

07 first-network目录

我们平常说的搭建hyperledger fabric环境,一般指的是就是部署运行这个示例。该目录下提供一个脚本byfn.sh文件,该文件提供一条龙服务,演示了生成证书,启动网络节点(两个组织,每个组织有2个节点),以及部署、实例化链码,并调用链码进行转账和查询,最后停止整个网络。本示例采用的是solo共识服务机制。

目标:开发一个chaincode 示例,巩固chaincode的开发方法和流程。

要说明的是,我目前看的fabric1.0的代码对于开发模式的支持还不完备,部署的时候回失败。

00 导言

在上一讲《Fabric 环境搭建时bootstrap.sh帮我们做了什么?》中,我们知道bootstrap.sh帮我们做了三件事:

  1. 从github上克隆 hyperledger/fabric-samples并进入该目录,然后检出适当的版本
  2. 在fabric-samples目录下安装特定平台的 Hyperledger Fabric 二进制可执行文件 和配置文件
  3. 下载 指定版本的Hyperledger Fabric 的docker镜像

其中第一件事情就是从github上克隆 hyperledger/fabric-samples,克隆完成后,它里面包含的目录如下。彩世界开奖app官网 4360截图20180806161424892.png

接下来我们来介绍一下这些目录是干什么的?这些目录里包含了一些什么?

End-2-End 案例

彩世界开奖app官网 5

05 fabcar目录

一个汽车的例子,主要是通过单机配置模拟环境,实现管理员admin用户的enrollAdmin,其他用户的注册(主要是指user1),以及实现query和invoke。

该目录下主要包含的是一些js文件和一个startFabric.sh,没有包含链码(相关的链码放在chaincode/fabcar目录下)。运行startFabric.sh会先运行basic-network启动网络。

本笔记内容概要:

这里给出一般模式下Chaincode的开发调试过程。以fabric chaincode_example02为例,完全本地,并且使用fabric默认配置。我的环境是使用vagrant方式搭建的。

02 basic-network目录

该目录提供了一系列shell脚本,去生成初始化并启动一个最基本的网络,包含一个order节点,一个组织下的一个普通的peer节点。

脚本 作用
init.sh 删除之前存储的证书数据
generate.sh 生成加密材料、创世区块、通道等
start.sh 启动网络
stop.sh 删除网络
teardown.sh 彻底删除所有与网络有关的证据

与上一章的区别就是使用了多台服务器,更接近真实环境。

彩世界开奖app官网 6

08 high-throughput目录

访目录提供的案例,用于演示如何正确设计链码数据模型,以处理在每秒数千个并发事务,这些事务都更新了账本的相同资产。实际上就如何处理高并发的情况!

Kafka集群模式部署

接下来,通过Instantiate命令部署刚刚install的chaincode,同样需要给出chaincode名称和version。channel的名称是可选的,如果省略将默认使用testchainid这个channel,peer启东时会默认加入这个channel。

03 chaincode目录

该目录是一些链码的示例,包括以下目录:

目录 作用
abac Attribute-Based Access Control 基于身份属性的访问控制
chaincode_example02 一个简单的账户间转账和查询 的示例
fabcar 一个关于汽车的综合示例,提供了Fabric功能的广泛演示。 演示与证书颁发机构进行交互并生成注册证书的过程,用这些身份来查询和更新帐本
marbles02 弹珠资产管理链码,演示couchDB的富查询
marbles02-private 暂不了解
sacc SimpleAssetChainCode 简单资产管理链码示例

目标:使用 Java-SDK 对接 chaincode,对外提供访问接口。

答疑解惑

06 fabric-ca目录

演示如何使用Hyperledger Fabric CA客户端和服务器为order,peer,管理员和最终用户生成加密证书上,以便私钥永远不会离开生成它们的主机或容器。

为啥要使用CA呢? cryptogen加密工具不适用于生产环境,因为它在一个位置生成所有私钥,然后必须将其复制到适当的主机或容器。

主要是安装 fabric 源码和镜像。

彩世界开奖app官网 7

09 scripts目录

访目录提供了两种不同的脚本,一个是bootstrap.sh,该脚本跟《Fabric 环境搭建时bootstrap.sh帮我们做了什么?》中说的bootstrap.sh几乎一致,只是少了个sampleInstall这个过程。

还有一种是Jenkins_Scripts,对这行种脚本小编了解得不多,只知道Jenkins是一种基于Java开发的一种持续集成工具。

智能合约 chaincode 的开发、安装、命令行调用、通过 sdk 对外提供访问,使外部程序能够调用智能合约

那么如何使用相关的API呢?两种方式,一种是通过参数stub shim.ChaincodeStubInterface,fabric在该接口中定义了丰富的API;此外,fabric也定义了一些全局的函数可被使用,比如这里的start()函数就是其中之一。

10 总结

到此为止,我们几乎把fabric-samples的一级目录和文件都作了个简单的介绍。

学习hyperledger fabric,我们除了首先要学习环境怎么部署和搭建之外,还需要通过一些案例来透彻理解fabric的架构设计、账户体系、授权认证机制、以及智能合约和SDK等方方面面的内容。而fabric-samples里正好包含了若干案例,来帮助我们达到这些目标。可以说,只要认真研究了fabric-samples提供的这些案例,基本上已经对hyperledger fabric的技术知识体系和动作原理有一定的了解了,接下来就要多多参与到工程级别的项目开发中,积累更多业务方面的经验,让hyperledger fabric更接地气,更面向实际业务场景!

由于小编的技术和业务水平有限,未能完全参透此目录的所有案例的内容。所以在这一讲中,我们只是简单介绍了一下各案例和对应的目录结构,后期,我们还会出一系列的文章来详细讲解这些案例并把这些案例部署运行起来。敬请期待

单机部署

彩世界开奖app官网 8

目标:在多台服务器上部署orderer节点、peer节点,然后安装一个智能合约示例,并测试。

Page 3

Java-SDK 客户端

lccc是生命周期系统chaincode,用于管理用户chaincode的install、Instantiate等;cscc是配置系统chaincode,与系统配置有关,比如join channel的时候,就是通过cscc来进行的;escc和vscc分别是endorsement系统chaincode和verification系统chaincode,主要是endorser用于对用户chaincode进行相关验证和背书,它们可以在Instantiate chaincode的时候指定,也就是说用户可以根据自己的情况给某个endorser结点设置定制化的escc和vscc;qscc,不好意思我还不太了解,后面研究清楚之后再跟大家分享。

彩世界开奖app官网 9图片发自简书App

彩世界开奖app官网 10

我在实践笔记中没有涉及概念的讲解,所以需要对 fabric 有了大概了解后再参考本笔记进行实践操作,同时需要对 GO 语言有基本的了解,fabric 的智能合约是使用 GO 语言开发,但比较简单,对 GO 的熟练程度要求不高。

此外就是一些全局的或辅助的API。

彩世界开奖app官网 11

docker、docker-compose、go 环境安装。

第三点和第四点可以放在一块来看。对于一个区块链系统来说,显然,区块链其中是最重要的组成部分。右边这个图展示了最基本的区块链结构:首先区块链是由一个一个的区块串接而成,每个区块又是由若干的Transaction构成。所以,可以说Transaction是一个区块链系统中最基本的组成要素。而在Fabric中,Chaincode的运行是生成Transaction的唯一来源,也因此Chaincode是外界与Fabric区块链交互的唯一渠道。由此可见chaincode的重要性。

目标:完成orderer多节点模式部署,并使用kafka集群提供队列服务,这是实际产品环境中采用的方式。

彩世界开奖app官网 12

Fabric 环境部署

Page 9

基本环境安装

在介绍具体调试步骤之前,我想先介绍一下chaincode运行的基本原理,我觉得这有助于chaincode的开发。

运行时有大量的日志输出,我们可以看到fabric都做了什么,使我们对 fabric 的运行有个全局的认识

彩世界开奖app官网 13

这个示例运行起来之后,就说明 fabric 的基础环境没有问题了,利于之后的部署实践

那么,先看ChaincodeStub提供了哪些API。我将这些API分成了五大类。

下载地址:

问:Fabric 1.0 调用其他 CHAINCODE 现在支持了吗?

智能合约chaincode部署到链上后,可以通过命令行调用,需要对外提供访问时,就要开发对外的接口,外部程序通过这个接口来调用chaincode。

答:ordering之后,channel 上的所有 peer 都会执行 commiting 操作,即写入stateDB操作。

End-2-End 是官方的入门示例,相当于经典的 helloworld,跑通这个示例有2个重要意义:

Page 7

目标:熟悉chaincode 的开发流程。

彩世界开奖app官网 14

智能合约开发

问:chaincode处理的数据来源可以自己获取吗,比如时间,或者其他服务器的一些数据?

fabric提供了开发模式,通过 chaincode-docker-devmode 可以快速启动一个测试网络,不必自己搭建fabric环境,方便的编译测试 chaincode 代码。

答:实际上是发给了 endorser 结点,这个是在你的调用请求里指定的。

环境安装

彩世界开奖app官网 15

重点在于orderer节点的部署,peer和智能合约的操作与上一章相同,至此,fabric 的部署流程就比较熟练了。

Page 16

fabric 涉及的主要内容包括:

彩世界开奖app官网 16

目标:完成一个最小化部署流程,自己动手一步步的在一台服务器上部署orderer节点、peer节点,orderer采用单节点模式,peer部署多个节点,然后安装一个智能合约示例,并测试智能合约,测试通过即说明部署成功。

问:chaincode 的 world state 何时被写入?

前面提到编写chaincode就是实现一个接口,这里就是那个接口的定义。

之后,就可以通过invoke和query命令来调试自己的chaincode程序了。这里同样使用默认的channel testchainid。

第一,编写Chaincode程序实际上就是要编写一个类,并且这个类要实现fabric预先定义的一个接口。关于这个接口后面第二部分会有更详细的介绍。

答:理论上 chaincode 就是一个独立运行的可执行程序,它会与远端的endorser 进行通信,所以 chaincode 程序是可以访问外部数据源的。

彩世界开奖app官网 17

可以看到,最主要的是编写自己的chaincode类,实现刚刚看到的两个方法。然后在main函数中通过API shim.start()来向特定peer结点注册该chaincode。

Endorser结点会模拟执行chaincode,这样就相当于把计算任务从consensus结点独立出来,进而减轻了consensus结点的负担,也就可以增加系统吞吐量。同时,比较重要是fabric1.0可以支持endorsement policy,即一个transaction的提交需要哪些endorser进行背书才可通过。这样整个系统的访问控制就更加灵活。

在开发语言上,支持go和Java两种语言来编写chaincode程序。我下面是以go语言为例来介绍chaincode的编写的。

第三大类与Transaction有关,并且这一类都是读操作,读取transaction中各种信息,比如transaction id、timestamp等。

Page 10

Page 2

第二,如何运行Chaincode程序呢?我们知道blockchain系统是一个网络,由若干结点构成。Fabric区块链系统也不例外,而要运行Chaincode程序,就要把它首先部署到fabric系统的结点上。也就是说,Chaincode程序是依赖于fabric系统结点的。

Page 13

彩世界开奖app官网 18

首先,Init方法会在Instantiate chaincode时被调用。因此,一般在其中完成一些初始化工作,并且仅被执行一次。

可以看到这个接口定义了两个方法,分别具有不同的作用。

关于API的详细说明可以打开这个链接看到。但是上面基于的是最新的fabric实现,所以跟刚才讲的会有很多不同。具体以你使用fabric版本为准。

最后,chaincode执行完毕之后,会发送消息给endorser结点。如果执行成功,endorser结点就会封装执行结果并对其endorse,并把结果返回给CLI/APP端,然后进行ordering。这个图里没有给出ordering和committing的过程。

Committer结点会将接收到的transaction写进block。

Page 12

Page 6

Page 14

Channel是1.0增加的一个比较大的feature。字面意思,通道。流过通道的数据对于加入该通道的结点是共享的。因此,对于加入同一通道的结点来说,就相当于构建了一条子链。这条子链上的内容对于通道外的结点是不可知的。并且,同一个peer结点可以加入不同channel。而Chaincode的执行是基于channel进行的,在一条channel上chaincode执行的结果会被该channel上所有的结点同步到本地Ledger中。

彩世界开奖app官网 19

首先,启动orderer结点,运行在solo模式下。

Page 5

首先,这个图描述的是开发模式下chaincode注册时的执行过程。

这个图描述的是开发模式下chaincode Instantiate/invoke/query时的运行过程。

辅助类StateRangeQueryIterator与前面state范围查询的API有关。

然后,本地启动一个peer结点,指定peer的名称。

首先,fabric peer结点有两种运行模式。一种是一般模式,在这种模式下chaincode运行在Docker容器中。这也是fabric在production环境下的运行模式。这就相当于给chaincode的运行提供了一个相对隔离的环境,这样整个系统也就更加的健壮。但是在这种模式下,调试过程就变得非常复杂。因为一旦调试过程中发现bug,重新install,然后重新部署。而在这个过程中,install和Docker image的build过程都比较耗时。

好了,进入正题。我今天分享的内容的题目是Fabric1.0 Chaincode介绍。除了介绍Chaincode程序编写、调试的基本方法之外,我还加入了一些有关Chaincode原理的内容,希望能够帮助大家更好地理解Chaincode,进而编写出更加高效的Chaincode程序以及更加快速地调试自己的Chaincode程序。

Hyperledger 法布里c Chaincode 开荒彩世界开奖app官网。首先是第一部分内容:在fabric中,Chaincode是什么呢?我觉得可以从以下几个方面来理解。

这一页是使用go语言编写chaincode时的一个最基本的框架。

最后一点讲的是Chaincode与智能合约的关系。相信大家都听说智能合约的概念,简单来讲智能合约就是用程序实现合约的内容,并且这个程序是事件驱动、有状态的。智能合约是早就出现的概念,早于区块链提出。但是,区块链的出现为智能合约的实现提供了一个非常理想的环境。而在Fabric中,Chaincode就是开发者实现智能合约的方式。

彩世界开奖app官网 20

首先,通过CLI或App向指定endorser结点发送Instantiate/invoke/query请求。

Page 11

比如刚才看到的Start函数,它向指定的peer结点注册chaincode。

但是因为开发模式的原理比较容易理解,这里我还是以开发模式为例介绍一下chaincode的运行原理。一般模式下,只需将chaincode的运行放在Docker容器中进行理解。

彩世界开奖app官网 21

这是fabric1.0对chaincode开发情况的支持。

关于SDK,如果使用vagrant方式搭建自己的fabric开发环境的话,在你的这条路径下,$GOPATH/src/github.com/hyperledger/fabric/core/chaincode/shim,就是chaincode开发的SDK。

Invoke方法会在Invoke或Query chaincode时被调用。其中的代码可以查询或更新底层的数据,并且可被多次调用。

彩世界开奖app官网 22

Page 15

endorser接收到请求之后,如果相关chaincode存在,就会将请求发送到chaincode端,并执行相应函数。由于执行过程中,可能涉及到多次的state的读写,而每一次的读写都会涉及到底层db的操作,所以这个过程会涉及到多次与endorser结点的通信。

彩世界开奖app官网 23

彩世界开奖app官网 24

彩世界开奖app官网 25

彩世界开奖app官网 26

Hyperledger 法布里c Chaincode 开荒彩世界开奖app官网。第四类是与chaincode间相互调用有关的一个API。Fabric允许在一个chaincode中根据chaincode name和channel name去调用另一个chaincode。可以看到并没有deploy的API,也就是说,fabric不允许在一个chaincode中去部署新的chaincode。

第三部分讲的是如何调试chaincode。

然后,install chaincode程序,指定chaincode的名称以及version,它们将用于命名build出来的docker image。默认配置下,需要你的chaincode程序位于GOPATH/src路径下,并且这个命令会将GOPATH/src下的几乎所有文件都打包发送到指定的peer结点。

答:1.0 里面是计划支持跨 chaincode 的读操作的。

最后一类也只有一个API,SetEvent。Fabric允许开发者定义自己的event,然后这个event会在transaction写进block时触发,因此开发者就可以自己写相应的event handler程序做一些相关的工作。

彩世界开奖app官网 27

Page 4

答:fabric 1.0 中每个 peer 结点会维护四个 db,分别是 id store,存储 chainID;stateDB,存储 world state;versioned DB,存储 key 的版本变化;还有 blockdb,存储 block。

问:请问在chaincode运行原理这块,CLI或App是把请求直接发给endoser节点还是发给install了这个chaincode的peer节点,再由这个peer去与endoser交互呢?

这一页是在fabric1.0中与Chaincode相关的几个比较重要的概念。

第一大类与state操作相关。通过这些API可以根据key来查询/添加/更新相应的state。这些API提供了单key的读写操作、key字典序范围读取操作、composite key读取操作、底层数据库语法的查询操作等。

我把内容分成了三个部分。内容包括:在fabric 中Chaincode是什么、如何编写Chaincode程序以及如何调试Chaincode程序。中间会穿插与Chaincode相关的重要概念介绍,以及Chaincode运行原理的介绍。

Orderer结点的工作就是consensus。Chaincode在endorser结点处执行之后,会被发送给orderer进行排序或者说consensus,保证transaction的顺序是一致的。然后,orderer结点会把transaction发送给相应的channel中的所有committer结点。

彩世界开奖app官网 28

首先,chaincode会向指定的peer结点发送相关信息,比如chaincode name。然后,peer结点会做一些检查,主要是看该chaincode name是否已存在。如果不存在,则注册成功,为其创建相应的handler,然后返回相关信息。此后,chaincode就与peer结点建立起了联系,并且二者始终处于互相监听状态。

彩世界开奖app官网 29

问:fabric 中每个 block 都有 world state 的 hash,但是这个历史的 world state 存放在什么地方?如何读取指定 block height 的world state?

彩世界开奖app官网 30

彩世界开奖app官网 31

彩世界开奖app官网 32

接下来是第二部分,如何编写Chaincode。

答:1.0中有五个系统chaincode,分别是lccc/cscc/escc/vscc/qscc,它们在peer启动或创建channel的时候就会部署,并且与peer运行在同一进程中,而不是Docker container中。

Page 8

然后是Endorser、Orderer、Committer,它们是将原来0.6中VP的功能进行拆分后产生的三个角色。

第二大类与与参数相关。fabric1.0修改了chaincode接口的定义,需要开发者自己调用API获取传入的参数。注意,传入的参数第一个是函数名称,之后才是相应的函数输入参数。

彩世界开奖app官网 33

问:Fabric 1.0中的系统 chaincode 可否简单介绍下?

本文由彩世界开奖app官网发布于计算机编程,转载请注明出处:Hyperledger 法布里c Chaincode 开荒彩世界开奖app官网

关键词: 实战 案例 HyperLedger Fabric 包含