2016-05-16 85 views
0

鉴于Hyperledger的链代码需要确定性,因为它在所有验证对等体(Are blocks mined in HyperLedger?)上执行,如何获得唯一ID,以便我可以使用唯一值“InsertRow”。我如何在Hyperledger中获得唯一ID

例如,如果我执行我的代码将新记录附加到表中,我需要一个唯一的键。如果我在验证对等体1(vp1)上获得GUID,如果我在验证对等体2(vp2)上获得GUID,则它将是一个不同的密钥。如果我使用毫秒作为关键字,情况也是如此。

有没有一种方法可以从chaincode中获得chaincode中的确定性唯一ID,而不是从'client'中传入?

回答

3

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

+2

使用计数器键/值对意味着所有事务都必须在此计数器上进行序列化。一旦超级控制结构可以并行处理事务执行,这将限制链码的可伸缩性。 – user3779342

0

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