Fabric介绍

2023-10-30

简介

由于比特币的流行,以太坊和一些别的衍生技术成长起来,对一些有创新力的企业开始关注区块链底层技术,分布式账本和分布式应用平台。然而,许多企业需要更高的性能,这是那些无须许可的区块链技术无法达到的。另外,在许多场景下,参与者的身份认证是一个核心诉求,例如金融领域

对于企业使用,有如下比较需求:

  • 参与者的身份是明确的,可识别的
  • 进入网络是必须被许可的
  • 较高的性能,并发
  • 事务确认的低延迟
  • 适用于商业场景私有的和保密的事务

基于此,Hyperledger Fabric应运而生。Hyperledger Fabric 是一个开源的企业级需要许可的分布式账本技术平台。Fabric是一个高度模块化和可配置架构。同时,Fabric的智能合约是第一个支持所有通用编程语言,例如Java, Go and Node.js。

Hyperledger Fabric还支持可插拔的共识协议,用户可以根据自己的用例和模型进行选择。

模块化

  • ordering 可插拔建立共识的服务,将多个不同的事务以确定的顺序打包成一个区块,然后广播这个区块到其他peers。

可采用不同的共识机制,目前支持Kafka,BFT-SMaRt和Solo。Kafka是基于ZooKeeper的Paxos实现,可以实现50%的CFT,不能容忍不诚实的节点;BFT-SMaRt则是PBFT的实现,可以实现33%的BFT;Solo是单order节点的ordering,主要用于开发测试。

  • CA 单独的服务,用于用户身份识别
  • Smart contracts (“chaincode”) 运行在隔离的容器环境中(Docker),可以使用不同的通用语言编写,但是不能直接访问账本状态
  • endorse peer 可以单独的为每个应用程序配置不同的验证策略
  • Committer:负责维护区块链和账本结构(包括状态DB、历史DB、索引DB等)。该节点会定期地从Orderer获取排序后的批量交易区块结构,对这些交易进行落盘前的最终检查(包括交易消息结构、签名完整性、是否重复、读写集合版本是否匹配等)

order-execute architecture

大部分区块链(也包括公链)所采用的流程是:将transactions排序打包然后同步到每个节点(通常采用广播的方式),每个节点再按顺序执行(或者称之为验证)这些交易。在论文中,这种架构被称之为“order-execute architecture”,即先“order”再“execute”。

这样的架构存在一些问题,

首先所有节点按照顺序执行交易会限制性能(例如TPS),通常将不相关的操作并发执行可以提升性能,但是对智能合约很难做到并发,因为代码之间的依赖关系很难确定。此外,order-execute最大的限制是,所有节点所执行的交易必须满足确定性(must be deterministic)。类似以太坊这样采用Solidity这样的编程语言可以一定程度上保证代码确定性,但对于更流行的语言(例如Go,Java,C/C++),则很难保证确定性(比如Go中的map iterator就无法保证确定性)。

在联盟链中,一种可行的做法是,仅让部分节点运行代码,然后同步最终状态(state)至全网。这样子一方面通过选择运行代码的节点从而保证代码运行的一致性,并且减少了验证节点数也提升了性能。

Execute-order-validate architecture

在这里插入图片描述

  • 执行一个事务,然后校验正确性, 从而为它背书
  • 通过可插拔的共识协议来背书
  • 在提交到账本之前,根据应用程序指定的背书策略来校验事务

在上述架构中,智能合约这种分布式应用包括了两个部分:

chaincode:即原来的smart contract code,在execute阶段可以运行,值得注意的是,还有一种特殊的system chaincodes,这类chaincodes定义了整个链的底层设置,包括validation system chaincode和endorsement system chaincode

endorsement policy:可以理解为独立于共识模块的一种验证或者背书机制。传统consensus包括了验证节点是否作恶以及交易本身是否正确两个任务,而在Fabric中,将后者抽离成为endorsement policy。实际上这个模块也是可以替换的,比如“五个endorser节点中只要有三个执行结果一致则完成验证”这种策略完全可以换成“只需要XXX endorser节点完成执行则通过验证”。

在这里插入图片描述

  • Clients:这类节点即发起交易或者调用智能合约的普通节点;
  • Peers:执行验证交易的节点,这类节点需要有全量ledger数据,在这类节点中,只有一部分负责执行交易,即endorsing
  • peers(或者叫endorsers); OSNs(Ordering Service Nodes):

详细的交易流程

