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 。区别于orderLedger ,peerLedger 本地有一个标记,用于区分合法、非法事务。
1.3 节点-node
三种节点:
- client
- 提交事务到背书人
- 广播事务到orderer
- peer
- 特定的是背书人角色
- 提交事务
- 管理世界观
- 保存一份完整的账本
- orderer
- 通信,分发消息
- 原子操作,广播
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.基本的事务背书流程
- 请求事务背书
- 模拟事务执行,签名
- 收集背书信息,匹配背书策略
- 匹配不上,稍后重试等等
- 广播事务到order service
- 分发事务到peer
- 确认事务正好执行完seqno - 1
- 背书策略,验证背书签名信息
- 匹配版本号,防并发
- 提交事务,写入世界观