Fabric架构

Fabric的交易流程

Fabric 节点的主要分类

记账节点、背书节点、排序节点

1561105355873

交易七步曲

  1. Propose

    客户端提交交易提案,及调用了链码的请求

    1561105411590

  2. Execute

    endorse节点运行仿真结果,产生读写集,并签名返回给客户端

    1561105485250

  3. Proposal

    客户端接收到了endorse节点的运行结果,根据背书策略,如果背书通过,产生proposal给order节点打包区块

    1561105546228

  4. Order Trasantion

    Order节点根据一定规则将交易打包进区块,此处会应用一定的共识策略

    1561105622229

  5. Deliver

    排序节点将打包好的区块分发给commiter节点

    1561105913857

  6. Validate

    Commiter节点收到区块后,对每一个交易进行验证,如果验证通过(会进行背书策略,当前key的状态等验证),就运行读写集,并将区块上链

    1561105704107

  7. Notify

    客户端收到区块上链的Event,确认了交易成功

    1561105980867

Fabric 怎么解决双花的

在第一步双花的情况会运行成功,但是当第一次花费成功的情况下,后面节点再验证交易的读写集的时候,会因为key的状态变化而验证失败,所以双花只会在第一次的交易中成功;

交易流程图

1561195812678

Fabric 的channel

channel的分类

系统channel: 在网络启动的时候系统自动创建的channel

自定义channel: 根据业务逻辑在后面开发的业务channel

创建channel的过程

在创建channel的时候, 会想系统channel 发送一个创建channel的请求, 产生创建channel的交易

不同channel的数据是隔离的,即一个channel会维护同一套账本

1561107312693

在channel上部署智能合约

同一个channel中的智能合约可以互相调用

不同channel的智能合约指定查询但是不能更改账本的内容

1561107378873

Fabric peer

Peer 节点介绍

peer 节点的角色

  • 代表联盟链中每个组织的节点

  • 是区块链网络的基础,是账本和智能合约的载体

    红色框为peer节点在网络中的地位

    1561195716805

peer节点的功能

  • 连接了一个或者多个channel
  • 维护了一个或者多个账本
  • 提供智能合约的运行环境
  • 提供身份认证,加密签名,背书等功能

背书策略的示例

1561196085380

Ledger 的介绍

Ledger包含的内容

leder包含: blockchain(由区块组成的链,代表区块链账本) 、Word state(记录账本的全局状态)

1561196607971

  • 1561196206419
区块存放的信息

1561196238048

区块头存放信息

1561196327581

交易存放的信息

1561196360277

全局数据库

维护账本的当前信息, 代表区块链的全局状态

1561196469342

智能合约的介绍

智能合约的作用
  • 定义了不同组织记账的规则
  • 生成交易并更改账本的状态
  • fabric通过chaincode来实现智能合约
智能合约是怎么更改账本的

1561196793522

chaincode 生命周期

1561197126768

系统chaincode
  • LSCC: 处理链码打包 install instance等

  • CSCC: 组件channel 对channel 进行join 配置等操作

  • QSCC: 提供账本query 等api

  • ESCC: 对背书节点对提案运行的结果进行签名

  • VSCC: 验证交易的背书策略, ESCC + VSCC 主要解决了fabric 的共识问题

    1561195958902

1561197397462

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 节点的配置方法

1561198171339

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

1561201580208

Order 节点类型

SOLO

只有一个节点, 只进行简单的打包 hash 和出块,只可以用于测试环境

1561201653779

Kafka

通过Kafka 和 zookeeper进行排序

通过 Kafka的 TTC message 来保证所有的order节点,每次打包的区块包含的交易相同,出块的hash值一样;

1561201703246

Raft
  • 基于 Etcd/raft 的library 进行的共识
  • 不需要zookeeper等外部依赖,运维简单
  • 实现了order之间的通讯层
  • 一个channel可以在所有order节点的子集中运行
  • 所有节点之间必须使用TLS通讯

1561202434437

与kafka区别是,kafka是基于交易做的共识, raft是对块做的共识

1561202480127

MSP与CA

Fabric ca

功能
  • 注册创建用户实例

  • 将用户证书签名并下载

  • 证书的更新和撤销

  • fabric ca 是典型的CS结构

1561259318412

fabric server 的参数

1561259366926

fabric ca init 后产生的文件

1561259667402

fabric ca client端的命令参数

fabric ca 支持Identity类型 peer、order、client、 user

1561259784532

生成证书的示例

1561260655156

Identity lifecycle

1561260437018

PKI-X.509

PKI介绍

公钥基础设施(PKI)是一个利用非对称加密算法原理和技术实现并提供安全服务的具有通用性的技术规范和标准。是管理非对称加密算法的密钥和确认信息。整合数字证书、公钥加密技术和CA的系统。其结合了软件、加密技术和组织需要进行非对称加密算法的服务。

公钥基础设施(PKI)是一种遵循既定标准的密钥管理平台,它通过“信息加密”和“数字签名”等密码服务及所必需的密钥和证书管理体系,为实现网络通信保密性、完整性和不可否认性的一套完整、成熟可靠的解决方案。简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心。也是电子商务的关键和基础技术。

MSP介绍

1561262514253

MSP结构

1561262706614

Fabric 应用开发

开发流程

  1. 部署Fabric网络
  2. 开发并部署智能合约
  3. 通过fabric-ca 和fabric-sdk 进行application层的业务逻辑开发

1561108008604

Fabric 网络部署流程

  1. 安装ordering service
  2. 安装peer节点 并配置 记账和背书节点
  3. 创建channel
  4. 将组织加入到channel
  5. 安装并实例化chaincode
  6. 调用链码

开发人员主要关心的步骤

通过fabric进行开发,我们主要需要开发的有两部分:

即上图橘黄色的部分: 1. chaincode开发; 2. Application开发

刘小恺(Kyle) wechat
如有疑问可联系博主