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进程独立出来的安 ...
随机推荐
- chromedriver与chrome版本映射列表
chromedriver与chrome版本映射列表: chromedriver版本 支持的Chrome版本 v2.30 v58-60 v2.29 v56-58 v2.28 v55-57 v2.27 v ...
- Python新式类与经典类的区别
1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性:反之,即不由任意内置类型派生出的类 ...
- ul li内的文字水平居中显示
head><style rel="stylesheet" type="text/css" >#top{height:140px;}#top u ...
- 【HTTP协议】
一.简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议 ...
- Java 写三角形 空心三角形 菱形 空心菱形
闲来无事,练习了一下Java基础中的循环语句.练习循环语句,当然少不了,用*打印出来三角形.空心三角形.菱形等这样的几何图形. 粗心大意,失误两次: 一.三角形 遇到一些小问题: 二.金字塔 由于三角 ...
- JS CKEditor使用setData后绑定click事件
CKEditor使用setData()时会自动丢失初始时绑定的时间,在百度时发现有很多方法都不对. 近期在做项目的时候,由于客户需要,将原来的文本格式的textarea标签更改成富文本编辑器--CKE ...
- oracle之 RA-00054: resource busy and acquire with NOWAIT specified or timeout expired
1. truncate 表报 ORA-00054 ,标明有事务正在操作该表SQL> truncate table alldm.DM_XQKD_YUJING_D;truncate table al ...
- Mycat 配置
前言 Mycat 是一个数据库分库分表中间件 MyCAT 是作为通用代理设计的,后端是以 Mysql协议 和 JDBC 的方式连接数据库,可以支持 Oracle.DB2.SQL Server . mo ...
- HTTP2.0和QUIC
最近看到腾讯云支持QUIC的文章,突然意识到还没有好好认识HTTP2.QUIC,而要认识HTTP2,就需要从HTTP1.0开始讲起,才能清楚HTTP的发展历程. HTTP1.x HTTP(HyperT ...
- 【vue系列之三】从一个vue-pdf-shower,说说vue组件和npm包
前言 从去年年初开始,自己便下决心要写一个vue系列的博客,但时至今日,才写系列的第三篇博客,想来甚是惭愧. 但是慢归慢,每一篇都要保证质量,以及要写出自己的心路历程,防止自己工作中填的坑再让读者走一 ...