深度学习
在第5章中,我们已经介绍过,不同链的账本数据和状态数据等都是物理隔离或者逻辑隔离的。对于同一个链不同链码的状态数据,会按链码名称生成不同前缀的键,对状态数据进行逻辑隔离。不同的链码实现不同的业务逻辑,是可以相互调用的。调用的方法通过shim.InvokeChaincode:InvokeChaincode(chaincodeNamestring,args[][]byte,channelstring)pb.Response其中,chaincodeName是被调用链码的名称,链码名称可以指定版本,比如mycc:1.0这样的形式,args是被调用链码的参数,channel是被调用链码的通道名称,默认调用的是同一个链的链码。链码名称会规范化处理,生成的链码名称是:chaincode
链码本身是不会存储任何数据的,业务逻辑处理过程中是通过建立好的gRPC连接实现和背书节点的交互,交互过程是通过有限状态机(FiniteStateMachine)来实现的。有限状态机有下面几个特点:·状态是有限的,能够遍历完所有的状态;·有一个初始状态和终止状态以及若干中间状态;·任意时刻只会处于其中的一个状态;·处于某个状态下能处理的事件是有限的;·状态转移之间的转移条件是确定的。背书节点端和链码端都通过有限状态机定义了各自生命周期内所处的所有状态,以及如何在各种状态下响应各种事件和转移到其他状态。具体实现采用第三方的库http://github.com/looplab/fsm,我们就用fsm来代表这个库。fsm的状态直接用字符串来表示,定义了状态转移映射表。typeEventDesc
本节先介绍应用开发SDK的基本功能。10.2.1 概述HFC(HyperledgerFabricClient)是提供给应用程序开发的SDK,提供了gRPC连接的API。API包含了交易处理、安全的成员管理服务、区块链查询和事件处理等。HyperledgerFabric1.0取消了0.6版本的RESTful接口,只能选择封装了gRPC接口的SDK。采用gRPC的原因主要有以下四点。·底层的接口调用很多都是异步返回结果的,采用gRPC能够很好地双向传输数据。·gRPC结合ProtocolBuffers能减少传输数据量,提升网络传输性能。·支持的语言较多,如Go、C#、Java、JavaScript、Python、C++等。·和内部模块采用相同的通信接口,减少端口开放,也会减
链码是通过SDK和背书节点通信的,就是说链码的SDK只需要实现接口的定义就能和背书节点交互。理论上,链码是可以支持多种语言的。目前的版本(1.0.0)支持的语言只有Golang,其他语言(比如Java)还不够完善,正式发布的时候是禁用的。Car支持利用fabric-chaintool打包的代码,目前也只支持Golang。下面详细地介绍Golang语言的链码提供的接口,讨论如何开发和测试链码。加入会员微信dedao55510.3.1 链码需要实现的接口链码必须要实现的接口如下:typeChaincodeinterface{ //初始化工作,一般情况下仅调用一次 Init(stubChaincodeStubIn
第11章 从零开始部署超级账本网络在第2章我们简要地搭建了超级账本的网络,本章我们详细地介绍如何从头进行初始化的配置,手动部署超级账本的节点和链码,调用链码实现智能合约的功能。11.1 准备超级账本运行环境本节介绍多种构建超级账本运行环境的方法,然后介绍如何编译超级账本的镜像文件。11.1.1 超级账本运行环境链码依赖于Docker才能启动运行,超级账本的各节点也推荐运行在Docker容器中,方便系统的运维管理。在开发的过程中,有多种运行方式可以选择:基于Vagrant的运行环境、基于Virtualbox的运行环境和基于Docker的运行环境。1.基于Vagrant的运行环境Vagrant用一致的工作流程提供了易于配置、可重复、便携的工作环境,让开发人员可以快速地创建和销毁虚拟机,帮助团
我们基于fabric-samples里的BYFN(BuildYourFirstNetwork)介绍超级账本的构建过程,首先是利用提供的脚本快速地构建网络,后面是详细的构建过程。11.2.1 下载BYFN的代码BYFN是包含在fabric-samples的first-network目录下的,先通过git下载源代码:cd$GOPATH/src/github.com/hyperledgergitclonehttps://github.com/hyperledger/fabric-samples.gitcdfabric-samples/first-network后面的操作默认都在此路径下进行。11.2.2 BYFN脚本介绍运行BYFN脚本需要已经安装好Docker基础环境,编译出镜像文
下面我们手工逐步建立超级账本网络,理解了后面的操作步骤,就可以根据需求自行定制和部署超级账本网络了。11.3.1 生成MSP证书使用cryptogen工具生成证书。MSP证书是超级账本网络实体的身份标识,实体在通信和交易时使用证书进行签名和验证。生成证书需要crypto-config.yaml配置文件,详细的文件解析参考附录B的内容。这个文件定义了组织结构,据此可以为组织和其内的成员生成数字证书和签名密钥:加入会员微信dedao555localhost:first-networkclarity$cryptogengenerate--config=./crypto-config.yamlorg1.example.comorg2.example.com生成的MSP目录结
前面章节介绍了如何利用HyperledgerFabricClientSDK和链码开发基于Fabric网络的区块链应用。本章会从应用开发的角度出发,用一个票据背书的例子来介绍如何进行一个完整的区块链应用开发。12.1 票据背书场景介绍这里仅讨论狭义的票据,指出票人依法签发的由自己或指示他人无条件支付一定金额给收款人或持票人的有价证券,分为汇票、本票和支票等。它们的共同特点是,在票据规定的期限内,持票人或收款人可向出票人或指定付款人无条件地支取确定金额的货币;它们都属于反映一定债权债务关系的、可流通的、代表一定数量货币请求权的有价证券。票据是在货币或商品流动中为体现债权和债务的发生、转移以及偿付而用的一种信用工具,可用作贸易中的支付结算和企业短期融资。票据的特征和意义如下。1)
本章旨在通过案例讲述如何基于超级账本开发一个简单的区块链应用,票据背书的应用开发实例会对票据的应用场景进行简化,我们实现的业务逻辑包括票据发布、票据背书、票据签收、票据拒收、票据查询等操作,实际的票据业务需要根据实际需求做调整。1.票据发布票据发布操作生成一个票据,包括如下5类信息。(1)票据基本信息·票据号码·票据金额·票据种类·票据出票日期·票据到期日期(2)出票人信息·出票人名称·出票人证件号码(3)承兑人信息·承兑人名称·承兑人证件号码(4)收款人信息·收款人名称·收款人证件号码(5)持票人信息·持票人名称·持票人证件号码2.票据背书票据背书是转让票据权利的重要方式和手段。发票票据需要先获取持票人持有的票据,填写被背书人的信息:·被背书人名称;·被背书人的证件号码。发起票据背书的请求