2016-05-16 7 views
0

Da der Chaincode von Hyperledger deterministisch sein muss, weil er auf allen validierenden Peers ausgeführt wird (Are blocks mined in HyperLedger?), wie bekommt man eine eindeutige ID, so kann ich 'InsertRow' mit einem eindeutigen Wert.Wie konnte ich eindeutige IDs in Hyperledger erhalten

Zum Beispiel, wenn ich meinen Code ausführen, um einen neuen Datensatz an die Tabelle anzuhängen, würde ich einen eindeutigen Schlüssel benötigen. Wenn ich eine GUID beim Validieren von Peer 1 (vp1) bekomme, wäre es ein anderer Schlüssel, wenn ich eine GUID beim Validieren von Peer 2 (vp2) erhalten würde. Das gleiche, wenn ich Millisekunden als Schlüssel verwende.

Gibt es eine Möglichkeit, eine deterministische eindeutige ID in Chaincode aus dem Chaincode zu erhalten, anstatt sie vom "Client" zu übergeben?

Antwort

3

Ich würde geneigt sein, dies als eine monoton steigende Sequenzvariable zu implementieren, die in putstate neben Ihrem Tisch gespeichert wird. IOW, initialisiere etwas wie PutState ("nextsequence", 0) in deiner Init() -Funktion und dann RMW, wenn du eine neue ID brauchst. Die RMW-Mutation wird implizit mit Ihrer Zeileneinfügung gekoppelt und sollte für alle Instanzen deterministisch sein.

+2

Die Verwendung eines Zählerschlüssels/Wertpaars bedeutet, dass alle Transaktionen auf diesem Zähler serialisiert werden müssen. Sobald Hyperledger Fabric die Transaktionsausführung parallelisieren kann, wird dadurch die Skalierbarkeit des Chaincodes eingeschränkt. – user3779342

0

Wenn die ID durch den Chaincode generiert werden soll, dann ist ein monoton steigender Zähler eine gute Lösung. Wenn die ID von der tx erzeugenden App ausgewählt werden soll, sollten Sie die Regel erzwingen, die die IDs nicht erneut verwenden können, und das Protokoll anregen, das der TX-Generator verwendet, um kollisionsresistente IDs auszuwählen.

Verwandte Themen