在这里插入图片描述

  1. client发起交易,首先将交易信息(propose message)发给定义好的若干endorsers,注意此处的endorsers是由交易本身的chaincode和其中的 endorsement policy共同决定;此处propose message包括信息如下:

    tx=<clientID, chaincodeID, txPayload, timestamp, clientSig>

    clientID:提交交易的client的ID
    chaincodeID:交易所属的chaincode的ID
    txPayload:交易本体信息
    timestamp:时间戳
    clientSig:client签名

  2. endorser收到message后,用client公钥验证clientSig,然后运行交易并验证输出结果。如果该endorser被选择为背书节点,则把结果发回给提交的client;

  3. 该client收集每个endorser返回的信息,当满足endorsement policy后,则进入ordering阶段,反之该交易失败;

  4. client将通过endorsement的交易广播至所有orderers(表示为broadcast(tx)),后者通过某种共识机制对所有通过endorsement的交易进行排序,保证所有节点的数据满足时序一致性;

  5. orderers再将排序后的交易广播至其他peers(包括了endorsing peers和non-endorsing peers),这里广播的实际上就是一个包含了若干交易的block和一个sequence number;

  6. 所有peers验证block之后,更新自身的ledger,即完成上链。

当然上述流程中有一些较强的假设,比如对于P2P传输而言,需要满足liveness,即broadcast(tx)操作在有限的时间内一定可以到达所有其他节点。

应用程序和节点(Applications and Peers)

https://hyperledger-fabric.readthedocs.io/en/latest/txflow.html

fabric运行流程
对等节点和排序节点一起工作来确保账本在每个节点中都保持最新。在这个例子中,应用程序 A 连接到 P1 并调用 chaincode S1 来查询或更新账单 L1。 P1 调用 S1 来生成包含查询结果或建议账本更新的提案响应。应用程序 A 收到提案响应,对于查询,过程现在已完成。 O1 将整个网络中的交易收集到块中,并将这些交易分发给所有节点,包括P1。P1 在处理 L1 之前会先验证交易。一旦 L1 被更新, P1 产生一个由 A 接收的事件来表示完成。

节点可以立即将查询结果返回给应用程序,因为满足查询所需的所有信息都位于节点的账单本地副本中。节点不会咨询其他节点,以便将查询返回给应用程序。但是,应用程序可以连接到一个或多个节点来发出查询 —— 例如以证实多个对等节点之间的结果,或者如果怀疑信息可能过期,则从不同的节点检索更新结果。在图中,您可以看到分类账查询是一个简单的三步过程。

更新事务与查询事务比较相似,但有两个额外的步骤。虽然账本更新应用程序也连接到节点以调用 chaincode,与账单查询应用程序不同,单个节点无法执行账单更新,因为其他节点必须首先同意这种操作 —— 这就是共识的过程。因此,节点向应用程序返回更新提议 —— 这个节点将先获得其他节点的同意。第一个额外的步骤 —— 也即第四步 —— 要求应用程序发送一组适当的更新提议到整个节点网络中,该交易需要被整个网络节点所同意。这是通过应用程序使用 排序节点将事务打包进区块 来实现的,并将它们分发到节点的整个网络,以便在应用到每个节点的账本副本之前,可以对其进行验证。由于整个共识处理需要一些时间才能完成(秒),因此应用程序会异步通知,如步骤5所

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fabric介绍 的相关文章

  • 毕业设计-基于生成对抗网络的图像风格迁移

    目录 前言 课题背景和意义 实现技术思路 一 相关工作 二 基于生成对抗网络的风格迁移模型 三 实验与结果分析 四 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为
  • 计算机算法与程序设计 第一章 编程作业

    返回 所有测验 作业和考试都在2020年12月30日23点截止 请及时完成 编程作业题可以多次提交 取最高分作为本题成绩 依照学术诚信条款 我保证此作业是本人独立完成的 温馨提示 1 本次作业属于Online Judge题目 提交后由系统即
  • 解决Windows系统缺少comres.dll文件无法启动程序问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个comres

