Fabric1.0架构简介

Fabric架构的核心包括三部分:

APIs,Events,SDKs

Fabric开发主要包括客户端和服务器端应用程序的编写

服务端
Fabric提供API方便应用开发,对服务端的ChainCode,目前支持用Go、Java或者Node.js开发。

客户端
对客户端应用,Fabric目前提供Node.js和Java SDK, Go SDK。未来计划提供Python,Fabric还提供RESTAPI。

Fabric 业务网络

Peer节点:

Peer节点可以充当多种角色,如背书者endorser, 提交者committer。一个区块链网络中会有多个Peer节点。

Orderer节点:

对交易进行排序,批量打包,生成区块,发给Peer节点。

Channel:

交易的两个节点必须处于一个频道里

Fabric核心模块

五个模块中peer和orderer属于系统模块, cryptogen, configtxgen, configtxlator属于工具模块。

工具模块负责证书文件、区块链创始块、通道创始块等相关文件和证书的生成工作,但是工具模块不参与系统的运行。
peer模块和 orderer 模块作为系统模块是Fabric的核心模块,启动之后会以守护进程的方式在系统后台长期运行。

1、cryptogen

cryptogen模块主要用来生成组织结构和账号相关的文件
比如有多少个组织有多少个节点,需要多少个账号等

crypto-config.yaml 配置各个组织内的节点信息,用来生成组织各个节点的证书。
Hyperledger Fabric介绍1
上述模板文件定义了一个orderer节点,这个orderer节点的名字为orderer,orderer节点的根域名为ordererorg.com,主机名为orderer。模板文件同时定义了两个组织,两个组织的名字分别为org1 和 org2,其中组织 org1 包含了2个节点和2个用户,组织 org2 包含2个点和2个用户。

Fabric证书文件结构
orderer节点

# 查看TestNetWork目录
cd /root/fabric/fabric-samples/basic-network/crypto-config
bb@ubuntu:~/TestNetWork$ tree -L 2
.
├── crypto-config
│   ├── ordererOrganizations	# orderer节点相关的证书文件
│   └── peerOrganizations		# 组织相关的证书文件(组织的节点数, 用户数等证书文件)
└── crypto-config.yaml			# 配置文件
# 查看排序节点的证书目录, 进入到 ordererOrganizations 子目录中
bb@ubuntu:ordererOrganizations$ tree -L 4
.
└── bb.com	# 根域名为bb.com的orderer节点的相关证书文件
    ├── ca	# CA服务器的签名文件
    │   ├── 94db924d3be00c5adda6ac3c3cb7a5f8b80868681c3dd04b58c2920cdf56fdc7_sk
    │   └── ca.bb.com-cert.pem
    ├── msp
    │   ├── admincerts	# orderer管理员的证书
    │   │   └── Admin@bb.com-cert.pem
    │   ├── cacerts		# orderer根域名服务器的签名证书
    │   │   └── ca.bb.com-cert.pem
    │   └── tlscacerts	# tls连接用的身份证书
    │       └── tlsca.bb.com-cert.pem
    ├── orderers	# orderer节点需要的相关的证书文件
    │   └── ubuntu.bb.com
    │       ├── msp	# orderer节点相关证书
    │       └── tls	# orderer节点和其他节点连接用的身份证书
    ├── tlsca
    │   ├── de45aeb112ee820197f7d4d475f2edbeb1705d53a690f3537dd794b66de1d6ba_sk
    │   └── tlsca.bb.com-cert.pem
    └── users	# orderer节点用户相关的证书
        └── Admin@bb.com
            ├── msp
            └── tls

peer节点

configtxgen

生成 orderer 节点的初始化文件
生成 channel 的初始化文件

configtxgen模块配置文件

configtxgen 模块的配置文件包含Fabric系统初始块、Channel初始块文件等信息。configtxgen 模块的配置文件样例如下所示,以下部分定义了整个系统的配置信息:

configtxgen 的使用

bb@ubuntu:TestNetWork$ configtxgen -profile ItcastOrgOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
# ItcastOrgOrdererGenesis: 要和配置文件中的配置项对应, 可以由数字和字母构成.
# orderer初始块文件为genesis.block,生成在channel-artifacts目录中
bb@ubuntu:TestNetWork$ configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
# TwoOrgsChannel: 要和配置文件中的配置项对应
# channel.tx 为生成的频道文件, 在channel-artifacts目录中
# 创建的频道名称为: mychannel
# 更新第一个组织 OrgGoMSP 的peer节点
bb@ubuntu:TestNetWork$ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/GoMSPanchors.tx -channelID mychannel -asOrg OrgGoMSP
# TwoOrgsChannel: 要和配置文件中的配置项对应
# OrgGoMSP组织使用的频道为 mychannel 生成的配置信息文件名为 GoMSPanchors.tx
#==============================================================================
# 更新第2个组织 OrgJavaMSP 的peer节点
bb@ubuntu:TestNetWork$ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/JavaMSPanchors.tx -channelID mychannel -asOrg OrgJavaMSP
# TwoOrgsChannel: 要和配置文件中的配置项对应
# OrgJavaMSP组织使用的频道为 mychannel 生成的配置信息文件名为 JavaMSPanchors.tx

orderer

orderer 模块负责对交易进行排序, 并将排序好的交易打包成区块。

orderer模块的配置信息

