Ich habe einen einfachen Smart Contract mit einer variablen Farbe, die eine Zeichenfolge speichert.
Wenn ich das richtig verstehe, kann jede Transaktion den Zustand dieser Variable ändern und wird dauerhaft in der Blockchain gespeichert. Nehmen wir an, tx#1 ändert es auf Rot, tx#1 ändert es auf Blau und tx#2 auf Rot, tx#3 auf Grün.
Ich möchte Rot, Blau und Grün haben und nicht nur den letzten Zustand dieser variablen Farbe.
Wie kann ich das erreichen?
Vielen Dank
Der übliche Ansatz besteht darin, Ereignisse für alle Zustandsänderungen auszugeben. Diese können extern überwacht werden, einschließlich Wiedergabe von Anfang an und/oder Filter. Es ist eine gute Möglichkeit, einen Verlauf offenzulegen, ohne zu viel (teuren) Vertragsspeicher zu verwenden.
bytes32 x;
event LogChangedX(bytes32 X);
function doSomething(bytes32 newX) {
x = newX;
LogChangedX(x);
Clients, z. B. Browser oder Server, können das Ereignisprotokoll durchsuchen, um alle Änderungen zu entdecken, die an "x" vorgenommen wurden. Verwendet Web3-Ereignis-Listener.
Es gibt einen teureren, speicherintensiveren Ansatz, der eher einer Datenbank-TXN-Verlaufstabelle ähnelt, aber für die meisten Anwendungsfälle nicht benötigt wird.
Ich hoffe es hilft.
Sie können konstante Funktionen für ältere Zustände aufrufen, indem Sie die blockNumber in der Argumentliste angeben. Eine gute Möglichkeit, die blockNumber für Zustandsänderungen zu finden, ist das Ausgeben eines Ereignisses. Ich habe ein Beispiel erstellt, das dies hier zeigt:
https://github.com/chafey/ethereum-events
Und auch ein Blogeintrag:
http://chafey.blogspot.com/2017/03/applying-blockchain-to-healthcare-part_4.html
Hier ist ein Link zu dem Code, der die Ereignisse durchläuft und den älteren Status für die Smart Contracts erhält:
https://github.com/chafey/ethereum-events/blob/master/app/client/patientChanges.js#L6
FrenchieiSverige
Rob Hitchens
FrenchieiSverige
Rob Hitchens