随机推荐

  • 类的静态成员变量初始化时间

    首先先搞明白 声明 定义 初始化 类的静态成员变量在类内声明 可以多次声明 类的静态成员必须在类外定义 定义就是给变量分配内存 初始化就是给一个变量赋初值 内置类型通常定义时默认初始化 类静态成员变量在main函数执行前完成初始化 有静态初
  • buck拓扑原理及仿真

    buck基本拓扑结构 开关管ON 电源向负载电阻提供电能 电感电流线性增大 变化率 变化量 开关管OFF 电感 电容中能量继续向负载电阻提供电能 电感电流线性减小 变化率 变化量 平衡状态时 由电感伏秒平衡得 推导得 理论电感电流在CCM
  • 快节奏多人在线游戏网络入门系列教程(2):客户端预测与服务器协调

    简介 在上一篇文章中 我们简单介绍了权威服务器的体系 客户端发送交互信息给服务器 服务器周期性的更新游戏状态 然后返回游戏状态给客户端 这个简单体系会导致用户发送命令时和屏幕渲染响应之间的延迟 产生延迟的原因是客户端发送命令给服务器 加上服
  • BIO/NIO/AIO

    IO模型 BIO BIO全称为 Blocking I O 是一种同步阻塞IO 最开始的网络通信就是BIO模型 服务端创建一个ServerSocket 客户端创建一个 Socket 去连接服务端 这样客户端与服务端便可以进行通信了 产生的问题
  • Mybatis中针对数据库日期JdbcType设置

    Mybatis中针对数据库日期JdbcType设置 在学习Mysql的时候 我们知道数据库类型有date datatime time类型 在用Mybatis进行插入数据的时候 我们实体一般都是直接指定java util Date类型 为了确
  • 机器学习中的相似性度量

    https www cnblogs com heaad archive 2011 03 08 1977733 html 1 欧氏距离 曼哈顿距离 切比雪夫距离 闵可夫斯基距离 标准化欧氏距离 马氏距离 夹角余弦 汉明距离 杰卡德距离 杰卡德
  • 菜鸟入门HTML

    标题HTML 一 1 单标签 一般单独完成某一功能的标签都为单标签 link 导入图片或css或其他资源 例 img src路径 插入一个图片到网页中 例 img src title 123 在这里插入图片描述 https img blog
  • 转:彻底搞定期货穿透式CTP API接入

    中信期货看穿式监管认证操作指南 CTP系统 https www citicsf com static download soft E4 B8 AD E4 BF A1 E6 9C 9F E8 B4 A7 E7 9C 8B E7 A9 BF E
  • NTSC和PAL制同步信号模拟输出

    NTSC和PAL制同步信号模拟输出 原由 由于我想输出一个NTSC制和PAL制的同步黑场 只需要输出同步信号 之后输出rgb信号给ADV 7123 后输出到显示屏 下面是我的心路历程和知识总结 一 了解NTSC和PAL PAL 电视标准 每
  • kinect2.0视角范围和距离远近

    本文章由cartzhang编写 转载请注明出处 所有权利保留 文章链接 http blog csdn net cartzhang article details 44588097 作者 cartzhang Kinect 摄像头范围介绍和玩家
  • 马踏棋盘求----全部解

    标题 运用栈和回溯法求马踏棋盘的全部解 回溯法的写法参考 数据结构 严蔚敏 的迷宫求解 感谢我的队友 汪汪汪 他与求一个解不同之处在于 当我们求到一个解之后 这个程序却会告诉计算机 啊 这不是我们想要的解 我们继续吧 于是 傻傻的计算机就信
  • D3D资源管理

    摘要 受管贴图 Managed textures 也就是我们通常所谓的 自动管理贴图 在DX6中首次被引入 经过一系列的改进和增强 在DX9中自动管理的资源类型增加到贴图 顶点缓冲 顶点索引缓冲 所有这些资源使用统一的公共接口 通过使用D3
  • 【图文分析】Java经典基础练习题(六):猴子吃桃子问题

    文章目录 一 具体题目 二 思路分析 逆向思维 三 代码 结果 代码 结果 四 彩蛋 一 具体题目 猴子第一天摘下若干个桃子 当即吃了一半 还不瘾 又多吃了一个 第二天 早上又将剩下的桃子吃掉一半 又多吃了一个 以后每天早上都吃了前一天剩下
  • Webpack4 配置 Externals

    Externals 配置项用来告诉 Webpack 要构建的代码中使用了哪些不用被打包的模块 也就是说这些模版是外部环境提供的 Webpack 在打包时可以忽略它们 1 有些 JavaScript 运行环境可能内置了一些全局变量或者模块 例
  • 新手小白学Java

    刚开始学习java的时候 可能是一头雾水 不知道从何学起 还有很多Java小白 在刚自学Java的时候玩命的学习 玩命的记住Java原理 天天早上五点起床背Java的一些英文词汇 然后遇见一些未知的困难 让自己打到癫狂状态 逐渐迷失自我放弃
  • 在开发板上挂载NFS

    网络文件系统 NFS Network File System 是一种将远程主机上的分区 目录 经网络挂载到本地系统的一种机制 通过对网络文件系统的支持 用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区 目录 进行操作 在嵌入式L
  • 《动手学深度学习 Pytorch版》 4.8 数值稳定性和模型初始化

    4 8 1 梯度消失和梯度爆炸 整节理论 详见书本 梯度消失 matplotlib inline import torch from d2l import torch as d2l x torch arange 8 0 8 0 0 1 re
  • 安装完MySQL后,却没有密码,如何登录并修改密码?

    1 在终端输入sudo vim etc mysql mysql conf d mysqld cnf 2 在 mysqld 下方的skip external locking下面添加一行 skip grant tables 3 重启MySQL服
  • java实现io阻塞的代码_Java IO(2)阻塞式输入输出(BIO)

    在上文中 Java IO 1 基础知识 字节与字符 了解到了什么是字节和字符 主要是为了对Java IO中有关字节流和字符流有一个更好的了解 本文所述的输出输出指的是Java中传统的IO 也就是阻塞式输入输出 Blocking I O BI
  • Fabric介绍

    简介 由于比特币的流行 以太坊和一些别的衍生技术成长起来 对一些有创新力的企业开始关注区块链底层技术 分布式账本和分布式应用平台 然而 许多企业需要更高的性能 这是那些无须许可的区块链技术无法达到的 另外 在许多场景下 参与者的身份认证是一