Fabric框架的学习-2-官方测试与基础概念

    科技2025-05-14  13

    三、Fabric基本演示与介绍

    在安装完环境之后,开始尝试启动小demo体会整个流程

    3.1 案例介绍

    step1 生成证书

    # 1. 先进入之前下载的环境中,找到first-network文件夹进入 # 2. 运行其中的脚本./byfn.sh ./byfn.sh generate # generate参数会生成一些证书文件

    此脚本的参数:

    产生了crypto-config的目录,里面存放了一系列的证书文件

    step2

    # 2. 运行Fabric每个节点需要使用的镜像,并向每个节点容器中安装链码,安装完了之后再做一个链码的调用 ./byfn.sh up # 启动 ./byfn.sh down # 关闭

    启动成功样例:

    测试的内容:

    查询:

    转账,再次查询:

    案例流程解析

    只是看到跑完了,却不知道干了啥,下面是整个流程的粗略介绍

    一些说明:

    每个组织有多个节点成员每个peer节点都运行在独立的docker容器中,可以看做都是独立的虚拟机每个peer节点都有一个数据库(具体作用见后文)组之间的节点需要通信,通信就需要创建通道cli是客户端节点,客户端节点把请求(查询、交易)发送给peer节点处理想要使每个peer节点拥有处理事务的能力就需要给每个节点安装链代码证书的作用:每个节点之间都会生成对应的ssl证书来保证安全性

    流程:

    创建通道通信节点加入到通道中准备编写好的链代码,安装到每个peer节点上初始化(不用每个节点都做,只需要做一次即可)客户端发起一个交易请求 -> 转账交易成功后数据发送给排序节点order排序节点会对数据打包打包之后的数据被写进区块中

    而这些节点都是可以通过yaml文件进行配置的

    3.2 Fabric逻辑架构

    我们需要学会使用的就是上面四个部分:

    成员管理

    会员注册

    Fabric开发的联盟链或私有链,不是对所有人开放

    注册成功一个账号得到的不是用户名和密码

    使用证书作为身份认证的标志

    身份保护

    交易审计

    内容保密

    Fabric中可以有多条区块链,通过通道来区分(可以把通道理解成为QQ群)并且一个peer节点可以加入到多个通道中每个通道之间相互独立,节点只有进入通道才能知道通道里的数据(每个QQ群相互独立,只有进群了才能看到群消息) => 内容保密

    账本管理

    区块链 保存了所有的交易记录每个节点如果加入了多个通道,那么需要保存的区块链就是多条 世界状态 用于查看数据的最新状态数据存储在当前节点的数据库中 每个节点都有自带的数据库: levelDB,也可以使用couchdb数据在数据库中以键值对存储 查看历史状态就需要在区块链中观察

    交易管理

    部署交易 部署的是链码,就是给节点安装链码-chaincode 调用交易 invoke调用

    智能合约

    一段代码,处理网络成员所同意的业务逻辑真正实现了链码和账本的分离(逻辑和数据的分离)

    3.3 基础概念

    3.3.1 组织

    组织是指这样一个社会实体,它具有明确的目标导向和精心设计的结构与有意识协调的活动系统,同时又同外部环境保持密切的联系

    在Fabric中一个组织里有什么:

    用户(多个)数据处理节点 -> peer (也可以是多个) put 把数据写入到区块链中get 数据查询

    一个小例子:

    举例来说,这是牛奶溯源链的模型

    图中的奶牛场、加工厂、经销商都是组织,其中有很多的用户(牛场、加工厂等)负责提供信息,组织中有记录信息的节点(peer)记录信息

    三个组织共同维护同一条区块链数据

    当有用户需要查看信息时(溯源),就在该链上查询。


    对于peer节点的说明:

    每个组织中可能有多个peer节点(数据处理节点),同一个组织下的每个peer都保存同样的区块链数据一个组织中的peer节点越多,那么数据越冗余,数据越安全

    3.3.2 节点

    在Fabric中有很多的节点,其中就分有很多的种类:

    client

    进行交易的管理(cli, node sdk, java sdk)

    对于上面的例子,牛场A需要提交数据,那么就需要使用一个客户端也就是终端(负责数据提交和数据查询)终端的实现方式有很多种: cli : 通过linux的命令行进行操作,使用shell命令对数据进行提交和查询node sdk就是nodejs: 用nodejs api实现一个客户端,供用户通过浏览器访问java: 通过java实现一个客户端go: 同样也可以

    peer

    存储和同步账本数据

    用户通过客户端工具对数据进行提交操作,数据写入到一个peer节点中peer节点之间的数据同步是Fabric框架做好的,不需要我们实现

    orderer

    排序和分发交易

    交易数据需要先进行打包,然后再写入到区块中 (类似区块链中的矿工的工作)为什么要进行排序? 解决双花问题每发起一笔交易都会被orderer进行排序,通过特别的算法去解决双花问题

    3.3.3 通道Channel(频道)

    通道是有共识服务(ordering)提供的一种通讯机制,将peer和orderer连接在一起,形成一个个具有保密性的通讯链路(虚拟),实现了业务隔离的要求;通道也与账本(ledger)状态(worldstate)紧密相关

    通道的概念可以理解为QQ群,只有在通道中的节点才能实现数据的同步

    重点图!!!!

    consensus Service: orderer节点三条不同颜色的线代表三个不同的通道一个peer节点是可以加入多个通道中一个peer加入到了几个通道,对应生成的区块链就有几条,对应的就可以获得该通道的数据

    3.3.4 交易流程

    简单化的流程:

    要完成一笔交易,这笔交易就必须要有背书策略(在安装链码的时候指定)

    假设某种策略是:

    组织A中的成员必须同意组织B中的成员也必须同意

    Application/SDK : 充当客户端角色

    写数据、查询数据

    客户端发起一个提案(我要做啥)给peer节点,Endorse: 背书

    提案会发送给两个组织A和B中的peer节点

    peer节点会把交易进行预演,会得到执行的结果

    peer节点会把结果发送给客户端, Respond(获取到背书Endorsed)

    客户端会对返回的结果进行判定: 如果模拟交易失败,整个交易流程终止都成功就继续

    客户端把交易提交给排序节点, Broadcast

    排序节点进行交易打包,一般都是打包一定数量的交易再一起打包

    orderer节点会将打包的数据发送给peer,peer节点会将数据写入到区块中, Blocks

    更新世界状态

    打包数据的发送不是实时的有设置文件,在文件配置中

    背书策略:

    要完成一笔交易,这笔交易的完成过程就是背书要完成一笔交易,这笔交易就必须要有背书策略(在安装链码的时候指定)背书策略可以理解为就是在实际数据上区块链之前的测试指导规则

    3.3.5 账本

    3.3.6 MSP

    Membership Service Provider(MSP)是一个提供虚拟成员操作的管理框架的组件

    谁会有MSP:

    每个节点都会有MSP每个用户都有MSP

    MSP可以看做一个账号,其中包含了节点的认证证书

    Tips

    1. ./byfn.sh generate出错 Failed to generate orderer genesis block

    这个错误会导致无法创建创世区块,order节点容器也就无法启动,./byfn.sh up时会报错:

    Error: failed to create deliver client: orderer client failed to connect to orderer.example.com:7050: failed to create new connection: context deadline exceeded

    Processed: 0.010, SQL: 8