鉴于Hyperledger Fabric的链代码需要具有确定性,因为它在所有验证对等体(Are blocks mined in HyperLedger Fabric?)上执行,如何获得唯一ID以便我可以'的InsertRow'具有独特的价值。
例如,如果我执行我的代码以向表中追加新记录,我需要一个唯一的密钥。如果我在Validating Peer 1(vp1)上获得GUID,那么如果我在Validating Peer 2(vp2)上获得GUID,它将是一个不同的密钥。如果我使用毫秒作为键,则相同。
有没有办法可以从链码中获取链码中的确定性唯一ID,而不是从客户端传递出来?'?
答案 0 :(得分:4)
我倾向于将它作为一个单调递增的序列变量来实现,该变量存储在putstate旁边的表中。 IOW,在你的Init()函数中初始化类似PutState(“nextsequence”,0)的东西,然后在任何你需要新id的时候初始化RMW。 RMW变异将隐式耦合到您的行插入,并且应该在所有实例中都是确定性的。
答案 1 :(得分:0)
如果ID应该由链码生成,那么单调递增计数器就是一个很好的解决方案。如果应该由tx生成应用程序选择ID,则应强制执行ID不能重复使用的规则,并鼓励tx生成器用于选择抗冲突ID的协议。