区块链-超级账本Hyperledger-fabric初步认识
Fabric的整体架构
交易流程
1. 应用程序通过SDK发送请求到Peer节点(一个或多个) 即发起交易
客户A发起交易请求:合约设置的背书策略规定所有交易需要经过两个Peer节点的签名背书,因此请求需要被同时发往Peer A和Peer B.
客户端应用程序利用任意SDK(nodeJS,java,go)构造交易提案。该提案是一个调用智能合约功能函数的请求,用来确认哪些数据可以读取或写入账本(即更新资产的Key/Value)。
SDK将交易提案打包为可识别的格式(如gRPC上的protocol buffer),并使用用户的加密凭证为该交易提案生成唯一的签名。
2. peer节点(Committer节点)通过chaincode分别执行交易,但是并不将执行结果提交到本地的账本中 (可以认为是模拟执行,交易处于挂起状态,放置于候选池)
参与背书的peer将执行结果返回给应用程序(其中包括自身对背书结果的签名)
背书节点(使用MSP)验证签名(ProcessPropsal()->preProcess()–>Verify()验证签名)并确定提交者是否有权执行操作(使用通道的ACL)。
背书节点将交易提案的参数作为输入,在当前状态数据库上执行交易,生成包含执行返回值、读操作集合和写操作集合的交易结果(此时不会更新账本),这些值的集合、背书节点的签名和背书结果(YES / NO)作为“提案的结果”返回给SDK
SDK解析这些信息判断是否应用于后续的交易。
3. 应用程序收集背书结果并将结果提交给Ordering服务节点
应用程序(SDK)验证背书节点签名,并比较各节点返回的提案结果,判断提案结果是否一致以及是否参照指定的背书策略执行。
应用程序(SDK)将交易提案和结果以消息形式广播到排序服务(Orderers/Consenter)。交易包含读/写操作集合、背书节点的签名和通道ID。
排序服务不读取交易的详细信息,它从整个区块链网络接收交易信息,按通道分类进行排序,并为每个通道创建包含交易的区块。
4. Ordering服务节点执行共识过程并生成block,通过消息通道发布给Peer节点(所有节点包括committer, submitter, endorser),由peer节点各自验证交易并提交到本地的ledger中(包括state状态的变化)
排序服务将区块发送到通道上的所有节点,所有交易需要被验证,确保满足背书策略
同时,需要确保全部读操作集合在交易生成之后,账本上的状态值没有改变。
经过验证,区块中的交易会被标记为有效或无效,通过Event通知客户端
5. 所有节点账本更新
所有通道上的区块链节点将新区块加入区块链,并且对于所有有效的交易,将写操作集合提交更新到状态数据库中。
节点通过事件(Event)通知客户端交易是否已被加入区块链、以及交易是否有效。
账户存储
智能合约交互
节点说明
peer节点包括:Endorse(背书节点)、Anchor(锚节点)、Leader(leader节点)、commit(提交节点)。背书节点负责背书策略,提交节点负责数据的提交。
首先所有的peer节点都是committer(记账节点),而又有可能担任的角色有endorser(背书节点)、Leader(主节点)、Anchor(锚节点)。
Committer
记账节点使用基于Gossip的p2p数据分发,节点会定期跟其他节点交换信息。如果在这个过程中有节点发生故障,则会从存活的节点中删除这个节点的信息。对于故障节点,还会定时检查是否已经恢复,恢复存活的节点会更新到存活节点列表中。如果有新加入的节点,也能通过节点信息的交换获取到,添加到存活列表中,广播给其他节点。由于超级账本采用基于反熵的状态同步,每个节点周期性的和邻居节点交换保存的数据,然后对比本地数据和邻居节点所保存的数据,检查是否有缺失或者过期的数据,然后更新本地节点的数据为最新的数据,因此故障的节点重新连接到网络时会自动恢复数据。这些都能通过Gossip协议学习到,自动调整网络的拓扑结构,适应网络节点的变化,保证整个网络正常运行。并且协议能正确工作的概率不会因为错误数超过f(可靠的广播协议中存在一个f,错误数超过这个值就会出现异常,协议的可靠性等于不超过f个错误的概率)时就快速地降低。(优雅降级)
Leader
主节点连接到排序服务,负责把接受到的批量区块转发给其他节点。因此主节点与排序服务的稳定连接至关重要。可以强制设置为主节点,也可以动态选举产生。主节点选举的用处是,判断在相同的组织中哪个节点可以作为代表连接排序服务。选举过程在Gossip层实现,一个节点启动的时候它先等网络稳定再开始参与主节点选举,一次主节点选举的有效时间是10s。这样可以有效避免强制设置主节点出现的发生故障无法分发区块的问题。
Endorser
背书节点为动态的角色与具体的chaincode绑定,背书节点的故障对网络的影响取决于chaincode对应的背书策略,例如背书策略指定只要3个组织其中的2个组织的成员完成背书,该交易就是有效的,那么只有一个组织的成员节点出现故障对交易完成没有影响。
Anchor
锚节点是在一个channel上可以被所有其他peer发现的peer,channel上的每个成员都有一个anchor Peer(或多个anchor peer 来防止单点故障),允许属于不同成员的peer发现channel上的所有现有peer。锚节点的配置文件可以通过configtxgen工具生成。
账本由区块链和状态数据库两部分组成
区块链的数据块以文件形式保存在各个节点中。状态数据库可以是各种键值数据库,Fabric缺省使用LevelDB ,也支持CouchDB的选项。CouchDB除了支持键值数据外,也支持JSON格式的文档模型,能够做复杂的查询。
面试题
问题1:committer 如何验证区块提交交易的有效性?
就是在验证交易中读写集中的读集,以及世界状态,包括之前读写集中的写集未被加入到状态数据库的状态进行验证是否一致就行了。(模拟交易)。
问题2:Fabric中的MSP的作用是什么?
1、msp是什么?他是基于PKI规范指定的一组证书与秘钥。
2、msp的好处是什么?msp它保证了用户在网络中的数量并且被授权。
3、msp真正作用?msp让fabric更加清晰明了,并且不可篡改。每条交易都要经过msp进行数字签名,在背书策略这种同样要进行签名。
扩充:例如在创建通道,安装链码,启动order,peer节点都要使用到msp。
问题3:什么是fabric
Hyperledger Fabric具有一个账本子系统,该子系统包括两个组件:世界状态和事务日志。
世界状态组件描述分类帐在给定时间点的状态。这是分类帐的数据库。事务日志组件记录所有导致当前世界状态值的事务;这是世界状态的更新历史。然后,分类帐是世界状态数据库和事务日志历史记录的组合。
之后会持续更新…
区块链-docker与docker-compose的学习: https://blog.csdn.net/qq_44423523/article/details/107384660
区块链-超级账本Hyperledger-fabric初步认识相关推荐
- 区块链超级账本Hyperledger Fabric架构说明
翻译自:http://hyperledger-fabric.readthedocs.io/en/latest/arch-deep-dive.html 边学习边翻译,很多地方还不明白,请对照原文学习,转 ...
- 区块链分布式账本Hyperledger Fabric介绍
简介 数据完整以及数据安全 如何解决现实问题 案例分析 渔业链参与人 channel chaincode 工作流程 术语回顾 项目应用举例 项目分析 合同与租金管理 合同上链 交易数据上链
- 超级账本Hyperledger Fabric的使用
原文地址:超级账本Hyperledger Fabric的使用 说明 网易云课堂:HyperLedger Fabric手动部署教程的视频讲解 超级账本HyperLedger Fabric手动部署教程的文 ...
- 搭建区块链浏览器——基于hyperledger fabric 1.0,MySQL容器
搭建区块链浏览器--基于hyperledger fabric 1.0,MySQL容器 区块链 hyperledger fabric 浏览器 MySQL docker Contents 环境要求 分支 ...
- HyperLedger Fabric Introduction——区块链超级账本介绍
介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...
- 区块链相关论文研读3- 关于超级账本Hyperledger Fabric的性能优化
这是2019年6月发表在顶会Sigmod上面的论文,论文题目为<Blurring the Lines between Blockchains and Database Systems: the ...
- 区块链开源实现hyperledger fabric架构详解
hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM.Intel.各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量.本文中我们依次讨论:区块链 ...
- 超级账本(Hyperledger Fabric)源码分析之一:总览
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 一.编译 1.环境准备 需要提前在linux或者mac机器上安装如下软件 1)Go,注意设置好gopath(笔者安装的是 ...
- 超级账本hyperledger fabric第五集:共识排序及源码阅读
一.共识机制 达成共识需要3个阶段,交易背书,交易排序,交易验证 交易背书:模拟的 交易排序:确定交易顺序,最终将排序好的交易打包区块分发 交易验证:区块存储前要进行一下交易验证 二.orderer节 ...
- 区块链开源实现 hyperledger fabric 概念与原理
https://blog.csdn.net/lanjian056/article/details/83508720 https://blog.csdn.net/russell_tao/article/ ...
最新文章
- 求二叉树中第K层结点的个数
- Bash中的管道输出和捕获退出状态
- JAVA - package与import解析(一)
- CentOS 6.8 搭建 ngrok 1.7 服务器 自测部署安装
- [redis] 分布式 Redis 的 CRUD 实现
- 自己动手写Docker系列 -- 4.3实现volume数据卷
- android 改机型玩王者,安卓手机改机型华为nova 8 Pro体验《王者荣耀》90帧超高帧率模式...
- JS:键盘事件(onkeydown 、onkeypress、 onkeyup三个)
- 百度搜索移动端流量词热度统计方法
- 联想计算机设置恢复出厂,联想电脑一键恢复出厂设置使用方法
- P3939数颜色 (主席树)
- VUE3 使用 Ant Design Vue的icon图标
- 纹理 Texture
- 这3个BT下载工具,可替代迅雷,总有一个适合你
- 黑苹果安装教程 (Mojave 10.14.5) ThinkPad T450
- 利用腾讯 优图visionseed硬件 实现人脸疲劳检测项目(包括数据读取,数据保存,数据web端展示)
- vsftpd 配置(中)
- Hadoop格式化后出现异常
- Java的NumberFormat介绍
- 语言模型中用到的几种采样之不全版
热门文章
- 1.1计算机解决问题的过程教案,1.1 计算机解决问题的过程
- PHP开票接口,云增值税发票API详情
- c语言定义数组变量初始化为0,C语言数组初始化
- 计算机的网络技术说课稿模板,精选信息技术说课稿模板汇编五篇
- 电脑配置挑选速成攻略
- 项目文档编制-投标书
- amos里CFA可行性辨别结果怎么看_AMOS 中验证性因素分析(CFA)
- 使用sngrep跟踪分析sip信令
- css vue 内联_vue ssr css内联样式和link标签重复
- 京东价格监控软件开发技术探讨一:C#实现获取京东商品信息(价格、库存)