10 Hyperledger Fabric 介绍

news2025/3/9 6:21:28

简介

HypeLedger(超级账本)是由Linux基金会2015年创建的首个面向企业应用场景的开源分布式账本平台。

  • HypeLedger Fabric是HypeLedger种的区块链项目之一
  • HypeLedger Fabric引入权限管理
  • 在架构设计上支持可插拔、可扩展
  • 是首个面向联盟链场景的开源项目

Fabric对比其他区块链系统

相同点

  • 分布式账本
  • 智能合约
  • 参与者管理交易

不同点

  • 私有化
  • 具有权限许可网络

特别之处

  • 多语言智能合约
  • 可插拔机制,多存储方式,多共识机制
  • 通道机制,允许一组参与者创建各自的交易账本

Fabric架构

成员管理

区块链服务

智能合约

智能合约是一组运行在验证节点上的去中心化交易程序。

在Fabric中智能合约被称为链码(chaincode),由外部应用程序(比如网页、APP)与分布式账本进行交互。

应用编程接口

应用编程接口是二进制码在机器层面相互交互的接口。

应用编程接口提供SDK(开发工具包)和CLI(命令行)两种方式供开发人员使用区块链的各种服务。Fabric提供了一套易用、可灵活扩展的API接口。用户可以非常方便地使用SDK和CLI对分布式账本进行查询、更新。

事件机制

点对点网络

点对点网络是区块链的网络特征,Fabric作为联盟链,其点对点网络与公链的主要区别在于其点对点网络间通信存在认证机制,只有联盟内的经过验证的节点才能互相通信。

核心概念

账本

账本是Fabric对区块链结构的延伸,所以Fabric账本包含两部分,世界状态和区块链。

链码

智能合约在Fabric中也被称为链码(chaincode),Fabric项目中的链码包括用户链码和系统链码两种。

通道

Fabric的通道是两个或多个特定网络成员之间通信的专用“子网‘,用于进行私有和机密的交易。

组织

组织(Organization)也被称为“成员”,是现实企业、机构等实体在Fabric中的映射,一个组织应包含CA、Peer。

排序服务

背书策略

背书是指特定节点执行链码交易并返回一个提案响应给客户端应用的过程。

MSP

成员服务提供者MSP是Fabric用于颁发证书和验证身份的一组可插拔的加密机制和协议。

私有数据集的组成与模式

私有数据集可以让通道上的一组组织对其他组织保持数据私有,私有数据集运行通道上定义的组织子集可以背书、提交、查询私有数据,而无需创建单独的通道。

核心组件

网络模块

网络模块用于定义Fabric网络拓扑、提供P2P网络支持。

链码模块

应用层的智能合约执行,需要依赖底层链码服务的实现。

共识模块

共识服务是区块链的核心组件,需要确保区块里面每一个交易数据的有效性和有序性,网络上不同节点之间数据的一致性。

账本模块

账本管理

账本数据结构

Fabric的账本数据结构分为:

  1. 区块链数据(Blockchain Data)
  2. 状态数据(State Database)
  3. 索引数据(Index Database)

区块链数据

世界状态

索引数据库

可插拔共识

Fabric提出了可插拔共识实现共识体系,其中从系统层面采用模块化共识,根据不同的业务来定制不同的共识算法,方便企业加入自己要的共识算法。

Kafka

Kafka构建可在系统或应用程序之间可靠获取数据实时流数据管道

Kafka构建转换或响应数据流实时流应用程序

Kafka作为一个运行在一个或多个数据中心服务器上的集群

Kafka集群以称为topics主题的类别存储记录流。

Kafka中每条记录都包含一个键,一个值和一个时间戳。

排序服务

Fabric的共识过程通过排序实现

Fabric排序服务依赖于确定性共识算法,即参与共识的Peer节点所验证的区块都是最终且正确的,不会出现分叉的现象。

Fabric排序有Raft、Kafka、Solo三种实现方式

Kafka是一个崩溃容错(简称CFT)的实现,Kafka利用一个ZooKeeper进行管理

多链

多链由多个通道、多个共享账本、多个Peer节点组成,不同链可以将参与者的数据和链码进行隔离。

多通道

多通道即Fabric网络中包含多个通道,多个Peer节点加入不同的应用通道实现多个账本。

数据分发

Gossip数据分发协议

Gossip数据分发协议是一种安全、可靠、可拓展的数据分发协议用来保证数据的一致性和完整性。

通信方式

Peer节点基于gossip的数据广播操作接收通道中其他节点的信息,并将这些信息随机发送给通道上的其他节点。

PUSH

PULL

PUSH/PULL

优点

扩展性

