Wo werden die Variablen eines Smart Contracts gespeichert?

Wir alle wissen, dass wir Smart Contracts mit Solidität in Ethereum schreiben können, wie zum Beispiel:

 mapping(bytes32 => bytes32) private  userPasswds ;
    event RecordReturnResult(bool res);

    /// @dev new the pair of user and password to the array here
    function newPair(string user, string password)  returns (bool) {      
        bytes32  sha3_user = sha3(user);
        bytes32  sha3_password = sha3(password);
        bool res = true;
        if (userPasswds[sha3_user] > 0) {
            res = false;
            RecordReturnResult(res);
            return res;
        }           
        else{
            userPasswds[sha3_user] = sha3_password;
            res = true;
            RecordReturnResult(res);
            return res;
        }      
    }

Wo werden die Variablen gespeichert? Zum Beispiel:

    mapping(bytes32 => bytes32) private  userPasswds ;
    event RecordReturnResult(bool res);bytes32  sha3_user = sha3(user);
    bytes32  sha3_password = sha3(password);
    bool res = true;

werden sie in blockchain oder leveldb oder an anderen orten gespeichert? Danke.

Vielen Dank für Ihre Antwort. aber ich kann nur einen als Gewinner auswählen.

Antworten (2)

diese Zustände werden im Speicher des Vertrags gespeichert. Jeder Vertrag hat seinen eigenen Speicherplatz und Speicherplatz und beide befinden sich in der Blockchain (leveldb physisch).

Schauen Sie sich das Diagramm unten an, um eine Vorstellung zu bekommen:

Geben Sie hier die Bildbeschreibung ein

Vertragsvariablen (Zustand) werden von der virtuellen Ethereum-Maschine in einem Merkle-Baum gespeichert . Der Hash des Baums wird in einem Block gespeichert und der Block wird über leveldb auf der Festplatte gespeichert.

Danke, Sie sagten, der Baum ist in EVM gespeichert, nicht im Block. Wenn also der Strom abgeschaltet wird, werden die Daten fehlen?