我怎样才能在 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应该由chaincode生成,那么单调递增的计数器是一个很好的解决方案。如果 ID 应该由 tx 生成应用程序选择,您应该强制执行 ID 不能重复使用的规则,并鼓励 tx 生成器使用 select 抗冲突 ID 的协议。
鉴于 Hyperledger Fabric 的链代码需要确定性,因为它在所有验证节点 (
例如,如果我执行我的代码以将新记录附加到 table,我需要一个唯一键。如果我在验证对等点 1 (vp1) 上获得了 GUID,那么如果我在验证对等点 2 (vp2) 上获得了一个 GUID,那将是一个不同的密钥。如果我使用毫秒作为密钥,则相同。
有没有一种方法可以从链代码中获取链代码中的确定性唯一 ID,而不是从 'client' 传递它?
我倾向于将其实现为一个单调递增的序列变量,与您的 table 一起存储在 putstate 中。 IOW,在您的 Init() 函数中初始化 PutState("nextsequence", 0) 之类的东西,然后在您需要新 ID 的任何时候进行 RMW。 RMW 突变将隐式耦合到您的行插入,并且应该在所有实例中都是确定性的。
如果ID应该由chaincode生成,那么单调递增的计数器是一个很好的解决方案。如果 ID 应该由 tx 生成应用程序选择,您应该强制执行 ID 不能重复使用的规则,并鼓励 tx 生成器使用 select 抗冲突 ID 的协议。