一致性收敛

容错

简单

去中心化

缺点

消息冗余

消息延迟

私有数据分发协议

私有数据允许在通道上定义的组织子集可以背书、提交或查询私有数据,而无需创建单独的通道,降低了实现私有数据的管理开销。

辅助分发

为了辅助分发,在集合定义中的maxPeerCount和RequiredPeerCount属性控制了在背书的时候分发的数量。

尝试会持续一个可配置的时间长度,在时间内可以通过节点配置文件core.yaml中的属性peer.gpssip.pvtData.pullRetryThreshold进行配置。

使用pullRetryThreshold的时候需要考虑的问题:

主节点选举机制

主节点的选举机制用于在每一个组织中选举出一个用于链接排序服务和开始分发新区块的节点。

主节点选举使得系统可以有效地利用排序服务的带宽。

模式

以选举模式进行归类

静态模式

系统管理员手动配置一个节点为组织的主节点。

动态模式

组织中的节点自己选举出一个主节点。

锚节点同步机制

gossip利用锚节点来保证不同组织间的互相通信,通道配置中至少有一个锚节点且不一定是主节点。

一个组织中有一个节点连接到了锚节点,锚节点就可以获取通道中所有节点的信息。

节点类型

对等节点

对等(Peer)节点是参与交易的主体,代表了每个参与到链上的成员,负责共识环节中的执行智能合约。

对等(Peer)节点包含两种类型的节点,背书节点(Endorser)和提交节点(Committer)。

提交节点

通道中的每个对等节点都是一个提交节点,提交(Committer)节点又称为记账节点,负责验证从排序服务节点接收的区块里的交易,然后将块提交(写入/追加)到其通道账本的副本。

提交节点使用基于Gossip的P2P数据分发,节点会定期跟其他节点交换信息。

背书节点

具有智能合约的每个对等节点都可以是背书节点。

背书(Endorser)节点在接收到客户端的交易提案(Transaction Proposal)后,会验证交易签名,模拟执行交易,并且对结果执行签名背书,然后把经过背书的交易发送回客户端。

领导节点

领导(Leader)节点又称为主节点,主节点负责和排序服务节点(Orderer)通信,从排序服务节点处获取最新的区块并在组织内部同步。

排序节点

功能

排序服务节点(Orderer),主体功能便是对交易排序从而保证各Peer节点上的数据的一致性,也包含了ACL进行访问控制。

工作流程

交易模型

交易生命周期

  • 执行:交易(通过智能合约)以任意顺序执行,甚至可以并行执行。
  • 排序:交易通过背书策略扩散到Fabric网络中,所有节点被按顺序推向Kafka集群中的topic的过程。
  • 验证:每个节点验证并按顺序执行交易,最终更新账本。

交易的执行和账本的更新拆分的好处:

  • 链码不必开放给所有的节点,提升系统的性能
  • 交易可以在排序之前执行,提高系统吞吐量
  • Fabric可以使用非确定性的链码,提高系统的灵活性

交易流程图

发起交易

  • 定义网络
  • 创建通道
  • 完成组织的注册和登记并且拿到加密材料
  • 链码实例化
  • 设置背书策略

验证签名

背书节点对提案进行验证,验证内容包括:

  • 交易提案格式
  • 验证重复提交
  • 验证签名有效
  • 验证发起者权限

执行交易

检查提案响应

应用程序验证背书节点的签名,并比较这些提案响应,以确定其是否相同。

背书结果打包

应用程序将交易提案和“交易消息”中的交易响应“广播”给排序服务。

验证和提交交易

账本更新

每个Peer节点都将区块追加到通道的链上,对于每个有效的交易,写集都提交到当前状态数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2283379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式光纤应变监测是一种高精度、分布式的监测技术

一、土木工程领域 桥梁结构健康监测 主跨应变监测:在大跨度桥梁的主跨部分,如悬索桥的主缆、斜拉桥的斜拉索和主梁,分布式光纤应变传感器可以沿着这些关键结构部件进行铺设。通过实时监测应变情况,能够精确捕捉到车辆荷载、风荷…

机器学习10-解读CNN代码Pytorch版

机器学习10-解读CNN代码Pytorch版 我个人是Java程序员,关于Python代码的使用过程中的相关代码事项,在此进行记录 文章目录 机器学习10-解读CNN代码Pytorch版1-核心逻辑脉络2-参考网址3-解读CNN代码Pytorch版本1-MNIST数据集读取2-CNN网络的定义1-无注释版…

【C++高并发服务器WebServer】-7:共享内存

