Ich fing an, einen Smart Contract zu programmieren, der einige Daten von Unternehmen speichern sollte. Diese Daten (hauptsächlich Namen und Daten) wurden so organisiert:
├── Client1(Contract)
│ ├── Year2018 (Struct containing string,uint and struct)
│ │ ├── Case 1 (Struct containing string)
│ │ └── Case 2 (Struct containing string)
│ └── Year2017
│ └── Case 1 (Struct containing string)
├── Client 2
│ └── Year2018
│ ├──Case1 (Struct containing string)
│ └──Case2 (You got it)
Ich habe es geschafft, einen Vertrag abzuschließen, um diese Strukturen zu füllen. Daher wurde mir klar, dass dieser Prozess viel zu schwer und kostspielig war. Es ist kein Problem, wenn mein Projekt mit einer zentralisierten Datenbank interagiert, die Blockchain wird nur zu Überprüfungszwecken verwendet.
Nur wenige Leute in diesem Forum haben mir vorgeschlagen, "die Daten zu hashen und in einer DB zu speichern". Ich denke, das wäre eine großartige Lösung, aber ich kann nicht verstehen, wie ich das einrichten soll ...
Wie würde ich die obige Datenstruktur in einer DB speichern? Wie würde ich die Daten zuerst hochladen (Ist es von DB zu Smart Contract oder umgekehrt?)? Wäre es möglich, die Daten auf einem Block-Eplorer zu visualisieren?
Bitte fragen Sie nach, wenn Sie etwas in dem, was ich gesagt habe, nicht verstanden haben :) Vielen Dank und einen schönen Tag
Sie können diese Lösung verwenden, um zu beweisen, dass die Datenbank mit „legitimen“ Datensätzen arbeitet, indem Sie Hashes der Dokumente in einem Vertrag speichern.
Der grundlegende Prozess besteht darin, dass Sie einen Datensatz haben, den Sie einfügen möchten, und Sie möchten ihn in Ihrem Vertrag als legitim stempeln. Sie werden den Hash des Dokuments im Vertrag und das Dokument selbst an anderer Stelle (db) aufzeichnen.
Konvertieren Sie die Daten serverseitig in ein Zeichenfolgenobjekt und generieren Sie dann einen Hash. Meiner Meinung nach besteht der beste Weg, um sicherzustellen, dass alle Clients (zu jeder Zeit in der Zukunft) einen Hash mit demselben Algorithmus generieren können, den der Vertrag verwendet, darin, dies als kostenlosen Service aus dem Vertrag anzubieten.
function hashHelper(string data) public pure returns(bytes32 hash) {
return keccack256(data);
}
Dann gäbe es eine Möglichkeit für den Server, dies zum Vertragsstatus hinzuzufügen:
function addHash(bytes32 hash) public onlyAuthorized returns(bool success) {
require(!isHash(hash)); // check uniqueness
hashMap[hash] = true; // store it, for example, mapping(bytes32 => bool) public hashMap
return true;
}
Mehr zur Technik: https://medium.com/@robhitchens/selective-disclosure-with-proof-f6a1ac7be978
Mehr zur Allzweck-Kontraktspeicherorganisation: Gibt es gut gelöste und einfache Speichermuster für Solidity?
Ich hoffe es hilft.
Lucas Lareginie
Rob Hitchens
Lucas Lareginie