Hyperledger Fabric 专题

7. Hyperledger Fabric 专题 - Trans

2019-12-05  本文已影响0人  furnace

Hyperledger Fabric 专题 - Transaction Flow

本专题文档概述了标准资产交换过程中发生的交易机制。该方案包括买卖萝卜的两个客户 A 和 B。他们每个人在网络上都有一个对端节点,通过它们发送交易并与账本进行交互。

image

0. 一些前提假设

此流程假定已建立并运行通道。应用程序用户已经在组织的证书颁发机构 (Certificate Authority, CA) 中注册,并收到了必要的加密材料,用于对网络进行身份验证。

链码 (包含一组代表萝卜市场初始状态的键值对) 安装在对端节点上,并在通道上实例化。链码包含定义了一组交易指令和买卖萝卜价格的逻辑。还为此链代码设置了一个背书策略 (endorsement policy),指出 peerA 和 peerB 都必须背书 (endorse) 任何交易。

1. 客户 A 发起交易

image

发生了什么?客户端 A 正在发送购买萝卜的请求。该请求以分别代表客户端 A 和客户端 B 的对端节点 A 和对端节点 B 为目标。背书策略声明两个对端节点都必须背书任何交易,因此该请求将发送到对端节点 A 和对端节点 B。

接下来,构造交易提案。应用程序使用 SDK (Node.js,Java,Python) 及其 API 来生成交易提案。该提案即包含某些输入参数的链码函数调用,用于读取和/或更新帐本。

可以通过 SDK 将交易提案打包为适当架构的格式 (用于 gRPC 的 protocol buffer),并使用用户的加密证书为该交易提案生成唯一的签名。

2. 背书对端节点验证签名并执行交易

image

背书对端节点验证:(1) 交易提案格式是否正确,(2) 过去未提交过此交易提案 (重放攻击保护),(3)签名是否有效 (使用MSP) 和 (4) 提交者(在示例中为客户 A)是否被授权在该通道上执行提案的操作 (即,每个背书对端节点都确保提交者满足该通道的 Writer 策略)。背书对端节点将交易提案输入作为所调用链码函数的参数。然后针对当前状态数据库执行链码以产生包括响应值,读取集和写入集 (即表示要创建或更新资产的键/值对) 的交易结果。此时,不会对帐本进行任何更新。这些值的集合以及背书对端节点的签名作为“提案响应”传递回 SDK,该 SDK 解析有效负载供应用程序使用。

注解

MSP 是对端节点组件,允许对端节点验证来自客户端的交易请求并签署交易结果 (背书)。写入策略 (writing policy) 是在通道创建时定义的,并确定哪些用户有权向该通道提交交易。有关 MSP 的更多信息,请查看我们的 MSP 文档。

3. 检查提案响应

image

该应用程序验证背书对端节点的签名,并比较提案响应以确定提案响应是否相同。如果仅通过链码查询账本,则应用程序将检查查询响应,并且通常不将交易提交给交易排序服务。如果客户端应用程序打算将交易提交给交易排序服务以更新帐本,则应用程序将确定提交之前是否已满足指定的背书策略 (即 peerA 和 peerB 都背书了)。该体系结构使得即使应用程序选择不检查响应或以其他方式转发未背书的交易,背书策略仍将由对端节点强制执行,并在提交验证阶段得到维护。

4. 客户将背书组合成交易

image

该应用程序在“交易消息”中将交易提案和响应“广播”到交易排序服务。交易将包含读/写集,背书对端节点的签名和通道 ID。交易排序服务不需要检查交易的全部内容即可执行其操作,它仅从网络中的所有通道接收交易,由通道按时间对它们进行排序,并为每个通道创建交易区块。

5. 交易已验证并提交

image

交易区块被分发给通道上的所有对端节点。验证区块中的交易以确保实现了背书策略,并确保自经过交易执行生成以来,读取集变量的帐本状态没有发生变化。区块中的交易被标记为有效或无效。

6. 更新账本

image

每个对端节点都会将该区块添加到通道链中,并且对于每个有效交易,写集都将提交到当前状态数据库。发出一个事件,以通知客户端应用程序交易 (调用) 已被不可变地添加到链上,并通知交易是已验证还是无效。

注解

应用程序应在提交交易后侦听交易事件,例如,通过使用自动侦听交易事件的 submitTransaction API。如果不监听交易事件,你将不会知道你的交易是否实际上已被排序,验证并提交到账本。

请参考 序列化流程图 以更好地了解交易流程。

Reference

  1. Docs » Architecture Reference » Transaction Flow, https://hyperledger-fabric.readthedocs.io/en/release-1.4/txflow.html
  2. Docs » Key Concepts » Membership, https://hyperledger-fabric.readthedocs.io/en/release-1.4/membership/membership.html
  3. Docs » Architecture Reference » Architecture Origins, https://hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
上一篇下一篇

猜你喜欢

热点阅读