在Hyperledger Fabric v0.6中,可以实现一个供应链应用程序,使追溯产品渊源成为可能,并且避免了双重花费(即销售超过自身库存)和伪造产品的风险。例如,当供应商向经销商提供500个商品时,这些数据将被储存在总账之中。经销商可以通过调用“转移”函数来分配一定数量的商品给特定的经销商。转移函数会执行以下操作:
此外,消费者可以通过查看总账来追溯产品渊源(例如,该产品从经销商1购买,而经销商1又从经销商2购买,最后从供应商处获得)。
然而,由于它使用单一总账,隐私是一个问题(例如,经销商2可以看到经销商1订购的商品数量等信息)。
为了解决隐私问题,在Hyperledger Fabric v1.0中提出了使用多个通道的解决方案。在这种方法中,供应商和经销商使用单独的通道/总账。同样,经销商和经销商1使用单独的通道/总账,经销商和经销商2使用另一个单独的通道/总账。
然而,由于经销商(即经销商1和经销商2)无法访问供应商和经销商的通道/总账,因此经销商不知道供应商向经销商提供的真实数量。例如,如果供应商仅向经销商提供了500个商品,则经销商可以向经销商声称已从供应商采购了1000件商品。这种方法将导致无法避免双重花费/伪造产品。
此外,如何实现产品渊源追溯?消费者将能够访问所有通道/总账吗?如果是这样,隐私问题又会浮现。
鉴于这一点,在Hyperledger Fabric v1.0中如何使用多个通道,同时实现产品渊源追溯和禁止双重花费呢?
- 检查经销商是否有足够的商品数量供应给特定的经销商(即,如果要转移的商品数量小于或等于当前数量)
- 更新总账(即,扣除经销商的当前数量并将其添加到经销商的当前数量中)
此外,消费者可以通过查看总账来追溯产品渊源(例如,该产品从经销商1购买,而经销商1又从经销商2购买,最后从供应商处获得)。
然而,由于它使用单一总账,隐私是一个问题(例如,经销商2可以看到经销商1订购的商品数量等信息)。
为了解决隐私问题,在Hyperledger Fabric v1.0中提出了使用多个通道的解决方案。在这种方法中,供应商和经销商使用单独的通道/总账。同样,经销商和经销商1使用单独的通道/总账,经销商和经销商2使用另一个单独的通道/总账。
然而,由于经销商(即经销商1和经销商2)无法访问供应商和经销商的通道/总账,因此经销商不知道供应商向经销商提供的真实数量。例如,如果供应商仅向经销商提供了500个商品,则经销商可以向经销商声称已从供应商采购了1000件商品。这种方法将导致无法避免双重花费/伪造产品。
此外,如何实现产品渊源追溯?消费者将能够访问所有通道/总账吗?如果是这样,隐私问题又会浮现。
鉴于这一点,在Hyperledger Fabric v1.0中如何使用多个通道,同时实现产品渊源追溯和禁止双重花费呢?