Suchen nach einem ähnlichen Dapp - Finden des Unterschieds zwischen Datensätzen mit dem Merkle-Baum

Ich kämpfe mit dem Projekt für meine Abschlussarbeit. Ich muss eine Đapp entwickeln, die das kann

  1. Speichern Sie eine Abfrage-ID als Ganzzahl und ein großes String-Array (das
    eigentlich die Ausgabe einer Abfrage an eine Datenbank ist, die als CSV-Datei angegeben ist).
  2. Wenn der Benutzer eine ID und eine andere CSV-Datei bereitstellt, muss die Đapp die Werte zurückgeben, die nicht mit denen übereinstimmen, die in der Blockchain für die angegebene Abfrage-ID gespeichert sind.

Aus diesem Grund sollte der modifizierte Merkle Patricia Trie von Ethereum verwendet werden. Ich sollte die Werte der CSV-Datei in einem Trie speichern, wobei die gehashten Werte die Blätter sind und sie immer wieder paarweise gehasht werden, bis sie den Root-Hash erreichen. Wenn der Benutzer dann eine ID und einen Datensatz bereitstellt, sollte ich den Root-Hash des Datensatzes mit dem in der Blockchain gespeicherten vergleichen. Wenn sie nicht übereinstimmen, muss ich die Hashes im nächsten Level vergleichen. Basierend auf diesem Vergleich sollte ich in die Richtung gehen, wo es eine Diskrepanz gibt, und am Ende die Blätter finden, die nicht zusammenpassen.

Ich stecke wirklich fest und bin mir nicht sicher, wie ich weiter vorgehen soll. Soll ich einen Speicher und eine Validierungsfunktion in Solidity implementieren? Oder wie fange ich richtig an? Ich würde gerne eine Beispielanwendung sehen, die ähnlich ist.

Antworten (2)

Vielleicht finden Sie es hilfreich, sich den Zeppelin Smart Contract anzusehen, der einen Merkle-Proof für eine bestimmte Wurzel und ein Blatt verifiziert;

https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/MerkleProof.sol

Es ist also wahrscheinlich nicht die effektivste Lösung, aber ich habe mich entschieden, die Daten mapping(uint256=>bytes32[])am Ende in a zu speichern, wobei die Ganzzahl die ID der Abfrage ist und das Byte-Array die gehashten Zeilen enthält. Auf diese Weise kann ich leicht das Byte-Array erhalten, das zu einer bestimmten ID gehört. Dann muss ich jedoch das gesamte Array durchlaufen, um jeden Eintrag zu überprüfen, aber mir ist keine bessere Idee eingefallen.