SPRINT 2 - SistemasTecTlaxiaco/recyclenexus3.0 GitHub Wiki
DISEÑO DE MUCKUP
RESULTADOS
Reciclaje (wondershare.com)
CONCLUSIÓN
La plataforma digital Recycle Nexuz emerge como una respuesta innovadora a la creciente conciencia ambiental y la necesidad de prácticas sostenibles. A través de su enfoque en la simplicidad y la seguridad, ofrece a los usuarios una experiencia interactiva y personalizada que fomenta el reciclaje y la recompensa. Al simplificar el proceso de reciclaje y recompensa, la plataforma busca no solo informar y educar, sino también inspirar y motivar a las personas a adoptar hábitos más responsables. La autenticación segura y la accesibilidad se destacan como características clave, junto con la ubicación de puntos de reciclaje cercanos y un sistema de recompensas basado en tokens. En este sentido, Recycle Nexuz no solo se posiciona como una herramienta tecnológica avanzada, sino también como un catalizador para el compromiso con el medio ambiente. Su objetivo principal es transformar la conciencia ambiental en acciones tangibles y gratificantes, convirtiendo el reciclaje en una experiencia interactiva y enriquecedora para todos los usuarios. Con esta iniciativa, se establece un nuevo estándar en la promoción de prácticas sostenibles, demostrando que la tecnología puede ser una aliada poderosa en la búsqueda de un futuro más verde y equitativo.
DIAGRAMAS
CODIGOS
Primera clase Código; contract Usuario { struct Usuario { uint128 balanceToken; string direccion; uint32 idUsuario; } function depositarMaterial(uint128 cantidad, string memoria _direccion) public { Usuario storage usuario = usuarios[msg.sender]; usuario.balanceToken += cantidad; usuario.direccion = _direccion; } function retirarRecompensa(uint32 idRecompensa, uint128 cantidad) public { Usuario storage usuario = usuarios[msg.sender]; require(usuario.balanceToken >= cantidad, "Saldo insuficiente"); usuario.balanceToken -= cantidad; near_sdk::transfer(usuario.direccion, cantidad); } mapping(address => Usuario) usuarios; } Segunda clase contract Usuario { public func simularComportamiento(string material, string tipoMaterial) -> String { string resultado = ""; match (material, tipoMaterial) { ("madera", "pino") => resultado = "El pino es ligero y facil de trabajar."; ("madera", "roble") => resultado = "El roble es denso y resistente."; ("metal", "acero") => resultado = "El acero es fuerte y duradero."; ("metal", "aluminio") => resultado = "El aluminio es ligero y maleable."; _ => resultado = "Material desconocido."; } return resultado; } }
Tercera clase import "usuario.near"; contract ControlAcceso { public func verificarAcceso(string rol, string areaAcceso) -> bool { let usuario = Usuario::new(env!("USER_CONTRACT_ID")); let accesoPermitido = false; match (rol) { "administrador" => { accesoPermitido = true; } "operador" => { if (areaAcceso == "produccion") { accesoPermitido = usuario.tienePermisoProduccion(); } else { accesoPermitido = true; } } "usuario" => { accesoPermitido = areaAcceso == "publica"; } _ => {} } if (!accesoPermitido) { let archivo_log = File::open("denegacion_acceso.log", "a"); archivo_log.write_line(format!("Acceso denegado para {} en {}", rol, areaAcceso)); archivo_log.close(); }
// Devolver el resultado de la verificación
return accesoPermitido;
} }
Cuarta clase import "usuario.near"; contract ControlAcceso { public func verificarAcceso(string rol, string areaAcceso) -> bool { let usuario = Usuario::new(env!("USER_CONTRACT_ID")); let accesoPermitido = false; match (rol) { "administrador" => accesoPermitido = true; "operador" => { if (areaAcceso == "produccion") { accesoPermitido = usuario.tienePermisoProduccion(); } else { accesoPermitido = true; } } "usuario" => { accesoPermitido = areaAcceso == "publica"; } _ => {} } return accesoPermitido; } }
Quinto diagrama import "usuario.near"; contract ControlAcceso { public func verificarAcceso(string rol, string areaAcceso) -> bool { let usuario = Usuario::new(env!("USER_CONTRACT_ID")); let accesoPermitido = false; match (rol) { "administrador" => { accesoPermitido = true; } "operador" => { if (areaAcceso == "produccion") { accesoPermitido = usuario.tienePermisoProduccion(); } else { accesoPermitido = true; } } "usuario" => { accesoPermitido = areaAcceso == "publica"; } _ => {} } if (!accesoPermitido) { // Registrar la denegación de acceso en un archivo de log let archivo_log = File::open("denegacion_acceso.log", "a"); archivo_log.write_line(format!("Acceso denegado para {} en {}", rol, areaAcceso)); archivo_log.close(); } return accesoPermitido; }
public func registrarDenegacion(string rol, string areaAcceso) { let archivo_log = File::open("denegacion_acceso.log", "a"); archivo_log.write_line(format!("Acceso denegado para {} en {}", rol, areaAcceso)); archivo_log.close(); let db = Database::new(env!("DATABASE_URL"));
let mut denegacion = Denegacion::new();
denegacion.rol = rol;
denegacion.area_acceso = areaAcceso;
denegacion.fecha_hora = Timestamp::now();
db.save(&denegacion);
} } struct Denegacion { string rol; string area_acceso; Timestamp fecha_hora; }
RESULTADOS
El resultado de esta práctica será un diagrama de clases detallado y bien estructurado, diseñado utilizando architect, que servirá como base para la implementación de Smart Contracts en una plataforma blockchain. El diagrama de clases incluirá los siguientes elementos: Se identificarán las clases principales del sistema, incluyendo todas las entidades relevantes involucradas en la lógica de negocio de los Smart Contracts. Para cada clase, se especificarán los atributos y métodos necesarios para representar adecuadamente la funcionalidad del sistema. Esto incluirá tanto atributos de datos como métodos de interacción y manipulación de la información. Así como también, Se definirán las relaciones entre las diferentes clases del sistema, incluyendo asociaciones, agregaciones, composiciones y herencias, según sea necesario para modelar correctamente la estructura del sistema. El resultado final es el diagrama de clases completo y bien diseñado que proporcionará una representación clara y precisa de la estructura estática del sistema basado en Smart Contracts. Este diagrama servirá como guía para el desarrollo e implementación de los Smart Contracts en una plataforma blockchain, asegurando la viabilidad y la eficacia del sistema en un entorno real de negocio.
CONCLUSIÓN
En esta práctica, se ha llevado a cabo el diseño de un diagrama de clases utilizando architect para la próxima implementación de Smart Contracts en una plataforma blockchain. Durante el proceso, se han logrado varios objetivos clave que contribuirán al éxito del proyecto. En primer lugar, se adquirió un profundo entendimiento de los conceptos fundamentales de los Smart Contracts y su aplicación en diversos escenarios de negocio. Esto proporcionó el contexto necesario para identificar las entidades principales y definir la funcionalidad requerida en el sistema. Además, se dominó el uso de architect como herramienta de modelado visual, permitiendo la creación y edición efectiva del diagrama de clases. Se aprovecharon las funcionalidades de la herramienta para representar claramente la estructura estática del sistema y documentar adecuadamente cada elemento del diagrama. Durante el diseño del diagrama de clases, se aplicaron buenas prácticas de diseño y se utilizaron patrones de diseño relevantes para optimizar la modularidad, la reutilización y la escalabilidad del sistema. Esto garantizará la viabilidad y mantenibilidad del sistema a largo plazo.