Wie kann ich eine Datenbank und einen Smart Contract interagieren lassen?

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

Antworten (1)

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.

In Ordnung, also wäre der Prozess so? : - Ich sammle die Informationen meiner Kunden in einem json-Format ( und speichere sie in einer DB ). - Mein intelligenter Vertrag analysiert den JSON, hasht jeden Fall (Struktur der Daten) und speichert den Hash. - Auf meiner Website zeige ich die Daten aus meiner DB an und stelle den zugehörigen Hash für jeden Fall bereit (mit web3 aus meinem Vertrag)
Technisch hasht Ihr Server die Dokumente und speichert die Hashes in einem Smart Contract, um eine Kette von Existenznachweisen zu erstellen. Der Vertrag kann eine Client-Funktion zur Unterstützung dieses Prozesses darstellen.
Also habe ich meine Daten in einer JSON-Datei bestellt, die ich in meine Firebase-Datenbank eingefügt habe. Jetzt muss ich jede der „Fall“-Strukturen mit einer Vertragsfunktion hashen (ausgelöst mit web3) und den zugehörigen Hash jedes „Falls“ zu meiner Datenbank hinzufügen. Schließlich rendere ich die gesamten Daten in meinem Frontend aus meiner Datenbank, ist das richtig? Entschuldigung, dass ich so viele Fragen stelle und vielen Dank