我怎样才能在 Hyperledger Fabric 中获得唯一 ID

How could I get unique IDs in Hyperledger Fabric

鉴于 Hyperledger Fabric 的链代码需要确定性,因为它在所有验证节点 () 上执行,如何获得唯一 ID 以便我可以 'InsertRow' 具有唯一值。

例如,如果我执行我的代码以将新记录附加到 table,我需要一个唯一键。如果我在验证对等点 1 (vp1) 上获得了 GUID,那么如果我在验证对等点 2 (vp2) 上获得了一个 GUID,那将是一个不同的密钥。如果我使用毫秒作为密钥,则相同。

有没有一种方法可以从链代码中获取链代码中的确定性唯一 ID,而不是从 'client' 传递它?

我倾向于将其实现为一个单调递增的序列变量,与您的 table 一起存储在 putstate 中。 IOW,在您的 Init() 函数中初始化 PutState("nextsequence", 0) 之类的东西,然后在您需要新 ID 的任何时候进行 RMW。 RMW 突变将隐式耦合到您的行插入,并且应该在所有实例中都是确定性的。

如果ID应该由ch​​aincode生成,那么单调递增的计数器是一个很好的解决方案。如果 ID 应该由 tx 生成应用程序选择,您应该强制执行 ID 不能重复使用的规则,并鼓励 tx 生成器使用 select 抗冲​​突 ID 的协议。