# orderer节点运行需要配置一些环境变量
ORDERER_GENERAL_LOGLEVEL	# 日志级别  越高写的日志越少  越低写的日志越多
	- `critical | error | warning | notice | info | debug
ORDERER_GENERAL_LISTENADDRESS	# orderer服务器监听的地址
ORDERER_GENERAL_LISTENPORT		# orderer服务器监听的端口
ORDERER_GENERAL_GENESTSMETHOD	# 初始化块(Genesis)的来源方式, 一般赋值为 file 即可
ORDERER_GENERAL_GENESISFILE		# 存储初始块文件的路径
ORDERER_GENERAL_LOCALMSPID		# orderer节点的编号,在configtxgen模块配置文件中指定的
	- `configtx.yaml配置文件中排序节点的组织的ID
ORDERER_GENERAL_LOCALMSPDIR		# orderer节点msp文件路径
ORDERER_GENERAL_LEDGERTYPE		# 账本类型, ram, json, file
	- `ram: 账本数据存储在内存, 一般用于测试环境
	- `json/file: 账本数据保存在文件中, 生成环境中推荐使用file 
ORDERER_GENERAL_BATCHTIMEOUT	# 批处理超时, 创建批处理之前的等待时间
	- `每隔一个BATCHTIMEOUT时长, 就会生成一个新的区块
ORDERER_GENERAL_MAXMESSAGECOUNT	# 最大消息计数, 批处理的最大消息数量
	- `只要一个区块的消息达到MAXMESSAGECOUNT指定的数量, 就会生成一个新的区块
ORDERER_GENERAL_TLS_ENABLED		# 是否启用TLS, true/false
ORDERER_GENERAL_TLS_PRIVATEKEY	# orderer节点的私钥文件, 按照下边的示例目录找
	- `crypto-config/ordererOrganizations/xx.com/orderers/orderer.xx.com/tls/server.key
ORDERER_GENERAL_TLS_CERTIFICATE	# 证书文件
	- `crypto-config/ordererOrganizations/xx.com/orderers/orderer.xx.com/tls/server.crt
ORDERER—GENERAL_TLS_ROOTCAS		# 根证书文件
	- `crypto-config/ordererOrganizations/xx.com/orderers/orderer.xx.com/tls/ca.crt

peer

peer模块是Fabric中最重要的模块,也是在Fabric系统使用最多的模块。peer模块在Fabric中被称为主节点模块,主要负责存储区块链数据、运行维护链码、提供对外服务接口等作用。

peer channel子命令

peer chaincode 子命令

Hyperledger Fabric介绍1

Hyperledger Fabric介绍1

1、在一个分布式账本系统中,当客户端向链码发起交易时,链码需要被多个Peer节点背书,以确保交易被正确处理和验证。当Peer节点背书完成后,背书结果会被返回给客户端。然而,这些背书结果并不能直接添加到区块链中,因为它们还需要经过共识机制的验证和排序,以确保交易的正确性和一致性。

2、Orderer节点是负责维护和管理区块链中交易顺序和一致性的节点。当客户端收到所有Peer节点的背书结果后,它会将这些结果发送给Orderer节点。Orderer节点会将这些交易按照共识机制的规则进行排序,并打包成一个区块。然后,Orderer节点会将这个区块广播给所有网络中的Peer节点,以便它们可以将其添加到它们各自的副本中,从而达成共识。
3、当多个Peer节点背书失败时,客户端收到的背书结果可能是不一致的,此时客户端需要根据应用程序的具体逻辑来判断如何处理,可以1、重新发起交易请求 2、对背书结果进行统计和比较3、引入额外的认证和安全机制

每个Peer节点都维护着完整的账本副本

Hyperledger Fabric介绍1

排序服务是由Orderer节点提供。Orderer节点是一个独立的组件,用于维护整个区块链网络中的交易顺序,并将已排序的交易打包成区块广播给Peer节点进行验证和提交。

排序服务类似于发布/订阅消息系统中的主题topic,应用程序在指定Peer节点的子集中架设通道。这些peer组成提交到该通道交易的相关者集合,而且只有这些peer可以接收包含相关交易的区块,与其他交易完全隔离,实现数据隔离和保密。

如上图所示,peer 1,2和N订阅红色通道,并共同维护红色账本; peer 1和N订阅蓝色通道并维护蓝色账本;类似地,peer 2和peer N在黑色通道上并维护黑色账本。

在这个例子中,peer N在订阅了所有通道,我们看到每个通道都有一个相关的账本。一般来说,我们称不涉及所有peer的账本为子账本,另一种是系统账本,即全账本。

Fabric 1.0交易流程

在Hyperledger Fabric 1.0中,交易流程可以简要概括如下:

应用程序通过调用链码来发起交易,链码定义了交易的逻辑处理和访问权限。

交易将被发送给一个或多个Peer节点进行背书,背书节点根据链码中定义的背书策略来决定是否对交易进行背书,背书策略可以基于身份、属性等因素来定义。

如果交易被足够数量的背书节点认可,则交易将被发送到Orderer节点进行排序,Orderer节点根据共识算法对交易进行排序,并将它们打包成区块,然后广播给整个网络中的Peer节点。

Peer节点收到区块后,将对区块进行验证,包括交易的签名、背书结果、交易顺序等,如果区块验证通过,则将其提交到自己的账本中。

客户端可以查询账本状态或者通过订阅机制监听账本状态变化,以获得交易结果。

发表回复