Fabric
Fabric是一个支持智能合约的分布式账本系统。
Fabric是私有的,只有通过MSP认证的成员才可以进入到系统,参与合约的缔造与执行。
Fabric是插件式设计,账本数据有多种存放方式,共识机制可以切换,支持不同类型的MSP。
Fabric开发了channel功能,一个channel对应一个账本,只有加入channel的成员可见,可以防止竞争对手知晓交易的细节。
账本由两部分组成:全局状态(word state)和交易日志(transaction log)。 全局状态中记录的是当前状态,交易日志中记录了所有的交易记录,全局状态是这些交易记录的执行结果。
智能合约(Smart Contracts)用chaincode
编写,由区块链外部的应用调用执行,chaincode通常是用来更新账本的。
概念
Assets: 交易的资产 ChainCode: 描述交易逻辑的代码 Ledger Features: 账本功能 Privacy through Channels: channel的私密性,可以对全网开发,也可以只对部分成员开放 包含交易逻辑的ChainCode可以只部署在特定用户端,实现部分公开的效果 还可以在ChainCode中对数据进行加密 Security & Membership Services: 参与交易的用户都经过认证的可信用户 Consensus: 交易从发起到被提交到账本的过程中的检验
四种服务节点
背书节点(Endorser)
确认节点(Committer)
排序节点(Orderer)
证书节点(CA)
关于Peers
是整个网络的基础,账本和智能合约的载体。
创建时无账本和链码。
账本与链码
- 智能合约:chaincode,可以访问账本的代码
- peer持有账本和链码的实例(一对多)
- 允许一个账本没有链码:意味着无法访问和更改账本
- 不管用户是否已经安装了自己的链码,每一个peer都有一些系统链码(据我所知,channel的建立以及lead节点的确定就是通过系统链码来完成的)
- 链码数量与账本数量也没有必然关系
- 由于一个Peer可能持有多个账本和多个链码,超级账本中通道(channel)就显得尤为重要了。
Application与Peers
- Application与Peer的交互主要包括账本查询与账本更新,账本查询只需要简单的三次会话;而账本更新需要额外的两次会话。
orderer用来确保所有的Peer持有的账本同步更新。在上图中,查询账本的步骤可以做如下的简单描述:
(上图的前三点)
- application连接到peer。
- application生成提案,并将提案提交给peer。
- peer根据提案调用相应的链码执行。
- 链码根据提案查询对应的超级账本。
- 向application返回提案应答。
至此,账本查询的完成。更新账本还需要接下来完成下面的步骤:
(下面两点)
- application根据查询的返回结果生成一个交易并发送给排序服务模块(Orderer)。
- orderer将交易发给网络内的所有节点(peers) :因为账本更新要与其他peer达成共识。
- peer根据交易调用相关的链码完成账本更新(此处图中可能产生误导,P1不可以直接调用L1,应该先调用S1,再通过S1调用L1)。
- 账本更新完成后产生事件通知application更新完成。
Peers与通道(Channel)
基本上,一个链由1个通道+ 1个账本+ N个成员组成。非链的成员无法访问该链上的交易。链的成员可以由应用程序动态指定。
类似与发布——订阅模式消息传递方式
通道为网络中的所有模块提供了私有的沟通与交易渠道。
这些模块包括peer节点、oderder节点、application。
加入通道后,这些模块可以共享或管理通道内的所有账本。
一个节点可以加入到多个通道中(即,拥有多个账本),
每个通道的账本是隔离的。
通道是一个逻辑结构,它由物理存在的各种节点组成。
peers提供了访问通道或者管理通道的接口(个人觉得,通道就是一个区块链,一个区块链有一个账本,一个账本可能有一个或者多个链码)。
Peers与组织
一个区块链网络由多个组织组成
未完待续