Löschfunktion in Solidität

Irgendetwas stimmt mit meiner Löschfunktion nicht oder ich weiß nicht, was ich übersehen habe.

Die ID des Benutzers wird sowohl in User (struct) als auch in userIds (array) gespeichert, und ich möchte in der Lage sein, die ID aus userIds und den gesamten Benutzer (id, userInfo, userData;) aus meiner Blockkette zu löschen. Meine aktuelle Funktion löscht den Benutzer nicht wirklich :(

function delete_user_byId(uint _id) public returns(uint[]) {
    if (_id >= userIds.length) return;
    for (uint i = _id; i<userIds.length-1; i++){
        userIds[i] = userIds[i+1];
    }
    delete users[_id];
    delete userIds[userIds.length-1];
    userIds.length--;
    return userIds;

}

Antworten (2)

Ich bin mir nicht sicher, warum scheint nicht zu funktionieren. Es könnten andere Faktoren eine Rolle spielen, wie z. B. die Testmethodik. Warten Sie auf das Mining der Transaktion, bevor Sie sich nach dem neuen Status erkundigen?

In jedem Fall wird das Muster wegen der ungebundenen forSchleife nicht skaliert. Es gibt auch eine Obergrenze für die Größe der uint[]zurückzugebenden, daher sollte die Rückgabe von mehr als einem Datensatz gleichzeitig mit Vorsicht verwendet werden.

Ihr Mapping/Struct-Ansatz kann ein Löschen unterstützen , wenn Sie es brauchen . Schau mal hier vorbei: https://medium.com/@robhitchens/solidity-crud-part-2-ed8d8b4f74ec

Es gibt einfachere Möglichkeiten, ähnliche Dinge zu erreichen. Überlegen Sie also, wie wichtig deletees im Kontext der App ist (es wird nie wirklich etwas gelöscht), und prüfen Sie die Vor- und Nachteile verschiedener Ansätze: Gibt es gut gelöste und einfache Speichermuster für Solidity?

Ich möchte Ihrer Mitteilung einen weiteren wichtigen Punkt hinzufügen, deleteder eigentlich überhaupt kein Löschen ist - es wird nur Variablen ein Standardwert zugewiesen. Es weist den Attributen des Benutzers, nämlich id, userInfo und userData, abhängig vom jeweiligen Datentyp Standardwerte zu.

Weitere Informationen finden Sie in der folgenden Dokumentation -

https://solidity.readthedocs.io/en/v0.4.24/types.html#delete

Mehr über das Schlüsselwort delete in solidity erfahren