Hyperledger Fabric Transaction Flow——事务处理流程
Transaction Flow
本文概述了在标准资产交换过程中发生的事务机制。这个场景包括两个客户,A和B,他们在购买和销售萝卜(产品)。他们每个人在网络上都有一个peer,通过这个网络,他们发送自己的交易,并与Ledger(账本总账)进行交互。

假设,这个flow有一个channel被设置并运行。应用程序客户端已经注册并注册了该组织的证书颁发机构(CA),并获得了必要的加密材料,用于对网络进行身份验证。
chaincode(包含一组表示萝卜市场的初始状态的键值对)被安装在peers上,并在channel上实例化。chaincode包含定义一组事务指令的逻辑,以及一个萝卜商定的价格。该chaincode也已确定了一个背书策略,即peerA和peerB都必须支持任何交易。

1.客户端A发起事务
事务的发生过程——客户A正在发送一个请求来购买萝卜。该请求的目标是peerA和peerB,它们分别代表客户A和客户B。背书策略规定,双方都必须认可任何交易,因此请求将被发送到peerA和peerB。
接下来,将构造事务协议。使用任何一个被HyperLedger Fabric支持的SDK(node、Java、Python)的应用程序创建一个可用的API来生成一个事务协议。协议是请求调用chaincode函数,以便可以读取和/或写入数据(例如,为资产编写新的键值对)。SDK作为一个shim来将事务协议打包成适当的格式(在gRPC上的协议缓冲区),并使用用户的加密凭证来为这个事务协议生成一个惟一的签名。

2.背书peers验证签名并执行事务
背书peers验证内容:(1)事务的协议是完整的,(2)在过去尚未被提交过(再现攻击保护),(3)签名是有效的(使用MSP),(4)提交者(客户端,在这个例子中)是正确授权执行该操作在channel中(也就是说,每个背书peers都确保提交者满足channel的写入策略)。
{MSP是peer的一个组件,允许它们验证从客户端到达的事务请求,并签署事务结果(背书)。编写策略是在channel创建时定义的,并确定哪个用户有权向该channel提交事务。}

3.检查返回协议
应用程序验证背书peer的签名,并对提案响应进行比较,以确定提案的响应是否相同。如果chaincode只是查询了账本,应用程序将检查查询响应结果,并且通常不会将查询事务提交给orderer。如果客户端应用程序打算将事务提交到orderer来更新账本,则应用程序将确定在提交之前指定的背书策略是否已经完成(例如,peerA和peerB都支持)。体系结构是这样的,即使应用程序选择不检查请求响应或转发未签署的事务,背书策略仍将由peers执行,并支持在提交阶段验证。

4.客户端将背书合并到交易中
应用程序将transaction proposal(事务协议)和包含该“transaction message(事务消息)”的peer请求响应“广播”给orderer服务,该事务将包含peer请求返回的读写集、背书peers的签名以及channel ID。orderer执行其操作无需检查该事务的全部内容,它只是从网络上的所有channels中接收事务,对相同channel中的事务按时间排序,并为每一个channel中的一个或一列事务创建区块。

5.提交并验证事务
由事务集创建的区块将会被分发到channel上所有的peers中,在该区块中的事务集将被验证以确保满足背书策略,并确保在事务执行生成读取集之后,对读集变量的账本没有任何更改。区块中的事务集因此会被标记为有效或无效。

7.账本更新
每一个channel都会将生成的区块追加到所属的chain(链)上,对于每个有效事务,都会将事务中的写集提交到当前状态数据库中。因前述而发出一个事件,通知客户端应用程序,事务(调用)已被追加到该chain(链)中,并通知该事务是否被验证或无效。
Hyperledger Fabric Transaction Flow——事务处理流程的更多相关文章
- HyperLedger Fabric 1.4 交易流程(6.3)
区块链最主要的特性之一是去中心化,没有了中心机构的集中处理,为了达成数据的一致性,就需要网络中全民参与管理,并以某种方法达成共识,所以区块链的交易流程也就是共识的过程. 在Fabric中, ...
- Hyperledger Fabric Transaction Proposal过程
客户端将交易预提案(Transaction Proposal)通过 gRPC 发送给支持 Endorser 角色的 Peer 进行背书. 这些交易提案可能包括链码的安装.实例化.升级.调用.查询:以及 ...
- Hyperledger Fabric Ledger——账本总账
Ledger Ledger(账本)即所有的state transitions(状态切换),是有序且不可篡改的.state transitions(状态切换)是由参与方提交的chaincode(智能合约 ...
- HyperLedger Fabric 1.0的Transaction处理流程
如果把区块链比作一个只能读写,不能删改的分布式数据库的话,那么事务和查询就是对这个数据库进行的最重要的操作.以比特币来说,我们通过钱包或者Blockchain.info进行区块链的查询操作,而转账行为 ...
- hyperledger fabric超级账本java sdk样例e2e代码流程分析
一 checkConfig Before 1.1 private static final TestConfig testConfig = TestConfig.getConfig() ...
- HyperLedger Fabric Introduction——区块链超级账本介绍
介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...
- 第6章 Hyperledger Fabric模型
This section outlines the key design features woven into Hyperledger Fabric that fulfill its promise ...
- HyperLedger Fabric基于zookeeper和kafka集群配置解析
简述 在搭建HyperLedger Fabric环境的过程中,我们会用到一个configtx.yaml文件(可参考Hyperledger Fabric 1.0 从零开始(八)--Fabric多节点集群 ...
- Hyperledger Fabric Chaincode for Operators——实操智能合约
什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安 ...
随机推荐
- 由浅入深理解Java线程池及线程池的如何使用
前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...
- Robot Framework学习笔记(四)------Screenshot 库屏幕截图
Scrennshot 同样为 Robot Framework 标准类库,我们只将它提供的其它中一个关键字"TakeScreenshot",它用于截取到当前窗口. 1.导入Scren ...
- 带以太网的MicroPython开发板:TPYBoardv201建立云加法器实例
转载请注明文章来源,MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇 前面的一篇文档向大家介绍了v201的开发板作为客户端终端向TCPS上传数据的基本过程 ...
- 安装Django时报错'module' object has no attribute 'lru_cache'
使用pip方法安装Django时报错'module' object has no attribute 'lru_cache' 解决办法如下 命令行输入命令sudo pip install Django ...
- 基于 Webpack 引入 jquery 插件的笔记
如果都是基于 webpack(npm 上有包),那就非常顺利: import $ from 'jquery' import 'jquery-modal/jquery.modal.min.css' im ...
- 自定义MVC框架---第二章
模型层的封装 模型层封装的原则 介绍: 模型层,也就是Model这一层,用来封装对数据库操作的封装 由于现在主流的编程思想还是OOP面向对象编程,也就是说项目的基本单位就是一个一个类文件,那么如何使用 ...
- angular2+ 组件中用@import进来的css不起作用
一般来说是作用域的问题,首先你应该先看标签内是否有angular2内置生成的自定义属性比如: 在我们的@Component中,这三个是基本的设置. 页面上的标签会生成带有 _nghost-c1 和 ...
- 使用quartz实现不重启服务器修改自定义配置
为了方便维护系统,开发中通常会设置一些自定义参数,写在单独的配置文件里,需要调整时可直接登录服务器修复配置文件,而不需要修改程序.但尴尬的是,web服务器并不会自动重新加载配置文件,重启服务器又会中断 ...
- 【ASP.NET MVC系列】浅谈表单和HTML辅助方法
[01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...
- SpringMVC连接MongoDB操作数据库
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...