【问题标题】:What kind of transactions we can find in Hyperledger Fabric blocks?我们可以在 Hyperledger Fabric 区块中找到什么样的交易?
【发布时间】:2019-12-18 18:02:45
【问题描述】:

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

在 Hyperledger Fabric 中的交易是这样的:

  • 在通道中实例化一些链码

  • 调用一些链码(这可能只是一个查询以显示某个 账本/世界状态中的资产)

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

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

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

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

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

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

    HF 不关心我们为键设置的任何值(值可以是任何值)。

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

    • 读取集:不适用
    • 写集: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 - { "name": "Audi", "owner": "PQR"}

    在这里,我们将所有者从 ABC 更改为 PQR

    这次 Endorsing peer 创建以下 RW 集

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

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

    【讨论】:

    • 好吧,例如,如果我在您的最后一笔交易之后进行 GET,例如 get-car1 - {"name": Audi, "owner": PQR},我将拥有这个:- 读取集:Key-car1,version-2,value-{" name":"Audi", "owner":"PQR"} - Write Set: NA 我们将在账本中有一个新区块,但世界状态不会改变,对吧?
    • 对于查询tx,它不创建读/写集,它只是通过peer从couch DB中获取记录,总是有最新记录。
    猜你喜欢
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多