Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD DEL ISTMO
CONTRATOS INTELIGENTES A TRAVÉS DE LA
PLATAFORMA EOSIO Y LA TECNOLOGÍA DE CADENA
DE BLOQUES: UN CASO DE USO
TESIS QUE PARA OBTENER EL TÍTULO DE
INGENIERO EN COMPUTACIÓN
PRESENTA
JUAN HERNÁNDEZ LÓPEZ
DIRECTOR DE TESIS
DR. RICARDO CARREÑO AGUILERA
SANTO DOMINGO TEHUANTEPEC, OAXACA; FEBRERO DE 2020.
iii
Dedicatoria
Dedico este trabajo a mi familia, que me ayudo en todo el proceso de mi formación,
en especial a mis padres por todos los consejos y el apoyo que me brindaron. A mi
madre por respetar mis decisiones y por siempre decirme las cosas con sinceridad.
A mi padre que, aunque él no está presente en este momento, me formo durante la
mayor parte de mi vida.
Agradecimiento Agradezco la Universidad del Istmo por brindarme las facilidades que me
permitieron concluir mis estudios. A los profesores por todo el tiempo dedicado a mi
formación académica, en especial a los involucrados con este trabajo, por sus
valiosas observaciones, su tiempo y su paciencia.
A mis amigos y compañeros que de una u otra manera me ayudaron en los
momentos de dificultad y con los que compartí buenos y malos momentos.
iv
Resumen El crecimiento acelerado de aplicaciones que usan la tecnología de cadena de
bloques lleva día a día a explorar el uso de esta tecnología en nuevos campos de
aplicación, dado los beneficios atractivos de estas aplicaciones descentralizadas
como lo son: las transacciones de punto a punto, el anonimato, la seguridad y la
descentralización.
La plataforma para desarrollo de aplicaciones descentralizadas EOSIO, que se usó
inicialmente para la emisión de la criptomoneda EOS, se distingue de entre los
demás ya que es una plataforma que se asemeja a un sistema operativo, en la cual
se pueden programar contratos inteligentes usando el lenguaje C++ (Block.one,
2018).
El presente trabajo de tesis ofrece una alternativa de uso de la tecnología de cadena
de bloques en un campo en donde no se ha aplicado con anterioridad, que es en el
ámbito de salvaguardar información para generar planos o diseños en casas
inteligentes (domóticas), para cual se desarrolla un contrato inteligente en la
plataforma de EOSIO. Por lo tanto, se considera relevante explorar mediante este
caso de uso el potencial y las características que dice poseer este proyecto, para
así, generar documentación que conlleven al desarrollo de otros trabajos futuros de
investigación sobre el tema.
Las redes descentralizadas con tecnología de cadena de bloques con contratos
inteligentes son un tema de interés hoy en día, en donde dos de las principales
criptomonedas con capacidad de desarrollar contratos inteligentes son Ethereum y
EOS, en este caso, este trabajo se centra en la plataforma de EOS (EOSIO), ya que
la comunicación con la red de esta, es más fluida, al producir bloques cada 0.5
segundos, permitiendo que el tiempo de respuesta percibido por el usuario sea
mínimo; a diferencia de la red de Ethereum que produce un nuevo bloque en
promedio cada 15 segundos.
En el desarrollo de esta tesis se muestra una descripción general de la arquitectura
de toda la aplicación, que consta principalmente de cuatro componentes: la base de
datos externa IPFS (InterPlanetary File System), la cadena de bloques de EOSIO,
v
la billetera y el cliente web. En esta arquitectura el usuario interactúa directamente
con dos de ellos, el cliente web y la aplicación de escritorio de Scatter. En donde el
cliente web le presenta una interfaz gráfica para realizar bosquejos de planos de
planta, estos bosquejos pueden ser guardados por la aplicación, para lo cual el
usuario inicia sesión con una cuenta creada en la cadena de bloques de EOS.
El token llamado ZOA de EOS diseñado en este trabajo, trabaja en base a contratos
inteligentes, los cuales se dividen en tres partes: acciones, definiciones de tipo y
funciones. La función de la plataforma descentralizada EOSIO, es guardar la
información sensible, para generar diseños domóticos, es decir, de casas
inteligentes, siendo capaz la aplicación desarrollada; llamada de ahora en adelante
DisEOS, de desplegar los planos en base a esta información. Los contratos
inteligentes tienen las siguientes funciones principales: suscribir usuario, eliminar
usuario, agregar plano, borrar un plano y borrar todos los planos. Dado que el token
ZOA es una criptomoneda diseñada en la plataforma de EOSIO recibe el nombre
de token, es decir, es una criptomoneda programada en la plataforma de otra
criptomoneda (EOS), la cual requiere de una API que sirve como interfaz entre la
aplicación y la cadena de bloques, con un protocolo de nombre RPC para interactuar
con la cadena de bloques. Para realizar transacciones en la cadena de bloques
desde la interfaz de la aplicación, se requiere que estas sean firmadas, para lo cual
se usa Scatter. Scatter es una aplicación de escritorio que almacena las claves
públicas y privadas, ya que almacenar las claves en el navegador puede resultar
peligroso, dado que son vulnerables a cualquier ataque informático.
vi
Índice de contenido
Dedicatoria.........................................................................................................................................iii
Agradecimiento .................................................................................................................................iii
Resumen .............................................................................................................................................. iv
Índice de figuras ................................................................................................................................x
Índice de tablas ............................................................................................................................... xiii
1 Introducción ............................................................................................................................... 1
1.1 Trabajos relacionados...................................................................................................... 2
1.2 Planteamiento del problema ........................................................................................... 4
1.3 Justificación ....................................................................................................................... 5
1.4 Objetivos ............................................................................................................................ 6
1.4.1 Objetivo general ........................................................................................................ 6
1.4.2 Objetivos específicos ............................................................................................... 6
1.5 Delimitación del tema ....................................................................................................... 6
1.5.1 Alcances ..................................................................................................................... 6
1.5.2 Limitaciones ............................................................................................................... 7
1.6 Estructura de la tesis........................................................................................................ 7
2 Marco teórico ............................................................................................................................. 9
2.1 Cadena de bloques .......................................................................................................... 9
2.1.1 Eje cronológico........................................................................................................ 10
2.1.2 Componentes de un sistema con tecnología de cadena de bloques ............. 10
2.1.3 Criptomonedas ........................................................................................................ 11
2.1.4 Clasificación ............................................................................................................ 11
2.2 Contratos inteligentes .................................................................................................... 12
2.2.1 Comparación con contratos tradicionales ........................................................... 12
2.2.2 Campos de aplicación .................................................................................................. 13
2.3 EOSIO .............................................................................................................................. 13
2.3.1 Lenguaje de programación para EOSIO................................................................... 14
2.3.2 Sistemas operativos ..................................................................................................... 14
3 Desarrollo e implementación ................................................................................................ 16
3.1 Requisitos del sistema ................................................................................................... 16
3.2 Modelos de análisis de la aplicación web ................................................................... 17
3.2.1 Actores ........................................................................................................................... 18
vii
3.2.2 Casos de uso ................................................................................................................ 19
3.3 Diseño de la aplicación web ......................................................................................... 23
3.3.1 Contrato inteligente ...................................................................................................... 23
3.3.1.1 Definición de tipos de datos ................................................................................ 23
3.3.1.2 Funciones ............................................................................................................... 24
3.3.1.2.1 Suscribir usuario ............................................................................................ 24
3.3.1.2.2 Eliminar suscripción y eliminar planos ........................................................ 25
3.3.1.2.3 Guardar plano ................................................................................................. 25
3.3.1.2.4 Eliminar plano ................................................................................................. 27
3.3.2 Cliente web .................................................................................................................... 28
3.3.2.1 Interfaces de usuario ............................................................................................ 28
3.3.2.1.1 Vista de inicio.................................................................................................. 28
3.3.2.1.2 Vista de iniciar sesión .................................................................................... 29
3.3.2.1.3 Vista bosquejar ............................................................................................... 29
3.3.2.1.4 Vista perfil........................................................................................................ 30
3.3.2.2 Diagramas de secuencia ...................................................................................... 30
3.3.2.2.1 Iniciar sesión ................................................................................................... 31
3.3.2.2.2 Crear diseño ................................................................................................... 31
3.3.2.2.3 Mostrar perfil ................................................................................................... 32
3.3.2.2.4 Suscribir usuario ............................................................................................ 33
3.3.2.2.5 Guardar diseño ............................................................................................... 33
3.3.2.2.6 Mostrar diseño ................................................................................................ 34
3.3.2.2.7 Eliminar diseño, eliminar diseños y eliminar suscripción......................... 35
3.4 Implementación de la aplicación .................................................................................. 35
3.4.1 Actividades previas al desarrollo de la aplicación ................................................... 37
3.4.1.1 Entorno de desarrollo ........................................................................................... 37
3.4.1.2 Uso de billeteras .................................................................................................... 37
3.4.1.3 Uso de cuentas ...................................................................................................... 37
3.4.1.4 Contrato inteligente básico .................................................................................. 38
3.4.1.5 Contrato inteligente con persistencia de datos ................................................. 38
3.4.1.6 Token empleado en la aplicación ....................................................................... 38
3.4.2 Contrato inteligente de la aplicación .......................................................................... 39
3.4.2.1 Definiciones de tipo ............................................................................................... 40
viii
3.4.2.1.1 Tipo usuario .................................................................................................... 40
3.4.2.1.2 Tipo plano........................................................................................................ 41
3.4.2.2 Acciones ................................................................................................................. 42
3.4.2.2.1 Suscribir usuario ............................................................................................ 42
3.4.2.2.2 Eliminar suscripción y eliminar planos ........................................................ 44
3.4.2.2.3 Guardar plano ................................................................................................. 44
3.4.2.2.4 Eliminar plano ................................................................................................. 45
3.4.2.3 Despliegue del contrato inteligente .................................................................... 46
3.4.3 Cliente web .................................................................................................................... 47
3.4.3.1 Librerías JavaScript .............................................................................................. 47
3.4.3.1.1 Consulta de datos de la cadena de bloques desde el cliente web ........ 47
3.4.3.1.2 Autentificación de usuarios .......................................................................... 48
3.4.3.1.3 Envío de transacciones desde el cliente web ........................................... 49
3.4.3.2 Interfaces de usuario ............................................................................................ 49
3.4.3.2.1 Inicio ................................................................................................................. 49
3.4.3.2.2 Iniciar sesión ................................................................................................... 50
3.4.3.2.3 Bosquejar ........................................................................................................ 52
3.4.3.1.4 Perfil ................................................................................................................. 55
4 Evaluación ............................................................................................................................... 57
4.1 Costos .............................................................................................................................. 57
4.1.1 Costo por despliegue ................................................................................................... 58
4.1.2 Costo por almacenamiento de datos ......................................................................... 59
4.1.3 Costo por transacciones .............................................................................................. 60
4.2 Escalabilidad ................................................................................................................... 62
4.3 Privacidad y seguridad .................................................................................................. 63
5 Conclusiones y trabajo futuro ............................................................................................... 64
5.1 Conclusiones ................................................................................................................... 64
5.2 Trabajo futuro .................................................................................................................. 65
Configuración del entorno de desarrollo EOSIO ....................................................................... 67
A.1 Instalación de EOSIO .................................................................................................... 68
A.1.1 Componentes de la instalación ................................................................................ 69
A.1.1.1 Comprobar el funcionamiento de keosd ............................................................. 69
A.1.1.2 Comprobar el funcionamiento de cleos............................................................... 70
ix
A.1.1.3 Comprobar el funcionamiento de nodeos ........................................................... 70
A.2 Instalación de EOSIO.cdt .............................................................................................. 72
Creación y manejo de billeteras ................................................................................................... 74
Creación y configuración de cuentas .......................................................................................... 77
Primer contrato inteligente ............................................................................................................ 79
D.1 Especificación del contrato ........................................................................................... 79
D.2 Despliegue del contrato en la cadena de bloques .................................................... 79
Gestión de datos en la cadena de bloques ................................................................................ 82
E.1 Contrato de registro........................................................................................................ 82
E.2 Tabla de índice múltiple ................................................................................................. 83
E.3 Acción registrar ............................................................................................................... 84
E.4 Acción borrar ................................................................................................................... 84
Emisión y transferencia de tokens ............................................................................................... 85
F.1 Obtención y compilación del contrato EOSIO.token ................................................. 85
F.2 Despliegue del contrato en la cadena de bloques .................................................... 86
F.3 Creación de un token ..................................................................................................... 86
F.4 Emisión del token ........................................................................................................... 87
F.5 Transferencia de tokens ................................................................................................ 88
Contrato inteligente de la aplicación ............................................................................................ 89
Peticiones a la cadena de bloques .............................................................................................. 93
H.1 Consultar datos en la cadena de bloques .................................................................. 93
H.2 Autentificar usuarios ................................................................................. 93
H.3 Envío de transacciones firmadas ................................................................................. 94
Configuración de Scatter ............................................................................................................... 96
Referencias ................................................................................................................................... 101
x
Índice de figuras
Figura 2.1. Campos de aplicación de los contratos inteligentes. Modificado de
(Kumar, Panda, & Jena, 2018) .............................................................................. 13
Figura 3.1. Modelos de casos de uso de la aplicación. ......................................... 17
Figura 3.2. Diagrama de flujo de suscribir usuario. ............................................... 24
Figura 3.3. Diagrama de flujo de eliminar suscripción y eliminar planos. .............. 25
Figura 3.4. Diagrama de flujo de guardar plano. ................................................... 26
Figura 3.5. Diagrama de flujo de borrar plano. ...................................................... 27
Figura 3.6. Diseño de la interfaz inicio. ................................................................. 28
Figura 3.7. Diseño de la interfaz iniciar sesión. ..................................................... 29
Figura 3.8. Diseño de la interfaz bosquejar. .......................................................... 29
Figura 3.9. Diseño de la interfaz perfil. .................................................................. 30
Figura 3.10. Diagrama de secuencia iniciar sesión. .............................................. 31
Figura 3.11. Diagrama de secuencia crear diseño. ............................................... 32
Figura 3.12. Diagrama de secuencia ver perfil. ..................................................... 32
Figura 3.13. Diagrama de secuencia de suscribir usuario. .................................... 33
Figura 3.14. Diagrama de secuencia guardar diseño. ........................................... 34
Figura 3.15. Diagrama de secuencia mostrar diseño. ........................................... 34
Figura 3.16. Diagrama de secuencias de eliminar suscripción, eliminar diseños y
eliminar diseños. ................................................................................................... 35
Figura 3.17. Arquitectura de la aplicación DisEOS. ............................................... 36
Figura 3.18. Contrato de la aplicación. .................................................................. 40
Figura 3.19. Acción suscripción. ............................................................................ 43
Figura 3.20. Configuración de Scatter. .................................................................. 48
Figura 3.21. Proceso de autentificación. ............................................................... 48
Figura 3.22. Vista principal de la aplicación. ......................................................... 49
Figura 3.23. Vista para iniciar sesión. ................................................................... 50
Figura 3.24. Cuentas vinculadas a Scatter. ........................................................... 51
Figura 3.25. Vista bosquejar.................................................................................. 52
Figura 3.26. Elementos de diseño. ........................................................................ 53
Figura 3.27. Ventana solicitando autorizar una acción. ......................................... 54
xi
Figura 3.28. Proceso para guardar un plano. ........................................................ 54
Figura 3.29. Vista perfil. ........................................................................................ 55
Figura 3.30. Proceso para obtener datos. ............................................................. 56
Figura 4.1. Comportamiento de agregar y borrar plano. ....................................... 62
Figura A.1. Búsqueda de paquetes instalados. ..................................................... 67
Figura A.2. Instalación de eosio. ........................................................................... 68
Figura A. 3. Salida esperada para keosd &. .......................................................... 69
Figura A.4. Comandos de cleos. ........................................................................... 70
Figura A.5. Ejecución de nodeos. .......................................................................... 71
Figura A.6. Comprobación de nodeos. .................................................................. 71
Figura A.7. Información del nodo desplegado. ...................................................... 71
Figura A.0.8. Instalación de eosio.cdt. .................................................................. 73
Figura B.1. Creación de billetera. .......................................................................... 74
Figura B.2. Desbloqueo de billetera. ..................................................................... 75
Figura B.3. Configuración de billetera. .................................................................. 75
Figura B.4. Claves de carteraDise. ........................................................................ 76
Figura C.1. Creación de las cuentas julia y francisco. ........................................... 77
Figura C.2. Información de la cuenta julia. ............................................................ 78
Figura D..1. Compilación y creación de cuenta saludo. ........................................ 80
Figura D.2. Despliegue del contrato saludo. ......................................................... 80
Figura D.3. Llamada a la acción saludar. .............................................................. 81
Figura F.1. Descarga de eosio.contracts. .............................................................. 85
Figura F.2. Compilación de eosio.token. ............................................................... 86
Figura F.3. Despliegue del contrato eosio.token. .................................................. 86
Figura F.4. Creación del token. ............................................................................. 87
Figura F.5. Información del token. ......................................................................... 87
Figura F.6. Emisión del token. ............................................................................... 87
Figura F.7. Comprobación de emitir token. ........................................................... 88
Figura F.8. Llamada a la acción transfer. .............................................................. 88
Figura F.9. Saldos de las cuentas. ........................................................................ 88
Figura I.1. Pantalla de inicio de Scatter. ................................................................ 96
xii
Figura I.2. Interfaz que solicita contraseña. ........................................................... 97
Figura I.3. Pantalla importar clave privada. ........................................................... 97
Figura I.4. Interfaz para introducir la clave privada. ............................................... 98
Figura I.5. Apartado Wallet. ................................................................................... 98
Figura I.6. Apartado Networks. .............................................................................. 99
Figura I.7. Interfaz para añadir la cadena de bloques. .......................................... 99
Figura I.8. Información de la cadena de bloques. ................................................ 100
Figura I.9. Apartado Wallet con cuentas enlazadas. ........................................... 100
xiii
Índice de tablas
Tabla 1.1. Andamio cognitivo de trabajos relacionados. 2
Tabla 2.1. Comparación entre diferentes tipos de cadena de bloques. 12
Tabla 3.1. Actor Usuario. 18
Tabla 3.2. Actor Billetera. 18
Tabla 3.3. Actor Base de datos Registros. 18
Tabla 3.4. Actor Base de datos Diseños. 19
Tabla 3.5. Actor Contrato inteligente Token. 19
Tabla 3.6. Caso de uso Iniciar sesión. 19
Tabla 3.7. Caso de uso Mostrar perfil. 20
Tabla 3.8. Caso de uso Crear diseño. 20
Tabla 3.9. Caso de uso Guardar diseño. 20
Tabla 3.10. Caso de uso Mostrar diseño. 21
Tabla 3.11. Caso de uso Modificar diseño. 21
Tabla 3.12. Caso de uso Eliminar diseño. 21
Tabla 3.13. Caso de uso Suscribir usuario. 22
Tabla 3.14. Caso de uso Eliminar suscripción. 22
Tabla 3.15. Caso de uso Eliminar diseños. 22
Tabla 4.1. Peso de los contratos. 58
Tabla 4.2. Almacenamiento en las tablas. 59
Tabla 4.3. Ancho de banda y CPU. 61
Tabla A.1. Software usado. 67
xiv
Índice de códigos
Código 3.1. Definición de tipo usuario. .................................................................. 41
Código 3.2. Definición del tipo plano. .................................................................... 41
Código D.1. Contrato inteligente para saludar. ...................................................... 79
Código E.1. Contrato inteligente tsgestdatos. ....................................................... 83
Código G.1. Código de contrato tsrgdiseno........................................................... 92
Código H.1. Función obtener tablas. ..................................................................... 93
Código H.2. Iniciar sesión...................................................................................... 94
Código H.3. Formato del envío de transacciones. ................................................. 94
Capítulo 1. Introducción
1
Capítulo 1
1 Introducción
En años recientes se ha observado un crecimiento acelerado de aplicaciones que usan
la tecnología de cadena de bloques, siendo cada vez mayor su aceptación y uso
debido a los beneficios que ofrece, estos son: las transacciones de punto a punto, el
anonimato, la seguridad y la descentralización. Estas características han logrado que,
a pesar de su complejidad tecnológica, tengan cada vez más usuarios en todo el
mundo.
Existen diferentes proyectos que implementan su propia cadena de bloques con
soporte para contratos inteligentes, entre los cuales se encuentran: EOSIO, Neo,
Ethereum y TRON, por mencionar algunos. Los contratos inteligentes son programas
de computadora que se ejecutan en la parte superior de la cadena de bloques para
facilitar y hacer cumplir un acuerdo entre dos partes sin la participación de un tercero
(Alharby & Moorsel, 2017).
EOSIO es el proyecto que proporciona la infraestructura para la operación de la
moneda EOS, y se distingue de entre los demás ya que ofrece una plataforma que se
asemeja a un sistema operativo, en la cual se pueden programar contratos inteligentes
usando el lenguaje C++ (Block.one, 2018). Y según la información proporcionada por
(Dappradar, 2019), de las 50 aplicaciones con el mayor número de usuarios de la
semana, 6 utilizan la cadena de bloques de EOS. En este trabajo se utiliza la versión
1.7.0 del software de EOSIO, sin embargo, la versión más reciente es la 2.0.
Capítulo 1. Introducción
2
1.1 Trabajos relacionados
En el área de la tecnología de cadena de bloques, se han publicado trabajos y se han
realizado proyectos que muestran y dan a conocer el impacto que esta tiene,
otorgándole un lugar importante dentro de las tecnologías actuales. En la Tabla 1.1,
se listan algunos trabajos de tesis que han abordado el tópico que se usa para este
proyecto o han utilizado tecnologías similares para su realización.
Autor Título Año Características Grado
obtenido Institución
(Bagchi, R., 2017)
Using Blockchain technology and smart contracts for access management in IoT devices
2017 Investigación y comparación de la administración de dispositivos IoT de manera tradicional y el uso de cadena de bloques en la plataforma de Ethereum.
Maestría Universidad de Helsinki
(Schüpfer, F., 2017)
Design and implementation of a smart contract application
2017 Diseño e implementación de contratos inteligentes en Ethereum. Desarrollo de una aplicación Android.
Maestría Universidad de Zúrich
(Salirrosas, M., 2018)
Identity management with blockchain
2018 Prototipo de sistema para el manejo de identidades. Uso de contratos inteligentes en Ethereum.
Ingeniería Universidad Politécnica de
Cataluña
(Tran, H., 2018)
Enabling a decentralized organization through smart contracts and tokens on the Ethereum blockchain
2018 Uso de contratos inteligentes en Ethereum. Desarrollo back-end de una aplicación descentralizada.
Ingeniería Universidad de Ciencias Aplicadas
Arcada
(Corten, P., 2018)
Implementation of Blockchain powered smart contracts in governmental services
2018 Investigación acerca de un marco de diseño para la implementación de contratos inteligentes en la plataforma de Ethereum.
Maestría Universidad Técnica de Delft
(Boogaard, K., 2018)
A Model-Driven approach to smart contract development
2018 Investigación de la factibilidad del uso de la ingeniería dirigida por modelos en el desarrollo de contratos inteligentes en la plataforma de Ethereum.
Maestría Universidad de Utrecht
(Pompianu, L., 218)
Analysing blockchains and smart contracts: tools and techniques
2018 Investigación acerca de blockchain y contratos inteligentes. Inserción de metadatos en la cadena de bloques de Ethereum.
Doctorado Universidad de Cagliari
(Hernández, J., 2019)
Contratos inteligentes a través de la plataforma EOSIO y la tecnología de cadena de bloques: un caso de uso
2019 Investigación exploratoria sobre el desarrollo de contratos inteligentes sobre la plataforma proporcionada por el software EOSIO.
Ingeniería Universidad del Istmo
Tabla 1.1. Andamio cognitivo de trabajos relacionados.
Como se expone en la Tabla 1.1, existen tesis relacionadas o similares con el trabajo
que se pretende realizar. Sin embargo, al momento no se han identificado trabajos de
Capítulo 1. Introducción
3
tesis publicados donde se aborde como tal el desarrollo de contratos inteligentes sobre
la plataforma proporcionada por el software EOSIO, con el fin de explorar su
desempeño, ya que la mayor parte de los trabajos se centran en Ethereum.
Todos los trabajos de tesis de la Tabla 1.1 son pioneros en cuanto al campo de
aplicación que cada uno va dirigido y en esta misma tabla se mencionan las
características peculiares de cada uno de estos trabajos, sin embargo, todos son
similares en cuanto a que buscan lo mismo a este trabajo de tesis, es decir, analizar y
explorar el uso de la tecnología de la cadena de bloques en un nuevo campo, en donde
se pretende tener un gran éxito como se tuvo con el bitcoin. La razón del éxito del
bitcoin fue el hecho del uso de la tecnología de la cadena de bloques y no en si la
invención del bitcoin, es decir, el bitcoin solo fue el primer caso de uso de la tecnología
de cadena de bloques o llamada también descentralizada, sin embargo, el bitcoin y
otras criptomonedas pioneras solo podían hacer la función de fungir como
criptomoneda, es decir, realizar transacciones. No fue hasta la invención de la
plataforma de Ethereum, que el uso de contratos inteligentes en plataformas de
cadena de bloques se hizo posible, y a raíz de ello se amplió la gama de casos de uso
de aplicaciones de la tecnología de la cadena de bloques usando contratos inteligentes
para cualquier ámbito de aplicación. Hoy en día la plataforma que permite la
generación de aplicaciones descentralizadas, con contratos inteligentes, con más
aplicaciones y publicaciones de uso es la de Ethereum, pero este hecho podría ser
simplemente porque fue la primera plataforma con contratos inteligentes lanzada al
uso público en el 2015 (coinmarkecap.com), sin embargo, esta plataforma ha
atravesado muchas dificultades de escalamiento, es decir, si la aplicación requiere
mucha capacidad de procesamiento o es usada por más usuarios de lo normal, esta
aplicación se satura y ya no funciona, es por ello que en este trabajo de tesis se optó
por el uso de la plataforma descentralizada (con cadena de bloques) con contratos
inteligentes de nombre EOSIO, que surgió en el 2017 (coinmarketcap.com)
prometiendo terminar con este problema de saturación de Ethereum, es decir,
ofreciendo mucho más capacidad y velocidad de procesamiento, sin embargo, siendo
la plataforma de EOSIO alrededor de dos años más nueva que la de Ethereum, aún le
falta tiempo por probar que efectivamente es mejor que todas las opciones existentes
Capítulo 1. Introducción
4
para programar contratos inteligentes como lo promete, pues la mayoría de sus
aplicaciones aun no terminan de madurar y están en fases de desarrollo y prueba. Por
el hecho peculiar de que la plataforma de EOSIO prometió acabar con todos los
problemas de escalamiento que atraviesan todas las plataformas previas con contratos
inteligentes existentes (Ethereum, TRON, DASH, etc.), se consideró de mayor valor
utilizar la plataforma de EOSIO para este estudio de tesis. Al usar la plataforma de
EOSIO en el desarrollo de esta tesis, se puede ofrecer un marco de referencia o punto
de partida, no solo para explorar el caso de uso que compete a esta tesis, sino también
como un valor agregado para evaluar o estimar para trabajos futuros, que tanto EOSIO
tiene el potencial para poder cumplir lo que prometió, dado que todas las plataformas
con contratos inteligentes están en competencia y se espera que finalmente halla una
sola que prevalezca.
1.2 Planteamiento del problema
Los contratos inteligentes se pueden usar en diferentes áreas, en (Kumar, Panda, &
Jena, 2018) se identifican 7 campos potenciales, que son: las cadenas de suministro,
el internet de las cosas, el sistema de salud, la gestión de derechos digitales, los
seguros, el sistema financiero y bienes raíces. Sin embargo, esta tecnología aún tiene
muchas barreras que superar antes de que pueda ser vista como una alternativa.
Algunas de sus deficiencias son: su poca practicidad, falta de adopción y la limitada
exploración que se ha hecho sobre ella. Suscitándose con esto, la necesidad de dar
seguimiento a estas problemáticas para lograr avanzar en su desarrollo.
En general, es complicado encontrar documentación que permita al programador
trabajar con esta tecnología, debido a que la existente no suele describir a detalle el
proceso a seguir. Muchos autores omiten pasos que ellos consideran irrelevantes en
el desarrollo de la tecnología como tal, y se enfocan directamente en el tema de cadena
de bloques y los contratos inteligentes, dejando huecos en el tema que a más de uno
pueden desanimar.
El presente trabajo de tesis se enfoca en el problema de la falta de exploración de la
tecnología de cadena de bloques, específicamente los contratos inteligentes
Capítulo 1. Introducción
5
desarrollados para la plataforma de EOSIO. Por lo tanto, se considera relevante
explorar mediante un caso de uso el potencial y las características que dice poseer
este proyecto, para así, generar documentación que conlleven al desarrollo de otros
trabajos de investigación sobre el tema.
1.3 Justificación
La tecnología de cadena de bloques y los contratos inteligentes son un tema de interés
para muchas personas, ya que solo la compra y venta de sus dos principales monedas
(ether y EOS) mueven miles de millones de dólares al día en las casas de cambio
(CoinMarketCap, 2019). Este trabajo se centra en EOS, ya que la comunicación con
la red de este, es más fluida, al producir bloques cada 0.5 segundos (CryptoLions.io,
2019), permitiendo que el tiempo de respuesta percibido por el usuario sea mínimo; a
diferencia de la red de Ethereum que produce un nuevo bloque en promedio cada 15
segundos (Ethstats, 2019).
A manera de un caso de uso, en la tesis se buscó una aplicación web que permita
bosquejar planos de planta, específicamente de casas de una sola planta que estén
dentro en un terreno con extensión máxima de 80 metros por lado, en donde se
incluyan la localización de sensores destinados a uso domótico. La funcionalidad de la
aplicación se establecerá mediante un contrato inteligente, con la finalidad de examinar
el desempeño actual de la cadena de bloques del proyecto EOSIO, tomando como
indicadores: el costo que implica el desarrollo sobre esta plataforma, la seguridad, la
privacidad y la escalabilidad de las aplicaciones.
Se espera que la generación de documentación derivada de este trabajo contribuya al
proceso de maduración de esta tecnología, sin embargo, esto está fuera del alcance
de la tesis. Por lo anterior, solo se va a explorar la tecnología, a razón que está aún se
encuentra en una etapa temprana, y dados sus antecedentes se espera que en un
futuro cobre mayor importancia.
Capítulo 1. Introducción
6
1.4 Objetivos
1.4.1 Objetivo general
Evaluar el desempeño de la plataforma proporcionada por el software EOSIO mediante
la programación de una aplicación que emplee contratos inteligentes.
1.4.2 Objetivos específicos
• Identificar los límites de la programación dentro de EOSIO.
• Definir la forma adecuada de proteger los datos dentro de la plataforma de
EOSIO.
• Detallar los pasos a seguir para la realización de un contrato inteligente.
• Integrar los contratos inteligentes con la tecnología web mediante el desarrollo
de una aplicación.
• Desplegar la aplicación desarrollada, en la plataforma provista por EOSIO.
• Comprobar el correcto funcionamiento del sistema.
1.5 Delimitación del tema
1.5.1 Alcances
• Se explorarán las siguientes funcionalidades de la plataforma provista por el
software EOSIO:
o Creación y manejo de cuentas y billeteras.
o Creación y transferencia de tokens.
o Almacenamiento y recuperación de datos.
o Despliegue de contratos inteligentes en la cadena de bloques.
• Se programarán ejemplos para corroborar cada una de las funcionalidades a
explorar.
• Se desarrollará una aplicación web que integre las funcionalidades exploradas,
y en donde el backend esté dado por un contrato inteligente.
Capítulo 1. Introducción
7
1.5.2 Limitaciones
• Se usó únicamente la versión 1.7.0 del software de desarrollo provisto por
EOSIO, debido a que en cada nueva versión se pueden introducir cambios que
afecten o impidan el correcto funcionamiento de los contratos inteligentes.
• Los contratos inteligentes se desplegaron sobre una red de prueba local, es
decir de un solo nodo.
• La aplicación web desarrollada es solo con el fin de explorar la plataforma, por
lo tanto, contendrá solo los elementos necesarios para corroborar la
funcionalidad de la aplicación y la plataforma.
• No se exploró la escalabilidad de la plataforma.
1.6 Estructura de la tesis
El resto de este trabajo se encuentra estructurado como se describe a continuación:
El capítulo 2 presenta el fundamento teórico que ayudará a comprender mejor el
desarrollo realizado. Para esto, se define la tecnología de cadena de bloques,
resaltando sus características principales y los cambios que ha experimentado desde
sus comienzos. Luego se describen y ejemplifican las características principales de los
contratos inteligentes, así como sus usos potenciales. Al final se abordan aspectos
relevantes acerca de la plataforma de EOSIO.
En el capítulo 3 se describe a detalle el proceso seguido durante el desarrollo del
proyecto, esto incluye la descripción de cada ejemplo realizado en donde se prueba
de forma individual las características que se decidieron explorar, así como de la
aplicación web final que integre todas las funcionalidades exploradas, y que permita
comprender la interacción entre cada una de estas. Esto abarca desde la configuración
del software necesario hasta el despliegue de la aplicación en la cadena de bloques.
El capítulo 4 presenta los resultados obtenidos a lo largo del desarrollo de la tesis,
incluyendo el comportamiento de todos los ejemplos hechos y la aplicación web final,
desde su comienzo, dificultades presentadas y su finalización. Cabe destacar que
también se expone el desempeño de las aplicaciones desarrolladas utilizando la
Capítulo 1. Introducción
8
tecnología de cadena de bloques, en comparación con el rendimiento proporcionado
por otras tecnologías ya existentes.
En el capítulo 5 se exponen las contribuciones que se hicieron al tema de la cadena
de bloques, principalmente exploratorios. También se dan las conclusiones a las que
se llegó a través del trabajo realizado y finalmente se sugieren posibles trabajos futuros
que puedan realizarse a partir de la investigación y desarrollo realizado en este trabajo.
Capítulo 2. Marco teórico
9
Capítulo 2
2 Marco teórico
2.1 Cadena de bloques
Cuando se habla de la tecnología de cadena de bloques no existe una definición
formal, esto ocasiona que cada autor la defina de acuerdo con su visión de la
tecnología (Zile & Strazdina, 2018). A continuación, se mencionan dos definiciones de
cadenas de bloques realizadas por diferentes autores:
Una estructura de datos, en donde la red que la implementa posee una copia en cada
uno de sus nodos, dicha red deber ser capaz de efectuar transacciones basadas en
criptografía de clave pública, verificando los requerimientos de la transacción antes de
realizarla, y registrando cada transacción en bloques ordenados de forma secuencial;
dichos bloques son creados de acuerdo a un algoritmo de consenso (Porru, 2017).
En (Zubaydi, Chong, Ko, Hanshi, & Karuppayah, 2019) se define a la cadena de
bloques como la tecnología que toma los principios de un libro de contabilidad digital
con el objetivo de reemplazar la perspectiva de las transacciones digitales, dicho libro
tiene las características de ser distintivo, distribuido y descentralizado, conteniendo
además los registros de las transacciones de los integrantes que lo componen.
Desde el punto de vista del presente trabajo, el concepto de cadena de bloques debe
hacer énfasis en que esta, involucra un conjunto de nodos que poseen recursos
asociados, los cuales a su vez varían de acuerdo a la implementación de la tecnología.
Decir que la cadena de bloques es un libro de contabilidad digital o una estructura de
datos con ciertas características puede causar confusión al momento de comprender
Capítulo 2. Marco teórico
10
el concepto. Otro punto que resulta relevante, es conocer los acontecimientos que
marcaron la historia de esta tecnología, así como ubicar su estado actual.
2.1.1 Eje cronológico
En 2008 Satoshi Nakamoto publicó el artículo Bitcoin: A Peer-To-Peer Electronic Cash
System, en donde se describe una red que permite efectuar pagos en línea
directamente entre dos partes, sin la participación de una institución financiera que
valide la operación (Nakamoto, 2008). Sin embargo, la tecnología de cadena de
bloques marcó su llegada con el desarrollo y lanzamiento del Bitcoin en el 2009 (Kibet
& Maina, 2018).
Otro evento importante sucedió en 2013, cuando Vitalik Buterin publicó una guía en la
cual presenta a Ethereum y propone una cadena de bloques que permita a sus
usuarios implementar sus propios programas informáticos (Vitalik, 2013). Pero no es
hasta 2015 que Ethereum es lanzado, dando paso a una segunda etapa en el tema de
las cadenas de bloques, dejando de ser utilizadas para propósitos específicos y
pasando a implementar el concepto de contrato inteligente (Franco, Scheid, Granville,
& Stiller, 2019)
Desde entonces su popularidad ha ido aumentando gracias a las múltiples
aplicaciones que se le han encontrado, logrando que incluso países como China,
Rusia, Reino Unido, Estados Unidos de América, Japón y Canadá; inviertan en
investigación sobre esta tecnología (Yi, Lingjun, & Hong, 2018). EOSIO fue lanzado en
2018 y forma parte de la segunda generación de cadenas de bloques. A continuación,
se describen los componentes de un sistema que implementa esta tecnología.
2.1.2 Componentes de un sistema con tecnología de cadena de bloques
Los componentes generales de un sistema con tecnología de cadena de bloques son:
los nodos de la red, la criptografía que se usa para validar las transacciones, la forma
en la que las transacciones son almacenadas, y los mecanismos de consenso que
permiten la autenticidad de las acciones.
Capítulo 2. Marco teórico
11
2.1.3 Criptomonedas
Las criptomonedas son un medio digital de intercambio que utiliza principios
criptográficos para permitir la realización de transacciones seguras y de manera
descentralizada. Para ofrecer esto se valen de la tecnología de cadena de bloques.
Desde su aparición en 2009, las criptomonedas se han popularizado cada vez más,
esto se atribuye principalmente a tres de sus características principales, las cuales
son:
• Reducción en el costo de la transacción.
• Reducción en el tiempo de operaciones debido a trámites burocráticos.
• Eliminación de intermediarios que validen las transacciones.
La primera criptomoneda fue el Bitcoin y dada la popularidad que tuvo, fueron
apareciendo otras criptomonedas, muchas de estas eran copias de Bitcoin, sin
embargo, también surgieron proyectos que implementaban características adicionales
(Nakamoto, 2008). Estas, inicialmente eran para propósitos específicos, hasta que
finalmente surgieron proyectos que implementaban el uso de contratos inteligentes
para darle la oportunidad a los usuarios de definir sus propias funcionalidades (Peck,
2017). Algunas criptomonedas son: Bitcoin, Ethereum, XPR, Bitcoin Cash, Litecoin,
EOS, Binance Coin, Stellar.
La lista anterior muestra a las 8 criptomonedas más populares según (CoinMarketCap,
2019), esto con base en su capitalización del mercado. Sumando la capitalización de
todas, da un total de más de cien mil millones de dólares. Para el caso particular de
EOS, su capitalización del mercado es de más de cuatro mil millones de dólares.
2.1.4 Clasificación
Las cadenas de bloques pueden clasificarse de diversas formas, una de esas es
mediante los permisos que se tienen para acceder a ella. Por tanto, existen las
cadenas de bloques públicas, de consorcio y las privadas, en la Tabla 2.1 se muestra
una comparativa entre los tres tipos de cadenas de bloques.
Capítulo 2. Marco teórico
12
Característica Cadena de bloques pública
Cadena de bloques de consorcio
Cadena de bloques privada
Determinación del consenso
Todos los participantes Conjunto de nodos seleccionados
Una organización
Permisos de lectura Público Público o restringido Publico o restringido
Inmutabilidad Casi imposible de manipular
Su manipulación es posible
Su manipulación es posible
Eficiencia Baja Alta Alta
Centralizado No Parcial Si
Proceso de consenso Sin permiso Por permiso Por permiso
Tabla 2.1. Comparación entre tipos de cadena de bloques. (Wang, H., y otros, 2019).
Cada uno de los tipos de cadenas de bloques tienen sus aplicaciones ad hoc. Para el
caso de la cadena de bloques con la cual se trabaja en la presente tesis, corresponde
a la cadena de bloques de consorcio, esto se ve reflejado principalmente en el alto
desempeño de los contratos inteligentes que corren sobre la plataforma, con respecto
a las cadenas de bloques públicas.
2.2 Contratos inteligentes
Se llama contrato inteligente a cualquier programa de computadora con las
propiedades de autoverificación, auto ejecución y resistencia a la manipulación de
forma indebida (Kumar, Panda, & Jena, 2018). Para logra esto, el contrato realiza las
siguientes acciones (Molina, y otros, 2018):
• Interceptar cada evento generado por las partes.
• Determinar si el evento cumple o no con las condiciones establecidas.
• Producir un veredicto.
• Graba el veredicto en un registro indeleble y disponible para su verificación.
2.2.1 Comparación con contratos tradicionales
Los contratos inteligentes son llamados así debido a que comparten cierto parecido o
características con los contratos tradicionales. Según (Real Academia Española, 2016)
un contrato es un pacto o convenio, oral o escrito que obliga a las partes involucradas
a una cosa determinada, y cuyo cumplimiento puede ser compelido. Sin embargo, la
definición de contrato puede diferir de acuerdo con el país, por lo tanto, la definición
de contrato inteligente también difiere.
Capítulo 2. Marco teórico
13
Según lo anterior, en algunos casos puede que no sea posible definir como contrato
inteligente a algunos de los programas informáticos que se usan en esta tesis, ya que
pueden no cumplir con las definiciones de contrato en algunos países. Sin embargo,
para la mayoría de los casos esta definición es válida y solo en algunos se deben hacer
ciertas aclaraciones para evitar malentendidos.
2.2.2 Campos de aplicación
Dado su cualidad de eliminar la necesidad de terceras partes, los contratos inteligentes
pueden implementarse en diferentes campos para ayudar a automatizar los sistemas
(Kumar, Panda, & Jena, 2018), algunos de estos campos se ilustran en la Figura 2.1:
Figura 2.1. Campos de aplicación de los contratos inteligentes. Modificado de (Kumar, Panda, & Jena, 2018)
En la Figura 2.1 se muestra que hay una diversidad de campos de aplicación para los
contratos inteligentes, por ejemplo: para los bienes raíces esta breezecoin (breezecoin,
2019), para el caso de cadenas de suministro esta binance (binance, 2019), para
internet de las cosas esta IOTA (IOTA, 2019), para sistemas financieros citamos kyber
network (kyber network, 2019), para sistemas de salud timihealth (timihealth, 2019),
para derechos digitales esta consensum (consensum, 2019), y para seguros
cryptoverze (cryptoverze, 2019).
2.3 EOSIO
El software EOSIO ofrece una estructura de cadena de bloques que permite la
implementación de redes tanto públicas como privadas, diseñadas para permitir el
Capítulo 2. Marco teórico
14
escalamiento de aplicaciones descentralizadas, es decir que permitan y sean capaces
de manejar un gran número de usuarios y transacciones a través del tiempo. EOSIO
también facilita el uso de cuentas, autentificación, bases de datos, comunicación
asíncrona y programación usando múltiples núcleos de CPU (Block.one, 2018).
El software EOSIO ofrece una estructura de cadena de bloques que permite la
implementación de redes tanto públicas como privadas, diseñadas para permitir el
escalamiento, es decir, ser capaz de manejar un gran número de usuarios y
transacciones a través del tiempo, a partir de un grupo mínimo de usuarios y
desarrolladores pioneros y soportar sin que se sature el sistema hasta llegar a la
adopción masiva de usuarios, de aplicaciones descentralizadas. EOSIO también
facilita el uso de cuentas, autentificación, bases de datos, comunicación asíncrona y
programación usando múltiples núcleos de CPU (Block.one, 2018).
2.3.1 Lenguaje de programación para EOSIO
Las aplicaciones en la cadena de bloques del software EOSIO se ejecutan utilizando
WebAssembly (WASM), un estándar web apoyado por Google, Microsoft y Apple. Al
momento, la herramienta más completa para la construcción de aplicaciones que
compilen a WASM es el compilador de C/C++ proporcionado por EOSIO, y aunque
existen herramientas de terceros que permiten programar en otros lenguajes como
Rust, Python y Solidity, el rendimiento que estos ofrecen es inferior (Block.one, 2018).
2.3.2 Sistemas operativos
EOSIO proporciona soporte para la ejecución de su cadena de bloques en los
siguientes sistemas operativos:
• Amazon 2017.09 y superior
• Centos 7
• Fedora 25 y superior
• Mint 18
• Ubuntu 16.04 y 18.04
• MacOS Darwin 10.12 y superior
Capítulo 2. Marco teórico
15
Para el desarrollo de aplicaciones se proporciona documentación sólo para los
siguientes sistemas operativos:
• Mac OS
• Ubuntu
• Debian
• CentOS
• RedHad
• Fedora
El desarrollo de la aplicación y todos los contratos inteligentes necesarios para la tesis
se desarrollarán en Ubuntu, esto debido al soporte con el que cuenta y a la facilidad
de uso con respecto a otras distribuciones de Linux. Finalmente, cabe mencionar que
Windows no está soportado por este software en ninguna de sus presentaciones, por
lo cual se recomienda desarrollar sobre una máquina virtual (Block.one, 2018).
Capítulo 3. Desarrollo e implementación
16
Capítulo 3
3 Desarrollo e implementación
Este capítulo describe el diseño e implementación del contrato inteligente, el cliente
web y su integración a través de las librerías eosjs y scatter-js.
3.1 Requisitos del sistema
De acuerdo a los objetivos planteados para el desarrollo de este trabajo, se determinó
que la herramienta debe cumplir con las siguientes exigencias:
• Una aplicación web que permita:
1. El bosquejo de planos de planta.
2. Manejo de sesiones.
3. Almacenar los diseños realizados.
• Para el inicio de sesión, se requerirá una cuenta creada en la cadena de bloques
de EOS.
• La autentificación de los usuarios se realizará a través del SDK JavaScript de
Scatter.
• Los datos serán guardados utilizando IPFS, en donde el hash asociado a cada
archivo se almacenará en la cadena de bloques de EOS.
• El usuario podrá eliminar o modificar los datos almacenados en la cadena de
bloques de EOS.
• La aplicación cobrará por el servicio de almacenamiento, en donde el pago será
a través de un token creado específicamente para ello.
Capítulo 3. Desarrollo e implementación
17
3.2 Modelos de análisis de la aplicación web
En este apartado se busca describir la aplicación web en términos de las actividades
que permitirá realizar, para lo cual se define el modelo de casos de uso mostrado en
la Figura 3.1. Un modelo de casos de uso, especifica un sistema en relación a las
distintas formas que se utilizará (Weitzenfeld, 2005). En general, esta etapa se enfoca
en lo que podrá hacer el sistema, sin especificar el cómo lo hará (Weitzenfeld &
Guardati, 2008).
Figura 3.1. Modelos de casos de uso de la aplicación.
niciar sesión
rear diseño
Guardar diseño
Mostrar diseño
Eliminar diseño
Modificar diseño
Mostrar perfil
uscribir usuario
Eliminar
diseños
Eliminar
suscripción
illetera
ase de datos
egistros
ase de datos
iseños
Modificar
registros
Usuario
e tiende
e tiende incluye
incluye
incluye
incluye
incluye
incluye
incluye
incluye
incluye
ontrato inteligente
oken
incluye
incluye
Capítulo 3. Desarrollo e implementación
18
Además de un diagrama que represente el modelo de casos de uso, es importante
describir de forma te tual a cada actor y caso de uso que lo componen. Estas
descripciones solo incluyen eventos visibles por el usuario. A continuación, se detallan
los actores y casos de uso de la Figura 3.1, usando una versión modificada de las
plantillas propuestas en (Weitzenfeld, 2005).
3.2.1 Actores
El modelo de casos de uso de la aplicación incluye a 5 actores, que son: Usuario,
billetera, base de datos “ egistros”, base de datos “ iseños” y base de datos “ ontrato
nteligente oken”.
Usuario es el actor que interactúa con todos los casos de uso, sin embargo, en la
Figura 3.1 solo se relaciona de manera e plícita con los casos de uso considerados
principales.
Actor Usuario.
Caso de uso Iniciar sesión, crear diseño, guardar diseño, mostrar perfil, mostrar diseño, borrar diseño,
modificar diseño, modificar registros (suscribir usuario, eliminar suscripción o eliminar
diseños).
Tipo Primario.
Descripción Es el actor para el cual fue diseñada la aplicación. Incluye a cualquier individuo que utilice el
sistema.
Tabla 3.1. Actor Usuario.
illetera es un actor secundario y su interacción se limita a un caso de uso específico.
Actor Billetera.
Casos de uso Iniciar sesión.
Tipo Secundario.
Descripción Es uno de los actores secundarios y representa a una bóveda que almacena las claves
privadas de los usuarios fuera del contexto de la aplicación.
Tabla 3.2. Actor Billetera.
ase de datos egistros al igual que illetera, es un actor secundario y se relaciona
únicamente con casos de uso específicos.
Actor Base de datos Registros.
Casos de uso Guardar diseño, mostrar perfil, eliminar diseño, borrar diseño, modificar registros.
Tipo Secundario.
Descripción Es un actor secundario y representa a la base de datos que almacena información de los
usuarios, excluyendo los diseños.
Tabla 3.3. Actor Base de datos Registros.
Capítulo 3. Desarrollo e implementación
19
ase de datos iseños es un actor secundario y se relaciona con casos de uso
específicos.
Actor Base de datos Diseños.
Casos de uso Guardar diseño, mostrar diseño.
Tipo Secundario.
Descripción Es un actor secundario y representa a la base de datos que almacena únicamente los diseños
guardados.
Tabla 3.4. Actor Base de datos Diseños.
Contrato inteligente Token
Actor Contrato Inteligente Token.
Casos de uso Suscribir usuario.
Tipo Secundario.
Descripción Gestiona el manejo de los tokens usados dentro de la aplicación.
Tabla 3.5. Actor Contrato inteligente Token.
3.2.2 Casos de uso
e acuerdo a la Figura 3.1 se tienen 10 casos de uso, sin considerar el caso abstracto
Modificar registros. No se e plica debido a que sus especificaciones se encuentran
contenidas en los casos de uso concretos: uscribir usuario, Eliminar diseños y
Eliminar suscripción. Los casos de uso se describen en las ablas 3.6-3.15.
niciar sesión
Caso de uso Iniciar sesión.
Actores Usuario, Billetera.
Tipo Inclusión.
Resumen Es iniciado por el usuario y realiza la validación utilizando un software externo.
Precondiciones Para este caso de uso el sistema asume que se tiene una cuenta en la plataforma de EOSIO,
esto se realiza de forma ajena a la aplicación.
Flujo principal El usuario accede al aparto y selecciona la opción iniciar sesión.
Se despliega una ventana emergente de un software de billetera externo, en donde se puede
elegir la cuenta con la cual se quiere iniciar sesión.
Una vez iniciada la sesión se desbloquea la mayor parte de funcionalidades de la aplicación
(excepto guardar plano).
Finalmente se presenta al usuario el caso de uso Crear diseño.
Excepciones E-1 Software externo no encontrado: cuando se quiera iniciar sesión, pero no se logre
establecer comunicación con el software externo encargado de gestionar esta acción. Se
pedirá iniciar el software correspondiente.
Tabla 3.6. Caso de uso Iniciar sesión.
Capítulo 3. Desarrollo e implementación
20
Mostrar perfil
Caso de uso Mostrar perfil.
Actores Usuario, Base de datos Registros.
Tipo Inclusión.
Resumen Este caso de uso es iniciado por el usuario y muestra la información de la cuenta relativa a
la aplicación. Además, permite acceder a diferentes funcionalidades de la aplicación.
Precondiciones Se debe haber iniciado sesión previamente.
Flujo principal Se obtiene el nombre de la cuenta, estado de la suscripción, el número de diseños guardados
y el saldo de la base de datos registros, esta información se muestra en la interfaz de usuario.
También se presentan los casos de uso de suscribir usuario, eliminar suscripción y eliminar
diseños. En caso de tener diseños guardados se muestran también los casos de uso de
modificar diseño, eliminar diseño y mostrar diseño.
• Si se selecciona suscribir usuario, se traslada al caso de uso Suscribir usuario.
• Si la opción seleccionada es eliminar suscripción, se pasa al caso de uso Eliminar
suscripción.
• Si se elige la opción eliminar diseños, se continua con el caso de uso Eliminar diseños.
• Si la opción elegida es modificar diseño, se traslada al caso de uso Modificar diseño.
• Si se selecciona eliminar diseño, se transfiere al caso de uso Eliminar diseño.
• Si la opción seleccionada es mostrar diseño, se pasa al caso de uso Mostrar diseño.
Excepciones Ninguna.
Tabla 3.7. Caso de uso Mostrar perfil.
rear diseño
Caso de uso Crear diseño.
Actores Usuario.
Tipo Básico.
Resumen Es iniciado por el usuario y permite crear un diseño a través de la aplicación.
Precondiciones Ninguna.
Flujo principal Se presenta a los usuarios las opciones para crear un diseño, en el cual se pueden incluir
paredes, puertas, ventanas y sensores. Además, se incluye la opción de guardar el diseño,
que en caso de elegirla se inicia el caso de uso Guardar diseño.
Excepciones Ninguna.
Tabla 3.8. Caso de uso Crear diseño.
Guardar diseño
Caso de uso Guardar diseño.
Actores Usuario, Base de datos Diseños, Base de datos Registros.
Tipo Inclusión, extensión.
Resumen Es iniciado por el usuario y permite guardar diseños recién creados o previamente
modificados.
Precondiciones Se considera que se ha iniciado sesión y suscrito con anterioridad.
Flujo principal Se presenta la opción para introducir un nombre y guardar el diseño. El usuario debe
introducir un nombre antes de seleccionar guardar el diseño, una vez guardado el diseño se
notifica al usuario que la operación ha sido exitosa.
Excepciones E-1 Nombre del diseño inválido: el nombre introducido por el usuario no cumple con las
condiciones necesarias.
Tabla 3.9. Caso de uso Guardar diseño.
Capítulo 3. Desarrollo e implementación
21
Mostrar diseño
Caso de uso Mostrar diseño.
Actores Usuario, Base de datos Diseños.
Tipo Básico.
Resumen Es iniciado por el usuario y posibilita ver diseños previamente guardados.
Precondiciones Se tiene que haber iniciado el caso de uso mostrar perfil y se considera que se ha guardado
un diseño previamente.
Flujo principal Esta opción se presenta si se tienen diseños previamente guardados. Su selección recupera
el diseño correspondiente de la base de datos diseños y lo presenta en la interfaz de usuario.
Excepciones E-1 Registro inválido: el diseño a recuperar no existe.
Tabla 3.10. Caso de uso Mostrar diseño.
Modificar diseño
Caso de uso Modificar diseño.
Actores Usuario.
Tipo Básico.
Resumen Es iniciado por el usuario y posibilita editar diseños previamente guardados. Para esto ofrece
las mismas opciones de edición que el caso de uso Crear diseño.
Precondiciones Considera que se ha ejecutado el caso de uso Mostrar diseño.
Flujo principal Se presenta un diseño, ofreciendo las opciones de añadir o eliminar: puertas, ventanas,
paredes y sensores.
Adicionalmente se puede extender la actividad mediante el caso de uso Guardar diseño.
Excepciones Ninguna.
Tabla 3.11. Caso de uso Modificar diseño.
Eliminar diseño
Caso de uso Eliminar diseño.
Actores Usuario, Base de datos Registros.
Tipo Básico.
Resumen Es iniciado por el usuario y posibilita eliminar diseños guardados con anterioridad.
Precondiciones Se tiene que haber ejecutado el caso de uso Mostrar perfil y Guardar diseño con anticipación.
Flujo principal Esta opción se presenta si se tienen diseños previamente guardados.
Su selección borra de la Base de daros Registros, el registro correspondiente al plano elegido
seleccionado para eliminar.
Actualiza la lista de diseños mostrados en el perfil.
Excepciones Ninguna.
Tabla 3.12. Caso de uso Eliminar diseño.
Capítulo 3. Desarrollo e implementación
22
uscribir usuario
Caso de uso Suscribir usuario.
Actores Usuario, Base de datos de registros, Contrato Inteligente del token.
Tipo Básico, concreto.
Resumen Es iniciado por el usuario y ofrece la función de suscribir al internauta con sesión activa en la
aplicación.
Precondiciones Se considera que ya se ha ejecutado el caso de uso Mostrar perfil.
Flujo principal Esta opción se presenta en la interfaz del caso de uso Mostrar perfil.
Se solicita una cantidad de tokens con la cual se quiere suscribir.
Si se selecciona la opción de suscribir usuario:
• Se realiza la transferencia de tokens usando Contrato inteligente Token.
• Los datos asociados son guardados en la Base de datos Registros.
Actualiza el estado de la suscripción y saldo mostrado en el perfil.
Se desbloquean todas las funcionalidades de la aplicación.
Excepciones E-1 Tokens insuficientes: la cantidad de tokens que posee el usuario es menor a la que se
introdujo para su suscripción.
Tabla 3.13. Caso de uso Suscribir usuario.
Eliminar suscripción
Caso de uso Eliminar suscripción.
Actores Usuario, Base de datos Registros.
Tipo Básico, concreto.
Resumen Es iniciado por el usuario y le permite terminar su suscripción.
Precondiciones Se considera que ya se ha ejecutado el caso de uso Mostrar perfil y Suscribir usuario.
Flujo principal Esta opción se presenta en la interfaz del caso de uso Mostrar perfil.
Al seleccionar esta opción se busca y elimina de la Base de datos Registros, los datos
correspondientes a la suscripción del usuario con sesión activa.
Actualiza el estado de la suscripción mostrado en el perfil.
Excepciones Ninguna.
Tabla 3.14. Caso de uso Eliminar suscripción.
Eliminar diseños
Caso de uso Eliminar diseños.
Actores Usuario, Base de datos Registros.
Tipo Básico, concreto.
Resumen Es iniciado por el usuario y le permite eliminar todos los diseños que haya guardado.
Precondiciones Se considera que ya se ha ejecutado el caso de uso Mostrar perfil y Guardar diseño.
Flujo principal Esta opción se presenta en la interfaz del caso de uso Mostrar perfil.
Al seleccionar esta opción se buscan y eliminan todos los registros de diseños
correspondientes al usuario con sesión activa.
Actualiza la lista de diseños mostrados en el perfil (eliminando todos).
Excepciones Ninguno.
Tabla 3.15. Caso de uso Eliminar diseños.
Lo que se buscó en este apartado fue definir desde un inicio las funcionalidades de la
aplicación, y a su vez, sentar una base que sirva de guía para las siguientes etapas.
Capítulo 3. Desarrollo e implementación
23
Esto ayuda a reducir la complejidad de las actividades realizadas durante la fase de
diseño, al ya tener identificados las acciones que la aplicación podrá realizar.
3.3 Diseño de la aplicación web
En esta sección, se parte del modelo de análisis para describir el diseño de la
aplicación. Este a su vez, se divide en dos etapas, en la primera se aborda el contrato
inteligente, definiendo el modelo de los datos y el comportamiento de sus funciones.
La segunda etapa comprende la descripción del cliente web, en donde se especifica
el diseño de las interfaces y de las funcionalidades desde la interfaz de usuario.
3.3.1 Contrato inteligente
ado el enfoque de esta tesis, se requiere que el backend de la aplicación web sea
implementado a través de un contrato inteligente. Los actores con los que se interactúa
son: Usuario, ase de datos egistros y ontrato nteligente oken. A continuación, se
describe la estructura de los datos, así como las funciones que se implementan en el
contrato de la aplicación.
3.3.1.1 Definición de tipos de datos
En esta sección se definen los tipos de datos a usar para almacenar la información en
la ase de datos egistros, los cuales se describen a continuación:
ipo usuario, compone a la tabla usuarios y contiene:
• Nombre del usuario.
• Vigencia de la suscripción.
ipo plano, compone a la tabla planos y contiene:
1. Nombre del usuario.
2. Nombres de los planos.
3. Hashes de los planos.
Capítulo 3. Desarrollo e implementación
24
3.3.1.2 Funciones
A partir de los casos de uso obtenidos en el modelo de análisis, se especifican 5
funciones para llevar a cabo dichas actividades. El número de funciones no
corresponde al de casos de uso debido a que algunas actividades son realizadas sin
requerir del módulo contrato inteligente. Además, las funciones eliminar plano y
eliminar suscripción se describen conjuntamente, esto debido a que el proceso es
similar en ambas y solo varían los datos; se decidió usar dos funciones para que sea
posible e tender la funcionalidad de una sin afectar a la otra.
3.3.1.2.1 Suscribir usuario
Esta función es llamada por el actor ontrato nteligente oken una vez que se haya
realizado el pago correspondiente a la suscripción. La secuencia de actividades que
debe llevar a cabo la función, se ilustra en la Figura 3.2.
Figura 3.2. Diagrama de flujo de suscribir usuario.
Capítulo 3. Desarrollo e implementación
25
3.3.1.2.2 Eliminar suscripción y eliminar planos
Estas funciones son llamadas desde la interfaz del cliente web, reciben el nombre del
usuario y los permisos de este. Los permisos son necesarios para evitar que los
usuarios puedan eliminar registros que no le pertenecen. En la Figura 3.3 se muestra
el proceso que siguen estas funciones, marcando con (a) y (b) los puntos en donde los
datos con los que se trabaja cambian; eliminar suscripción ocupa registros de la tabla
usuarios, mientras que eliminar diseños ocupa registros de la tabla planos.
Figura 3.3. Diagrama de flujo de eliminar suscripción y eliminar planos.
3.3.1.2.3 Guardar plano
ado que esta función permite almacenar el tipo de dato plano, recibe como
parámetros los elementos de este (ver sección 3.3.1.1), además de los permisos para
tener acceso a los registros que hace referencia. La Figura 3.4 muestra los pasos que
se siguen para guardar un plano, cabe de mencionar que esta función es llamada
desde la interfaz del cliente web.
olicitar permisos
nicio
El registro e iste
btener registro
Eliminar registro
Fin
e tienen los
permisos
i
i
No
No
(a)
(b)
Capítulo 3. Desarrollo e implementación
26
Figura 3.4. Diagrama de flujo de guardar plano.
olicitar permisos
nicio
El registro e iste
btener registro usuario
Verificar suscripción
e tienen los
permisos
i
i
No
No
uscripción vigente No
btener registro plano
uscar plano recibido
El plano e iste
Actualizar plano Agregar plano
El registro e iste
rear nuevo registro
Agregar plano
Actualizar registro plano
Fin
i
i No
i No
Capítulo 3. Desarrollo e implementación
27
3.3.1.2.4 Eliminar plano
A diferencia de eliminar planos, esta función no elimina un registro dentro de la base
de datos, solo modifica su contenido. Es llamada desde la interfaz del cliente web, y
además de los permisos para modificar el registro, requiere que se especifique el
usuario y el nombre del plano a eliminar. Los pasos que se siguen para llevar a cabo
esta función se muestran en la Figura 3.5.
Figura 3.5. Diagrama de flujo de borrar plano.
nicio
El registro e iste
btener registro plano
uscar plano recibido
El plano e iste
Eliminar plano
Fin
olicitar permisos
e tienen los
permisos
i
No
Actualizar registro plano
No
No
i
i
Capítulo 3. Desarrollo e implementación
28
3.3.2 Cliente web
El cliente web es el medio por el cual los usuarios interactuarán con la aplicación,
entonces, resulta preciso presentar el contenido de forma organizada, evitando incluir
opciones innecesarias que puedan confundir al usuario. A continuación, se presentan
los diseños de las interfaces de usuario y los diagramas de secuencia que muestran
la interacción de los diferentes elementos de la aplicación.
3.3.2.1 Interfaces de usuario
El estilo que se adopta para el diseño de las interfaces, busca contener solo los
elementos necesarios para acceder a todas las funciones de la aplicación. El contenido
se presenta en 4 diferentes vistas, que son: vista de inicio, vista iniciar sesión, vista
bosquejar y vista perfil.
3.3.2.1.1 Vista de inicio
La vista inicio, es la primera con la que se interactúa al abrir la aplicación. ontiene
una barra de navegación que permite acceder a las interfaces de bosquejar, iniciar
sesión y perfil; esta última solo es accesible cuando se tiene una sesión activa.
ambién muestra el nombre de la aplicación y consejos para su uso. La Figura 3.6
muestra el diseño de esta vista.
Figura 3.6. Diseño de la interfaz inicio.
Nombre de la aplicación niciar sesión osquejar
Nombre de la aplicación
nformación acerca del uso de la aplicación
Capítulo 3. Desarrollo e implementación
29
3.3.2.1.2 Vista de iniciar sesión
Esta vista muestra los elementos necesarios para iniciar sesión, que básicamente es
un botón. e manera adicional se muestra el logo de la aplicación. Además, al igual
que la vista inicio, contiene una barra de navegación que permite acceder a las vistas
inicio y bosquejar.
Figura 3.7. Diseño de la interfaz iniciar sesión.
3.3.2.1.3 Vista bosquejar
Al igual que las dos vistas anteriores, también posee una barra de navegación, esta
permite acceder a la interfaz inicio, al perfil del usuario (solo con sesión activa) y a la
vista iniciar sesión al elegir terminar la sesión. En la Figura 3.8 se muestra esta vista.
Figura 3.8. Diseño de la interfaz bosquejar.
Nombre de la aplicación niciar sesión osquejar
isE
otón iniciar sesión
Nombre de la aplicación errar sesiónPerfil osquejar
otón pared otón puerta otón sensor otón ventana
aja de te to para el nombre del diseño otón guardar diseño
Lienzo para el trazado del diseño
Capítulo 3. Desarrollo e implementación
30
3.3.2.1.4 Vista perfil
Esta vista es la que contiene más elementos, ya que además de la barra de navegación
desde la cual se puede acceder a las interfaces de inicio, bosquejar e iniciar sesión (el
seleccionar cerrar sesión); contiene cuatro secciones adicionales, la primera muestra
datos relevantes de la cuenta, la segunda permite al usuario suscribirse, la tercera
posibilita eliminar todos los diseños y eliminar la suscripción, la cuarta muestra los
planos que se hayan guardado con anterioridad (en caso de e istir). Esta interfaz se
presenta en la Figura 3.9.
Figura 3.9. Diseño de la interfaz perfil.
3.3.2.2 Diagramas de secuencia
Los diagramas de secuencia están basados en los casos de uso del apartado 3.2.
ada uno, representa el flujo de interacción que se necesita para llevar a cabo una
actividad, sin embargo, algunos se basan de diagramas previos; se especifica de esta
manera para evitar ser repetitivo y e tenderlos de forma innecesaria. abe mencionar
que modificar diseño se omite ya que está contenido en crear diseño, además, eliminar
suscripción, eliminar diseño y eliminar diseños se describen en un mismo apartado
Nombre de la aplicación errar sesiónPerfil osquejar
Nombre de la cuenta Estado de suscripción aldo de la cuentaNúmero de
diseños guardados
otón suscribir aja de te to de tokes a transferir
ección suscribir usuario
otón eliminar suscripción otón eliminar todos los diseños
ección de borrar registros
iseño 2 iseño 1
ección diseños guardados
iseño 2 iseño 2
Capítulo 3. Desarrollo e implementación
31
debido a que comparten características. A continuación, se presentan los diagramas
de secuencia de la aplicación web.
3.3.2.2.1 Iniciar sesión
En la Figura 3.10 se presenta mediante un diagrama de secuencia el flujo de los
eventos necesarios para iniciar sesión. No depende de otras acciones previas
realizadas en el sistema, y comienza cuando el usuario ingresa a la vista principal de
la aplicación, es decir la vista inicio. nvolucra al caso de uso del mismo nombre y a los
actores usuario y billetera.
Figura 3.10. Diagrama de secuencia iniciar sesión.
3.3.2.2.2 Crear diseño
El diagrama de secuencia mostrado en la Figura 3.11, al igual que el anterior, no
requiere que se hayan realizado acciones previas sobre la aplicación. e parte desde
la vista de inicio para mostrar el flujo completo que se sigue si un usuario utiliza por
primera vez el sistema. entro del diagram