Fabric的交易流程
Fabric 节点的主要分类
记账节点、背书节点、排序节点
交易七步曲
Propose
客户端提交交易提案,及调用了链码的请求
Execute
endorse节点运行仿真结果,产生读写集,并签名返回给客户端
Proposal
客户端接收到了endorse节点的运行结果,根据背书策略,如果背书通过,产生proposal给order节点打包区块
Order Trasantion
Order节点根据一定规则将交易打包进区块,此处会应用一定的共识策略
Deliver
排序节点将打包好的区块分发给commiter节点
Validate
Commiter节点收到区块后,对每一个交易进行验证,如果验证通过(会进行背书策略,当前key的状态等验证),就运行读写集,并将区块上链
Notify
客户端收到区块上链的Event,确认了交易成功
Fabric 怎么解决双花的
在第一步双花的情况会运行成功,但是当第一次花费成功的情况下,后面节点再验证交易的读写集的时候,会因为key的状态变化而验证失败,所以双花只会在第一次的交易中成功;
交易流程图
Fabric 的channel
channel的分类
系统channel: 在网络启动的时候系统自动创建的channel
自定义channel: 根据业务逻辑在后面开发的业务channel
创建channel的过程
在创建channel的时候, 会想系统channel 发送一个创建channel的请求, 产生创建channel的交易
不同channel的数据是隔离的,即一个channel会维护同一套账本
在channel上部署智能合约
同一个channel中的智能合约可以互相调用
不同channel的智能合约指定查询但是不能更改账本的内容
Fabric peer
Peer 节点介绍
peer 节点的角色
代表联盟链中每个组织的节点
是区块链网络的基础,是账本和智能合约的载体
红色框为peer节点在网络中的地位
peer节点的功能
- 连接了一个或者多个channel
- 维护了一个或者多个账本
- 提供智能合约的运行环境
- 提供身份认证,加密签名,背书等功能
背书策略的示例
Ledger 的介绍
Ledger包含的内容
leder包含: blockchain(由区块组成的链,代表区块链账本) 、Word state(记录账本的全局状态)
区块存放的信息
区块头存放信息
交易存放的信息
全局数据库
维护账本的当前信息, 代表区块链的全局状态
智能合约的介绍
智能合约的作用
- 定义了不同组织记账的规则
- 生成交易并更改账本的状态
- fabric通过chaincode来实现智能合约
智能合约是怎么更改账本的
chaincode 生命周期
系统chaincode
LSCC: 处理链码打包 install instance等
CSCC: 组件channel 对channel 进行join 配置等操作
QSCC: 提供账本query 等api
ESCC: 对背书节点对提案运行的结果进行签名
VSCC: 验证交易的背书策略, ESCC + VSCC 主要解决了fabric 的共识问题
Gossip协议
- 用来管理peer节点的发现 和channel的成员管理, 不断发现新的peer
- peer节点的账本数据传播
- 新加入的peer,可以通过gossip 进行点对点快速更新数据
peer节点的分类
Leader peer
- 连接 order 节点,并接受新区块
- 将区块信息分发给组织中其他committing peers
- 一个组织中可以有一个或者多个leader peer
- leader peer 的选举规则可以是: static(静态指定), Dynamic(动态选举)
Anchor Peer
- 通过 gossip 协议, 让不同组织之间的 peer 节点互相认识, 帮助不同组织之间的peer节点建立连接
leader peer 节点的配置方法
Orderer 节点
Order节点的性质
- 参与排序的工作,对所有节点提交的交易进行排序成块
- 每个order节点产生块的hash值必须一致
- 要有容错机制,即一个order节点异常后,其他的节点要可以继续执行排序工作(一般会有容错的机制)
- 强一致性,和pow不同,fabric提交的区块即是确定的区块,交易是不能被复写的,所以一致性是必须要求的
- 不允许有背叛的order节点, order是CFT的排序算法;
Order 出块规则
BatchSize:
- MaxMessageCount:
- AbsoluteMaxBytes
- PreferredMaxBytes
BatchTimeout:
- Timeout:
Orer节点怎么创建Channel的
system Channel: 管理其他用户的链, 创建链的时候通过systemchannel创建一个新的channel的 genesis block
Order 节点类型
SOLO
只有一个节点, 只进行简单的打包 hash 和出块,只可以用于测试环境
Kafka
通过Kafka 和 zookeeper进行排序
通过 Kafka的 TTC message 来保证所有的order节点,每次打包的区块包含的交易相同,出块的hash值一样;
Raft
- 基于 Etcd/raft 的library 进行的共识
- 不需要zookeeper等外部依赖,运维简单
- 实现了order之间的通讯层
- 一个channel可以在所有order节点的子集中运行
- 所有节点之间必须使用TLS通讯
与kafka区别是,kafka是基于交易做的共识, raft是对块做的共识
MSP与CA
Fabric ca
功能
注册创建用户实例
将用户证书签名并下载
证书的更新和撤销
fabric ca 是典型的CS结构
fabric server 的参数
fabric ca init 后产生的文件
fabric ca client端的命令参数
fabric ca 支持Identity类型 peer、order、client、 user
生成证书的示例
Identity lifecycle
PKI-X.509
PKI介绍
公钥基础设施(PKI)是一个利用非对称加密算法原理和技术实现并提供安全服务的具有通用性的技术规范和标准。是管理非对称加密算法的密钥和确认信息。整合数字证书、公钥加密技术和CA的系统。其结合了软件、加密技术和组织需要进行非对称加密算法的服务。
公钥基础设施(PKI)是一种遵循既定标准的密钥管理平台,它通过“信息加密”和“数字签名”等密码服务及所必需的密钥和证书管理体系,为实现网络通信保密性、完整性和不可否认性的一套完整、成熟可靠的解决方案。简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心。也是电子商务的关键和基础技术。
MSP介绍
MSP结构
Fabric 应用开发
开发流程
- 部署Fabric网络
- 开发并部署智能合约
- 通过fabric-ca 和fabric-sdk 进行application层的业务逻辑开发
Fabric 网络部署流程
- 安装ordering service
- 安装peer节点 并配置 记账和背书节点
- 创建channel
- 将组织加入到channel
- 安装并实例化chaincode
- 调用链码
开发人员主要关心的步骤
通过fabric进行开发,我们主要需要开发的有两部分:
即上图橘黄色的部分: 1. chaincode开发; 2. Application开发