在Hyperledger Fabric v0.6中,可以实施供应链应用程序,允许跟踪出处并避免双重花费(即,分配/销售项目比它更多),从而避免伪造。例如,当供应商向分销商提供500个单位的项目时,该数据存储在分类帐中。分销商可以通过调用"转移"将指定数量的商品分发给特定的代理商。功能。传递函数执行以下操作:
采用这种方法,经销商不能分配更多(即双重支出)(例如,分发假冒/走私物品)。
此外,消费者可以通过查看分类帐来追踪出处(例如,来自经销商的reseller1购买的物品,来自供应商)。
但是,由于它使用单个分类帐,因此隐私是一个问题(例如,经销商2可以查看经销商1订购的商品数量等)。
建议的实施隐私的解决方案是在Hyperledger Fabric v1.0中使用多个渠道。在这种方法中,供应商和分销商使用单独的渠道/分类帐。同样,分销商和经销商1使用单独的渠道/分类帐,分销商和经销商2使用另一个单独的渠道/分类帐。
然而,由于经销商(即经销商1和经销商2)无法访问供应商和分销商的渠道/分类帐,因此经销商不知道供应商向分销商提供的实际数量。例如,如果供应商仅向分销商提供了500个数量,则分销商可以向经销商索取从供应商处采购1000个数量的经销商。采用这种方法,双重消费/假冒将无法避免。
此外,如何实施物源追踪?消费者是否可以访问所有渠道/分类账?如果是这种情况,则隐私再次成为一个问题。
鉴于此,我们如何在Hyperledger Fabric v1.0中使用多个渠道,同时允许跟踪来源并禁止双重支出?
答案 0 :(得分:5)
正如Artem指出的那样,今天没有直接的方法可以做到这一点。
Chaincodes可以跨通道读取,但只是弱读取,并且它们可能不会使读取的内容成为提交的偶然性。同样,跨渠道的交易也没有订购,这会产生其他复杂情况。
但是,只要两个渠道中至少有一个受信任的参与者,就应该可以安全地跨渠道移动资产。您可以将此视为监管或审计员角色。
要实现这一点,应用程序基本上必须在结构上实现互斥锁,以确保资源不会同时迁移到两个不同的通道。
考虑公司A,B和监管机构R的情况。众所周知,A控制通道A-R中的资产Q,而B希望安全地控制通道A-B-R中的资产Q.
为了安全地完成此操作,A可以执行以下操作:
绿色路径完成。现在,让我们说B决定不购买Q,A希望将其卖给A-C-R的C.我们开始假设(1),(2),已完成上述。
攻击路径,假设(1),(2)再次完成。
这里的关键是,B信任监管机构强制执行Q在A-B-R中释放Q之前无法在A-R中解锁。只要您包含单调类型的序列号以确保资产被锁定在正确的版本,无序读取就可以在各个通道中完成。
答案 1 :(得分:3)
目前还没有直接的方法在Hyperledger Fabric 1.0中的两个不同渠道提供物源。几乎没有方向支持这种情况:
答案 2 :(得分:0)
从 v1.2 开始,
Fabric提供了创建私有数据集合的功能, 允许渠道上已定义的组织子集的能力 认可,提交或查询私有数据,而无需创建 单独的频道。
现在,就您而言,您可以创建转销商数据的一个子集,以对特定实体私有,而无需创建单独的渠道。 有关更多信息,请参见:Fabric Doc。