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介绍 的相关文章

  • 织物的独立 fabfile?

    是否可以使 fabfile 成为独立的 我不太喜欢运行外部工具 fab 如果我设法获得独立的 fabfile 我可以从 Eclipse Pydev IDE 中运行该文件 轻松调试它 使用项目配置和路径等 为什么这不起作用 from fabr
  • 区块链交易平台服务器该怎么选

    区块链交易平台服务器该怎么选 随着互联网技术的发展 区块链也发展成为一种潮流 越来越多的人加入到区块链行业中来 尤其是区块链交易平台 但也有很多人不了解区块链对服务器的要求 那么我们就要好好说说搭建区块链交易平台服务器该怎么选 1 区块链交
  • 波场TRON将致力于推动各方合作打击恐怖主义融资

    随着加密行业的蓬勃发展 新的挑战也接踵而至 近期 有外媒报道称 哈马斯等美国认定的国际恐怖组织涉通过波场TRON进行融资活动 在这场风波中 区块链项目波场TRON似乎成为了质疑的焦点 然而 当我们深入了解事实真相时 或许会发现事情并非传言中
  • Cumulus Encrypted Storage System(CESS)激励测试网 v0.7.5 于11月29日正式上线

    Cumulus Encrypted Storage System CESS 是基于区块链的去中心化云存储网络和 CDN 网络 支持数据在线存储和实时共享 为 Web3 高频动态数据的存储和检索提供全栈解决方案 CESS 数据价值网络是以 D
  • NFTScan | 11.27~12.03 NFT 市场热点汇总

    欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总 周期 2023 11 20 2023 11 26 NFT Hot News 01 Web3 教育平台 Open Campus 获 Binance Labs
  • python Fabric 多个命令

    我试图了解 Fabric 如何在一台机器上使用多个命令 我需要在每台主机 数千台主机 上运行多个命令 并且想知道什么是最好的 使用多次运行 res 1 run command 1 res 2 run command 2 res n run
  • 工业互联网会是制造业数字化发展的未来吗?

    新工业革命正逐步形成 你认为工业互联网会是制造业数字化发展的未来吗 从这几年的工业互联网发展政策措施 就能看到答案 早在近三年前 工业互联网创新发展行动计划 2021 2023年 就提出了五方面 11项重点行动和10大重点工程 着力解决工业
  • 股指期权开通要什么条件?

    股指期权是一种金融衍生工具 它赋予持有者在未来某一特定日期按照约定的价格买入或卖出标的资产的权利 对于投资者来说 开通股指期权账户需要满足一定的条件 那么股指期权开通要什么条件 本文来自 财顺期权 开通股指期权账户需要的条件是 申请前20个
  • Fabric/Python:AttributeError:“NoneType”对象没有属性“partition”

    Fabric中有以下功能用于添加用户帐户 脚本 fab l Python source code Available commands OS TYPE adduser createcmd Create command line for ad
  • python中直接调用fabric API

    我记得fabric API可以直接在py脚本中调用 但忘记从哪里开始 有人提供线索吗 是的 你可以这样称呼它 例如 from fabric api import run from fabric tasks import execute de
  • python Fabric是否支持动态设置env.hosts?

    我想动态更改 env hosts 因为有时我想先部署到一台机器 检查是否正常 然后部署到多台机器 目前我需要先设置 env hosts 如何在方法中设置 env hosts 而不是在脚本启动时全局设置 是的 你可以设置env hosts动态
  • 织物密码

    每次结构运行时 它都会要求输入 root 密码 是否可以将其与自动建议一起发送 fab staging test 我知道您已经询问过密码 但是配置系统以便您可以在没有密码的情况下进行结构 即 SSH 不是更好吗 为此 在本地计算机上执行以下
  • 在 Python/Bash 中通过 SSH/Sudo 测试文件/目录是否存在 [重复]

    这个问题在这里已经有答案了 我正在远程服务器上安装证书 并想在覆盖它们之前检查它们是否存在 服务器仅允许通过 ssh 公钥进行非 root 访问 我可以sudo s在 shell 中 root 一次 需要 root 权限 因为其他人无法读取
  • 你的服务器还安全吗?用户数据是否面临泄露风险?

    一系列严重的网络安全事件引起了广泛关注 多家知名公司的服务器遭到黑客挟持 用户的个人数据和敏感信息面临泄露的风险 这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性 提醒着企业和个人加强对网络安全的重视 一 入侵案例 1 1 蔚来数据泄露 1
  • 将不同的参数传递给 Fabric 中的不同主机

    我正在编写一个脚本来在多个主机上启动负载生成实验 我可以编写一个 bash 脚本来启动多个 ssh 会话 但我希望使用更结构化的东西 由于我的大部分脚本都使用 Python 所以我想Fabric http www fabfile org看起
  • 导入错误:没有名为“fabric.contrib”的模块

    Fabric 2 0 1 运行调用 fabfile py 的项目时出错 我使用的是 Python 3 5 1 有谁知道为什么会发生这种情况 Traceback most recent call last File bootstrap pex
  • 让 Python 虚拟环境、Fabric 和 Sudo 协同工作

    重现步骤 在 Linux 环境中 在桌面上创建一个名为 fab 的文件夹 仅供参考 我正在使用 zsh cd to Desktop fab 运行这个fabfile py通过发出在您的 fab 目录中制作fab init usr bin en
  • 如何对项目的 cron 作业进行版本控制? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一堆项目 我用 git 和 fab 推送到服务器 它们是 Django 站点的负载 其中一些站点有 cron 作业 我希望处于这样的境地 通
  • 有类似 Fabric for Perl 的东西吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我很喜欢Fabric http fabfile org 对于个人项目 但我的日常工作是在面向 Perl
  • Python Fabric - 未找到主机。请指定用于连接的(单个)主机字符串:

    如何获取 找不到主机 请指定用于连接的 单个 主机字符串 面料如何解决 def bootstrap host ec2 54 xxx xxx xxx compute 1 amazonaws com env hosts host env use

随机推荐

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

    首先先搞明白 声明 定义 初始化 类的静态成员变量在类内声明 可以多次声明 类的静态成员必须在类外定义 定义就是给变量分配内存 初始化就是给一个变量赋初值 内置类型通常定义时默认初始化 类静态成员变量在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介绍

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