Hyperledger Fabric
2023-03-02 20:18:28 0 举报
AI智能生成
区块链官方文档思维导图
作者其他创作
大纲/内容
私有数据
简介
定义组织特定节点进行背书、提交或查询数据的数据集合
允许通道内的指定的某一个组织中的部分成员可以对私有数据进行操作,而其他没有权限的节点只能知道有这么一笔交易发生而不能了解交易的细节。
场景
当所有的数据都需要在通道内的成员之间保密的时候,使用通道比较合适。
当交易要在所有组织之间传播,并且要求只有通道内的部分组织成员可以查看或操作交易内的某一部分数据时,并且部分数据需要对排序节点进行保密时。
属性
name:集合名称
policy:定义了允许持久化数据的组织节点
requiredPeerCount:分发私有数据要求的对等节点数量,也作为合约背书的条件
maxPeerCount:对于数据冗余的目的,当前要向其分发数据的其他节点的数量。当私有数据拉取请求发过来,如果背书节点挂掉,其他的节点在提交的时候还可用。
blockToLive:对于价格或者个人信息等敏感信息,这个参数代表了这些数据应该在私有数据集合中存在时间。数据将会存在于私有数据库指定的区块数量中,在这之后数据就会被清洗,从网络中淘汰。为了保持私有数据一直存在的方法是永不清洗私有数据,设置 属性blockToLive的值为0。
memberOnlyRead:值为true代表了节点自动强制只有属于集合成员的组织的客户端被允许访问读取私有数据。
memberOnlyWrite:true代表节点自定强制只有属于集合成员的组织客户端允许写私有数据。
endorsementPolicy:定义了需要满足的背书策略来写私有数据集。集合级的背书策略会覆盖合约级的背书策略
网络
简介
区块链网络是一个为应用程序提供账本及智能合约服务的技术基础设施
组成
1、应用程序
2、Peer 节点
账本
链码
3、排序节点
4、通道
5、组织
6、联盟
7、证书颁发机构
排序服务
简介
用于排序交易和打包区块
维护创建通道的组织列表,简称联盟。只有排序管理员有权限维护
管理通道的访问控制,权限定义在排序通道配置中
排序交易流程
1、提案
客户端应用程序将交易提案发送给组织节点,节点生成账本更新提案并背书结果,将结果发给应用程序
2、打包
应用程序将背书后的交易提交给排序节点,排序节点创建交易区块,将提交的交易按照定义好的顺序进行排序,再打包至区块
3、验证提交
排序节点将区块发给连接的 Peer 节点,由连接的 Peer 节点通过 gossip 协议分发给其他节点,每个节点再验证区块,保证每个节点上的账本更新一致
实现
Raft:Crash Fault Tolerant(CFT)排序服务,遵循“leader and follow” 模型,leader的决定会被follow复制
leader是在通道中的排序节点之间动态选举的,leader节点将消息复制到follow节点,系统可容忍部分节点丢失,这被称为“故障容错”,三个节点可丢失一个,五个节点可丢失两个。
概念
1、日志记录(Log entry): Raft 排序服务中的主要工作单元,该项的完整序列称为“日志”。如果大多数成员同意日志及其顺序,则我们认为日志记录是一致的,然后将日志复制到不同排序节点上。
2、共识者集合(Consenter set):主动参与给定通道的共识机制并接收该通道的日志记录的排序节点。这可以是所有可用的节点(在单个集群中或在多个集群中为系统通道提供服务),也可以是这些节点的一个子集。
3、有限状态机(Finite-State Machine,FSM):Raft 中的每个排序节点都有一个 FSM,它们共同用于确保各个排序节点中的日志顺序是确定(以相同的顺序编写)。
4、法定人数(Quorum):描述需要确认提案的最小同意人数。对于每个共识者集合,可以是大多数节点。在具有五个节点的集群中,必须有三个节点可用,才能有一个法定人数。如果节点的法定人数因任何原因不可用,则排序服务集群对于通道上的读和写操作都不可用,并且不能提交任何新日志。
5、领导者(Leader):通道的共识者集合都选择一个节点作为领导者,领导者负责接收新的日志条目,将它们复制到跟随者的排序节点。
6、跟随者(Follower):跟随者从领导者那里接收日志并复制它们,确保日志保持一致。我们将在关于领导者选举的部分中看到,跟随者也会收到来自领导者的“心跳”消息。如果领导者在一段可配置的时间内停止发送这些消息,跟随者将发起一次领导者选举,它们中的一个将当选为新的领导者。
策略
简介
策略描述了事物和事物之间的一组规则,用来定义如何做出决策和实现特定结果
类型
系统通道配置
网络中至少有一个排序服务的系统通道,该通道包含排序成员和组织成员
配置内容有排序服务使用的共识、创建区块和创建通道的成员和规则
应用通道配置
应用通道配置定义通道内部的通信机制
具有添加、删除成员和批准提交链码的组织列表
应用通道的初始参数来自于系统通道
权限控制列表ACL
资源访问控制列表
对通道中智能合约和数据访问的权限控制
实现方式
签名策略
通过检查请求中的签名来识别特定的用户
关键字有:AND、OR和NOutOf
隐元策略
通过聚合表示签名来定义访问控制规则
MAJORITY Admins
默认访问规则: 超过半数的组织管理员签名即可访问
ANY Readers
任意可读节点的签名即可访问
ANY Writers
任意可写节点的签名即可访问
背书策略
执行链码并为执行结果进行签名的节点列表
在交易提交验证时通过背书策略的交易才能被认为有效
语法
策略主体可以描述为 `'MSP.ROLE'`, `MSP` 代表了 MSP ID, `ROLE` 是以下4个其中之一:`member`, `admin`, `client`, and `peer`。
EXPR(E[, E...])。`EXPR` 可以是 `AND`, `OR`, 或者 `OutOf`, 并且 `E` 是一个以上语法的主体或者另外一个 `EXPR`
例子
1、 `AND('Org1.member', 'Org2.member', 'Org3.member')` 要求3个组织的都至少一个成员进行签名。
2、`OR('Org1.member', 'Org2.member')` 要求组织1或者组织2的任一成员进行签名。
3、`OR('Org1.member', AND('Org2.member', 'Org3.member'))` 要求组织1的任一成员签名,或者组织2和组织3的任一成员,分别进行签名。
4、 `OutOf(1, 'Org1.member', 'Org2.member')`, 等价于``OR(‘Org1.member’, ‘Org2.member’)``。
5、 类似的, `OutOf(2, 'Org1.member', 'Org2.member')` 等价于 `AND('Org1.member', 'Org2.member')`, `OutOf(2, 'Org1.member', 'Org2.member', 'Org3.member')` 等价于 `OR(AND('Org1.member', 'Org2.member'), AND('Org1.member', 'Org3.member'), AND('Org2.member', 'Org3.member'))`.
背书策略定义在链码中,链码定义在通道成员批准后提交到通道
私有数据集合策略,可以在私有数据集合层面指定一个背书策略,从而限制有哪些组织可以操作私有数据集合
作用域
链码级别
集合级别
键级别
账本
简介
状态
账本中的当前值,又名世界状态
有序交易
组成状态的有序交易,包括新增和删减,交易内容不可篡改
结构
世界状态
世界状态上一个数据库,存储了一组账本状态的当前值。默认情况下,世界状态上以键值对的方式表示的
默认的数据库为:LevelDB
区块链
区块链表示交易日志,记录着世界状态的所有改变过程,数据一旦写入区块链,就无法改变
不可篡改的原理
每个区块的头部都包含区块交易的一个哈希和前一个区块头的哈希。账本上所有的交易都被按序排列,并以密码方式连接在一起。如果某个保存账本的节点被**篡改**了,可根据哈希值进行校验。
区块头组成
1、区块编号:编号从0(初始区块)开始,每在区块链上增加一个新区块,编号的数字都会加1
2、当前区块的哈希值:当前区块中包含的所有交易的哈希值
3、前一个区块头的哈希值:区块链前一个区块头的哈希值
区块体组成
1、区块数据:这部分包含了一个有序的交易列表。区块数据是在排序服务创建区块时被写入的。
2、区块元数据:这部分包含了区块被写入的时间,还有区块写入者的证书、公钥以及签名。随后,区块的提交者也会为每一笔交易添加一个有效或无效的标记,但由于这一信息与区块同时产生,所以它不会被包含在哈希中。
交易记录
1、头:记录了关于交易的一些重要元数据,比如,相关链码的名字以及版本。
2、签名:包含了一个由客户端应用程序创建的加密签名。该字段是用来检查交易细节是否为篡改,因为交易签名的生成需要用到应用程序的私钥。
3、提案:负责对应用程序供给智能合约的输入参数进行编码,随后该智能合约生成提案账本更新。在智能合约运行时,这个提案提供了一套输入参数,这些参数同当前的世界状态一起决定了新的账本世界状态。
4、响应:以 读写集(RW-set)的形式记录下世界状态之前和之后的值。交易响应是智能合约的输出,如果交易验证成功,那么该交易会被应用到账本上,从而更新世界状态。
5、背书:一组签名交易响应,这些签名都来自背书策略规定的相关组织,并且这些组织的数量必须满足背书策略的要求。可以看到,虽然交易中包含了多个背书,但它却只有一个交易响应。这是因为每个背书都对组织特定的交易响应进行了有效编码,那些不完全满足背书的交易响应肯定会遭到拒绝,被视为无效,而且它们也不会更新世界状态,所以没必要放进交易中。
介绍
区块链
分布式账本,记录网络上发生的所有交易
特点为去中心化,不可篡改且记录可溯源。
智能合约,提供对账本对访问控制
在交易过程中,根据智能合约可自行处理事物,无需人为干涉。
共识,保持账本在整个网络的有效且同步
在相应参与者审批后,当前交易被认定为有效。
区块链作用
利用共享账本协调能力,解决减少处理信息相关的成本和风险
特性
账本
账本由区块链组成,区块是一组有序交易的集合,区块组成的链就表示账本。
每个通道都对应一个账本
链码
定义账本的程序,可在交易时修改账本信息。执行后会产生一组键值对应用到所有账本副本
隐私
每个通道上都有对应的账本和链码,而通道可以配置为特定组织或者成员,这样能使得有特殊情况下,隔离账本和交易,保证数据的隐私性
权限
在交易网络中,通过MSP赋予每个参与者对应的身份,不同的身份对应不同的权限
共识
共识定义为组成区块的一组交易的闭环验证,从提案和背书到排序、验证和提交,都会使用到共识
身份
简介
区块链网络中的参与者都具有数字身份,数字身份封装在 X.509 数字证书中,不同的身份对应不同的权限
身份的确认过程:
1、由 CA 机构生成通用身份证书
2、Fabric中的MSP授予区块链网络身份
公钥基础结构PKI
PKI 由向各方(例如,服务的用户,服务提供者)发布数字证书的证书授权中心组成
四个要素
数字证书
公钥和私钥
证书授权中心
证书撤销列表
节点
节点是区块链网络的基本元素,存储来账本和智能合约,一个节点可以维护多个账本和多个链码
节点交互流程
1、应用程序连接背书节点
2、调用节点上的链码来查询或者更新账本
3、节点生成提案响应,响应包括了查询结果或者账本更新的返回值和节点的签名
4、应用程序接收到提案响应
查询请求:与节点的交互流程就此结束
更新请求:应用程序根据提案响应创建一笔交易,并把交易发送给排序节点
5、排序节点将交易进行排序并打包至区块中,再把区块发送给同一通道上的与之相连的 Peer 节点,Peer 节点再使用共识算法(gossip 协议)分发给其他节点
6、Peer 节点根据背书策略对交易进行验证,验证通过后提交给账本
7、账本更新后,节点会生成一个事件,将事件发送给应用程序,当应用程序成功接收到事件,更新过程就结束了
节点背书流程
1、应用程序会跟背书节点的集合一起工作,集合中的每个节点都会向应用程序 为提案的账本更新 提供背书,但是不会将提案的更新应用到他们的账本副本上。
2、这些分散的背书会被搜集到一起当作交易被打包进区块中。
3、这些区块会被分发回每个 Peer 节点,在这些 Peer 节点上每笔交易在被应用到 Peer 节点的账本副本之前会被验证。
特性
同一通道的节点可以彼此交互
每个节点都有对应的组织
MSP 会给每个区块链网络中的节点颁发身份证书,当节点连接到通道中时,通道的 MSP 会根据身份证书来识别所属组织
单独的节点不能更新账本,需要在更新前请求网络中的其他节点并得到批准才能更新,这叫做共识
成员服务提供者
简介
对某个资源(成员、节点、组织等)进行身份验证的一组机制,是实现权限管理的基础。
组成部分
一组信任的根证书,是整个组织证书信任的基础,根证书可以签发中间证书;
MSP的管理员的身份证书,管理员可以对MSP中证书进行管理;
组织单元(Organizational Unit)列表;
一组信任的中间证书,中间证书由根证书签发;
证书撤销列表,代表被吊销的证书名单。
授权流程
1. 拥有一个由网络信任的 CA 颁发的身份。
2. MSP 将身份与组织的成员资格联系在一起。成员资格是通过将成员的公钥添加到组织的 MSP 来实现的。
3. 将 MSP 添加到网络上的一个联盟或者通道。
4. MSP 中新增网络中的策略定义。
作用域
本地 MSP
存储在参与者节点本地,以文件夹结构存储
定义组织中参与者的身份权限
通道 MSP
在通道配置中描述
定义参与者在通道中的管理权限
单元
组织单元
将组织分割成不同的单元,可细化权限管理,不同的单元处理不同的业务
节点单元
授予节点不同细粒度的身份,可在特殊需求时设置特殊身份,并且不影响原本身份
智能合约与链码
简介
智能合约:定义控制世界状态中业务对象生命周期的交易逻辑
链码:智能合约的载体,用于部署到节点上
作用
区块链记录着更新账本状态的交易,且记录不可篡改。智能合约以编程的方式访问账本的两个部分:历史交易记录和世界状态
以写入(put)、读取(get)、删除(delete)的方式修改区块链账本的世界状态,同时还可以查询交易记录
背书
每个链码有一个背书策略相对应,背书策略适用于链码中定义的所有智能合约,指定了区块链中哪些组织必须对一个给定的智能合约生成的交易进行签名
交易
有效交易
1. 首先根据背书策略检查交易,确保该交易已被足够的组织签名。
2. 其次继续检查交易,以确保当该交易在受到背书节点签名时,它的交易读集与世界状态的当前值匹配,并且中间过程中没有被更新。
有效交易会更新世界状态。无效交易不会。有效和无效的交易都会记录至区块链历史中
链码定义
链码定义是一种包含了许多参数的结构,这些参数决定链码的运行方式,其中包括链码名、版本和背书策略等
通道成员需要对链码定义进行批准,该定义才能提交到通道中,通道成员才可以根据背书策略来执行链码中对智能合约
互通
同一个通道上的智能合约可以相互调用,也同时可调用其他通道上的智能合约
生命周期
1、打包链码:使用第三方工具进行打包,比如Fabric Peer 二进制可执行文件、Node Fabric SDK和GNU tart
2、安装链码:在该组织的所有节点都需要安装链码
3、批准链码定义:根据通道的背书策略,链码定义需要相应的组织管理员进行批准
4、提交链码:从批准的组织中收集大多数的节点背书,才能提交链码
收藏
0 条评论
下一页