hyperledgerfabric是什么(Hyperledger Fabric介绍1)
Fabric1.0架构简介
Fabric架构的核心包括三部分:
Identity - 身份管理(让允许的人进入) Smart Contact - 智能合约(逻辑与数据分离) Ledger及Transactions - 账本和交易(插拔式共识协议)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属于系统模块, cryptogen, configtxgen, configtxlator属于工具模块 。
工具模块负责证书文件 、区块链创始块 、通道创始块等相关文件和证书的生成工作 ,但是工具模块不参与系统的运行 。
peer模块和 orderer 模块作为系统模块是Fabric的核心模块 ,启动之后会以守护进程的方式在系统后台长期运行 。 1 、cryptogencryptogen模块主要用来生成组织结构和账号相关的文件
比如有多少个组织有多少个节点 ,需要多少个账号等crypto-config.yaml 配置各个组织内的节点信息 ,用来生成组织各个节点的证书 。
上述模板文件定义了一个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 └── tlspeer节点
configtxgen
生成 orderer 节点的初始化文件
生成 channel 的初始化文件 configtxgen模块配置文件configtxgen 模块的配置文件包含Fabric系统初始块 、Channel初始块文件等信息。configtxgen 模块的配置文件样例如下所示 ,以下部分定义了整个系统的配置信息:
configtxgen 的使用
创建 orderer 的初始块 bb@ubuntu:TestNetWork$ configtxgen -profile ItcastOrgOrdererGenesis -outputBlock ./channel-artifacts/genesis.block # ItcastOrgOrdererGenesis: 要和配置文件中的配置项对应, 可以由数字和字母构成. # orderer初始块文件为genesis.block ,生成在channel-artifacts目录中 创建 channel 的初始块 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.txorderer
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.crtpeer
peer模块是Fabric中最重要的模块 ,也是在Fabric系统使用最多的模块 。peer模块在Fabric中被称为主节点模块 ,主要负责存储区块链数据 、运行维护链码 、提供对外服务接口等作用。
peer channel子命令
create - 创建通道 join - 将peer加入到通道中 list - 列出peer加入的通道 update - 更新peer chaincode 子命令
install instantiate invoke list package query upgrade1 、在一个分布式账本系统中 ,当客户端向链码发起交易时 ,链码需要被多个Peer节点背书 ,以确保交易被正确处理和验证 。当Peer节点背书完成后 ,背书结果会被返回给客户端 。然而 ,这些背书结果并不能直接添加到区块链中 ,因为它们还需要经过共识机制的验证和排序,以确保交易的正确性和一致性 。
2 、Orderer节点是负责维护和管理区块链中交易顺序和一致性的节点 。当客户端收到所有Peer节点的背书结果后 ,它会将这些结果发送给Orderer节点 。Orderer节点会将这些交易按照共识机制的规则进行排序 ,并打包成一个区块 。然后,Orderer节点会将这个区块广播给所有网络中的Peer节点 ,以便它们可以将其添加到它们各自的副本中 ,从而达成共识 。 3 、当多个Peer节点背书失败时 ,客户端收到的背书结果可能是不一致的 ,此时客户端需要根据应用程序的具体逻辑来判断如何处理 ,可以1 、重新发起交易请求 2 、对背书结果进行统计和比较3、引入额外的认证和安全机制
每个Peer节点都维护着完整的账本副本
排序服务是由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节点收到区块后 ,将对区块进行验证,包括交易的签名 、背书结果、交易顺序等 ,如果区块验证通过 ,则将其提交到自己的账本中 。
客户端可以查询账本状态或者通过订阅机制监听账本状态变化,以获得交易结果 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!