Hyperledger fabric Hyperledger结构如何确保couchdb中状态的完整性?

Hyperledger fabric Hyperledger结构如何确保couchdb中状态的完整性?,hyperledger-fabric,Hyperledger Fabric,在Fabric的1.x版本中,可以使用Couchdb作为状态存储。Fabric如何确保国家的完整性?例如,如果有人通过直接访问特定节点上的Couchdb来操纵结构外部的状态,该怎么办。至少可能导致该节点与网络的其他部分不一致。检测某个节点中有人操纵和调整状态的方法是利用并仔细定义认可策略 例如,假设您有两个组织,每个组织都有两个对等方:OrgA、OrgB和peer1_OrgA、peer2_OrgA、peer1_OrgB、peer2_OrgB。因此,您可以定义一个需要所有4个对等方背书的背书策略。

在Fabric的1.x版本中,可以使用Couchdb作为状态存储。Fabric如何确保国家的完整性?例如,如果有人通过直接访问特定节点上的Couchdb来操纵结构外部的状态,该怎么办。至少可能导致该节点与网络的其他部分不一致。

检测某个节点中有人操纵和调整状态的方法是利用并仔细定义认可策略

例如,假设您有两个组织,每个组织都有两个对等方:OrgA、OrgB和peer1_OrgA、peer2_OrgA、peer1_OrgB、peer2_OrgB。因此,您可以定义一个需要所有4个对等方背书的背书策略。接下来,假设peer1_orgA遭到破坏并伪造状态

由于客户机必须满足背书策略,它将向所有对等方发送事务建议,对等方将模拟事务并基于哈希RWSet上的状态和签名返回RWSet

现在,由于
peer1_orgA
的状态伪造,它将返回不同的RWSet,因此签名将不同,因此客户将无法满足背书政策,而且它将能够发现
peer1_orgA
的结果已发生分歧


这允许您在状态中防止fork,并注意确保状态完整性的非确定性。

这在很大程度上取决于应用程序中如何计算状态,对吗?如果有人在应用程序(直接访问couchdb)之外篡改了状态的早期版本(删除它),它可能不会反映在状态计算中,因为应用程序可能总是使用最新版本。这与merkle树形成对比,在merkle树中,改变树中的任何内容都会产生一个新根。因此,在现实中,确保couchdb没有被本地更改的唯一方法是对整个数据库运行审计,看看它与其他数据库相比如何。答案中的RWSet是什么?RWSet是读写集的快捷方式,它捕获链码模拟期间的所有读写。@ArtemBarger我尝试在2 Org上运行这个实验(每个有2个对等点)网络,以Couchdb作为状态数据库。背书策略设置为-P“AND('Org1MSP.peer','Org2MSP.peer')。所有4个对等点中的初始数据都是{Key:“1”,Owner:“John”}。我打开了peer1.org1的fauxton Couchdb接口,并将所有者更改为“Doe”然后运行了一个链码调用方法,将所有者更改为“Smith”。调用成功运行,现在所有4个对等方的所有者都是“Smith”。根据您的上述回答,我希望调用会失败,因为RWSet哈希在背书期间会有所不同。