前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hyperledger fabric读写集简介

hyperledger fabric读写集简介

原创
作者头像
孟斯特
发布2024-08-23 16:07:29
1080
发布2024-08-23 16:07:29
举报
文章被收录于专栏:Go学习

在Hyperledger Fabric中,读写集(Read-Write Set, R/W Set) 是智能合约(链码)执行期间生成的一个关键数据结构,包含了事务执行过程中对账本状态的读取和写入操作。理解读写集是理解Fabric事务处理流程的核心之一。以下是对读写集的详细介绍:

1. 读写集的基本概念

  • 读集(Read Set):读集包含了链码在执行期间读取的账本状态。每一条读取操作都会记录键的状态,包括键的名称和对应的版本号。版本号表示的是该键在账本中最后一次被修改的版本。
  • 写集(Write Set):写集包含了链码执行期间对账本状态的写操作。每一条写操作记录了键的名称和将要写入的值,但不包含版本号。

2. 读写集的生成过程

读写集是在链码执行阶段生成的,具体流程如下:

  1. 链码执行:客户端向Fabric网络提交一个包含输入参数的提案交易。Peer节点会根据这个提案来执行链码。链码执行的结果包括一个读写集。
  2. 读操作:链码执行过程中,如果需要读取账本中的某个状态,Peer会将这个读取操作记录到读集中。每次读取时,系统会将当前读取的键及其版本号记录下来。
  3. 写操作:链码可以修改某个键的值或新增一个键值对,这些修改会被记录在写集中。写集仅记录键和新的值,不记录版本号。
  4. 生成读写集:链码执行完成后,读集和写集会合并成一个完整的读写集,并作为提案结果返回给客户端。

3. 读写集的作用

  • 一致性验证:在Fabric网络中,多个Peer节点可以同时执行相同的提案交易。每个Peer节点独立地生成自己的读写集。提案交易被提交到Orderer之后,会将交易的读写集分发给所有的Peer节点。Peer节点在提交交易前,会对读写集进行一致性验证,确保所有读取的键自生成读集以来没有被其他事务修改(即版本号未变)。如果验证失败,交易将被拒绝提交。
  • 状态更新:在通过一致性验证后,写集中的修改将被应用到账本中,更新账本状态。

4. 读写集的结构

读写集的结构主要包括以下几个部分:

  • Namespace:在Fabric中,链码的数据是以命名空间(Namespace)为单位组织的。每个链码对应一个命名空间。在读写集中,数据是按命名空间来组织的,表示读写集属于哪个链码。
  • 读集(Read Set)
    • 键(Key):账本中被读取的状态键。
    • 版本号(Version):该键被读取时的账本状态版本。
  • 写集(Write Set)
    • 键(Key):被修改或新增的状态键。
    • 值(Value):要写入账本的新值。

5. 读写集的应用场景

  • 事务并发控制:通过版本号检测来确保并发执行的事务不会导致数据不一致,这是Fabric中的一种乐观并发控制机制。
  • 事务回滚:如果在事务提交前,检测到读写集的一致性验证失败,可以通过读写集来回滚链码执行对状态的修改。

6. 示例

假设链码需要读取账本中两个键“Key1”和“Key2”,并且需要更新“Key1”的值。

  • 读集
    • 键1(Key1):版本号为v1
    • 键2(Key2):版本号为v2
  • 写集
    • 键1(Key1):新值为Value1

在一致性验证过程中,系统将检查“Key1”和“Key2”的版本号。如果自链码执行以来,这两个键的版本号没有改变(即依然是v1和v2),那么这个事务就可以提交,写集中的新值Value1将被写入账本。否则,事务将被拒绝。

总结

Hyperledger Fabric中的读写集是用于事务执行期间记录账本状态变更的关键数据结构。它不仅记录了链码对账本状态的读写操作,还在事务一致性验证中起到了核心作用,确保Fabric网络中的数据一致性和并发安全。理解读写集对深入了解Fabric的事务处理机制至关重要。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 读写集的基本概念
  • 2. 读写集的生成过程
  • 3. 读写集的作用
  • 4. 读写集的结构
  • 5. 读写集的应用场景
  • 6. 示例
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档