首页 > 解决方案 > 我们可以在 Hyperledger Fabric 区块中找到什么样的交易?

问题描述

在比特币区块链中,交易只是“将一些金额从 X 转移到 Y”的类型,因此我们总是对区块链进行实际更改。

在 Hyperledger Fabric 中,交易如下:

我确信在某个通道中实例化链码或运行改变世界状态的东西是有资格放入块中的事务。我不明白的是哪些交易可以进入下一个区块。如果某些链码没有写入或更新世界状态(在 RW 集中,读取集与写入集相同)仍然可以包含在下一个块中吗?还是可以安全地“丢弃”?

标签: hyperledger-fabrichyperledger

解决方案


所有背书节点都必须具有实例化的链码,以便他们可以模拟交易并创建读/写(RW)集。安装和实例化链码是不同于常规调用的事务。

调用一些事务意味着它可以是其中之一

  1. 询问
  2. 添加资产、更新资产、删除资产

HF 维护每个唯一密钥的版本控制,并在我们更新相同资产时按时间顺序增加。这种版本控制(MVCC - 多版本并发控制)也避免了双花问题。

HF 不在乎我们为 key 设置的任何值(值可以是任何值)。

假设我们必须添加带有 keycar1和 value 的汽车资产{"name":"Audi", "owner":"ABC"}。当我们将交易发送给所有背书节点时,他们会创建如下所示的 RW 集

  • 读取集:NA
  • 写集:Key-car1, version-1, value-{"name":"Audi", "owner":"ABC"}

当 tx 提交到区块链时,其中一个块将具有此事务,并且当前状态数据库(Couch db 或 level db)将为该键提供此最新值:Key-car1, version-1, value-{ "name": "Audi", "owner": "ABC"}

假设我们更新这个相同的资产(car1)

car1 - {“名称”:“奥迪”,“所有者”:“PQR”}

在这里,我们将所有者从 更改ABCPQR

这次 Endorsing peer 创建以下 RW 集

  • 读取集:钥匙-car1,version-1
  • 写集:Key-car1, version-2, value-{"name":"Audi", "owner": "PQR"}

一旦 tx 被提交到区块链。再次将此事务添加到一个块中,最重要的是,当前状态数据库将使用此最新值进行更新,旧值将被更新,并且版本也将更改为 2。


推荐阅读