Vertragsstruktur zum Speichern der Benutzeranwendung

Ich habe eine Nodejs-Anwendung, in der Benutzer mehrere Formulare ausfüllen und diese Daten in der zentralen Datenbank, dh MongoDB, gespeichert werden. Der Administrator kann die Benutzerdaten überprüfen und die Benutzerdaten an Blockchain übertragen, um die Integrität der Daten aufrechtzuerhalten, sodass Dritte die Daten in Zukunft einsehen und ihre Integrität überprüfen können.

Da die Daten nun groß sind, können sie nicht direkt in der Blockchain gespeichert werden. Also konvertiere ich die Daten zuerst in PDF und erstelle dann den Hash von PDF mit dem Kecack 256-Algorithmus und speichere den Hash im Vertrag. Und im Gegenzug bekomme ich eine Transaktions-ID, mit der ich später die Daten aus der Blockchain abrufen kann.

Bitte schlagen Sie vor, ob ich auf dem richtigen Weg bin oder es einen besseren Ansatz dafür gibt.

Hinweis:- Wenn ein Benutzer seine Anwendung aktualisiert, wird der Administrator die Benutzerdaten erneut in die Blockchain übertragen.

Dies ist der Vertragscode, den ich verwende:

pragma solidity ^0.4.17;
contract AddUserApplication {
    string public userdata;
    function addUserData(string data) public {
        userdata = data;
    }
}

// Code zum Abrufen der Daten aus Block:

    const viewTransaction = async () => {
    let viewData = await web3.eth.getTransaction('0xd819b09a906232a37b6ad102a7616eed6af9d968718b23878e023ccf7f967f8');
    console.log('viewdata: ',viewData.input);
    const decodedData = abiDecoder.decodeMethod(viewData.input);
    console.log('decodedData',decodedData);
}

Antworten (1)

Also konvertiere ich die Daten zuerst in PDF und erstelle dann den Hash von PDF mit dem Kecack 256-Algorithmus und speichere den Hash im Vertrag

Warum nehmen Sie nicht einfach die mongodb-Dokumentausgabe (JSON) und hashen sie stattdessen? Die Einführung von PDF zwischendurch erscheint unnötig, und PDF-Konvertierungen neigen dazu, zwischen Konvertern ziemlich unzuverlässig zu sein. Es wäre ziemlich einfach, unterschiedliche PDFs für dieselben Daten und damit unterschiedliche Hashes zu erhalten.

Und im Gegenzug bekomme ich eine Transaktions-ID, mit der ich später die Daten aus der Blockchain abrufen kann.

Die Transaktions-ID allein hat mit der Abrufbarkeit der Daten wenig zu tun. Es hilft Ihnen einfach festzustellen, ob Sie es erfolgreich in die Kette aufnehmen konnten. Darüber hinaus werden Sie niemals in der Lage sein, die Originaldaten aus der Kette abzurufen, wenn Sie nur einen Hash der Daten festlegen.

Ihr Vertrag unterstützt auch nur eine einzige Zeichenfolge. Eine bessere Idee wäre, eine uint -> bytes32-Zuordnung zu haben und einen Hash für eine Benutzer-ID zu übergeben, den Sie dann später mit der Benutzer-ID lesen können.

Hallo Raghav, ich habe die Frage mit der Methode aktualisiert, die ich zum Abrufen der Daten aus dem Block verwende. Und ich kann auch die alten Daten mit Hilfe der Transaktions-ID abrufen. Können Sie bitte erklären, warum es falsch ist?