Eliminar función en solidity

Hay algo mal con mi función de eliminación o no sé lo que me he perdido.

La identificación del usuario se almacena tanto en User (struct) como en userIds (matriz) y quiero poder eliminar la identificación de userIds y el usuario completo (id, userInfo, userData;) de mi cadena de bloques. mi función actual realmente no elimina al usuario :(

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;

}

Respuestas (2)

No estoy seguro de por qué no parece funcionar. Podría haber otros factores en juego, como la metodología de prueba. ¿Estás esperando la transacción para minar antes de preguntar sobre el nuevo estado?

En cualquier caso, el patrón no se escalará debido al forbucle no enlazado. También hay un límite superior en el tamaño de la uint[]devolución, por lo que devolver más de un registro a la vez debe usarse con precaución.

Su enfoque de mapeo/estructura puede admitir una eliminación si la necesita . Eche un vistazo aquí: https://medium.com/@robhitchens/solidity-crud-part-2-ed8d8b4f74ec

Hay formas más simples de lograr cosas similares, así que considere qué tan importante deletees en el contexto de la aplicación (nunca se elimina nada realmente) compruebe los pros y los contras de los diferentes enfoques: ¿Existen patrones de almacenamiento simples y bien resueltos para Solidity?

Quiero agregar un punto más importante a su aviso que deleteen realidad no es una eliminación en absoluto: solo está asignando un valor predeterminado a las variables. Asignará valores predeterminados de atributos de usuario, a saber, id, userInfo y userData, según el tipo de datos respectivo.

Consulte la siguiente documentación para obtener más detalles:

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

Entendiendo más sobre eliminar palabra clave en solidity