Hyperledger fabric 如果链码调用同时查询和更新私有数据,则提案请求将返回错误。为什么?

Hyperledger fabric 如果链码调用同时查询和更新私有数据,则提案请求将返回错误。为什么?,hyperledger-fabric,blockchain,Hyperledger Fabric,Blockchain,执行范围或富JSON查询并更新中数据的链码 不支持单个事务,因为无法查询结果 在无法访问私有数据的对等方上验证,或 在缺少其有权访问的私有数据的对等方上。 如果链码调用同时查询和更新私有数据,则 提案请求将返回一个错误。如果你的申请可以 允许在链码执行和 验证/提交时间,然后可以调用一个链码函数 执行查询,然后调用第二个chaincode函数 更新。请注意,调用GetPrivateData()来检索 单个密钥可以在与相同的事务中生成 PutPrivateData()调用,因为所有对等方都可以基于

执行范围或富JSON查询并更新中数据的链码 不支持单个事务,因为无法查询结果 在无法访问私有数据的对等方上验证,或 在缺少其有权访问的私有数据的对等方上。 如果链码调用同时查询和更新私有数据,则 提案请求将返回一个错误。如果你的申请可以 允许在链码执行和 验证/提交时间,然后可以调用一个链码函数 执行查询,然后调用第二个chaincode函数 更新。请注意,调用GetPrivateData()来检索 单个密钥可以在与相同的事务中生成 PutPrivateData()调用,因为所有对等方都可以基于 在散列密钥版本上。

我遇到了这一小段关于在fabric中查询私有数据的
限制的内容。我对私有数据的概念非常陌生

我的理解是:

  • CC调用要求 范围或富JSON查询,并将两者更新为私有数据,会导致建议返回错误

  • 最好先调用一个chaincode函数来执行查询,然后再调用第二个chaincode函数来进行更新

  • 通常,检索单个密钥的
    GetPrivateData()
    可以在与
    PutPrivateData()
    调用相同的事务中进行,因为所有对等方都可以基于散列密钥版本验证密钥读取

我的理解正确吗? 如果是,那么为什么私有数据是这样?
如果没有,那么请给我一些建议。

因此,首先,无论是私有数据还是非私有数据,富查询都不会在提交时重新执行

现在,对于范围查询,请记住,范围查询都是假设键之间有字母顺序


但是,无论对等方是否拥有私有数据,事务都需要通过MVCC检查,但是如果对等方没有私有数据,那么它只能看到哈希值(而不是真正的键名),哈希值没有按字母顺序排序-因此它无法验证范围查询模拟是否过时。

谢谢,@yacovm,我想你回答的正是我需要的。我需要进一步挖掘rich和range查询的工作原理。