区块链之超级账本Fabric 基于SDK应用开发

一、Fabric 应用开发模型

Fabric开发包含客户端应用和智能合约(chaincode)开发
chaincode开发完成之后被部署到区块链网络的Peer节点上面。通过chaincode来操作账本,当调用一个交易transaction时,实际上是在调用chaincode中的一个函数方法,它实现业务逻辑,并对账本进行get, put, delete操作。
客户端应用提供用户交互界面,调用fabric SDK,完成区块链的操作和交易
本次培训侧重客户端应用的开发

在这里插入图片描述

二、Fabric SDK接口介绍
Fabric提供了SDK给应用程序调用,SDK包含了交易处理,成员管理,区块链查询和事件处理等接口

Fabric SDK具有以下特点: 底层接口调用很多都是异步返回,采用gRPC协议,能够很好的双向传输数据

gRPC结合Protocol Buffer能减少传输数据量,提高网络传输性能

支持语言有Go、Java、JavaScript、Python。本次配置我们以Java语言开发为例

和内部模块采用相同的接口,减少端口开放性,减少安全风险

整个Fabric网络,除了fabric-ca采用HTTP协议,其他都是GRPC协议

Fabric SDK接口模块
Fabric SDK定了两种模块的接口;一种访问fabric-ca接口,一种访问fabric网络接口,其中fabric-ca是可选的,可以选用其他成熟的第三方CA系统替换

Fabric SDK 提供的模块如下:
HFClient 模块:应用程序入口,提供通道管理,链码管理,数据存储,密码学相关的功能。每个HFC实例对应一个区块链网络,包含记账节点,排序节点等。如果应用层需要访问多个网络,可以建立多个HFC的实例

Config 模块:初始化HFC时需要离线获取配置信息,Config模块包含可信的根证书,排序服务节点证书和IP地址,记账节点证书和IP地址等。配置模块读取后传递给HFC

Channel 模块:对应通道实例,通道在配置了order和peer之后需要初始化,初始化的时候给order服务节点发送获取配置区块请求

Peer 模块:Peer节点是HFC模块发送背书请求、交易查询的节点。Peer实例包含了节点名称、地址、角色、注册证书等信息

Order模块:Order节点是HFC模块发送交易排序的节点。Order实例包含了排序服务节点的地址信息,定义了发送原子广播请求和获取区块的接口
User模块:代表了已经完成注册证书和签名密钥的实体,注册证书必须由区块链网络信任的CA颁发

用户身份(User Identity) 和 节点身份(Peer Identity)是有区别的,在SDK里面,用户身份可以访问秘钥信息,可以进行签名。而节点身份不能访问秘钥,只能验证签名

三、Fabric 应用开发流程

Fabric应用开发流程具有通用性 一般步骤如下:
1.在排序节点上创建通道
2.用户登记与注册
3.Peer节点加入通道
4.通过Peer节点安装实例化链码
5.发起交易并生成区块

发起交易如下图所示:
在这里插入图片描述

> 四、Fabric 应用开发流程

如果应用层直接和Fabric SDK打交道,流程并不简单,同时会有大量的冗余代码,一般情况下在应用层和Fabric SDK中间还会为区块链包装一个Framework,,简化应用层和区块链对接的难度,对应用层来说不用关心区块链底层的逻辑和流程

在这里插入图片描述

Fabric 源码介绍:
在这里插入图片描述
在这里插入图片描述
Fabric-CA 源码介绍:

api:CA 接口相关代码实现

cmd/fabric-ca-client: CA客户端相关代码实现

cmd/fabric-ca-server:CA服务端相关代码实现的功能的实现

lib/metadata::数据库操作代码实现

在这里插入图片描述
五、Fabric应用开发注意事项

理解Fabric的运行,交易流程再开始应用开发,否则会摸不着门道

需要特别注意Fabric的配置选项,有加密,超时等

几乎每一个SDK或多或少的都会存在一些BUG,有些BUG大部分是SDK自身的,有些是Fabric的问题,那么遇到这些问题后,我们可以根据交易的流程来判断出哪一步出了问题,然后可以在每个节点修改日志级别来得到错误信息。再定位到SDK当中的某一行代码来进行调试

需要注意SDK版本和Fabric平台版本的匹配,不同版本会出现不兼容现象

建议初学者从Fabric自带的E2E例子开始学习会事半功倍

猜你喜欢

转载自blog.csdn.net/leaning_java/article/details/125254317