1.fabric architecture - 系统架构

1.系统架构

该分布式区块链系统包含很多节点,他们互相通信,构成一个整体。

chaincode 是区块链系统运行的程序,它维护世界观状态、账本数据,并且执之行事务;chaincode 是事务的核心元素,因为事物过程就是chaincode 上的一系统操作。

事务需要被背书,并且只有被背书的事务才能提交,进而影响世界观。

程序中有一个或多个特殊的chaincode ,他们被用来管理方法合参数。这些链码统称为系统链码。

1.1事物-transaction

可能的两种类型事务:

  • ”部署事务“:创建新的链码,并且把一段程序作为参数。当一个部署事务之行成功的时候,链码就被安装到区块链上了
  • ”调用事务“:在之前部署链码的环境中,执行一个操作。一个事务调用对应一段链码合它的一个方法。当调用成功的时侯,链码会执行指定方法,修改对应的世界观,然后返回一个输出结果。

正如后面描述的,部署事务是调用事务的一个特殊场景。部署事务创建新的链码,等价于在系统链码上调用一个事务。

1.2区块链数据结构

1.2.1 世界观-state

最新的区块链世界观,被建模成一个版本话的键值对数据库。其中key是名字,value是任意的字符。由chaincode 完成put、get操作,持久化保存世界观并记录操作日志。

注意:版本话的键值对数据库适配任何状态模型,不管是kvs、rdms亦或者其他解决方案。

1.2.2账本-ledger

账本记录可验证的世界观变更日志。

账本是由order service 构造的一个有序哈希链表块。其强制包含所有区块,且每个区块包含一组全局有序的事务。

账本也是一个备选的orderer 。区别于orderLedgerpeerLedger 本地有一个标记,用于区分合法、非法事务。

1.3 节点-node

三种节点:

  1. client
    1. 提交事务到背书人
    2. 广播事务到orderer
  2. peer
    1. 特定的是背书人角色
    2. 提交事务
    3. 管理世界观
    4. 保存一份完整的账本
  3. orderer
    1. 通信,分发消息
    2. 原子操作,广播

1.3.1 client

client 响应终端用户行为。它必须连一个peer ,借此与区块链通信。

client 可以连接任意可选的peer节点,创建、调用事务。

1.3.2 peer

除了普通职责外,peer是一个可选的背书人节点。

每个chaincode 可以指定一个背书策略(包含一系列背书节点)。背书策略定义了合法交易背书的充分必要条件。在部署事务中,背书策略是系统chaincode

1.3.3 orderer

fabric通讯中,订单分发的职责人。可以有多种实现,从集中服务到分布式协议等等。

  • 分区:支持多channel,保证不通channel消息无干扰
  • API:peer连接到order service的channel,需要实现两个基本方法
    • broadcast(blob) 客户端调用peer,广播消息到orderer
    • deliver(seqno, prevhash, blob) orderer调用peer,创建新的区块

ps:

  • 一致性职责
    • 每个广播消息,只被分发一次
    • 组成有序消息链
  • 分发职责
    • 保证每一个网络连接完好的peer,接收到事务提交消息

2.基本的事务背书流程

  1. 请求事务背书
    1. 模拟事务执行,签名
  2. 收集背书信息,匹配背书策略
    1. 匹配不上,稍后重试等等
  3. 广播事务到order service
  4. 分发事务到peer
    1. 确认事务正好执行完seqno - 1
    2. 背书策略,验证背书签名信息
    3. 匹配版本号,防并发
    4. 提交事务,写入世界观