hyperledger-fabric - 我们可以在 Hyperledger Fabric 区块中找到什么样的交易?
问题描述
在比特币区块链中,交易只是“将一些金额从 X 转移到 Y”的类型,因此我们总是对区块链进行实际更改。
在 Hyperledger Fabric 中,交易如下:
在通道中实例化一些链码
调用一些链码(这可能只是一个查询以在分类帐/世界状态中显示某个资产)
我确信在某个通道中实例化链码或运行改变世界状态的东西是有资格放入块中的事务。我不明白的是哪些交易可以进入下一个区块。如果某些链码没有写入或更新世界状态(在 RW 集中,读取集与写入集相同)仍然可以包含在下一个块中吗?还是可以安全地“丢弃”?
解决方案
所有背书节点都必须具有实例化的链码,以便他们可以模拟交易并创建读/写(RW)集。安装和实例化链码是不同于常规调用的事务。
调用一些事务意味着它可以是其中之一
- 询问
- 添加资产、更新资产、删除资产
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”}
在这里,我们将所有者从 更改ABC
为PQR
这次 Endorsing peer 创建以下 RW 集
- 读取集:钥匙-car1,
version-1
- 写集:Key-car1,
version-2
, value-{"name":"Audi", "owner":"PQR"
}
一旦 tx 被提交到区块链。再次将此事务添加到一个块中,最重要的是,当前状态数据库将使用此最新值进行更新,旧值将被更新,并且版本也将更改为 2。
推荐阅读
- php - 如何在 laravel 5.8 中使用 mailchimp 发送简单邮件
- python-3.x - 如何使用包含 python3 解释器的 virtualenv 打包 pyspark 代码?
- quarkus - Quarkus 入门应用抛出异常 workerPoolSize must be > 0
- python - 有没有办法用对应的大陆标记一个地区?Python
- angular - NgRx 和 RxJS:依赖状态选择器
- sql - 如何在 laravel 中使用 sql password() 函数登录?
- visual-studio - 如何在 Visual Studio Storyboard 中根据设备大小缩放图像
- python - 使用 pyproject.toml 文件从私人仓库安装 python 诗歌
- r - 关于 R 中的“officer”包和 Table 函数
- ansible - Anisble:从 with_items 获取动态寄存器