---
# System prepended metadata

title: Construyendo un Criptobanco

---

# Construyendo un Criptobanco

Para este proyecto, vamos a programar un banco por medio de un smart contract. El criptobanco debe poder manejar múltiples cuentas de usuarios, de forma segura y transparente.

## Funcionalidades del Criptobanco

1. Crear una cuenta.
2. Bloquear su cuenta. Al bloquear una cuenta, ésta no puede realizar transferencias a menos que se desbloquee.
3. Desbloquear una cuenta. 
4. Depositarle fondos a una cuenta.
5. Consultar el balance de su cuenta.
6. Realizar transferencias a otra cuenta, siempre y cuando la cuenta esté desbloqueada.
7. Solicitar un préstamo simple. Los préstamos simples tienen un plazo de 30 días y una tasa de interés de 10%. Para solicitar el préstamo, se tienen que considerar las siguientes validaciones:
    - El criptobanco deberá tener los fondos suficientes. En caso de que el banco no tenga los fondos, el préstamo no se puede realizar.
    - El usuario no puede tener un préstamo activo.
8. Solicitar un préstamo sobrecolaterilazado. Para realizar un préstamo sobrecolateralizado, el usuario deberá dejar un colateral del 200% en garantía. Los préstamos sobrecolateralizados tienen un plazo de 30 días a una tasa de interés de 1%. El usuario no puede tener más de un préstamo activo.
9. Realizar un abono a un préstamo.
10. Cerrar la cuenta. Al cerrar la cuenta, se le regresan todos los fondos al usuario.

## Requerimientos

* Diseña las funcionas para maximizar seguridad, minimizar consumo de gas y reutilizar código.
* Cada acción que realice un banco, deberá emitir un evento.
* Desarrolla código limpio -- utiliza la mayor cantidad de conceptos aprendidos durante la clase.

## Instrucciones de entrega

1. Lanza el contrato a Rinkeby.
2. Sube el código fuente de la aplicación con el formato `<matricula>.sol`.
3. Graba un pequeño video explicando el funcionamiento del smart contract o genera la documentación necesaria para interactuar con él.
4. Genera un README.md con un "About" del proyecto en donde expliques el raciocinio de diseño de tu smart contract y cualquier nota relevante. (No hay extensión mínima ni máxima).