本文目录 一、共享内存1.1 shmget函数1.2 shmat1.3 shmdt1.4 shmctl1.5 ftok1.6 共享内存和内存映射的关联1.7 小demo 二、共享内存操作命令 一、共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称…

稀土抗菌剂:提升产品质量,保障公共健康

随着全球对抗菌技术需求的不断增长,传统的抗菌剂逐渐暴露出其局限性,包括耐药性、环境污染及副作用等问题。在此背景下,稀土抗菌剂作为一种新兴的抗菌材料,凭借其卓越的抗菌性能、环保特性以及应用多样性,正在成为各行…

机器学习11-学习路径推荐

机器学习11-学习路径推荐 本文希望摒除AI学习商业宣传要素,推荐一条极简的AI学习路线!推荐内容均为在线免费内容,如果有条件可以咨询专业的培训机构! 文章目录 机器学习11-学习路径推荐[toc] 1-AI培训路线第一阶段 Python-人工智能…

《边界感知的分而治之方法:基于扩散模型的无监督阴影去除解决方案》学习笔记

paper:Boundary-Aware Divide and Conquer: A Diffusion-Based Solution for Unsupervised Shadow Removal 目录 摘要 1、介绍 2、相关工作 2.1 阴影去除 2.2 去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM) 3、方…

java后端之事务管理

Transactional注解:作用于业务层的方法、类、接口上,将当前方法交给spring进行事务管理,执行前开启事务,成功执行则提交事务,执行异常回滚事务 spring事务管理日志: 默认情况下,只有出现Runti…

数据结构——概念与时间空间复杂度

目录 前言 一相关概念 1什么是数据结构 2什么是算法 二算法效率 1如何衡量算法效率的好坏 2算法的复杂度 三时间复杂度 1时间复杂度表示 2计算时间复杂度 2.1题一 2.2题二 2.3题三 2.4题四 2.5题五 2.6题六 2.7题七 2.8题八 四空间复杂度 1题一 2题二 3…

牛客周赛 Round 78 A-C

A.时间表查询! 链接:https://ac.nowcoder.com/acm/contest/100671/A 来源:牛客网 题目描述 今天是2025年1月25日,今年的六场牛客寒假算法基础集训营中,前两场比赛已经依次于 20250121、20250123 举行;而…

HTML-新浪新闻-实现标题-样式1

用css进行样式控制 css引入方式: --行内样式:写在标签的style属性中(不推荐) --内嵌样式:写在style标签中(可以写在页面任何位置,但通常约定写在head标签中) --外联样式&#xf…

能说说MyBatis的工作原理吗?

大家好,我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助; 能说说MyBatis的工作原理吗? MyBatis 是一款流行的持久层框架,它通过简化数据库操作,帮助开发者更高效地与数据库进行交互。MyBatis…

MFC程序设计(四)窗口创建机制

钩子函数 钩子属于win32技术,具有优先勾取消息的权利:当一个消息产生时,钩子勾取消息进行处理,然后消息才送回程序 接下来以一个勾取窗口创建消息的钩子为例进行讲解 钩子类型有键盘钩子,鼠标钩子,WH_CBT…

【JavaEE进阶】Spring留言板实现

目录 🎍预期结果 🍀前端代码 🎄约定前后端交互接口 🚩需求分析 🚩接口定义 🌳实现服务器端代码 🚩lombok介绍 🚩代码实现 🌴运行测试 🎄前端代码实…

Unity开发一个单人FPS游戏的教程总结

这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏,感兴趣的朋友可以回顾一下。这个系列的文章如下: Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…

论文速读|Is Cosine-Similarity of Embeddings Really About Similarity?WWW24

论文地址: https://arxiv.org/abs/2403.05440 https://dl.acm.org/doi/abs/10.1145/3589335.3651526 bib引用: inproceedings{Steck_2024, series{WWW ’24},title{Is Cosine-Similarity of Embeddings Really About Similarity?},url{http://dx.doi.o…

71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果

前言 在前端开发中,地图功能是一个常见的需求。OpenLayers 是一个强大的开源地图库,支持多种地图源和交互操作。本文将介绍如何在 Vue 3 中集成 OpenLayers,并实现按住 Shift 键拖拽、旋转和缩放地图的效果。 实现效果 按住 Shift 键&#…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)

一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…

250125-package

1. 定义 包就是文件夹,作用是在大型项目中,避免不同人的编写的java文件出现同名进而导致报错;想象一个场景,在一个根目录中,每一个人都有自己的一个java文件夹,他可以将自己编写的文件放在该文件夹里&…

FastExcel的使用

前言 FastExcel 是一款基于 Java 的开源库,旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel,提供性能优化、bug 修复,并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。 FastExcel 的主要功能 高性…

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…