在每个组织内部跑的几个模块
(1)CA:为组织内的成员(用户和节点)签发证书(一对公私钥以及能标识身份相应的证书),节点与用户使用各自的私钥与证书,作为身份标识参与到网络当中;
(2)节点:fabric中的节点分为Peer,Orderer;
① Orderer节点(Ordering-Service):排序服务节点,接收包含背书签名的交易,对未打包的交易进行排序生成区块;
② Peer节点:
1.根据在交易中的不同角色,可分成背书节点(Endorser)和记账节点(Committer);
1.背书节点(Endorsers peer):背书节点是模拟执行交易的节点;
2.记账节点(Committing peers):记账节点只负责记账,来维护账本和Worldstate状态;
2.根据功能的不同peer可分为:
1.领导节点(Leader Peer):当有新的交易产生的时候,领导节点就会与Orderer排序服务节点通信,从排序服务节点处获取最新的区块,并随机的传播给其他的记账节点(Committer Peer),记账节点获取到之后也会继续的往外散播;
领导节点(Leader Peer)的选举方式有2种:静态指定Static,动态指定Dynatic;
2.锚节点(Anchor Peer):每个组织可以指定Anchor Peer,其他组织的节点就可以将Gossip消息发送到这个Anchor Peer上,进而Anchor Peer将获得整个网络信息,区块广播到本组织内;
Peer在Fabric中承担了维护账本,背书签名,验证交易,执行链码等重要功能。本讲深入Fabric Peer这个模块内部,从主要功能入手,剖析Peer的工作原理和实现方法:
1、peer节点:是账本和智能合约的载体,通过智能合约,账本会以不可篡改的方式记录交易的全过程
2、fabric的交易流程(Hyperledger Fabric Transaction Flow)
背书节点(Endorsers peer):背书节点是模拟执行交易的,当收到交易请求的时候它会去模拟执行这个交易请求,执行结果不管是同意还是拒绝,都会把这个执行结果加密,签名返给Client端;
记账节点(Committing peers):记账节点只负责记账,来维护账本和Worldstate状态;
(1)Application proposes transaction:Client端提出一个交易请求;
(2)Endorsers Execute Proposals:背书节点收到交易请求后,会模拟执行这个交易;
(3)Application receives responses:背书节点会把模拟执行这个交易的结果加密,签名,返回给Client端;
(4)Responses submitted for ordering:Client端收到返回结果以后会把这个,交易模拟执行结果,提交给Orderer节点;
(5)Orderer delivers to committing peers:Orderer节点收到提交上来的,交易模拟执行结果,会把它打包到block里,然会把它发送给记账节点;
(6)Committing peers validate transactions:记账节点收到请求之后,就会做一系列validate工作,验证工作结束之后,就会把这个交易transaction,记到账本里,更新区块链DB,更新Worldstate数据;
(7)Committing peers notify application:记账节点committing peers,通知Client端交易成功还是失败;
3、Endorsers Policy背书策略背书策略语法(Endorsement Policy Syntax):背书策略是在chaincode实例化的时候指定
Endorsement Policy Syntax
============================
$ peer chaincode instantiate
# channel名
-C mychannel
# chaincode名
-n mycc
# 版本
-v 1.0
# 初始化数据的内容
-c '{"": ["init","a", "100", "b","200"]}'
# 指定条件,这里表达式的意思-这个交易只要是Org1的member签名,签字认可了,我们就认为这个交易合法
-p "AND(Org1MSP.member)"
============================
-p 后面跟的表达式举例,AND-与,OR-或:
AND('Org1.member', 'Org2.member', 'Org3.member')
OR('Org1.member', 'Org2.member')
OR('Org1.member', AND('Org2.member', 'Org3.member'))
4、Fabric账本和状态数据数据库(Fabric Ledger and State DB)
Fabric账本:有序的,不可修改的历史交易记录;
Fabric账本由两部分组成(Fabric Ledger):
(1)区块部分(Blockchain)
通道的配置信息(Channel configurations);
历史交易记录打包成的Block,串成的串;
每个块的组成:
① Block header区块头由3部分组成:
区块号,block number;
CH2,当前区块的hash码,(通过对data里的所有的交易transaction数据进行加密处理,计算出一个hash码保存在CH2里);
PH1,上一个块的hash码;
② Block data:交易数据;
Header-区块头:存着chaincode的名字,version等信息;
Signature-签名:client端的签名,谁发的请求,谁签的名;
Proposal:client端发送的一些输入参数,背书节点用来模拟执行交易使用;
Response: 智能合约执行的结果(执行前的数据,执行后的数据都会存在Response里);
Endorsements:每个背书节点返回的结果,是个list(如果你在背书策略里指定3个公司,这个里面就存着3个Endorsements);
③ Block Metadata:这个区块写入的时间,写入的人以及签名;
(2)Worldstate:维护账本的当前状态,它是key-value的形式,方便Application快速查询;