scieee AI-readable full text Open interactive document viewer

Tecnología Blockchain y su aplicación en la Automática

Bordons Martínez, Carlos

Abstract

Este proyecto consiste en la introducción y descripción de la tecnología Blockchain, su importancia y su implementación en un sistema real. En este caso, el sistema consistirá en un control de temperatura con dispositivos IoT controlado por Blockchain. La implementación del bucle de control PI en el sistema descrito radica en el desarrollo y ejecución del controlador en un Smart Contract en la Blockchain. La primera parte del proyecto consta de una introducción a la tecnología Blockchain, sus principales características, por qué es importante, qué es y cómo funciona. La segunda parte describe como aplicar esta tecnología al campo del control automático. La tercera parte consiste en un experimento de control de temperatura implementado en tecnología Blockchain.

Full text

Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Proyecto fin de Máster Máster Universitario en Ingeniería Industrial Tecnología Blockchain y su aplicación en la Automática Autor: Carlos Bordons Martínez Tutor: Luis Fernando Castaño Castaño Dpto. de Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019 Proyecto fin de Máster Máster Universitario en Ingeniería Industrial Tecnología Blockchain y su aplicación en la Automática Autor: Carlos Bordons Martínez Tutor: Luis Fernando Castaño Castaño Dr. Ingeniero Industrial Dpto. de Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019 Proyecto fin de Máster: Tecnología Blockchain y su aplicación en la Automática Autor: Carlos Bordons Martínez Tutor: Luis Fernando Castaño Castaño El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: Agradecimientos Quisiera aprovechar estas líneas para agradecer a todas las personas que han hecho posible la realización de este Trabajo Fin de Máster que marca el final de mi etapa como estudiante de la Universidad de Sevilla. En especial me gustaría agradecer a mi familia, mis padres Carlos y Ana y a mi hermana Marta que me han empujado a terminar a tiempo el proyecto, a mi pareja Laura que ha sufrido junto a mi muchas horas de investigación y experimentos, a mis amigos y compañeros que me han apoyado durante todos estos meses y me han empujado a no distraerme y a mi tutor Fernando, sin cuya ayuda este proyecto no habría salido adelante en tiempo y forma, también quiero agradecer a la comunidad Blockchain de Boston que me ofrecieron la oportunidad de conocer este nuevo mundo tecnológico. Carlos Bordons Martínez Sevilla, 2019 i ÍNDICE ¿Cómo se genera el par de llaves pública-privada y las direcciones públicas correspondientes? 51 Claves derivadas 53 3.6. Nodos y Mineros 55 3.6.1. Nodos 55 3.6.2. Nodos completos 55 Operación de nodos completos 55 3.6.3. Supernodos o nodos de escucha 56 3.6.4. Nodos mineros 56 Pool de minería 56 3.6.5. Nodos livianos/ligeros o SPV 56 3.7. Transacciones, Bloques y Blockchain 57 3.7.1. Transacciones 57 Componentes 57 ¿Qué son las transacciones en Blockchain? 57 Firmar Transacciones 60 3.7.2. Bloques 61 Estructura Bloque 61 Árboles Merkle 62 3.7.3. Blockchain 63 4. ¿Cómo funciona el Blockchain? 65 4.1. Transacciones 65 4.1.1. Creación de la Transacción y firmado 65 4.1.2. Transmisión a la red 66 4.1.3. Propagación y verificación 66 4.1.4. Validación 69 4.2. Mecanismos de Consenso principales 69 4.2.1. Proof of Work (PoW) 69 Minado 69 Problema de las ramas 71 4.2.2. Proof of Stake (PoS) 72 ¿Cómo se eligen a los validadores/forjadores? 73 PoW vs PoS 74 4.2.3. Delegated Proof of Stake (DPoS) 75 Ventajas y desventajas de la DPoS 77 4.2.4. Stellar Consensus Protocol (SCP) 78 Acuerdo Bizantino Federado 78 Ventajas del Stellar Consensus Protocol 79 4.3. Tecnología Blockchain - Observaciones 80 5. Criptomonedas, Smart Contracts, Dapps e Industria 4.0 81 5.1. Blockchain 1.0: Criptomoneda 82 5.2. Blockchain 2.0: Contratos Inteligentes 82 5.2.1. ¿Qué es un smart contract? 83 ix ÍNDICE 5.2.2. La Blockchain de Etherum 84 Estructura 84 Etherum Virtual Machine (EVM) 85 5.2.3. Los oráculos 86 5.3. Blockchain 3.0: DApps 86 5.4. Blockchain 4.0: Haciendo blockchain utilizable en la industria 4.0 88 6. Blockchain en la Automática 91 6.1. Control Automático 91 6.1.1. Introducción 91 6.1.2. Sistemas de Control 91 Lazos de Control 92 6.1.3. Estrategias de Control P, PI y PID 93 Control Proporcional (P) 93 Control Proporcional-Integral (PI) 93 Control Proporcional-Integral-Derivativo (PID) 94 6.1.4. Automatización Industrial 95 Introducción 95 Sistemas de control distribuido 96 Autómata Programable/Programmable Logic Controller (PLC) 97 Supervisión, Control y Adquisición de Datos (SCADA) 97 6.2. Blockchain y el Control Automático 98 6.2.1. Introducción 98 6.2.2. ¿Cómo puede ayudar Blockchain a la Automatización Industrial? 98 Nivel de campo 98 Nivel de control 99 Nivel de supervisión 101 6.2.3. Conclusiones 103 7. Control PI en Blockchain 105 7.1. Estado del Arte 105 7.2. Introducción 106 7.3. Objetivo, solución adoptada y elementos utilizados 110 7.3.1. Objetivo y solución adoptada 110 7.3.2. Elementos Hardware 110 7.3.3. Elementos Software 111 7.4. Diseño y montaje 113 7.4.1. Circuito de lectura del sensor de temperatura DHT22 113 7.4.2. Montaje del circuito de control de los ventiladores 114 7.4.3. Desarrollo del código en Arduino 116 Funciones usadas en Arduino 120 7.4.4. Desarrollo del código del Smart Contract 122 7.4.5. Desarrollo de una interfaz web 125 7.5. Despliegue 130 7.5.1. Despliegue del código Arduino 130 x ÍNDICE Configuración del Nodo Infura 130 7.5.2. Despliegue del código Solidity 132 7.5.3. Despliegue del código HTML 135 7.6. Experimentación 140 7.6.1. Diagrama conexiones del proyecto 140 7.6.2. Implementación 140 7.6.3. Resultados 141 Control en torno a punto de funcionamiento 141 Control con setpoint de bajada 142 Control con setpoint de subida 146 7.6.4. Ventajas e inconvenientes 149 8. Conclusiones 151 8.1. Líneas futuras 152 Referencias 153 xi Índice de Figuras 2.1. ¿Por qué el Blockchain?(Gill, 2018) 6 2.2. Tipos de redes (Rautopia, s.f.) 7 2.3. BC Pública vs Privada vs Híbrida (Pérez, 2019) 9 2.4. Multitud de intermediarios(Casals, 2016) 12 2.5. Contratos tradicionales vs Smart Contracts(W, 2018) 14 3.1. Diferencia estructuras de BD y Blockchain (Tabora, 2018) 19 3.2. Problema Generales Bizantinos (Pease, 1995) 25 3.3. Problema Doble Gasto(Alon Gal, 2018) 26 3.4. Ataque del 51%(Jimi S., 2018) 27 3.5. Directed Acyclic Graphs (Fantom Foundation, 2018) 30 3.6. Funcionamiento criptografía Simétrica (Dolores Fuentes, 2016) 38 3.7. Funcionamiento criptografía Asimétrica (Ivan, 2017) 40 3.8. Curva Elíptica (Nick Sullivan, 2013) 41 3.9. Curva Elíptica secp256k1 (Shirriff, 2014) 43 3.10. Propiedades Curva Elíptica (Nick Sullivan, 2013) 44 3.11. Multiplicación Curva Elíptica (RSK educate, 2015) 45 3.12. Funcionamiento de función hash (Fercufer, 2011) 47 3.13. Características SHA-256 (RSK educate, 2015) 49 3.14. Generar una dirección pública en Bitcoin (RSK educate, 2015) 53 3.15. Monedero Determinista tipo Cadena (Nick Adams, 2017) 54 3.16. Monedero Determinista tipo Árbol (Nick Adams, 2017) 54 3.17. Componentes de una Transacción (RSK educate, 2015) 57 3.18. Ejemplo de una Transacción (RSK educate, 2015) 58 3.19. Transacción Real de Bitcoin (sheinix, 2018) 59 3.20. Transacción con Retorno (Bit2Me, s.f.[c]) 59 3.21. Firma de una Transacción (Shirriff, 2014) 60 3.22. Cabecera de un Bloque (Wander, 2013) 62 3.23. Conexión Bloques (RSK educate, 2015) 63 4.1. Transacción (RSK educate, 2015) 65 4.2. Broadcasting de una Transacción (RSK educate, 2015) 66 4.3. Alice propaga dos transacciones distintas (CuriousInventor, 2013) 67 4.4. Tipos de cadenas en Blockchain (CuriousInventor, 2013) 68 xiii ÍNDICE DE FIGURAS 4.5. Propagación de una Transacción (RSK educate, 2015) 69 4.6. Minería Blockchain, búsqueda del Nonce (RSK educate, 2015) 70 4.7. Minería Blockchain, rama más larga (CuriousInventor, 2013) 72 4.8. Diferencias PoW y PoS (Schumann, 2018) 74 4.9. Economías de Escala (Schumann, 2018) 75 4.10. Algoritmo de Consenso DPoS (Winterfield, 2018) 77 4.11. Acuerdo Bizantino Federado (FBA) (Renders, 2018) 79 5.1. Evolución de Blockchain (InterValue, 2018) 82 5.2. Contratos en la Blockchain (Kristen Silverberg, 2016) 84 5.3. Estructura Bitcoin vs Etherum (Hertig, 2017b) 85 5.4. Estructura DApp (blockchainhub, 2019) 88 6.1. Control Lazo Abierto (Mateo Cruz, 2019) 92 6.2. Control Lazo Cerrado (Mateo Cruz, 2019) 92 6.3. Control P (Physicsch, 2015) 93 6.4. Control PI (Physicsch, 2015) 94 6.5. Control PID (Physicsch, 2015) 95 6.6. Sistema de Control Distribuido (Recursos, 2018) 96 6.7. Estructura de supervisión con SCADA(En Wikipedia, s.f.[u]) 97 6.8. Estructura conexión nivel campo y nivel control 98 6.9. Conexión niveles campo y control mediante tecnología Tangle (Elaboración propia, 2019) (iota community, 2018) 99 6.10. Integración de PLCs con Smart Contract (Elaboración propia, 2019)(Rosic, 2016) 100 6.11. Integración de SCADA con Smart Contract y Storage Blockchain (Elaboración propia, 2019) (Rosic, 2016) 103 6.12. Integración Total sin dispositivos intermediarios (Elaboración propia, 2019) (Rosic, 2016) 104 7.1. Riesgos sistema centralizado bajo ataque (Elaboración propia, 2019) 107 7.2. Solución Blockchain propuesta (Elaboración propia, 2019) 109 7.3. Solución adoptada (Elaboración propia, 2019) 110 7.4. Diagrama y resultado para lectura sensor de temperatura 114 7.5. Diagrama y resultado para alimentación y control de ventiladores 115 7.6. Diagrama y resultado montaje final 116 7.7. Configuración y monitorización del nodo en Infura 132 7.8. Despliegue del Smart Contract en Ropsten 134 7.9. Despliegue del Smart Contract en Ropsten, transacción en la Blockchain 135 7.10. Funcionamiento del webserver e interfaz web 137 7.11. Funcionamiento de interfaz web y Metamask 138 7.12. Transacciones recibidas y recogidas en el Smart Contract 139 7.13. Diagrama completo de conexiones (Elaboración propia, 2019) 140 7.14. Gráfica: Control en torno a punto de funcionamiento 141 7.15. Gráfica: Control con Setpoint de bajada, test 1 143 7.16. Gráfica: Control con setpoint de bajada, test 2 144 7.17. Gráfica: Control con setpoint de bajada, test 3 146 7.18. Gráfica: Control con Setpoint de subida 147 xiv Índice de Tablas 3.1. Principales diferencias entre BD y Blockchain (Tabora, 2018) 23 3.6. Comparativa de Mecanismos de Consenso (RSK educate, 2015) 36 7.2. Resultados: Control en torno a punto de funcionamiento 142 7.4. Resultados: Control con setpoint de bajada, test 1 143 7.6. Resultados: Control con setpoint de bajada, test 2 145 7.8. Resultados: Control con setpoint de bajada, test 3 146 7.10. Resultados: Control con setpoint de subida, test 1 148 7.12. Resultados: Control con setpoint de subida, test 2 148 7.14. Resultados: Control con setpoint de subida, test 3 149 xv 1 Introducción 1.1 Contexto 1.1.1 La importancia de la confianza La sociedad se encuentra actualmente viviendo la Revolución Digital o Tercera Revolución Industrial, que marcó el comienzo de la Era de la Información.(Bryant, 2011) La llegada de Internet permite a cualquier persona o máquina estar conectado con el resto del mundo, la privacidad y protección de datos se han convertido en una prioridad, la posibilidad de manejar información sensible se encuentra focalizada en pocos individuos y esto abre la posibilidad de la existencia de brechas de seguridad o uso fraudulento de esa información, la sociedad vive en la Era de la Información pero sin tener control sobre esa información (Romero, 2007). Actualmente existen una decena de empresas/entidades que manejan la mayoría del tráfico del mundo y que actúan como intermediarios de los datos, son las “Trusted Third Parties” o Terceros de confianza, su cometido es gestionar los datos entre dos o más agentes, y se deposita en ellos la confianza de que las transacciones, acuerdos o trabajos a través de Internet entre estos agentes se llevarán a cabo (Cantor, 2018), algunos ejemplos serían: Facebook: Gestiona datos personales de un usuario con el resto de usuarios de la red, con la capacidad incluso de censurarlos o usarlos para otro fin. PayPal: Gestiona los pagos entre dos usuarios, con capacidad de bloquear o retirar el pago en caso de conflicto. AirBnB/Uber: Gestionan alquileres de inmuebles y servicios entre usuarios de su red. Bancos y compañías de tarjetas de crédito: Hacen de intermediario entre las cuentas bancarias de comprador y vendedor. Todas estas plataformas crean su valor como gestores de datos donde los usuarios depositan su confianza. La tecnología Blockchain aparece para suplir la necesidad de acudir a terceros de confianza para realizar transacciones en Internet con plena confianza de que se llevarán a cabo, al igual que no es necesario un notario para realizar la compra del mes o pedir un taxi. 1 1. INTRODUCCIÓN 1.1.2 Historia de la tecnología Blockchain En los años 90 un grupo de personas comenzó a reunirse para discutir problemas de programación y criptografía, esas reuniones evolucionaron a través de una lista de emails, a discusiones sobre matemáticas, informática, privacidad, libertad, filosofía y política, el grupo creció y terminaron haciéndose llamar “Cypherpunks” (imchris, 2004; PetriB, 2018). Un Cypherpunk es cualquier activista que aboga por el uso generalizado de criptografía y tecnologías que mejoren la privacidad como ruta hacia el cambio social y político (PetriB, 2018; Manne, 2011). En 1993 apareció un movimiento siguiendo el “Cypherpunk manifesto” cuya clave principal era la privacidad. Basado en ese principio se desarrollaron las primeras ideas sobre las divisas digitales (PetriB, 2018; Manne, 2011; Narayanan, 2013). Existieron varios intentos de aplicar transacciones anónimas y mejoras en la privacidad en la red: Adam Back (1997): Creador de “Hascash”, un mecanismo anti-spam que añade tiempo computacional al envío de emails, lo que convierte el envío de spam en un proceso costoso (Back, 2002). Wei Dai (1997-1998): Publicó la propuesta de “B-Money”, un sistema anónimo de dinero efectivo electrónico distribuido, un método para almacenar la información de las transacciones sin ser necesaria la existencia de Third Parties (Dai, 1998). Hal Finney (2004): Creador del “Reusable Proof of Work”, un software que soluciona el problema del “doble gasto”, problema fundamental de las divisas digitales (nakamotoinstitute, 2004). Nick Szabo (2005): Publicó una propuesta para “Bitgold”, un intento de replicar las propiedades económicas del oro mejorando sus propiedades de seguridad, los beneficios principales eran la independencia de instituciones financieras y transacciones entre países sin problemas (Moskov, 2018). El primer Blockchain El primer trabajo en una cadena de bloques asegurados criptográficamente fue descrito en 1991 por Stuart Haber y W. Scott Stornetta (Narayanan y col., 2016; Haber y Stornetta, 1990). Querían implementar un sistema donde las marcas de tiempo de los documentos no pudieran ser alteradas. En 1992, Bayer, Haber y Stornetta incorporaron árboles Merkle al diseño, lo que mejoró su eficiencia al permitir que varios certificados de documentos se reunieran en un solo bloque (Narayanan y col., 2016; Bayer, Haber y Stornetta, 1993). El primer Blockchain fue conceptualizado por una persona (o grupo de personas) conocida como Satoshi Nakamoto en 2008. Nakamoto mejoró el diseño de una manera importante, utilizando un método similar al de Hashcash para agregar bloques a la cadena sin requerir que estén firmados por un “Trusted Party” (Narayanan y col., 2016). El diseño fue implementado el año siguiente por Nakamoto como un componente central de la criptomoneda bitcoin, que sirve como el registro público para todas las transacciones en la red (Economist, 2015). 2 2.2 La seguridad online, actual vs Blockchain Figura 2.3 BC Pública vs Privada vs Híbrida (Pérez, 2019). 2.2.2 Interacción con la red: Internet y comunicaciones actuales: para interactuar con los servidores de una red primero debes acceder a ella y segundo tener permiso para interactuar, normalmente ambas acciones se realizan con la combinación de usuario y contraseña, que suele ser uno de los puntos más vulnerables de la red. Las redes privadas normalmente están protegidas por diferentes métodos de seguridad como VPNs, Firewalls y protocolos de seguridad y encriptación ( Tactical Technology Collective y Front Line, 2018). 9 2. ¿POR QUÉ EL BLOCKCHAIN? Blockchain: el punto clave de la seguridad en la tecnología Blockchain es que utiliza la tecnología de Llave Pública-Llave Privada (Public-Private key pair), este método de encriptación elimina la necesidad de verificar el dúo usuario y contraseña contra una base de datos. La seguridad para acceder a la red se garantizará siempre que la Llave Privada de cada usuario se mantenga protegida o sea cambiada regularmente. Para Blockchains privadas se pueden utilizar los mismos métodos de seguridad ya mencionados (VPNs, Firewalls, etc) (Joshi, Han e Y. Wang, 2018). La gran ventaja del método de las claves públicas-privadas de las Blockchains contra el dúo de usuario y contraseña, es que en caso de desvelarse la clave privada de un usuario, solo las transacciones/acciones de ese usuario estarían comprometidas y sería necesario conocer todas las claves privadas, que NO se almacenan en ninguna base de datos, para poder acceder a la información del resto usuarios. En casos de acceso fraudulento a una base de datos de un servidor que contenga todos los usuarios y contraseñas y demás información sensible (por ejemplo con el usuario y contraseña del Administrador), si la información no está correctamente cifrada o son contraseñas débiles, puede afectar a toda la red de usuarios de ese servidor, como ya ha pasado en vulnerabilidades pasadas de algunas empresas (En Wikipedia, s.f.[s]). En el caso de la tecnología Blockchain, si se desvelase la clave Privada del Administrador, el resto de claves Privadas permanecen seguras ya que no se encuentran almacenadas en el Servidor/Base de datos comprometido. 2.3 La confianza online, actual vs Blockchain 2.3.1 ¿Qué es la confianza? Esperanza firme que una persona tiene en que algo suceda, sea o funcione de una forma determinada, o en que otra persona actúe como ella desea (En Lexico, s.f.). Fuera de la red esta confianza está proporcionada por figuras como los notarios, que se ocupan de registrar las transacciones como válidas, los cuerpos del estado como el judicial y las fuerzas de seguridad que se encargan de que los contratos y acuerdos lleguen a cumplirse asegurando la confianza de los acuerdos y en última instancia el dinero en efectivo que al hacer un pago en mano provee la seguridad de que la persona recibirá en ese mismo instante el objeto o servicio adquirido Vigna y Casey (2019). 2.3.2 Confianza Online La falta de confianza ha sido identificada repetidamente como una de las barreras más formidables para que las personas se involucren en el comercio electrónico, involucrando transacciones en las cuales la información financiera y personal se envía a los comerciantes a través de Internet. 10 2.3 La confianza online, actual vs Blockchain El futuro del comercio electrónico es tenue sin un clima general de confianza en línea. Crear confianza en los consumidores en Internet representa un desafío para los comerciantes en línea y es un tema de investigación de creciente interés e importancia (Y. D. Wang y Emurian, 2005). Internet y comunicaciones actuales: como se ha comentado en el Capítulo 1, en la sociedad actual la confianza online la proveen los Third Trusted Parties. Cuando se realiza un pago online se utiliza PayPal, que hace de intermediario entre el comerciante y el usuario, cuando se compra un articulo online se usan páginas como Amazon que proveen la confianza de que el articulo será entregado y en buenas condiciones y que los datos personales y financieros están seguros, para buscar información se accede a Wikipedia que asegura que la información que proveen es fiable, para la comunicación instantánea se utiliza Whatsapp o Facebook, intermediarios que aseguran que el mensaje llegará sin ser interceptado. Todos estos intermediarios tienen acceso a esta información sensible, pero se confía en que estos agentes no harán uso fraudulento y cumplirán con la utilización acordada de esos datos. Blockchain: la tecnología Blockchain pretende revolucionar la gestión de la confianza online, esta tecnología sustituye los Third Trusted Parties por los nodos. Los nodos serán los encargados de ejecutar el código que verificará que la transacción es correcta, una vez validada la transacción esta es añadida a la cadena de bloques asegurando que es verdad, y una vez añadida no puede ser modificada. La gran diferencia es que estos nodos no tienen acceso a los datos, esto significa que los nodos no pueden modificar o hacer un mal uso de los datos de una transacción firmada por una clave Privada y estas son solo propiedad del usuario, no pueden ser robadas en un ataque de hackers a un servidor. La historia ya ha mostrado escándalos como el uso de datos fraudulento por Facebook o grandes webs hackeadas con datos de millones de usuarios filtrados, pero hasta ahora los usuarios no tenían otra alternativa que confiar en estos agentes, esto puede cambiar con la llegada de la tecnología Blockchain (R. Álvarez, 2018; Otero, 2018). Un buen ejemplo de como funciona una transacción de un activo en la Blockchain sería el Bitcoin (bitcoin.it, 2011c): 1. El usuario A quiere enviar 1 BTC al usuario B, para ello crea la transacción y la firma con su llave Privada, después envía esa transacción firmada a la Blockchain Bitcoin. 2. La Blockchain (nodos) recibe la transacción firmada, comprueba que el usuario A tiene 1 BTC para enviar y si es correcto valida la transacción. 3. Se disminuye el saldo de A en 1 BTC y se aumenta el saldo de B en 1 BTC. 4. Una vez la transacción es validada se añade a la cadena de bloques de esta Blockchain y ya no puede ser modificada, evitando que A pueda volver a enviar ese BTC (problema del doble gasto). 11 2. ¿POR QUÉ EL BLOCKCHAIN? 5. Todo este proceso ocurre muy rápido o incluso instantáneo en otras Blockchains distintas al Bitcoin, con unos costes muy bajos por transacción, del orden de céntimos de euro o incluso menos sin importar la cantidad intercambiada. En comparación con PayPal, un banco o la compra de una casa autenticada por un notario, en este ejemplo los nodos no pueden modificar el saldo de A sin su llave privada, ni congelarlo ni perderlo, potestad que sí tienen los agentes de confianza actuales. Los BTCs del usuario A están seguros si un hacker accede a la base de datos de la Blockchain, ya que no puede modificar las cuentas/saldos ni puede acceder a las contraseñas porque las claves privadas no se almacenan en la Blockchain. Un hacker que accediera con una cuenta de Administrador del sistema de cualquier Third Trusted Party actual, sí podría llegar a modificar transacciones de otros usuarios sin necesitar la clave de ese usuario, esto es imposible en la Blockchain (hashgains, 2018). Por tanto los agentes de confianza actuales podrán ser sustituidos en el futuro por nodos ejecutando código, estos nodos son seguros y confiables debido a la robustez que proporciona la Blockchain distribuida que impide la existencia de nodos deshonestos que escriban transacciones falsas a su favor. Figura 2.4 Multitud de intermediarios(Casals, 2016). 2.3.3 Smart Contracts frente a los proveedores online Más adelante se estudiará en profundidad qué son los Smart Contracts, un software que permite ejecutar cualquier tipo de código en la Blockchain. Esta tecnología permite realizar transacciones/acciones del tipo “si se cumple la condición A realiza B”, e incluso permitirá ejecutar cualquier código con las propiedades clave de la tecnología Blockchain, verdad,seguridad yconfianza, los Smart Contracts integrados con el Internet of Things tienen un gran potencial. Un ejemplo sencillo puede ser un Smart Contract de viviendas de alquiler similar a AirBnB. AirBnB: 1. El usuario confía sus datos de pago a la plataforma, esta tendrá potestad de cargar cualquier cantidad al usuario, por ser una Third Trusted Parties es poco probable que haga mal uso de esos datos de pago. 12 2.3 La confianza online, actual vs Blockchain 2. El usuario debe contactar con el dueño de la vivienda y confiar en que el dueño cumplirá lo prometido, proveer el acceso a la vivienda. 3. La plataforma realizará el pago al dueño de la vivienda tras deducir una comisión por su papel como intermediario, la plataforma hará de árbitro si surge algún problema, puede incluso retener el pago o realizar cargos extra. Un Smart Contract de viviendas de alquiler: 1. El usuario interactúa con el Smart Contract firmando el pago acordado con su clave privada. 2. El Smart Contract comprueba que se ha realizado el pago en la Blockchain y libera la información de acceso a la vivienda para el usuario y libera el pago para el dueño de la vivienda. 3. Se podrían añadir más condiciones al Smart Contract como verificación de la vivienda previo al pago o incluir un sistema de fianzas, incluso conectar la Blockchain con accesos domóticos a la vivienda para permitir/rescindir el acceso solo al usuario adecuado. 4. Por la ejecución del Smart Contract suele ser necesaria una pequeña comisión del orden de céntimos de euro. La gran diferencia en este ejemplo es que en el futuro no será necesario una plataforma intermediaria que asegure el pago del servicio, o que ponga en contacto a las partes y que tenga el poder de acceder a los datos de pago o de denegar el acceso al servicio, además reduciendo las comisiones por realizar este servicio. Es cierto que en este ejemplo se compara un Smart Contract con AirBnB, un agente de confianza en la sociedad actual. Esta confianza la ha construido esta empresa a su vez creando un monopolio, donde evita que otras empresas con el mismo modelo de negocio puedan entrar a competir ya que no son igual de fiables. Estas empresas podrían ser fiables si utilizan tecnologías como los Smart Contracts, donde su negocio no fuera el de la confianza e intermediación, sino el de dar un buen servicio al usuario. En una estructura de Smart Contract, la realización contractual requerida no depende de la confianza de las partes entre sí, o de un tercero, sino que dependen de la confianza de las partes en el propio Smart Contract, que no se basa en una promesa de cumplimiento sino en la programación diseñada para lograr un objetivo específico (Govender, 2019). 13 2. ¿POR QUÉ EL BLOCKCHAIN? Figura 2.5 Contratos tradicionales vs Smart Contracts(W, 2018). 14 3 ¿Qué es el Blockchain? En el Capítulo 2, se ha destacado el por qué la tecnología Blockchain es necesaria para mejorar la seguridad y confianza online y ahorrar costes de intermediación, permitiendo realizar transacciones verdaderas, fiables y seguras de forma rápida y a coste reducido. En este capítulo 3se procede a estudiar qué es la tecnología Blockchain y en el siguiente capítulo 4se estudia cómo funciona esta tecnología para lograr estos objetivos tan ambiciosos. 3.0.1 Definición de Blockchain Una Blockchain, es una estructura de datos en la que la información contenida se agrupa en conjuntos (bloques) a los que se les añade información relativa al bloque anterior de la cadena en una línea temporal, de manera que gracias a técnicas criptográficas, la información contenida en un bloque solo puede ser repudiada o editada modificando todos los bloques posteriores, esta Base de Datos está distribuida entre todos los nodos que participan en el sistema. En la práctica ha permitido, gracias a la criptografía asimétrica y las funciones de resumen o hash, la implementación de un registro contable (ledger) distribuido que permite soportar y garantizar la seguridad del dinero digital. Siguiendo un protocolo apropiado para todas las operaciones efectuadas sobre la Blockchain, es posible alcanzar un consenso sobre la integridad de sus datos por parte de todos los participantes de la red, sin necesidad de recurrir a una entidad de confianza que centralice la información. Por ello se considera una tecnología en la que la "verdad" (estado confiable del sistema) es construida, alcanzada y fortalecida por los propios miembros; incluso en un entorno en el que exista una minoría de nodos en la red con comportamiento malicioso dado que, en teoría, para comprometer los datos, un atacante requeriría de una mayor potencia de cómputo y presencia en la red que el resultante de la suma de todos los restantes nodos combinados. Por las razones anteriores, la tecnología Blockchain es especialmente adecuada para escenarios en los que se requiera almacenar de forma creciente datos ordenados en el tiempo, sin posibilidad de modificación ni revisión y cuya confianza pretenda ser distribuida en lugar de residir en una entidad certificadora (En Wikipedia, s.f.[d]). Es un registro único,consensuado ydistribuido en varios nodos de una red (Pastorino, 2018). 15 3. ¿QUÉ ES EL BLOCKCHAIN? Una cadena de bloques es esencialmente solo un registro, un libro mayor de acontecimientos digitales que está “distribuido” o es compartido entre muchas partes diferentes. Solo puede ser actualizado a partir del consenso de la mayoría de participantes del sistema y, una vez introducida, la información nunca puede ser borrada. La cadena de bloques de Bitcoin contiene un registro certero y verificable de todas las transacciones que se han hecho en su historia (Bit2Me, 2018a). 3.1 Estructuras de Datos: Bases de Datos y Blockchain 3.1.1 Introducción a las Bases de Datos Por qué utilizar una base de datos Una base de datos (BD) proporciona a los usuarios el acceso a datos, que pueden visualizar, ingresar o actualizar, en concordancia con los derechos de acceso que se les hayan otorgado (Villagómez, 2017). Qué es una base de datos Una base de datos es una entidad en la cual se pueden almacenar datos de manera estructurada, con la menor redundancia posible. Una base de datos se entenderá como una colección de datos relacionados entre sí y que tienen un significado implícito. Por datos se refiere a hechos conocidos que pueden registrarse y que tienen un significado implícito(Villagómez, 2017; readthedocs.io, s.f.). Diferentes programas y diferentes usuarios deben poder utilizar estos datos. Por lo tan- to, el concepto de base de datos generalmente está relacionado con el de red, ya que se debe poder compartir esta información. Una base de datos puede ser local, es decir que puede utilizarla solo un usuario en un equipo, o puede ser distribuida, es decir que la información se almacena en equipos remotos y se puede acceder a ella a través de una red. La principal ventaja de utilizar bases de datos es que múltiples usuarios pueden acceder a ellas al mismo tiempo (Villagómez, 2017). Sistemas de ficheros tradicionales En estos sistemas, cada programa almacenaba y utilizaba sus propios datos de forma un tanto caótica. La única ventaja que conlleva esto es que los procesos son independientes, por lo que la modificación de uno no afecta al resto (readthedocs.io, s.f.). Pero tiene grandes inconvenientes: Datos redundantes. Ya que se repiten continuamente. Coste de almacenamiento elevado. Al almacenarse varias veces el mismo dato en distintas aplicaciones, se requiere más espacio en los discos. Tiempos de procesamiento elevados. Al no poder optimizar el espacio de almacenamiento. Probabilidad alta de inconsistencia en los datos. Esto se debe a que un proceso cambia sus datos y no el resto. Por lo que el mismo dato puede tener valores distintos según qué aplicación acceda a él. 16 3.1 Estructuras de Datos: Bases de Datos y Blockchain Difícil modificación en los datos. Debido a la probabilidad de inconsistencia, cada modificación se debe repetir en todas las copias del dato. Sistemas de base de datos relacional En este tipo de sistemas los datos se centralizan en una base de datos común a todas las aplicaciones(readthedocs.io, s.f.). Sus ventajas son las siguientes: Menor redundancia. No es necesaria la repetición de datos. Aunque, sólo los buenos diseños de datos tienen poca redundancia. Menor espacio de almacenamiento. Debido a una mejor estructuración de los datos. Acceso a los datos más eficiente. La organización de los datos produce un resultado más óptimo en rendimiento. Datos más documentados. Los meta-datos permiten describir la información de la base de datos. Independencia de los datos y los programas y procesos. Esto permite modificar los datos sin modificar el código de las aplicaciones. Integridad de los datos. Mayor dificultad de perder los datos o de realizar incoherencias con ellos. Mayor seguridad en los datos. Al limitar el acceso a ciertos usuarios. Como contrapartida encontramos los siguientes inconvenientes: Instalación costosa. El control y administración de bases de datos requiere de un software y hardware potente. Requiere personal cualificado. Debido a la dificultad de manejo de este tipo de sistemas. Implantación más larga y difícil. La adaptación del personal es más complicada y lleva mayor tiempo. Sistemas de Gestión de Bases de Datos Un sistema gestor de bases de datos (SGBD) es una aplicación que permite a los usuarios definir, crear y mantener una base de datos, y proporciona acceso controlado a la misma (readthedocs.io, s.f.). En general, un SGBD proporciona los siguientes servicios: Permite la definición de la base de datos mediante el lenguaje de definición de datos (DDL – Data Description Language). Este lenguaje permite especificar la estructura y el tipo de los datos, así como las restricciones sobre los datos. Todo esto se almacenará en la base de datos. 17 3. ¿QUÉ ES EL BLOCKCHAIN? Permite la inserción, actualización, eliminación y consulta de datos mediante el lenguaje de manejo o manipulación de datos (DML - Data Manipulation Language). Proporciona un acceso controlado a la base de datos mediante: •Un sistema de seguridad, de modo que los usuarios no autorizados no puedan acceder a la base de datos, mediante el lenguaje de control de datos (DCL - Data Control Language); •Un sistema de integridad que mantiene la integridad y la consistencia de los datos; •Un sistema de control de concurrencia que permite el acceso compartido a la base de datos; •Un sistema de control de recuperación que restablece la base de datos después de que se produzca un fallo del hardware o del software; •Un diccionario de datos o catálogo accesible por el usuario que contiene la descripción de los datos de la base de datos. 3.1.2 Bases de Datos en la Blockchain Centralizadas, descentralizadas y distribuidas Centralizadas: mantienen todos los datos en una única ubicación y para acceder a la información se debe ingresar al servidor principal del sistema. Su principal ventaja es que son más sencillas de mantener, pero son muy poco estables/resistentes a fallos, mayores riesgos de seguridad al contener toda la información en un solo lugar, poco resistentes a multitud de peticiones y problemas de escalabilidad (Rosa, 2018). Descentralizadas: consiste en una serie de servidores que se encuentran en distintos lugares geográficos, los datos no se almacenan en un solo lugar, sino que están almacenados en una serie de servidores distintos que proveen de información a los clientes. Funcionan como un grupo de bases de datos independientes sin conexiones lógicas entre ellas y que no están totalmente interconectadas mediante una red de comunicaciones. Son más estables que las centralizadas y poseen mayor seguridad al tener los datos almacenados repartidos y mayor escalabilidad (Rosa, 2018). Distribuidas: funciona como una única base de datos lógica que está instalada en una serie de servidores (nodos) ubicadas en diferentes lugares geográficos y que no están conectadas a una única unidad de procesamiento, pero si están totalmente conectadas entre sí a través de una red de comunicaciones. En este sistema todos los nodos contienen información y todos los clientes del sistema están en condición de igualdad. De esta forma las bases de datos distribuidas pueden realizar procesamientos autónomos. Son las más estables de todas al almacenar la totalidad de la información del sistema en un gran número de nodos que mantienen condiciones de igualdad entre sí, poseen la mayor escalabilidad de los 3 modelos (Rosa, 2018). 18 3.2 Problemas computacionales que soluciona una Blockchain Figura 3.2 Problema Generales Bizantinos (Pease, 1995). 3.2.2 Problema del doble gasto El doble gasto es una debilidad del efectivo digital, ya que permitiría gastar una moneda digital dos veces. Dado que, a diferencia del dinero físico como las monedas, los archivos electrónicos pueden ser duplicado ofalsificado, y por lo tanto el hecho de gastar una moneda digital no elimina sus datos de la propiedad del titular original, se necesitan otros medios para evitar el doble gasto (RSK educate, 2015). Al igual que con el dinero falsificado, el doble gasto conlleva inflación dado que se crean nuevas monedas fraudulentas que anteriormente no existían. Esto devalúa la moneda en relación a otras unidades monetarias, y disminuye la confianza de los usuarios, así como dificulta la circulación y posesión de la moneda. En el caso concreto de las Blockchains, estas se protegen contra los ataques de doble gasto agregando cada transacción a la Blockchain, haciendo que sea muy difícil modificarla y verificándola después. Para ello, utiliza un sistema descentralizado, basado en una gran red de nodos que confirman la transacción. Es más vulnerable a este tipo de ataques, durante el inicio de la transacción en la red y por eso, a mayor número de confirmaciones, menos probable será el riesgo de sufrir un ataque (En Wikipedia, s.f.[l]). 25 3. ¿QUÉ ES EL BLOCKCHAIN? Figura 3.3 Problema Doble Gasto(Alon Gal, 2018). Tipos de ataques: Ataque de carrera Esta variación del ataque de doble gasto solo se puede producir en caso de transacciones cuyos vendedores aceptan pagos sin confirmación ya que se exponen a que la transacción pueda ser revertida. El ataque se basa en que a la hora de realizar una transacción podemos realizar al mismo tiempo otra u otras transacciones usando los mismos fondos. El nombre del ataque viene porque se produce una carrera para ver que transacción se acepta primero. Ataque Finney Debe su nombre a Hal Finney que fue el primer receptor de una transacción por medio de una red Bitcoin. Solo funciona si el comerciante acepta transacciones no confirmadas. Requiere la participación de un minero. El atacante irá minando bloques, en el bloque que esté minando en ese momento, incluye una transacción que le devuelve algunas de sus monedas, pero sin transmitir la transacción al resto de nodos. En cada bloque que genera incluye una transferencia de una dirección A a B ambos controladas por él. Cuando encuentra un bloque hace una compra desde A y cuando se acepte el pago el atacante difunde su bloque, la transacción le envía las criptomonedas a él y anulará/revertirá el pago anterior al comerciante. Ataque por fuerza bruta Este ataque se puede realizar incluso siendo necesario recibir confirmaciones al realizar la transacción. El éxito o fracaso del ataque depende del Hashrate (poder de cómputo) que tenga el atacante, pero requiere un gasto considerable en electricidad y hardware. El ataque consiste en hacer una transacción en la que se paga al vendedor y al mismo tiempo se mina un Blockchain alternativo en el que se incluye un ataque de doble gasto, una vez se ha esperado un numero de confirmaciones y el vendedor vende/envía el producto, si en ese momento se han encontrado más de n bloques entonces se libera la cadena alternativa y el atacante recupera su dinero. 26 3.3 Consensus Ataque por mayoría o ataque >50% Este ataque solo se puede realizar si el atacante controla más del 50% del Hashrate, este sería un caso especial del ataque por fuerza bruta que tendría un 100% de probabilidades de éxito ya que el atacante va a poder generar bloques más rápido que el resto de la red, como se observa en la figura 3.4. El número de confirmaciones sería irrelevante pero un mayor número de confirmaciones puede retrasar lo suficientemente al atacante para que este método no sea rentable. Figura 3.4 Ataque del 51%(Jimi S., 2018). 27 3. ¿QUÉ ES EL BLOCKCHAIN? 3.3 Consensus 3.3.1 ¿Qué es el Consensus? Consenso definición: Acuerdo producido por consentimiento entre todos los miembros de un grupo o entre varios grupos (En DRAE, 2018a). Un blockchain es un sistema descentralizado de igual a igual (p2p) sin una figura de autoridad central. Esto crea un sistema sin corrupción de un único origen/central, pero todavía crea un problema importante porque una cadena de bloques no tiene "líder". Para que las cadenas de bloques tomen decisiones, deben llegar a un consenso utilizando "mecanismos de consenso" (Rosic, 2018). En los últimos 30 años, los mecanismos de consenso en el mundo informático han pasado de ser una idea abstracta a la clave principal de la tecnología de bases de datos distribuida. En los ledgers distribuidos, un mecanismo de consenso es la forma en que una mayoría o todos los miembros de la red acuerdan el valor de un dato o una propuesta de transacción, que luego actualiza el ledger. En otras palabras, un mecanismo de consenso es un conjunto de reglas y procedimientos que mantienen un conjunto coherente de hechos entre los nodos participantes. Los algoritmos de consenso permiten que las máquinas conectadas trabajen juntas como un grupo que incluso sobrevive si alguno de sus miembros falla. Esta tolerancia al fallo es otra gran ventaja de las Blockchains y las bases de datos distribuidos, que tienen redundancia incorporada. Los protocolos de consenso o las plataformas de consenso son el núcleo de las tecnologías distribuidas. Existe una gran diversidad de algoritmos para generar consenso en función de requisitos como rendimiento, escalabilidad, consistencia, capacidad de datos, gobierno, seguridad y fallas redundancia (RSK educate, 2015; Andreas M. Antonopoulos, aantonop, 2016). Consenso es que los nodos de la red están de acuerdo con el mismo estado de una cadena de bloques, en un sentido que lo convierte en un ecosistema de auto-auditoría(Lisk Academy, 2019). Este es un aspecto absolutamente crucial de la tecnología, que lleva a cabo dos funciones clave: 1. Los protocolos de consenso permiten que se actualice una cadena de bloques, al tiempo que se garantiza que todos los bloques de la cadena sean verdaderos, además de mantener a los participantes incentivados. 2. Evita que cualquier entidad individual controle o descarrile todo el sistema Blockchain. El objetivo de las reglas de consenso es garantizar que se utilice y siga una cadena única. Cuáles son los objetivos de un mecanismo de consenso Rosic (2018): Búsqueda de acuerdo: un mecanismo de consenso debe lograr el mayor acuerdo posible del grupo. 28 3.3 Consensus Colaborativo: todos los participantes deben de trabajar juntos para lograr un resultado que ponga el interés del grupo primero. Cooperativa: todos los participantes deben trabajar en equipo en lugar de en forma individualizada y no deben poner sus propios intereses primero. Igualitario: un grupo que trata de lograr un consenso debe ser lo más igualitario posible. Lo que esto significa básicamente es que todos y cada uno de los votos tienen el mismo peso. El voto de un individuo no puede ser más importante que el de otro. Inclusivo: en el proceso de consenso debe participar el mayor número posible de individuos. No debería ser como la votación normal donde no todas las personas sienten ganas de votar porque creen que su voto no tendrá ningún peso a largo plazo. Participativo: El mecanismo de consenso debe ser tal que todos deben participar activamente en el proceso general. 3.3.2 Mecanismos de consenso disponibles y en desarrollo Los protocolos de consenso son uno de los aspectos más importantes y revolucionarios de la tecnología Blockchain. Estos protocolos crean un sistema de acuerdo irrefutable entre varios dispositivos a través de una red distribuida, mientras se evita la explotación indebida del sistema (RSK educate, 2015; Lisk Academy, 2019; Azis, 2016). Proof-of-Work (PoW), prueba de trabajo Los mineros compiten para agregar el siguiente bloque (un conjunto de transacciones) en la cadena de bloques, es una carrera para resolver un rompecabezas criptográfico extremadamente duro. El primero en resolver el rompecabezas, gana el premio. Como recompensa por sus esfuerzos, el minero recibe tokens nuevos y una pequeña comisión de transacción pagada por los usuarios. En Blockchains grandes como Bitcoin o Etherum se consume una cantidad importante de energía por todos los mineros. En Bitcoin, el minero recibe 12.5 ejemplares nuevos hasta 2020 que ocurrirá el siguiente “halving”, proceso que consiste en la reducción a la mitad de la recompensa de los mineros por completar un bloque de transacción, permite controlar el suministro ( Bárbara Nogales, 2019), y una pequeña comisión de transacción. El número de transacciones por segundo de este mecanismo es alrededor de 7-30 transacciones/segundo. Soporta comisiones de transacción altas. Para atacar una Blockchain (3.2.2) que use PoW se debe tener mayor potencia de cálculo que el 50% de nodos de la red juntos, lo que equivale a grandes costes y gastos de energía para el atacante, desincentivando el ataque a las Blockchains que usan este protocolo de consenso, siendo uno de los protocolos más seguros cuando la Blockchain es grande y está suficientemente distribuida en multitud de nodos. Directed Acyclic Graphs (DAG), Grafos Acíclicos Dirigido En un grafo (o red de nodos conectados) la información se puede pasar de un nodo a otro a lo largo de diferentes conexiones. La información puede dejar un nodo, pasar a través 29 3. ¿QUÉ ES EL BLOCKCHAIN? de otros nodos y regresar al nodo original. Cuando esto ocurre sin que se haya encontrado ningún nodo más de una vez, el gráfico se puede definir como cíclico. Los grafos acíclicos son grafos que no tienen ningún ciclo, no hay una ruta para que la información regrese a los nodos primarios de cada diagrama sin duplicar o pasar por un nodo que ya se ha encontrado. Si se le da una dirección/sentido a las conexiones para que funcionen como una calle de una sola vía para la información, y se asegura que ningún nodo se conecte a ninguno de los otros nodo anteriores, nuestro grafo es ahora un grafo acíclico dirigido, ver figura 3.5. Figura 3.5 Directed Acyclic Graphs (Fantom Foundation, 2018). Las Blockchain funcionan de manera que cada bloque nuevo incluye una referencia a la anterior. Sin embargo, se pueden crear cadenas ramificadas cuando dos mineros producen un bloque al mismo tiempo, o se produce un ataque del 51%. Para garantizar que la cadena principal siga siendo viable, las cadenas de bloques imponen un período de tiempo arbitrario entre los bloques para que la red tenga tiempo para consolidar yverificar qué "ramificación" de la cadena es correcta. Este período de espera se conoce como tiempo de bloqueo, y las ramas más cortas o malintencionadas quedan "huérfanas" (descontinuadas). Los DAG, por otro lado, permiten que coexistan e interconecten múltiples cadenas de bloques. Los nodos pueden existir en paralelo, siempre que la información se dirija en la misma dirección. Esto abre un nuevo rango de opciones de confirmación que eliminan la necesidad de tiempos de bloqueo, además de reducir la cantidad de procesamiento/energía desperdiciado en "cadenas huérfanas" abandonadas. Las transacciones individuales se validan entre sí. Los usuarios de la red son mineros y validadores, aunque no pueden validar sus propias transacciones. Esto generalmente significa que en un DAG hay poca oninguna necesidad de pagar comisiones. Al escalar de manera muy eficiente y evitar o reducir las tarifas de los usuarios, los DAG son adecuados para grandes volúmenes de transacciones, incluidas las micro y nano-transacciones. Cuanto mayor sea el volumen de transacciones, más rápido las validará un DAG. Los DAG también eliminan la necesidad de mineros y, a su vez, equipos de minería, lo que significa un menor consumo de energía. 30 3.3 Consensus El resultado final: un potencial sin precedentes para un flujo de información rápido y altamente escalable en una red completamente descentralizada. Los DAG podrán competir con las redes existentes en un futuro próximo en términos de rendimiento yseguridad (Fantom Foundation, 2018; Max Thake, 2018). Proof-of-Stake (PoS), prueba de participación/posesión En este tipo de algoritmo de consenso, en lugar de invertir en equipos informáticos potentes y caros para participar en una carrera para minar bloques, un ’validador’ invierte en los tokens del sistema. Es necesario tener en cuenta el término validador, el uso de este término es debido a que no existe creación de moneda (minería) en PoS. En su lugar, todas las monedas existen desde el primer día y los validadores, que tienen su participación “bloqueada” en el sistema, solo reciben las comisiones de transacción como pago. Como prueba de la participación, su probabilidad de ser elegido para crear el siguiente bloque y recibir el pago, depende de la fracción de monedas en el sistema que posees. Un validador con 300 monedas tiene tres veces más probabilidades de ser elegido que alguien con 100 monedas. Una vez que un validador crea un bloque, ese bloque aún debe añadirse al Blockchain. Los diferentes sistemas de PoS varían en la forma en que regulan este paso. En Tendermint, por ejemplo, cada nodo en el sistema tiene que firmar en un bloque hasta que se alcance un voto mayoritario, mientras que en otros sistemas, se elige un grupo aleatorio de firmantes. Este mecanismo de consenso tiene un consumo de energía bajo, ya que no requiere ningún hardware potente para realizar cálculos. El número de transacciones por segundo de este mecanismo es alrededor de 30-170 transacciones/segundo. Comisiones de transacción bajas. Para atacar una Blockchain (3.2.2) que use PoS se debe poseer una gran cantidad de tokens/monedas de esta Blockchain para tener más posibilidades de ser el validador, eso equivale a un desembolso inicial grande para adquirir esos tokens, y tras realizar el ataque la Blockchain pierde confianza yvalor lo que haría bajar mucho el valor de la inversión inicial, sería similar a robar en tu empresa siendo dueño de ella. Delegated proof of stake (DPoS), prueba de participación/posesión delegada Intenta combinar las características de la prueba de participación y la prueba de trabajo. Utiliza un proceso de votación descentralizada a través de lo que se conoce como “testigos” como una forma de mitigar la centralización de la red en el caso del PoS. Tiene la flexibilidad de los parámetros de la cadena de bloques, por ejemplo, tarifas, número de testigos, intervalo de bloque, recompensas de bloque, etc. Son configurables por el “comité”, que es un grupo de partes interesadas/nodos elegidos de entre los testigos, que no reciben ninguna recompensa, pero con la capacidad para manipular los parámetros globales de la cadena de bloques mediante votación aplicarlos posteriormente en un mantenimiento de la Blockchain. Este mecanismo de consenso tiene un consumo de energía muy bajo, menor que el PoS. 31 3. ¿QUÉ ES EL BLOCKCHAIN? El número de transacciones por segundo de este mecanismo es alrededor de 25-2500 transacciones/segundo, a cambio tiene una estructura más centralizada. Comisiones de transacción bajas. Leader-Based Consensus (LBC), consenso basado en el líder Los nodos eligen temporalmente un nodo para ser un líder. El líder es entonces responsable de validar transacciones. Round Robin (RR), Robin circular Se usa en Blockchains privadas donde la minería está restringida a un conjunto de entidades identificables. Resuelve el dilema en las que un participante puede monopolizar el proceso minero. La solución se encuentra en una restricción en el número de bloques que puede ser creado por el mismo minero dentro de una ventana de tiempo dada. Esto hace que se cumpla un “horario Round Robin”, en el que los mineros autorizados deben crear bloques en orden de rotación para generar un blockchain válido. Federated Consensus (FC) / Federated Byzantine Agreement (FBA), Consenso Federado/ Acuerdo Bizantino Federado El Consenso Federado logra solidez a través de “segmentos de quórum” (quorum slice), decisiones de confianza individual hecho por cada nodo que juntos determinan el quórum a nivel del sistema. Los segmentos enlazan el sistema de la misma forma en que las decisiones y el tránsito de las redes individuales unifican Internet. FC tiene requisitos informáticos y financieros modestos en comparación con los PoW y PoS. Hay varias diferencias importantes entre el acuerdo bizantino no federado tradicional y el acuerdo bizantino federado (FBA). El acuerdo bizantino garantiza un consenso distribuido a pesar del fallo bizantino de los participantes. Sin embargo, requiere un acuerdo unánime sobre la membresía del sistema por parte de todos los participantes. Cada nodo en la red debe ser conocido y verificado con anticipación. El acuerdo bizantino federado (FBA) ofrece membresía abierta y control descentralizado al acuerdo bizantino. La diferencia clave entre un sistema de acuerdo bizantino y un sistema de acuerdo bizantino federado (FBA) es que en FBA cada nodo elige sus propios segmentos de quórum. Los quórums de todo el sistema resultan de estas decisiones por nodos individuales. En FBA, no hay un controlador de acceso ni una autoridad centralizada, por lo que los nodos individuales deciden en qué otros participantes confían para obtener información. Los nodos pueden tener múltiples segmentos, y estas elecciones de nodo individuales pueden basarse en criterios extrínsecos. Por ejemplo, un banco en particular puede verse como de buena reputación, lo que hace que otros nodos requieran su validación de todas las transacciones; es posible que una empresa ya tenga una relación financiera con una cooperativa de crédito y quiera asegurarse de que tanto el banco como la entidad firmen todas las transacciones (Stellar Development Foundation, 2015). Este mecanismo de consenso tiene un consumo de energía muy bajo. 32 3.3 Consensus El número de transacciones por segundo de este mecanismo es alrededor de 100-2500 transacciones/segundo, tiene una estructura descentralizada. Comisiones de transacción muy bajas. Practical Byzantine Fault Tolerance (PBFT), tolerancia práctica al fallo bizantino Cada nodo mantiene un estado interno (información específica o estado en curso). Cuando un nodo recibe un mensaje, lo utiliza junto con su estado interno para ejecutar un cálculo u operación. Este cálculo, a su vez, le dice a ese nodo individual qué pensar sobre el mensaje en cuestión. Luego, después de llegar a su decisión individual sobre el nuevo mensaje, ese nodo comparte esa decisión con todos los demás nodos del sistema. La decisión de consenso se determina con base en las decisiones totales enviadas por todos los nodos. Entre otras consideraciones, este método de establecer consenso requiere menos esfuerzo que otros métodos a costa de perder el anonimato en el sistema. Hay otras variaciones de la PBFT: PBFT Derivada (Hyperledger) RBFT - Tolerancia a fallos bizantinos redundantes - (Evernym) SBFT - Tolerancia a fallos bizantinos simplificada - (Cadena) Proof-of-Activity, prueba de actividad Es un enfoque híbrido que combina PoW y PoS. La minería se inicia como la manera tradicional de PoW, con los mineros compitiendo para resolver un enigma criptográfico. Los bloques extraídos no contienen ninguna transacción (son como plantillas), por lo que el bloque ganador solo contendrá un encabezado y la dirección de recompensa del minero. En este punto, el sistema cambia a PoS. Basado en la información del encabezado, se elige un grupo aleatorio de validadores para firmar el nuevo bloque. Cuantos más tokens tenga el validador en el sistema, más probable es que sea elegido. La plantilla se convierte en un bloque de pleno derecho tan pronto como todos los validadores lo firmen. Si algunos de los validadores seleccionados no están disponibles para completar el bloque, entonces se selecciona el siguiente bloque ganador, se elige un nuevo grupo de validadores, y así sucesivamente, hasta que un bloque reciba la cantidad correcta de firmas. Las comisiones se dividen entre el minero y los validadores que firmaron el bloque. Las críticas de la prueba de actividad son las mismas que para la prueba de trabajo (se requiere demasiada energía para extraer bloques) y prueba de participación (no hay nada que impida que un validador firme doble). Proof-of-Burn, prueba de quema/eliminación Con la prueba de quema, en lugar de gastar dinero en costosos equipos informáticos o energía, se ’queman’ tokens enviándolos a una dirección donde sean irrecuperables. Al comprometer las monedas a la nada, el nodo gana un privilegio de por vida para minar en el sistema basado en un proceso de selección al azar. Dependiendo de cómo se implementa la prueba de quema, los mineros pueden quemar la moneda nativa o la moneda de una cadena alternativa, como bitcoin. Cuantas más monedas quemas, más posibilidades tienes de ser seleccionado para minar el siguiente bloque. 33 3. ¿QUÉ ES EL BLOCKCHAIN? Con el tiempo, su participación en el sistema decae, por lo que eventualmente querrá quemar más monedas para aumentar las posibilidades de ser seleccionado en el proceso. (Esto imita el proceso minero de bitcoin, donde es necesario invertir continuamente en equipos de computación más modernos para mantener el poder de hashing). Si bien la prueba de quema es una alternativa interesante a la prueba de trabajo, el protocolo desperdicia recursos innecesarios. Otra crítica es que el poder minero simplemente va a aquellos que están dispuesto a quemar más dinero. La única Blockchain que utiliza la prueba de quemadura es slimcoin, una criptomoneda basada en peercoin. Utiliza un combinación de prueba de trabajo, prueba de participación y prueba de quema. Proof-of-Capacity, prueba de capacidad/espacio En este protocolo se ’paga’ con espacio en el disco duro. Cuanto más espacio de disco duro tenga, mayor será su probabilidad de minar el siguiente bloque y ganar la recompensa del bloque. Antes de minar en un sistema de prueba de capacidad, el algoritmo genera grandes conjuntos de datos conocidos como ’parcelas/plots’, que almacena en el disco duro del minero. Cuantos más plots tenga, más posibilidades tendrá de encontrar el siguiente bloque. Al invertir en terabytes de espacio en el disco duro, se ’compra’ una mayor posibilidad de crear bloques duplicados y bifurcar el sistema. Con la prueba de capacidad, existe el problema de no haber nada en juego para disuadir a los actores maliciosos. Las variantes de la prueba de capacidad incluyen la prueba de almacenamiento y la prueba de espacio. Burstcoin es el único Blockchain que utiliza una forma de prueba de capacidad. Proof-of-Elapsed time, prueba de tiempo transcurrido El fabricante de chips Intel ha desarrollado su propio protocolo de consenso alternativo llamado prueba de tiempo transcurrido. Este sistema funciona de manera similar a la prueba de trabajo, pero consume mucha menos electricidad. Además, en lugar de que los participantes resuelvan un enigma criptográfico, el algoritmo utiliza un entorno de ejecución de confianza (TEE), como SGX, para garantizar que los bloques se produzcan de forma aleatoria pero sin el trabajo requerido. El enfoque de Intel se basa en un tiempo de espera garantizado proporcionado a través del TEE. Según Intel, el algoritmo es escalable a miles de nodos y se ejecutará de manera eficiente en cualquier procesador Intel que soporte SGX. El único problema con este protocolo es que requiere que se confíe en Intel y el objetivo es evitar tener que confiar en terceros de lo que intentábamos escapar con las blockchains públicas. 34 3.4 criptografía Con el conjunto de puntos Gque forman la curva (i.e., todas las soluciones de la ecuación más un punto O, llamado punto en el infinito) más una operación aditiva, se forma un grupo abeliano. Si las coordenadas xeyse escogen desde un cuerpo finito, entonces estamos en presencia de un grupo abeliano finito. El problema del logaritmo discreto sobre este conjunto de puntos (“Problema del Logaritmo Discreto sobre Curvas Elípticas”, PLDCE) se cree que es más difícil de resolver que el correspondiente a los cuerpos finitos. De esta manera, las longitudes de claves en criptografía de curva elíptica pueden ser más cortas con un nivel de seguridad comparable. El principal beneficio de la criptografía de curva elíptica es un tamaño de clave más pequeño, lo que reduce los requisitos de almacenamiento y transmisión, es decir, que un grupo de curvas elípticas podría proporcionar el mismo nivel de seguridad que ofrece un sistema basado en RSA con un módulo mayor y una clave mayor: por ejemplo, para una clave pública de curva elíptica de 256 bits proporciona una seguridad comparable a una clave pública RSA de 3072 bits. La seguridad de la CCE depende de la capacidad de calcular una multiplicación de puntos y de la incapacidad de calcular el multiplicando dados los puntos originales y de producto. El tamaño de la curva elíptica determina la dificultad del problema (CSBreakdown, 2015a; En Wikipedia, s.f.[i]; En Wikipedia, s.f.[m]). Figura 3.8 Curva Elíptica (Nick Sullivan, 2013). Parámetros de la curva Para utilizar CCE, todas las partes deben ponerse de acuerdo sobre los parámetros que definen la curva elíptica, es decir, los parámetros de dominio. El plano está definido por pen el caso principal y el par de myfen el caso binario. La curva elíptica se define por las constantes aybutilizadas en su ecuación de definición. Finalmente, el subgrupo cíclico está definido por su generador (también conocido como punto base) G. Para la aplicación criptográfica, el orden de G, que es el número positivo más pequeño n, tal que nG =O(el punto en el infinito de la curva y elemento identidad), normalmente 41 3. ¿QUÉ ES EL BLOCKCHAIN? es primo. Dado que nes el tamaño de un subgrupo de E(Fp)se deduce del teorema de Lagrange que el número h=1 n|E(Fp)|es un entero. En aplicaciones criptográficas, este número h, llamado cofactor, debe ser pequeño h≤ 4y, preferiblemente, h=1. Para resumir: en el caso principal, los parámetros del dominio son (p,a,b,G,n,h); en el caso binario, son (m,f,a,b,G,n,h). Varios organismos estándar publicaron parámetros de dominio de curvas elípticas para varios tamaños de planos comunes. Dichos parámetros de dominio se conocen comúnmente como "curvas estándar" o "curvas con nombre" (En Wikipedia, s.f.[m]; CSBreakdown, 2015a). Por ejemplo los parámetros usados para generar las claves públicas en la Blockchain de Bitcoin son los correspondientes con la curva secp256k1definida en “Standards for Efficient Cryptography (SEC)” (bitcoin.it, 2019). Los parámetros del dominio de la curva elíptica sobre Fpasociados con una curva de Koblitz secp256k1, ver figura 3.9, están especificados por el sextuplo T= (p,a,b,G,n,h) donde el plano finito Fpse define por: p=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F =2256 −232 −29−28−27−26−24−1 La curva E:y2=x3+ax +bsobre Fpse define por: a=0000000000000000000000000000000000000000000000000000000000000000 b=0000000000000000000000000000000000000000000000000000000000000007 El punto base Gen forma comprimida es: G=0279BE667EF9DCBBAC55A06295CE87 0B07029BFCDB2DCE28D959F2815B16F81798 y en forma no comprimida es: G=0479BE667EF9DCBBAC55A06295CE870B 07029BFCDB2DCE28D959F2815B16F81798483 ADA7726A3C4655DA4FBFC0E1108A8FD17B448 A68554199C47D08FFB10D4B8 Finalmente el orden nde Gy el cofactor son: n=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBAAEDCE6AF48A03BBFD25E8CD0364141 h=01 42 3.4 criptografía Figura 3.9 Curva Elíptica secp256k1 (Shirriff, 2014). Propiedades de la curva 1. Simetría horizontal. Cualquier punto de la curva se puede reflejar sobre el eje xy permanecer en la misma curva. 2. Cualquier línea no vertical interesectará la curva en un máximo de tres lugares. 3. Trazando en la curva una línea con dos puntos AyBla intersectará en otro punto más C′cuyo reflejo intersectará la curva en el punto C. Cualquiera de los dos puntos en una curva se pueden unir para obtener un nuevo punto. Trazando la recta del punto Cal Ay reflejando el punto que intersecta la curva se obtiene el punto D, y así sucesivamente. Así es como se realiza la operación aditiva en curvas elípticas, de manera que A+B=C, observe la figura 3.10. 43 3. ¿QUÉ ES EL BLOCKCHAIN? Figura 3.10 Propiedades Curva Elíptica (Nick Sullivan, 2013). Multiplicación de CCE 44 3.4 criptografía Si se tiene un punto de la curva Gy se suma consigo mismo G+G=2G, equivale a trazar la tangente a G, donde intersecte con la curva será el punto −2Gy su reflejo será 2G, y así sucesivamente se obtiene la multiplicación de Gcomo suma de k veces el punto G, ver figura 3.11. Figura 3.11 Multiplicación Curva Elíptica (RSK educate, 2015). 4. Si se tienen dos puntos, un punto inicial Gy ese mismo punto multiplicado consigo mismo kveces para llegar a un punto final Pf=kG, encontrar kcuando solo se conoce el punto inicial y el punto final es muy difícil. Calcular el punto Pfconociendo kyGes una operación sencilla, pero conociendo solo GyPfno se puede determinar la cantidad de saltos/multiplicaciones que ha sufrido Gpara llegar a Pf, es necesario realizar el cálculo de Pfmultiplicando nveces el número Ghasta conseguir llegar a Pf, por tanto la propiedad más interesante de las curvas elípticas es que no existe la operación de división, de manera que k6=Pf/G, fácil de hacer, difícil de deshacer (Nick Sullivan, 2013; RSK educate, 2015). Uso en Criptografía En criptografía, se elige un punto base Gespecífico ypublicado para utilizar con la curva E(q), comentado en el apartado 3.4.3. Se escoge un número entero aleatorio kcomo clave privada, y entonces el valor P=kG se da a conocer como clave pública (nótese que la supuesta dificultad del PLDCE implica que kes difícil de deducir a partir de P). Si María y Pedro tienen las claves privadas kAykB, y las claves públicas PAyPB, entonces María podría calcular kA×PB= (kA×kB)×G; y Pedro puede obtener el mismo valor dado que kB×PA= (kB×kA)×G. 45 3. ¿QUÉ ES EL BLOCKCHAIN? Esto permite establecer un valor «secreto» que tanto María como Pedro pueden calcular fácilmente, pero que es muy complicado de derivar para una tercera persona. Además, Pedro no consigue averiguar nada nuevo sobre kAdurante esta transacción, de forma que la clave de María sigue siendo privada. La realización de las operaciones necesarias para ejecutar este sistema es más lenta que para un sistema de factorización o de logaritmo discreto módulo entero del mismo tamaño. De todas maneras, los autores de sistemas de CCE creen que el PLDCE es significativamente más complicado que los problemas de factorización o del PLD, y así se puede obtener la misma seguridad mediante longitudes de clave mucho más cortas utilizando CCE, hasta el punto de que puede resultar más rápido que, por ejemplo, RSA. La CCE ha sido ampliamente reconocida como el algoritmo más fuerte para una determinada longitud de clave, por lo que podría resultar útil sobre enlaces que tengan requisitos muy limitados de ancho de banda. NIST y ANSI X9 han establecido unos requisitos mínimos de tamaño de clave de 1024 bits para RSA y DSA y de 160 bits para CCE, correspondientes a un bloque simétrico de clave de 80 bits. NIST ha publicado una lista de curvas elípticas recomendadas de 5 tamaños distintos de claves (80, 112, 128, 192, 256). En general, la CCE sobre un grupo binario requiere una clave asimétrica del doble de tamaño que el correspondiente a una clave simétrica. Certicom es la principal empresa comercial de CCE, esta organización posee 130 patentes, y ha otorgado licencias sobre tecnología a la National Security Agency (NSA) por 25 millones de dólares. Certicom también ha patrocinado varios desafíos al algoritmo CCE. El más complejo resuelto hasta ahora, es una clave de 109 bits, que fue roto por un equipo de investigadores a principios de 2003. El equipo que rompió la clave utilizó un ataque masivo en paralelo basado en el ’birthday attack’, mediante más de 10000 PCs de tipo Pentium funcionando continuamente durante 540 días. Se estima que la longitud de clave mínima recomendada para CCE (163 bits) requeriría 108 veces los recursos utilizados para resolver el problema con 109 bits (Bill Buchanan OBE, 2018; En Wikipedia, s.f.[i]). 3.4.4 Función Hash A las funciones resumen también se les llama funciones hash o funciones digest. Tiene como entrada un conjunto de elementos, que suelen ser cadenas, y los convierte en un rango de salida finito, normalmente cadenas de longitud fija. Es decir, la función actúa como una proyección del conjunto U sobre el conjunto M. Hay que tener en cuenta que M puede ser un conjunto definido de enteros. En este caso podemos considerar que la longitud es fija si el conjunto es un rango de números de enteros ya que podemos considerar que la longitud fija es la del número con mayor número de cifras. Todos los números se pueden convertir al número especificado de cifras simplemente anteponiendo ceros. Normalmente el conjunto U tiene un número elevado de elementos y M es un conjun- to de cadenas con un número más o menos pequeño de símbolos. 46 3.4 criptografía La idea básica de un valor hash es que sirva como una representación compacta de la cadena de entrada. Por esta razón se dice que estas funciones resumen datos del conjunto dominio como se observa en el ejemplo de la figura 3.12. Zorro El zorro rojo corre a través del hielo El zorro rojo camina a travésdel hielo Función Hash Función Hash Función Hash DFCD3454 52ED879E 46042841 Entrada Valor Hash Figura 3.12 Funcionamiento de función hash (Fercufer, 2011). Se dice que se produce una colisión cuando dos entradas distintas de la función resumen producen la misma salida. De la definición de función resumen podemos decir que U, el dominio de la función, puede tener infinitos elementos. Sin embargo M, el rango de la función, tiene un número finito de elementos debido a que el tamaño de sus cadenas es fijo. Por tanto la posibilidad de existencia de colisiones es intrínseca a la definición de función hash. Una buena función resumen es una que tiene pocas colisiones en el conjunto esperado de entrada. Es decir, se desea que la probabilidad de colisión sea muy baja (En Wikipedia, s.f.[o]). Propiedades Bajo costo (computacional, memoria,etc) Compresión Uniforme: Se dice que una función resumen es uniforme cuando para una clave elegida aleatoriamente es igualmente probable tener un valor resumen determinado, independientemente de cualquier otro elemento. Inyectividad y función hash perfecta: Se dice que la función resumen es inyectiva cuando cada dato de entrada se mapea a un valor resumen diferente. En este caso se dice que la función resumen es perfecta. Formalización: k16=k2implica h(k1)6=h(k2) Cuando no se cumple la propiedad de inyectividad se dice que hay colisiones. Hay una colisión cuando k16=k2implica h(k1) = h(k2). Determinista: Una función hash se dice que es determinista cuando dada una cadena de entrada siempre devuelve el mismo valor hash. Continuidad. Efecto avalancha: Se dice que una función resumen es continua cuando una modificación minúscula (ej un bit) en la cadena de entrada ocasiona 47 3. ¿QUÉ ES EL BLOCKCHAIN? pequeños cambios en el valor hash. En funciones resumen usadas para búsqueda normalmente se buscan funciones tan continuas como sea posible; de forma que entradas que difieran un poco deberían tener valores hash similares o iguales. Sin embargo la continuidad no es deseable para funciones resumen usadas para sumas de verificación o funciones criptográficas. Seguridad La seguridad proporcionada por un algoritmo hash es sumamente dependiente de su capacidad de producir un único valor para un conjunto de datos dados. Cuando una función hash produce el mismo valor para dos conjuntos de datos distintos, entonces se dice que se ha producido una colisión. Una colisión aumenta la posibilidad de que un atacante pueda elaborar computacionalmente conjuntos de datos que proporcionen acceso a información segura o para alterar ficheros de datos informáticos de tal forma que no cambiara el valor hash resultante y así eludir la detección. Una función hash fuerte es aquella que es resistente a este tipo de ataques computacionales mientras que una función hash débil es aquella donde existe una creencia casi certera de que se pueden producir colisiones. Finalmente, una función hash quebrantada es aquella sobre la que se conoce métodos computacionales para producir colisiones (En Wikipedia, s.f.[v]). Función SHA-2 y SHA-256 SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA- 384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS). SHA significa algoritmo de hash seguro (En Wikipedia, s.f.[o]; Anders Brownworth, 2016). Tamaño máximo del mensaje de entrada en SHA-256: 264-1 bits. Tamaño de salida en SHA-256: 256 bits. La función SHA-256 es la función Hash utilizada en la Blockchain Bitcoin, ver figura 3.13y tiene 2 características: Inequívoca: el hash (salida) es la huella digital de los datos de entrada. A partir del hash de una entrada digital, no se puede crear la entrada digital original. Resistente a colisiones: no es posible encontrar dos valores de entrada diferentes que resulten en la misma salida hash. Para entradas diferentes, siempre habrá salidas diferentes. Esto permite utilizar esta función para verificar la integridad de los datos comparando el "hash" (la salida de la ejecución del algoritmo) de esos datos con un valor hash ya conocido y esperado de esos datos. 48 3.5 Llaves públicas y privadas, direcciones y monederos Figura 3.13 Características SHA-256 (RSK educate, 2015). Otras funciones hash utilizadas en Blockchains son (En Wikipedia, s.f.[n]): SHA-256: Bitcoin, Bitcoin Cash, Counterparty, MazaCoin, Namecoin, NeuCoin, Nxt, Peercoin. Ethash: Ethereum, Ethereum Classic Scrypt: Auroracoin, Bitconnect, Bitcoin Gold, Coinye, Dogecoin, Gridcoin, Litecoin. Equihash: Zcash, Zcoin. CryptoNote: Monero. X11: Dash, Petro. Lyra2: Taler. 3.5 Llaves públicas y privadas, direcciones y monederos 3.5.1 Llaves públicas y privadas en Blockchain Como dice Andreas M. Antonopoulos: “Son tus claves, son tus bitcoins. No son tus claves, no son tus bitcoins”. Esto resume algo fundamental: como la red Bitcoin utiliza criptografía para asegurar que cada uno pueda utilizar sus bitcoins de forma segura, mantener segura y secreta la clave privada es la única forma de mantener seguros los bitcoins. 49 3. ¿QUÉ ES EL BLOCKCHAIN? Aquel que conozca esa clave privada, puede utilizar esos bitcoins ya que el sistema no tiene forma de distinguir entre el dueño y el “falso” dueño. La clave privada es la “prueba de identidad” necesaria para que la red acepte cualquier movimiento de esos bitcoins. Si se perdiera la clave privada, esos bitcoins quedarían inmovilizados por el resto de la eternidad. El motivo es parte del típico dilema de la seguridad vs. la facilidad de uso. En este caso, bien vale el costo de perder un poco de usabilidad y no poder recuperar claves porque el beneficio es tener un sistema de máxima seguridad y prácticamente inviolable (Gabriel Montes, 2017). ¿Qué son el par de llaves pública-privada? 1. Claves privadas Como se ha comentado en los apartados 3.4.2 y3.4.3, la clave privada es un número entero que deber ser conocido solo por el usuario/dueño de esa clave, que en Bitcoin es un número de 256 bits en un rango entre [0−P(2256 −232 −29−28−27−26− 24−1)] ya que P es el límite del plano finito de la curva secp256k1, por seguridad debe ser generado de forma aleatoria (aunque no es obligatorio) y utilizando la criptografía de curvas elípticas para generar la clave pública. A partir de una clave privada es posible generar miles de claves públicas, ver apartado 3.5.1, y la clave privada permite firmar transacciones en la Blockchain (firma digital) demostrando ser el propietario de esas criptodivisas sin necesidad de desvelar la clave privada. 2. Claves públicas y direcciones Como se ha comentado en los apartados 3.4.2 y3.4.3, la clave pública será un número generado matemáticamente a partir de la clave privada, pero es imposible calcular la clave privada a partir de la pública, que se puede compartir libremente para recibir mensajes, en el caso de las Blockchains transacciones. Las claves públicas, pueden tener 256 o 512 bits dependiendo si están o no comprimidas, a los cuales se les suma un byte adicional como prefijo indicativo del tipo de clave pública en cuestión. Por lo tanto, las claves públicas son siempre de 33 o 65 bytes. Para ahorrar espacio en la blockchain y facilitarle la vida a los usuarios, existe una alternativa adicional a utilizar una clave pública de ese tamaño: crear una “dirección” al reducir esa clave pública a 160 bits a partir de aplicar SHA256 y luego RIPEMD- 160 sobre la clave pública. Estas direcciones por la forma de codificar los 160 bits utilizando Base58Check pueden tener entre 26 y 35 caracteres en total y comienzan con “1” en Bitcoin. Por tanto la dirección pública no es la clave pública y la clave pública no se puede conocer/generar a partir de una dirección pública, la clave pública solo es posible conocerla al generarla a partir de la clave privada o en una transacción firmada donde al enviar bitcoins desde esa dirección se revela la clave pública, si tienes una dirección solo para recibir transacciones, no es posible conocer la llave pública. Es importante destacar que si bien de la clave privada se deriva la pública, y de ésta la dirección, no es posible realizar el camino inverso. De ahí la seguridad de 50 3.7 Transacciones, Bloques y Blockchain Los clientes ligeros trabajan como puntos finales de comunicación y son utilizados por muchas carteras de criptomonedas. No son tan independientes como los nodos completos. Por esta razón, se les podría engañar temporalmente para que acepten una transacción o un bloque que no es realmente válido. Ejecutar un nodo completo es la mejor forma en que puede usar Blockchain de la manera más segura posible (binance.vision, 2018; bitcoinwiki.org, 2019b; En Wikipedia, s.f.[r]). 3.7 Transacciones, Bloques y Blockchain En este apartado 3.7, se estudia el la estructura básica de la Blockchain, que está compuesta por Bloques relacionados que contienen las Transacciones de los usuarios. 3.7.1 Transacciones Componentes Una transacción se compone de 5 elementos clave, ver figura 3.17: 1. Identificador de Transacción (TX ID): identificador único (32 bytes) de cada transacción, obtenido de pasar 2 veces la información de la transacción por la función SHA-256 (learnmeabitcoin, s.f.). 2. Entrada (Origen): dirección o direcciones públicas de origen que poseen los Tokens. 3. Cantidad: cantidad de Tokens que se enviarán en la transacción. 4. Salida (Destino): dirección o direcciones públicas de destino. 5. Metadatos (Opcional): los metadatos o mensajes tienen un tamaño máximo de 80 bytes y se almacenan en“OP_RETURN”, campo utilizado para transmitir cualquier tipo de información, de la transacción. Figura 3.17 Componentes de una Transacción (RSK educate, 2015). ¿Qué son las transacciones en Blockchain? Una transacción es la operación básica en el sistema Blockchain. Una transacción mueve los tokens entre una o más entradas ysalidas. Cada entrada es una transacción anterior y una dirección que proporciona tokens. Cada salida es una dirección que recibe tokens, junto con la cantidad de tokens que van a esa dirección. Una transacción está compuesta por entradas y salidas de transacciones no gastadas o UTXO (unspent transaction outputs). Las entradas de transacciones también son UTXOs 57 3. ¿QUÉ ES EL BLOCKCHAIN? de una transacción anterior, por lo tanto, una UTXO es el componente fundamental de una transacción. Para que un Wallet muestre su “saldo”, debe buscar en la Blockchain los UTXO que controla su clave privada, sumar los valores de los UTXO y muestra el saldo final. Cuando desea gastar un token, el Wallet comprobará si tiene suficientes UTXO que sumen un token. Si tiene suficiente, el Wallet creará otra transacción con estos UTXO como entradas. El UTXO es una unidad de valor discreta eindivisible. El diagrama 3.18, muestra la Transacción C. En esta transacción, se toman 0.005 BTC de una dirección en la Transacción A, y 0.003 BTC de una dirección en la Transacción B. Las flechas son referencias a las salidas anteriores, por lo que son hacia atrás al flujo de bitcoins, este tipo de transacciones forman una estructura de Árbol de Merkle, ver apartado 3.7.2. Para las salidas, 0.003 BTC se envían a la primera dirección y 0.004 BTC se envían a la segunda dirección. El sobrante de 0.001 BTC va al minero del bloque como un comisión. El 0.015 BTC en la otra salida de la Transacción A no se envía en la Transacción C. Cada entrada UTXO es indivisible, debe gastarse por completo en una transacción. Si una dirección recibe 100 BTC en una transacción y solo desea gastar 1 BTC, la transacción debe gastar los 100 BTC. La solución es usar una segunda salida para el cambio, que devuelve los 99 BTC restantes a una dirección propia. Figura 3.18 Ejemplo de una Transacción (RSK educate, 2015). 58 3.7 Transacciones, Bloques y Blockchain Figura 3.19 Transacción Real de Bitcoin (sheinix, 2018). En la figura 3.20, se realiza la siguiente transacción, se cogen las UTXO suficientes para alcanzar la cantidad deseada; para alcanzar 0.3 BTC ha tenido que seleccionar 3 UTXO de 0.12 BTC cada una, siendo el resultado 0.36 BTC, los otros 0.06 BTC restante se envían a una dirección propia indicándola como salida junto a la dirección a la que se le quería mandar 0.3 BTC. La dirección propia donde se mandan los 0.06 BTC restantes puede ser la misma dirección que cualquiera asociada a las entradas o una nueva. A esto se le llama dirección de cambio o dirección de retorno. Figura 3.20 Transacción con Retorno (Bit2Me, s.f.[c]). Es importante entender también que en una misma transacción pueden existir tantas entradas de una misma dirección o de varias como se desee. Lo mismo ocurre con las salidas. Esto permite hacer en una misma transacción múltiples envíos a personas diferentes con un sólo pago de comisiones a los mineros. Esta funcionalidad la explotan algunos monederos/wallets para ahorrar costes. Las transacciones también pueden incluir tasas/comisiones. La forma que tiene internamente el protocolo de recompensar a los mineros viene de los fondos que no se asignen a ninguna dirección. Todos los bitcoins restantes en una transacción que no se asignen a ninguna dirección se los queda el minero que mine el bloque con la transacción dentro y son imposibles de recuperar. 59 3. ¿QUÉ ES EL BLOCKCHAIN? Si sobran bitcoins después de sumar las entradas y restar las salidas, el resto es una comisión pagada al minero. La comisión no es estrictamente necesaria, pero las transacciones sin una tarifa serán de baja prioridad para los mineros y pueden no ser procesadas en días o incluso ser descartadas por completo. Las tarifas son bajas pero no triviales (sheinix, 2018; Bit2Me, s.f.[c]; RSK educate, 2015). Firmar Transacciones Una vez creada la transacción es necesario firmarla con la clave privada para validarla y demostrar la propiedad de esos Tokens. El diagrama 3.21 ofrece una vista simplificada de cómo las transacciones se firman y vinculan entre sí. Considere la transacción intermedia, transacción de la dirección B a la dirección C. El contenido de la transacción (incluido el hash de la transacción anterior) está marcado y firmado con la clave privada de B. Además, la clave pública de B está incluida en la transacción. Realizando varias operaciones, cualquiera puede verificar que la transacción esté autorizada por B. Primero, la clave pública de B debe corresponder a la dirección de B en la transacción anterior, lo que demuestra que la clave pública es válida, la dirección se puede derivar fácilmente de la clave pública, como se explicó anteriormente. A continuación, la firma de B, generada con la clave privada, de la transacción se puede verificar utilizando la clave pública de B en la transacción. Estos pasos garantizan que la transacción sea válida y autorizada por B. Se observa que la clave pública de B no se hace pública hasta que se usa en una transacción. Con este sistema, los tokens pasan de una dirección a otra a través de una cadena de transacciones. Cada paso en la cadena se puede verificar para asegurar que se estén enviando de manera válida. Tenga en cuenta que las transacciones pueden tener múltiples entradas y salidas en general, por lo que la cadena se ramifica en un árbol. Figura 3.21 Firma de una Transacción (Shirriff, 2014). 60 3.7 Transacciones, Bloques y Blockchain 3.7.2 Bloques Todos los datos son grabados permanentemente en la red Blockchain a través de bloques, un bloque es un concepto pensado para optimizar el proceso de validación de las transacciones que se realizan. En Blockchain hay decenas de transacciones por segundo, validar de manera individual cada una de estas operaciones, sería inviable y sería un proceso largo y tedioso. Así que se ideó la creación de los bloques, que permiten acortar la cadena hash y hacerla más manejable y por lo tanto, permite ser más eficiente (Bit2Me, s.f.[b]). Cada bloque contiene un conjunto de las últimas transacciones, un nonce (número aleatorio), y el hash de la secuencia anterior. Un bloque se considera "resuelto" (publicado y considerado válido por el resto de nodos), cuando el hash SHA-256 de todo el bloque cumpla el objetivo de dificultad actual, se estudia en profundidad en el apartado de minería, 4.2.1. Las transacciones firmadas se transmiten a la red por el remitente, y todos los participantes en la generación de los tokens las recogen y agregan al bloque en el que están trabajando. La primera transacción en el bloque es especial, la Coinbase, crea nuevos tokens para el minero que lo genera y recoge las comisiones, el resto de nodos sólo acepta el bloque si la operación es de la cantidad correcta. En Bitcoin, el número de bitcoins generado por bloque comienza en 50 y se irá dividiendo entre dos (“Halving”) cada 210.000 bloques (unos cuatro años). La red Bitcoin trata de crear seis bloques por hora. Cada 2016 bloques (alrededor de dos semanas), todos los clientes Bitcoin comparan el número real creado con este objetivo y modifican el objetivo por el porcentaje que ha variado. Esto aumenta (o disminuye) la dificultad de generación de bloques de la red (bitcoin.it, 2011a). Estructura Bloque Cada bloque es un grupo de muchas transacciones y cada uno contiene información específica. El campo principal de un bloque es el encabezado/cabecera y el secundario es el cuerpo que contiene las transacciones. El encabezado contiene estos campos (RSK educate, 2015), y está representado en la figura 3.22: Versión: un número de versión para comprobar actualizaciones de software / protocolo. Hash del bloque anterior: una referencia al hash del bloque anterior (padre) en la cadena. Raíz del árbol Merkle: un hash del Árbol Merkle de las transacciones del bloque. Marca de tiempo: la fecha aproximada de creación del bloque (segundos Unix Epoch). Objetivo de dificultad: el objetivo de dificultad del algoritmo PoW para este bloque. Nonce: un contador usado para el algoritmo de PoW, equivale al resultado buscado del algoritmo. 61 3. ¿QUÉ ES EL BLOCKCHAIN? Figura 3.22 Cabecera de un Bloque (Wander, 2013). Árboles Merkle Cada bloque en la Blockchain contiene un resumen de todas las transacciones contenidas en el mismo, utilizando un árbol Merkle. Un árbol Merkle es una estructura de datos que se utiliza para resumir y verificar de manera eficiente la integridad de grandes conjuntos de datos, son árboles binarios que contienen hashes criptográficos. Los árboles Merkle producen una huella digital global de todo el conjunto de transacciones, se crean mediante hash recursivo de pares de elementos o transacciones hasta que solo queda un hash, llamado raíz de Merkle. El algoritmo hash criptográfico utilizado en los árboles Merkle de Bitcoin es SHA256 aplicado dos veces, también conocido como doble SHA256. Cuando N elementos de datos se incluyen y se resumen en un árbol Merkle, se puede verificar si un elemento en particular está incluido en el árbol mediante un número máximo de cálculos de 2log2(N), que proporciona una manera muy eficiente de verificar si una transacción está incluida en un bloque o no. El árbol Merkle está construido de abajo hacia arriba. En la Figura 3.22, comenzamos con cuatro transacciones; denotados como Tx0,Tx1,Tx2,Tx3. Estas transacciones no se almacenan en el árbol Merkle, sino que se copian sus datos y el hash resultante se almacena en cada nodo de “hoja” como Hash0,Hash2y Hash3. El hash raíz de Merkle de 32 bytes se almacena en el encabezado del bloque y resume todos los datos de las cuatro transacciones. Usando este método, el árbol Merkle puede resumir o reducir cualquier número de transacciones en el bloque a tan solo un número de 32 bytes. En los intentos de averiguar si una transacción específica está incluida en un bloque, se puede descubrir fácilmente una ruta de autenticación o camino de Merkle, que conecta la transacción específica a la raíz del árbol. Para esto solo se necesitaría producir una cantidad de hashes dado por la función: 2log2(N) Esta cantidad de “ejecuciones” de hash, son la cantidad mínima que permitiría encontrar una conexión entre una transacción dada y la raíz del árbol de Merkle. Esto es importante ya que el logaritmo en base 2 de un número aumenta mucho más lentamente que el número. En consecuencia, esto significa que un nodo simplemente necesita 62 3.7 Transacciones, Bloques y Blockchain producir rutas de 10 o 12 hashes (320 bytes a 384 bytes) para probar una sola transacción dentro de un árbol que posea más de mil transacciones en un bloque. La eficiencia de un árbol de Merkle se hace más notoria a medida que la escala aumenta. Mientras el tamaño del bloque puede variar, desde 4kB con 16 transacciones a 16MB con 65535 transacciones. Comparando esto con el “camino de Merkle” requerido para validar la inclusión de una transacción en un bloque, éste último crece desde 128 bytes a tan sólo 512 bytes. Utilizando árboles de Merkle, un nodo solo necesita descargar los encabezados de los bloques (esto sólo ocupa 80 bytes por bloque) y así puede conocer si una transacción está dentro de un determinado bloque o no. Esto permite a los nodos ligeros/SPV el ahorro en el espacio, ya que con solo almacenar unos pocos megabytes evitan tener que descargar la Blockchain completa y les permite verificar transacciones (Toledo, 2018). 3.7.3 Blockchain Blockchain es la estructura de datos resultado de la configuración de los Bloques descrita en el apartado 3.7.2, uno de los campos del encabezado es el "hash del bloque anterior". Esta es la forma en que los bloques están conectado como se observa en la Figura 3.23. Figura 3.23 Conexión Bloques (RSK educate, 2015). 1. Se empieza desde el encabezado del bloque n−2. 2. Se aplica un algoritmo de hash SHA256 al encabezado n−2, obteniendo el hash(encabezadon− 2). 63 3. ¿QUÉ ES EL BLOCKCHAIN? 3. El hash(encabezadon−2)se introduce en el encabezado n−1(en el campo "Hash Bloque Anterior”). 4. Se aplica un algoritmo de hash SHA256 al encabezado n−1, obteniendo el hash(encabezadon− 1)y luego se introduce en el encabezado n, y así sucesivamente. Se obtiene una cadena de bloques, un conjunto de bloques que contienen información que están conectados entre sí con la técnica criptográfica llamada hash (RSK educate, 2015). Si un nodo malicioso modifica una transacción de un bloque antiguo, modifica a su vez el árbol Merkle de ese bloque, y modifica el Hash del encabezado de ese bloque, el bloque siguiente tendrá en su cabecera un Hash diferente al Hash del Bloque anterior, se habrá ro- to la “cadena” y por tanto esa modificación será rechazada por la red de nodos completos. La única forma de que esta modificación fuera aceptada sería que un nodo minero, modificara ese bloque, al modificarlo cambiaría su Hash y debería minar el siguiente bloque con el Hash nuevo, eso modificaría el Hash del siguiente Bloque y así sucesivamente hasta minar de nuevo todos los Bloques desde el modificado hasta llegar al Bloque actual de la red, para realizar esta tarea de forma exitosa es necesario controlar un 51% del poder de cómputo total de la red durante mucho tiempo, en Bitcoin es prácticamente imposible, en Blockchains pequeñas con menos nodos y mineros sí se han dado casos de ataques 51%. Junto con la tecnología de llaves público-privadas, en esta estructura de bloques unidos/referenciados y base de datos distribuida, radica la seguridad de la Blockchain frente a terceros y hackers. 64 4 ¿Cómo funciona el Blockchain? En el Capítulo 3, se han mostrado todos los elementos que forman una blockchain, en este capítulo 4, se estudia cómo interactúan estos elementos entre sí para crear un sistema que cumpla las características comentadas en el capítulo 2. 4.1 Transacciones En el apartado 3.7.1, se ha estudiado que las transacciones son las operaciones básicas en el sistema Blockchain, en este apartado se indicará cómo son creadas. 4.1.1 Creación de la Transacción y firmado Para crear una transacción en la Blockchain, es necesario rellenar los Inputs: 1. Identificador de Transacción (TX ID) 2. Entrada (Origen): dirección o direcciones públicas de origen que poseen los Tokens. 3. Cantidad: cantidad de Tokens que se enviarán en la transacción. 4. Salida (Destino): dirección o direcciones públicas de destino. Figura 4.1 Transacción (RSK educate, 2015). Esta tarea se realiza normalmente utilizando un Wallet. El Wallet tiene conexión con la Blockchain donde comprueba el saldo disponible (la suma de las UTXO) en las direcciones de Entrada y, si existe suficiente, firma la transacción con la Clave Privada del usuario que quiere mandar la cantidad especificada de Tokens a la dirección de Salida, esta es la Dirección Pública del destinatario. 65 4. ¿CÓMO FUNCIONA EL BLOCKCHAIN? En definitiva se crea una salida de transacción con el estándar P2PKH (Pay-To-Public- Key-Hash) que contiene instrucciones que permite a cualquiera gastar esa salida si pueden probar que controlan la clave privada correspondiente a la clave pública. Estas instrucciones se conocen como el scriptPubKey (bitcoin.org, 2018). 4.1.2 Transmisión a la red Una vez creada la transacción debe transmitirse a la Blockchain para que los nodos la recojan, validen e incorporen al Ledger. El Wallet envía la transacción al nodo más cercano de la red. La transacción no necesita ser enviada inmediatamente después de su creación, es posible elegir cuando enviarla (RSK educate, 2015). Figura 4.2 Broadcasting de una Transacción (RSK educate, 2015). 4.1.3 Propagación y verificación Cuando la transacción llega al nodo más cercano, este la verifica y la propaga por la red y es verificada por el resto de nodos, ver figura 4.5, algunas verificaciones básicas son que existen suficientes tokens en la cartera de origen (UTXO previos conectados a esa dirección), estructura correcta, firma digital correcta, etc. La firma digital se genera en función de la Clave Privada y la información de la transacción, si algún nodo malicioso modifica la transacción y la propaga, esta quedará invalidada debido a que la firma no podrá ser verificada, esa transacción será rechazada por los nodos. Doble Gasto: Puede darse la situación que un usuario cree dos transacciones válidas distintas, en una la transacción envía tokens a otro usuario como pago por un servicio o producto y en otra la transacción se los envía a sí mismo, los UTXO una vez gastados ya no pueden volver a utilizarse. 66 4.2 Mecanismos de Consenso principales En un consenso distribuido basado en la prueba de trabajo, los mineros necesitan mucha energía. Y estos costes de energía se pagan con monedas fiduciarias, lo que lleva a una presión descendente constante sobre el valor de la moneda digital. En una investigación reciente, los expertos argumentaron que las transacciones de Bitcoin pueden consumir tanta electricidad como Dinamarca en 2020. La comunidad de Ethereum quiere explotar el método de PoS para lograr una forma de consenso distribuida más ecológica y más barata (Rosic, 2017). En la mayoría de los casos de prueba de participación, las unidades de moneda digital se crean en el lanzamiento de la moneda y su número es fijo. Por lo tanto, en lugar de usar unidades de criptomoneda como recompensa, los validadores reciben comisiones de transacción como recompensas. En algunos casos, se pueden crear nuevas unidades monetarias inflando el suministro de monedas, y los validadores pueden ser recompensados con nuevas unidades monetarias creadas, en lugar de comisiones de transacción (Ray, 2017). ¿Cómo se eligen a los validadores/forjadores? Cuando se implemente Casper (el nuevo protocolo de PoS de Etherum), existirá un grupo de validadores/forjadores. Los usuarios pueden unirse a este grupo para ser seleccionados como el forjador. Este proceso estará disponible mediante la ejecución del Smart Contract de Casper al enviar Ether (la criptomoneda que alimenta la red Ethereum) (Rosic, 2017). No habrá un límite impuesto en el número de validadores activos, pero se regulará económicamente reduciendo la tasa de interés si hay demasiados validadores y aumentando la recompensa si no hay suficientes. Hay muchos tipos de algoritmos de consenso y muchas formas de asignar recompensas a los validadores que participan en el algoritmo de consenso. Desde una perspectiva algorítmica, hay dos tipos principales: 1. En la prueba de la participación basada en la cadena (chain-based PoS), el algoritmo seudoaleatoriamente selecciona un validador durante cada intervalo de tiempo (por ejemplo, cada período de 10 segundos), y asigna a ese validador el derecho de crear un solo bloque, y este bloque debe apunta a algún bloque anterior (normalmente el bloque al final de la cadena más larga anteriormente), y así, con el tiempo, la mayoría de los bloques convergen en una sola cadena en constante crecimiento. 2. En la PoS estilo BFT (Byzantine Fault Tolerance), a los validadores se les asigna aleatoriamente el derecho de proponer bloques, pero acordar qué bloque es canónico se realiza mediante un proceso de múltiples rondas donde cada validador envía un "voto" para un bloque específico durante cada ronda, y al final del proceso, todos los validadores (honestos y en línea) acuerdan permanentemente si un bloque dado es parte de la cadena o no. Los bloques todavía pueden estar encadenados juntos; la diferencia es que el consenso sobre un bloque no depende de la longitud o el tamaño de la cadena posterior (Buterin, 2019). 73 4. ¿CÓMO FUNCIONA EL BLOCKCHAIN? Figura 4.8 Diferencias PoW y PoS (Schumann, 2018). PoW vs PoS Algunos beneficios de PoS frente a PoW: No es necesario consumir grandes cantidades de electricidad para asegurar una cadena de bloques. Debido a la falta de alto consumo de electricidad, no es necesario emitir tantas monedas nuevas para motivar a los participantes a seguir participando en la red. En teoría, incluso puede ser posible tener una emisión neta negativa, donde una parte de las tarifas de transacción se quema/elimina y, por lo tanto, el suministro disminuye con el tiempo, generando una moneda deflacionaria y aumentando su valor. PoS permite una gama más amplia de técnicas que utilizan mecanismos de teoría de juegos para desincentivar la formación de cárteles centralizados y, si se forman, impide que utilicen métodos perjudiciales para la red. Reducción de los riesgos de centralización, ya que las economías de escala son un problema mucho menor. 10 millones de monedas le darán exactamente 10 veces mayores rendimientos que 1 millón de monedas, sin ninguna ganancia adicional desproporcionada porque en el nivel más alto pueda comprar mejores equipos de producción en masa, lo que es una ventaja para la Prueba de trabajo. 74 4.2 Mecanismos de Consenso principales La capacidad de aplicar sanciones económicas provoca que los ataques del 51% son mucho más costosos de realizar que en la prueba de trabajo, parafraseando a Vlad Zamfir, "es como si su granja de ASIC se quemara si participó en un ataque del 51%". Una red más segura a medida que los ataques se vuelven más costosos: si un hacker malicioso quisiera comprar el 51% del número total de monedas para poder controlar la Blockchain, el mercado reacciona con una rápida apreciación de los precios. Figura 4.9 Economías de Escala (Schumann, 2018). Casper será un protocolo de fianzas que se basa en un sistema de consenso económico. Los nodos (o los validadores) deben pagar una fianza/depósito para formar parte del consenso a través de la creación de nuevos bloques. El protocolo Casper determinará la cantidad específica de recompensas recibidas por los validadores gracias a su control sobre las fianzas. Si un validador crea un bloque "no válido", perderá su fianza, así como su privilegio de formar parte del consenso de la red. Una vez que el forjador pone su participación, puede participar en el proceso de forja y, como ha apostado su propio dinero, en teoría ahora está incentivado para validar las transacciones correctas. El sistema de seguridad de Casper se basa en algo parecido a las apuestas. En un sistema basado en PoS, las apuestas son las transacciones que, de acuerdo con las reglas de consenso, recompensará a su validador con un premio por cada bloque válido en la que el validador haya apostado. Por lo tanto, Casper se basa en la idea de que los validadores apostarán de acuerdo con las apuestas de los demás y dejarán comentarios positivos que puedan acelerar el consenso (Rosic, 2017; Buterin, 2019; Ray, 2017). 4.2.3 Delegated Proof of Stake (DPoS) La Prueba de participación delegada (también conocida como DPoS) es un algoritmo de consenso que mantiene un acuerdo irrefutable sobre la verdad en toda la red, valida 75 4. ¿CÓMO FUNCIONA EL BLOCKCHAIN? las transacciones y actúa como una forma de democracia digital. La prueba delegada de participación utiliza la votación en tiempo real combinada con un sistema social de reputación para lograr el consenso. Es el protocolo de consenso menos centralizado en comparación con todos los demás, ya que es el más inclusivo. Cada titular de token puede ejercer un grado de influencia sobre lo que sucede en la red. Los delegados activos son seleccionados por los poseedores de tokens por votación colocando sus tokens en nombre de su candidato (estos tokens no se gastan, solo representan la posición de la parte interesada y siguen siendo de su propiedad). El poder de voto que tiene el titular del token, también conocido como peso de voto, está determinado por la cantidad del token base que posee la cuenta. Es importante que los delegados sean elegidos por el mejor interés de la red, ya que la mantienen funcionando sin problemas y de forma segura. En algunas versiones de DPoS, un delegado debe demostrar su compromiso depositando sus fondos en un depósito con bloqueo temporal (que se confisca en caso de comportamiento malicioso). Esta versión de DPoS a menudo se denomina prueba de participación basada en depósitos/fianzas. Las funciones principales de los delegados están relacionadas con: Asegurarse de que su nodo está siempre en funcionamiento 24/7/365. Recopilación de las transacciones a través de la red en bloques. Firma y difusión de los bloques, validando las transacciones. Gobernar el sistema y proponer cambios centrales. Si hay problemas con respecto al consenso, DPoS permite resolverlos de manera justa y democrática. Los delegados no tienen el poder de cambiar los detalles de la transacción, pero como son validadores, teóricamente podrían excluir ciertas transacciones en un bloque. Sin embargo, esto tiene muy poco efecto ya que el siguiente bloque creado incluirá estas transacciones, dando al próximo delegado las tarifas asociadas con la validación de las mismas. Como tal, las transacciones sólo se retrasarán ligeramente. Además, esto inevitablemente conduciría a que el delegado deshonesto sea expulsado por el resto de la red. En esencia, una red DPoS es autogestionada yvigilada por todos sus participantes, lo que garantiza que los intereses de la red sigan siendo la prioridad. Algunos blockchains con DPoS ofrecen la oportunidad de reelegir a los delegados si el resultado de sus decisiones no es aprobado por sus votantes. La votación es un proceso continuo, por lo que cada delegado está bajo la presión de perder su lugar frente a otro competidor más popular. Las pérdidas de reputación y financieras son una motivación primordial para desincentivar comportamientos maliciosos. La mayoría de las cadenas de bloques basadas en DPoS tienen en cuenta la cantidad de 76 4.2 Mecanismos de Consenso principales tokens en propiedad, pero no existe una regulación que impida a los usuarios votar debido a que su participación no es lo suficientemente grande. El hecho de que la oportunidad de votar se otorgue a cada usuario de la red es lo que hace que DPoS sea el enfoque más democrático para el algoritmo de consenso de cadena de bloques. Las cadenas de bloques de PoW no permiten que los usuarios con poca potencia de computación influyan realmente en la red, esa es la razón principal de la existencia de pools de minería, que actualmente son las únicas entidades que rigen Bitcoin. La mayoría de las cadenas de bloques de PoS excluyen a los usuarios con pequeñas participaciones de tomar decisiones sobre el gobierno de la red. Figura 4.10 Algoritmo de Consenso DPoS (Winterfield, 2018). Ventajas y desventajas de la DPoS DPoS no solo es un sistema más democrático (da voto a los pequeños usuarios), sino que también es más eficiente yefectivo. La selección de creadores de bloques permite validar las transacciones en cuestión de segundos, más rápido que PoW y PoS. Por ejemplo, en el caso de Lisk, actualmente solo tarda 10 segundos validar un bloque de transacciones. Los delegados reciben comisiones de transacción como recompensa por ejecutar los nodos que procesan y validan las transacciones que se realizan a través de la red, así como recompensas mensuales por el mantenimiento de la red que, con el tiempo, se reduce gradualmente. Solo puede haber un cierto número de delegados a la vez y estos están determinados por un sistema electoral competitivo, en el que todos y cada uno de los usuarios pueden emitir voto según su preferencia. La supervivencia de la red requiere la participación y coordinación, mediante la votación para eliminar e introducir delegados, de una comunidad interesada en un gobierno efectivo. 77 4. ¿CÓMO FUNCIONA EL BLOCKCHAIN? Los sistemas DPoS son vulnerables a la centralización, ya que el número de delegados está estrictamente limitado. La cadena de bloques DPoS está expuesta a los fallos de la votación en la vida real clásica. Por ejemplo, los usuarios de DPoS con poco poder de voto pueden decidir que su voto no importa en comparación con los votos de las partes interesadas más grandes (Academy, 2019; Bitcoin.org, 2019). 4.2.4 Stellar Consensus Protocol (SCP) El Stellar Consensus Protocol (SCP), es un sistema de Acuerdo Bizantino Federado (FBA) que permite a las redes informáticas descentralizadas y sin líder alcanzar de manera eficiente un resultado de consenso en alguna decisión. La Blockchain Stellar utiliza SCP para proporcionar una visión coherente del historial de transacciones de la red a todos los participantes. Cualquier sistema de consenso en una red de computación distribuida debe ser tolerante a errores: debe producir resultados consistentes a pesar de errores como problemas de comunicación, nodos que no responden y mensajes mal ordenados. Un sistema de Acuerdo Bizantino además tolera los fallos "bizantinos": nodos que proporcionan información falsa, ya sea debido a un error o en un intento deliberado de subvertir el sistema u obtener alguna ventaja. este sistema evita fallos bizantinos usando una regla de mayoría llamada quórum. Un nodo en dicha red se niega a comprometerse con una versión particular de la historia hasta que ve que una cantidad suficiente de sus nodos vecinos también están preparados para comprometerse, un quórum. Una vez que eso sucede, han formado un bloque de votación lo suficientemente grande como para obligar a los nodos restantes en la red a estar de acuerdo con su decisión. Para formar un quórum se necesita al menos una mayoría y más típicamente una mayoría mayoritaria para combatir errores y fraudes, saber cuándo tiene la mayoría significa saber cuántos participantes tiene en total. Pero si su colección de participantes es una red poco definida a la que los miembros pueden unirse y salir a voluntad, sin necesidad de coordinar con ninguna autoridad central, entonces es necesario un sistema de Acuerdo Bizantino Federado: uno que pueda determinar los quórumes no a partir de una lista predeterminada de nodos, sino dinámicamente, a partir de una lista siempre cambiante e inevitablemente incompleta de los nodos en un momento determinado (Glickstein, 2019). Acuerdo Bizantino Federado Para llegar a Quórum en el protocolo SCP: 1. Los nodos llevan a cabo rondas de votación federada en "nominaciones". Una ronda de votación federada significa: Un nodo emite un voto para alguna declaración, como "Nomino el valor V" El nodo escucha las respuestas de sus vecinos hasta que encuentra uno que comunica "aceptar" El nodo busca un "quórum slice" (una pequeña parte del quórum total que será necesario alcanzar) con los nodos que también aceptan la declaración. Esto "confirma" la declaración. 78 4.3 Tecnología Blockchain - Observaciones 2. Tan pronto como un nodo puede confirmar uno o más candidatos, comienza a tratar de "preparar" una "propuesta" a través de más rondas de votación federada. 3. Tan pronto como un nodo puede verificar que una propuesta está preparada, comienza a tratar de "consolidar" la propuesta a través de aún más rondas de votación federada. 4. Una vez que un nodo puede confirmar que se ha consolidado una propuesta, puede "externalizar" el valor de esa propuesta, usándola como resultado del consenso. Estos pasos implican varias rondas de votación federada que colectivamente forman una sola ronda de SCP, véase la figura 4.11 como ejemplo. En un sistema FBA, los nodos se transmiten entre sí en qué porciones de quórum confían. Los nodos determinan individualmente en qué quórum confiar y construyen su propio quórum en función de la información que tienen a mano. La situación ideal es tener intersecciones de quórum o superposiciones de quórum. Esto asegura que haya consenso en toda la red. Si no hay intersecciones, habrá quórumes inconexos que pueden llevar al registro de transacciones contradictorias. Figura 4.11 Acuerdo Bizantino Federado (FBA) (Renders, 2018). Ventajas del Stellar Consensus Protocol Blockchain usa la tolerancia a fallos bizantina (BFT) para mantener la confiabilidad de los registros y transacciones. La mayoría de las cadenas de bloques utilizan lo que se conoce como Tolerancia de falla bizantina práctica (PBFT). Una red de blockchain que usa PBFT necesita el 66 por ciento de los validadores para acordar transacciones para lograr quórum o consenso. Para mantener la validez de la red, el número de nodos maliciosos debe permanecer por debajo del 33 por ciento. La PBFT no es lo suficientemente tolerante a fallos. Además, la selección de validadores hace que los sistemas PBFT se vuelvan centralizados. En un sistema FBA, no hay necesidad de validadores predefinidos. Los nodos toman las decisiones individualmente sobre en quién confiar. Se descentraliza el sistema. En lugar de todo el quórum o un número preestablecido de nodos, los sistemas FBA utilizan el "quórum slice" o un subconjunto del quórum. 79 4. ¿CÓMO FUNCIONA EL BLOCKCHAIN? 4.3 Tecnología Blockchain - Observaciones Llegados a este punto, ya es posible visualizar las ventajas de la tecnología Blockchain y el futuro recorrido de esta tecnología. El por qué es importante y dónde reside su valor, debido a sus propiedades de seguridad, inmutabilidad y confianza. En los capítulos 3y4se ha estudiado qué es la cadena de bloques y cómo funciona para permitir crear un sistema de consenso confiable y distribuido, esto implica que si se desea enviar y/o recibir transacciones con alguien no se necesita confiar en servicios de terceros. En el capítulo 5se va a estudiar cómo se interactúa con la Blockchain hoy en día y en el capítulo 6cómo podría integrarse esta tecnología con la disciplina del Control Automático. 80 5 Criptomonedas, Smart Contracts, Dapps e Industria 4.0 En el presente capítulo se estudia la evolución de la tecnología Blockchain, se pueden identificar 4 etapas/generaciones (Darko, 2019): Blockchain 1.0: Moneda Las Blockchains de 1ªgeneración son Blockchains de consenso por Prueba de Trabajo, donde los nodos con mayor potencia computacional, tienen el mayor poder de voto y donde el único propósito de la Blockchain es ser un procesador de pagos. Blockchain 2.0: Contratos inteligentes Las Blockchains de 2ªgeneración son cadenas de bloques de Prueba de Trabajo que tienen más funciones que simplemente ser un procesador de pagos. Se trata de Blockchains, como Ethereum o Neo, que permiten ejecutar contratos inteligentes, lanzar ICOs y ejecutar DApps en su plataforma. Blockchain 3.0: DApps El problema de las cadenas de bloques de 1ªy 2ªgeneración es que no son escalables en absoluto, tardan mucho tiempo en confirmar las transacciones, están muy centralizadas a través de grupos de minería, tienen comisiones de transacción y consumen mucha energía. Las Blockchains de 3ªgeneración son Blockchains que ya ni siquiera son Blockchains en un sentido práctico, lo que les permite ir más allá de las restricciones mencionadas anteriormente que trae la arquitectura común de Blockchain, por ejemplo, IOTA con su Tangle tiene una estructura de Grafos Acíclicos Dirigido (DAG), ver apartado 3.3.2. Las Blockchains de 3ªgeneración son arquitecturas de software descentralizadas que permiten una escalabilidad casi infinita, tienen transacciones instantáneas,descentralización casi infinita, no cobran comisiones y solo utilizan una millonésima parte de la energía de la que utiliza Bitcoin. Blockchain 4.0: Integración en la industria 4.0 Los proyectos de Blockchain 3.0 fallan en ofrecer una plataforma descentralizada y abierta que abarque negocios del mundo real de cualquier tipo, tamaño o volumen. 81 5. CRIPTOMONEDAS, SMART CONTRACTS, DAPPS E INDUSTRIA 4.0 La industria de la cadena de bloques está ansiosa por una red de alto rendimiento y de acceso libre que brinde infraestructura suficiente para que los desarrolladores de DApps reduzcan los costos de desarrollo y reduzcan el ciclo de desarrollo. La llegada de Blockchain 4.0 marcará un hito destacado en la historia de la evolución de Blockchain. Blockchain 4.0 será la cadena de bloques de alto rendimiento y “amigable” para los negocios que pueda ejecutar casos de uso y aplicaciones del mundo real. Figura 5.1 Evolución de Blockchain (InterValue, 2018). 5.1 Blockchain 1.0: Criptomoneda La implementación de la tecnología de “libro de cuentas” distribuido condujo a su primera aplicación: las criptomonedas. Una criptomoneda, es un medio digital de intercambio que utiliza criptografía para asegurar las transacciones financieras, controlar la creación de unidades adicionales y verificar la transferencia de activos. Las criptomonedas son un tipo de divisa alternativa y de moneda digital, tienen un control descentralizado, en contraposición a las monedas centralizadas y a los bancos centrales. Esto permite que las transacciones financieras utilizando la tecnología Blockchain se ejecuten sin depender de servicios de terceros, siendo Bitcoin el ejemplo más destacado en este segmento. Se diseñó como "efectivo para Internet", un sistema de pago digital con objetivo de desarrollar el "Internet del dinero/valor" (En Wikipedia, s.f.[k]; InterValue, 2018; Unibright.io, 2017). 5.2 Blockchain 2.0: Contratos Inteligentes Los Smart Contracts o Contratos Inteligentes, son pequeños programas de software alojados en la cadena de bloques. Son programas informáticos autónomos que se ejecutan automáticamente y las condiciones se definen de antemano, como la facilitación, la verificación o la ejecución del cumplimiento de un contrato. Una gran ventaja que ofrece esta tecnología, es la cadena de bloques que hace imposible manipular opiratear contratos inteligentes. Por lo tanto, los contratos inteligentes reducen el costo de la verificación, la ejecución, el arbitraje y la prevención del fraude y 82 5.4 Blockchain 4.0: Haciendo blockchain utilizable en la industria 4.0 diata. El peligro de pérdida de datos se elimina casi por completo. Y un registro inmutable significa que los datos son precisos, lo que lleva a una mejor previsión y planificación. Estas ventajas están integradas en toda la tecnología de Blockchain, pero sin el conjunto de características "4.0", las empresas no pueden acceder a ellas. Existen beneficios empresariales adicionales únicos para los ecosistemas de Blockchain 4.0. Un Marco de Desarrollo Integrado (IDE) ofrece a las empresas la oportunidad de construir sus propios Dapps, los esfuerzos de compatibilidad entre Blockchains distintas significan que la mayoría de los Dapps se ejecutarán en múltiples Blockchains de nivel 4.0 (Official, 2018). 89 6 Blockchain en la Automática 6.1 Control Automático 6.1.1 Introducción El Control Automático es una rama de la ingeniería que se ocupa del control de un proceso en un estado determinado. El Control Automático estudia el comportamiento de los sistemas dinámicos y la actuación necesaria sobre este para controlarlo. En general, la entrada al sistema es una señal analógica o digital y la salida del sistema corresponde a la variable que se pretende controlar. Cuando una o más de las variables de salida de un sistema tienen que seguir el valor de una referencia que cambia con el tiempo, se necesita interponer un controlador que manipule los valores de las señales de entrada al sistema hasta obtener el valor deseado de salida (En Wikipedia, s.f.[t]). 6.1.2 Sistemas de Control Podemos definir un sistema de control como la combinación de elementos que, actuando sobre una planta o proceso, trata de fijar alguno de sus parámetros o de hacer que varíe, en el transcurso del tiempo, de una forma determinada que se predefine. Para representar esquemáticamente un sistema se utilizan los diagramas de bloques, en los que cada elemento o conjunto de elementos se simboliza con un bloque. Unas flechas indican el sentido de la información, que es único (En Wikipedia, s.f.[t]). El control automático siempre está integrado por tres operaciones básicas: Medida: la medida de la variable a controlar se realiza mediante un sensor. Decisión: basándose en la medida, el controlador debe decidir qué hacer, para mantener la variable en el valor deseado. Acción: como resultado de la decisión del controlador, el sistema debe emprender alguna acción. Normalmente la realiza el elemento final u órgano de control. 91 6. BLOCKCHAIN EN LA AUTOMÁTICA Lazos de Control Lazo Abierto: En el control de lazo abierto, el controlador recibe una señal que puede ser externa al sistema y, en función de ella, envía una orden al órgano de control, pero no vuelve a recibir información sobre lo que ocurre en el proceso una vez ejecutada la acción. Son sistemas de control en los que el valor actual de la variable no tiene efectos sobre la acción de control. El control deberá, una vez recibida una entrada de referencia, suministrar a la planta o proceso una salida adecuada, para que la magnitud a controlar evolucione de la forma prevista. No se mide la variable, ni se realimenta para compararla con la señal de entrada. Cuando un control está en manual el lazo es abierto. Figura 6.1 Control Lazo Abierto (Mateo Cruz, 2019). Lazo Cerrado: Para evitar los problemas del control en lazo abierto, la teoría de control introduce la realimentación. El regulador de lazo cerrado utiliza la realimentación para controlar los estados y las salidas de un sistema dinámico. El nombre de "lazo cerrado" hace referencia al camino que sigue la información en el sistema: la entrada al proceso afecta a la salida del mismo . La salida se mide con sensor y una vez comparada con la referencia o consigna, se procesa mediante el controlador o regulador; el resultado, una señal de control, se reenvía a la entrada del proceso, cerrando el lazo (En Wikipedia, s.f.[t]). Figura 6.2 Control Lazo Cerrado (Mateo Cruz, 2019). El control con lazo cerrado presenta las siguientes ventajas sobre el control en lazo abierto: corrección de las perturbaciones buen comportamiento incluso con incertidumbre en el modelo permite estabilizar procesos inestables tolerancia a variaciones en los parámetros 92 6.1 Control Automático 6.1.3 Estrategias de Control P, PI y PID A continuación se estudian las estrategias de control con realimentación más comunes en la industria: Control Proporcional (P) El controlador de acción proporcional aumenta o disminuye la acción del elemento final de la regulación proporcionalmente al error o diferencia entre el valor de la variable controlada y el de consigna. La señal de control o magnitud de ajuste u(t)es proporcional a la señal de error e(t): e(t) = re f erencia −variable controlada u(t) = Kp·e(t) El coeficiente de proporcionalidad Kprecibe el nombre de ganancia. El dispositivo controlado se posiciona proporcionalmente en respuesta a pequeños cambios de la variable controlada. Entre el valor de consigna y el realmente obtenido hay siempre una diferencia o error residual característico de este sistema de regulación. Se puede minorar este error aumentado el coeficiente de proporcionalidad, pero se corre el riesgo de que el sistema se vuelva inestable (En Wikipedia, s.f.[t]). Figura 6.3 Control P (Physicsch, 2015). Control Proporcional-Integral (PI) La acción de control, en este caso, viene definida por la siguiente ecuación: u(t) = Kpe(t)+KiZt 0 e(t)dt donde K p es la constante proporcional y Kila constante integral. Si se reemplaza Ki=Kp/Ti, se obtiene: u(t) = Kp(e(t)+ 1 TiZt 0 e(t)dt)donde Tirepresenta el tiempo de integración, el tiempo que va a tardar el término integral en compensar todo el error acumulado. Esta acción de control está compuesta por la suma de la acción proporcional y la acción integral. La acción proporcional suministra al dispositivo controlado una señal para 93 6. BLOCKCHAIN EN LA AUTOMÁTICA corregir el error, siempre que este no sea nulo, y la acción integral es proporcional al error y a su duración y tiende a eliminar el error residual o error acumulado. Con el aumento de Kise consigue eliminar el error en menos tiempo pero para Ki grandes la parte Integral provoca sobreoscilaciones indeseadas en la salida del sistema (En Wikipedia, s.f.[t]). Figura 6.4 Control PI (Physicsch, 2015). Control Proporcional-Integral-Derivativo (PID) La acción de control, en este caso, viene definida por la siguiente ecuación: u(t) = Kpe(t)+KiZt 0 e(t)dt +Kd de(t) dt donde Kp es la constante proporcional y Kila constante integral y Kdes la constante derivativa. Si se reemplaza Ki=Kp/Ti, y Kd=KpTdse obtiene: u(t) = Kp(e(t)+ 1 TiZt 0 e(t)dt +Td de(t) dt )donde Tirepresenta el tiempo de integración, yTdrepresenta el tiempo de derivación, intenta predecir el valor de error en Tdsegundos en el futuro, asumiendo que el bucle de control permanece sin cambios. La acción derivativa corrige la posición de la variable operada proporcionalmente a la velocidad de variación del error para que, después de una variación de la carga, la variable controlada regrese lo más rápido posible a su valor de consigna. El control proporcional con acción integral tiene el inconveniente de no tener en cuenta la tendencia del error, es decir, no es capaz de distinguir una situación en la que el error 94 6.1 Control Automático está creciendo, de otra en la que está disminuyendo. La acción derivativa tiene en cuenta los valores futuros del error y es capaz de distinguir los dos casos, predice el comportamiento del sistema y, por lo tanto, mejora el tiempo de establecimiento y la estabilidad del sistema (En Wikipedia, s.f.[t]). Figura 6.5 Control PID (Physicsch, 2015). 6.1.4 Automatización Industrial Introducción La automatización industrial es el uso de sistemas o elementos computarizados y electromecánicos para fines industriales. Como una disciplina de la ingeniería más amplia que un sistema de control, abarca la instrumentación industrial, que incluye los sensores, los transmisores de campo, los sistemas de control y supervisión, los sistemas de transmisión y recolección de datos y las aplicaciones de software en tiempo real para supervisar y controlar las operaciones de plantas o procesos industriales. El objetivo, aumentar la producción, mejorar la calidad y evitar riesgos para las personas. Esto puede llevar asociado una pérdida de puestos de trabajo poco cualificados, pero a cambio se generan otras necesidades de personal para diseñar, fabricar, poner en marcha y controlar estos nuevos procesos. La ingeniería, el mantenimiento industrial y las nuevas profesiones relacionadas con la 95 6. BLOCKCHAIN EN LA AUTOMÁTICA automatización cobran entonces una nueva dimensión (En Wikipedia, s.f.[b]; Aldakin, s.f.). Tecnologías que componen la Automatización Industrial: •Electricidad y la electrónica industrial. •Neumática industrial. •Oleohidráulica industrial. •Autómatas programables. •Comunicaciones industriales. •Robótica industrial. Sistemas de control distribuido Un sistema de control distribuido está formado por varios niveles de automatización, véase figura 6.6. Los mismos se denominan: nivel de campo: donde se encuentran los sensores y actuadores nivel de control: donde se encuentran los PLCs o las Estaciones de Automatización nivel de supervisión: donde se encuentran las Estaciones de Operación y los Servidores de Proceso nivel MES: donde se encuentran PCs con software especializado para la distribución de toda la información de planta así como la generación de reportes nivel ERP: donde se encuentran igualmente PCs con software especializado para la planificación y administración de la producción de toda la industria o empresa (En Wikipedia, s.f.[b]). Figura 6.6 Sistema de Control Distribuido (Recursos, 2018). 96 6.2 Blockchain y el Control Automático Autómata Programable/Programmable Logic Controller (PLC) Un autómata programable, es una computadora utilizada en automatización industrial, para automatizar procesos electromecánicos, tales como el control de la maquinaria de la fábrica en líneas de montaje. Los PLC son utilizados en múltiples industrias y máquinas. A diferencia de las computadoras de propósito general, el PLC está diseñado para múltiples señales de entrada y de salida, rangos de temperatura ampliados, inmunidad al ruido eléctrico y resistencia a la vibración y al impacto. Los programas para el control de funcionamiento de la máquina se suelen almacenar en copias de seguridad y/o en memorias no volátiles. Un PLC es un ejemplo de un sistema de tiempo real, donde los resultados de salida deben ser producidos en respuesta a las condiciones de entrada dentro de un tiempo limitado, de lo contrario no producirá el resultado deseado. los PLC no sólo controlan la lógica de funcionamiento de máquinas, plantas y procesos industriales, sino que también pueden realizar operaciones aritméticas, manejar señales analógicas para realizar estrategias de control, tales como controladores PID (En Wikipedia, s.f.[f]). Supervisión, Control y Adquisición de Datos (SCADA) SCADA es un concepto que se emplea para realizar un software para ordenadores que permite controlar y supervisar procesos industriales a distancia. Facilita la realimentación en tiempo real con los dispositivos de campo (sensores y actuadores), y controla el proceso automáticamente. Provee de toda la información que se genera en el proceso productivo (supervisión, control calidad, control de producción, almacenamiento de datos, etc.) y permite su gestión e intervención (En Wikipedia, s.f.[u]). Figura 6.7 Estructura de supervisión con SCADA(En Wikipedia, s.f.[u]). 97 6. BLOCKCHAIN EN LA AUTOMÁTICA 6.2 Blockchain y el Control Automático 6.2.1 Introducción En el capítulo 2, se destacan los beneficios de implementar la tecnología Blockchain con otras tecnologías para obtener las ventajas y características principales de la tecnología Blockchain, confianza/fiabilidad, seguridad y verdad en datos/transacciones, todo esto reduciendo los costes y logrando la independencia de intermediarios/terceras partes. En la industria de la Automatización Industrial se utilizan sistemas de adquisición de datos y control muy robustos, con alta tolerancia a fallos y redundancia. Todos estos sistemas actúan normalmente en red interna con sistemas redundantes y pocos puntos de acceso exteriores. Uno de los principales riesgo de este sector de la industria es la ciberseguridad, el peligro de que un hacker acceda a la red de controladores y tome el control, puede desestabilizar fácilmente el sistema de producción atacado. 6.2.2 ¿Cómo puede ayudar Blockchain a la Automatización Industrial? A continuación se estudian algunas soluciones Blockchain a los 3 niveles más comunes de los sistemas de control distribuido, los niveles de campo, control y supervisión. Nivel de campo El nivel de campo es donde se encuentran los sensores y actuadores, es el nivel más vulnerable/crítico, fallos en los sensores y en los actuadores puede desembocar en averías en las máquinas, accidentes y/o afectar a la producción. Es muy importante que la adquisición y envío de datos sea segura, fiable y verdadera. Como se observa en el diagrama 6.8, un ataque a las comunicaciones sensor-PLC permitiría introducir datos falsos en el PLC, al igual que un ataque a las comunicaciones PLC-Actuador, en ambos casos puede desembocar en un mal funcionamiento del actuador. Figura 6.8 Estructura conexión nivel campo y nivel control. Una solución Blockchain para aumentar la seguridad es utilizar la tecnología de llaves público-privadas, donde el PLC conoce la dirección pública de los sensores que controla, 98 7 Control PI en Blockchain 7.1 Estado del Arte En el articulo Blockchain-based Technology for Industrial Control System Cyper- Security(Mao y Xiao, 2018) se expone la idea de aplicar tecnología Blockchain a los Sistemas de Control Industrial para mejorar la seguridad de la red, concluyendo que añadir tecnología Blockchain en este ámbito se consigue un sistema confiable, seguro, de alta eficiencia y bajo coste, consiguiendo redes de dispositivos IoT más seguras. Mingyang Mao y Hong Xiao concluyen que los nodos IoT forman una red y se comunican Peer to Peer usando claves públicas y privadas, logrando una comunicación segura entre ellos, y debido a los mecanismos de consenso las transacciones no válidas son rechazadas, gracias a esto evitan la interacción de atacantes en la red. Profundizando más en el tema, se encuentra el trabajo Blockchain Technology with Applications to Distributed Control and Cooperative Robotics: A Survey (Khan y col., 2018), donde se indica la importancia de las decisiones distribuidas (consenso) y el mecanismo de seguridad en la tecnología Blockchain para realizar Control Distribuido y aplicarlo al campo de la Cooperación Robótica, finalmente concluyen que a pesar de lo disruptivo, la tecnología de robots de enjambre (swarm) y los Sistemas de Control Distribuido, todavía enfrentan desafíos de privacidad y seguridad. Blockchain facilita superar estos desafíos con su descentralización, y la configuración en red Peer to Peer. Su descentralización elimina el monopolio del Third Party y crea un espacio seguro en un entorno poco confiable, lo que lo hace ideal. Se están produciendo cambios tecnológicos e innovadores en futuro, Blockchain puede revolucionar el campo de los sistemas DCS y enjambre de robots y les proporcionará una forma más segura y ambiente infalible. Aún no existen muchas publicaciones sobre tecnología Blockchain aplicada al campo de Control Automático y Sistemas de Control Distribuido, aunque es cada vez más fácil encontrar casos de uso de Blockchain distinto al uso como criptomoneda. 105 7. CONTROL PI EN BLOCKCHAIN 7.2 Introducción En este capítulo se va a aplicar la tecnología Blockchain a un sistema IoT para utilizar las ventajas de Blockchain en mejorar los puntos débiles de estos nuevos sistemas. El caso de uso es la climatización de una vivienda, donde exista una red IoT de sensores de temperatura y un Controlador Centralizado que actúa sobre el aire acondicionado de la vivienda. Posibles riesgos si la red IoT de esta vivienda sufre un ataque, como se muestra en la figura 7.1: 1. Atacante suplante la identidad de los sensores, generando información falsa para confundir al Controlador Central. 2. Atacante suplante la identidad del Controlador Central y envía consignas a los actuadores del sistema con intención de causar averías y mal funcionamiento. 3. Atacante modifique los parámetros o código del Controlador Central. 106 7.2 Introducción Figura 7.1 Riesgos sistema centralizado bajo ataque (Elaboración propia, 2019). 107 7. CONTROL PI EN BLOCKCHAIN Para atacar estos riesgos, se propone las siguientes soluciones recogidas en la figura 7.2: 1. Utilizar claves públicas y privadas para firmar los paquetes de datos, tanto las lecturas de los sensores de temperatura como las órdenes del controlador central, con esto se logra que no se pueda introducir transacciones falsas por nodos o dispositivos ajenos a la red, solo aquellos sensores confiables poseen las llaves privadas para firmar transacciones. 2. Utilizar tecnología Blockchain de consenso para validar las transacciones y descartar las falsas, los sensores no envían datos directamente al Controlador, en su lugar alojan sus datos en la Blockchain donde son validados, y los actuadores no aplican los comandos recibidos del Controlador directamente, aplican los comandos calculados por el Smart Contract que leen de la Blockchain, si un atacante intenta modificar los datos de los sensores o las consignas del Controlador ya validados en la Blockchain, esas modificaciones serán rechazadas. 3. Alojar el código del Controlador en un Smart Contract en la Blockchain, de esta manera el bucle de control no podrá ser modificado una vez validado y sus parámetros solo podrán ser modificados por usuarios autorizados en el Smart Contract que firmen las transacciones con su clave privada. 108 7.2 Introducción Figura 7.2 Solución Blockchain propuesta (Elaboración propia, 2019). 109 7. CONTROL PI EN BLOCKCHAIN 7.3 Objetivo, solución adoptada y elementos utilizados 7.3.1 Objetivo y solución adoptada El objetivo es demostrar que se puede mejorar una red simple de IoT susceptible a ataques aplicando Blockchain a su desarrollo, para ello se utiliza un Arduino como dispositivo IoT, este realizará las tareas de comunicación segura con la Blockchain y con los elementos IoT como sensores y actuadores, y se utiliza un Smart Contract en la Blockchain para asegurar que el bucle de control es seguro yconfiable. Para simular este caso de uso se ha construido un sistema de control de temperatura con ventiladores y un sensor de temperatura, se controlan los ventiladores con un Arduino que aplica las consignas leídas de la Blockchain y calculadas y escritas por un Smart Contract en la Blockchain de Ethereum, este Smart Contract recibirá las medidas de temperatura escritas por el Arduino en la Blockchain para realizar el cálculo de las consignas como se observa en el diagrama 7.3. Figura 7.3 Solución adoptada (Elaboración propia, 2019). 7.3.2 Elementos Hardware Arduino con adaptador Wi-Fi ESP32: ESP32 es un único chip combinado de 2,4 GHz con Wi-Fi y Bluetooth diseñado con el TSMC de ultra baja potencia de 40 nm. Está diseñado para lograr el mejor rendimiento de potencia y RF, mostrando robustez, versatilidad y fiabilidad en una amplia variedad de aplicaciones y escenarios. ESP32 está diseñado para aplicaciones móviles, wearables y dispositivos de Internet de las cosas (IoT) (En Espressif Systems, s.f.). 110 7.3 Objetivo, solución adoptada y elementos utilizados Ventiladores de 5V DC y 0.2A Pi-Fan Sensor de Temperatura Arduino (AM2303) DHT22: El sensor AM2302 es la versión cableada y encapsulada en un cuerpo plástico del DHT22, sencillo de usar con Arduino y Raspberry Pi. Mosfet NPN TIP122G 7.3.3 Elementos Software Arduino IDE: El software Arduino de código abierto (IDE) permite escribir código y subirlo a la placa Arduino. Se ejecuta en Windows, Mac OS X y Linux. El entorno está escrito en Java y se basa en software de código abierto. Ethereum Blockchain - Ropsten: La red de prueba de Ropsten (testnet) se usa esencialmente como un entorno de pruebas antes de llevar su código a la red principal de Ethereum (mainnet). A diferencia de la red principal, escribir en la red de prueba es gratis (Dakota Quint, s.f.). Lo más destacado de las redes de prueba de Ethereum: •Permite implementar código no confiable en la red de prueba en lugar de hacerlo en la red principal. •Es prácticamente gratuito (a diferencia de la red principal). •Está sujeto a cambios. JSON-RPC: JSON es un formato ligero de intercambio de datos. Puede representar números, cadenas, secuencias ordenadas de valores y colecciones de pares de nombre / valor. JSON-RPC es un protocolo de llamada a procedimiento remoto (RPC) sin estado y ligero. Principalmente, esta especificación define varias estructuras de datos y las reglas en torno a su procesamiento. Es independiente del transporte, a través de sockets, a través de HTTP o en muchos entornos de transmisión de mensajes. Utiliza JSON (RFC 4627) como formato de datos (Felix Lange, s.f.). Infura node: Infura es un clúster alojado de nodos de Ethereum que permite a sus usuarios ejecutar su aplicación de forma segura y fiable sin necesitar que configuren su propio nodo completo o wallet de Ethereum (Tim Coulter, s.f.). Truffle development environment: Truffle es un entorno de desarrollo (proporciona una herramienta de línea de comandos para compilar, implementar y probar Smart Contracts), de framework (proporciona varios paquetes para facilitar la escritura de pruebas, código de implementación, clientes de compilación, etc.) y de canalización de activos (permite publicar 111 7. CONTROL PI EN BLOCKCHAIN paquetes y usar paquetes publicados por otros) para construir DApps basados en Ethereum (Narayan Prusty, 2017) . Atom text and source code editor: Atom es un editor de texto y código fuente gratuito y de código abierto para macOS, Linux y Microsoft Windows con soporte para complementos escritos en Node.js, e integrado en Git Control, desarrollado por GitHub. Atom es una aplicación de escritorio creada con tecnologías web. La mayoría de los paquetes que tienen licencias de software libre y son construidos y mantenidos por la comunidad. Atom se basa en Electron (anteriormente conocido como Atom Shell), un marco que permite aplicaciones de escritorio multiplataforma que utilizan Chromium y Node.js. Está escrito en CoffeeScript y Less (En Wikipedia, s.f.[a]) . Solidity: Solidity es un lenguaje de programación orientado a objetos para escribir Smart Contracts y se utiliza para implementarlos en varias plataformas Blockchain, especialmente Ethereum. Fue desarrollado por Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Liana Husikyan, Yoichi Hirai y varios antiguos colaboradores principales de Ethereum (En Wikipedia, s.f.[w]) . NodeJs y Webserver: Node.js es un entorno multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web. Fue creado por Ryan Dahl en 2009 y su evolución está apadrinada por la empresa Joyent. Node.js es similar en su propósito a Twisted o Tornado de Python, Perl Object Environment de Perl, libevent o libev de C, EventMachine de Ruby, vibe.d de D y Java EE de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket. Al contrario que la mayoría del código JavaScript, no se ejecuta en un navegador, sino en el servidor. Node.js implementa algunas especificaciones de CommonJS. Node.js incluye un entorno REPL para depuración interactiva (En Wikipedia, s.f.[q]). Metamask: MetaMask permite ejecutar Ethereum dApps directamente en el navegador sin ejecutar un nodo Ethereum completo, incluye una “caja fuerte segura” de identidad, que proporciona una interfaz de usuario para administrar sus identidades/llaves privadas en diferentes sitios y firmar transacciones de Blockchain. Se puede instalar el complemento MetaMask en Chrome, Firefox, Opera y el nuevo navegador Brave (En Metamask, s.f.). 112 7.4 Diseño y montaje 7.4 Diseño y montaje El objetivo es utilizar el Arduino ESP32 como pasarela entre el Smart Contract de un Controlador PI alojado en Ethereum y los dispositivos IoT (sensor de temperatura y ventiladores), para lograr esto se han realizado las siguientes tareas: 1. Montaje del circuito de lectura del sensor de temperatura DHT22 2. Montaje del circuito de control de los ventiladores 3. Desarrollo del código en Arduino para leer el sensor de temperatura, escribir la lectura en el Smart Contract, leer la señal de control calculada por el Smart Contract y aplicarla en el circuito de los ventiladores 4. Desarrollo del código del Smart Contract del Controlador PI en la Blockchain de Ethereum 5. Desarrollo de una interfaz web para leer y escribir en el Smart Contract los parámetros de configuración del Controlador PI 7.4.1 Circuito de lectura del sensor de temperatura DHT22 El sensor de temperatura DHT22 adaptado para Arduino, mide temperaturas de entre -40ºC y 80ºC con una precisión de +-0.5ºC y consta de 3 pines: Pin 1: Alimentación Pin 2: Transferencia de datos Pin 3: Conexión a tierra La información es transmitida por el Pin 2 de Datos del DHT22 como indica el Datasheet (En sparkfun.com, s.f.) y se lee a través de un Pin Digital de entrada de Arduino. Para su lectura se ha realizado el montaje de la figura 7.4, diagrama generado con circuito.io (En circuito.io, s.f.): 113 7. CONTROL PI EN BLOCKCHAIN Figura 7.4 Diagrama y resultado para lectura sensor de temperatura. 7.4.2 Montaje del circuito de control de los ventiladores Se han utilizado dos ventiladores de 5V y 0.2A. Debido a que el Arduino ESP32 funciona a 3.3V se monta un circuito para alimentar los ventiladores y otro circuito para controlarlos aplicando una señal PWM sobre un Mosfet que actúa como interruptor y que permite controlar por tanto la alimentación de los ventiladores, como se observa en la figura 7.5. Se puede comprobar el resultado del montaje final en la figura 7.6. 114 7.4 Diseño y montaje !"✐♥❣ "❡ ✉❧! ❂❝♦♥!"❛❝!✳❙❡♥❞❚"❛♥ ❛❝!✐♦♥✭♥♦♥❝❡❱❛❧✱ ❣❛ 4"✐❝❡❱❛❧✱ ❣❛ ▲✐♠✐!❱❛❧✱ ✫!♦❙!"✱ ✫✈❛❧✉❡❙!"✱ ✫♣✮❀ ✴✴❆❝#✉❛❧✐③❛ ❡❧ ◆♦♥❝❡ ♣❛.❛ /✉❡ ❡❧ 0✐❣✉✐❡♥#❡ ♣.♦❝❡0♦ ❡0♣❡.❡ ♥♦♥❝❡❱❛❧❂♥♦♥❝❡❱❛❧✰✶❀ "❡!✉"♥ ♥♦♥❝❡❱❛❧❀ ⑥ 3. getControlSignal: Función que lee la señal de control calculada por el Smart Contract. Primero espera a que se haya ejecutado/validado la última transacción pendiente en el Smart Contract, una vez comprobado que el Nonce es el último, pide el valor de la señal de control llamando a la función getControlSignal() del Smart Contract. ✐♥! ❣❡!❈♦♥!"♦❧❙✐❣♥❛❧✭✉✐♥!✸✷❴! ●❡♥❡"❛❧◆♦♥❝❡❱❛❧✮ ④ ✐♥! !❂✵❀ ✉✐♥!✸✷❴! ♥♦♥❝❡❱❛❧ ❂✭✉✐♥!✸✷❴!✮✇❡❜✸✳❊!❤●❡!❚"❛♥ ❛❝!✐♦♥❈♦✉♥!✭✫❛❞❞"❡ ✮❀ ✴✯❈♦♠♣.✉❡❜❛ /✉❡ 0❡ ❤❛ ❡❥❡❝✉#❛❞♦ ❧❛ #.❛♥0❛❝❝✐9♥ ❛♥#❡.✐♦. ❡♥ ❧❛ ❇❧♦❝❦❝❤❛✐♥ ♣❛.❛ ❛0❡❣✉.❛.0❡ /✉❡ ❧❡❡ ❧❛ <❧#✐♠❛ 0❡=❛❧ ❞❡ ❝♦♥#.♦❧ ❝❛❧❝✉❧❛❞❛✯✴ ✇❤✐❧❡ ✭♥♦♥❝❡❱❛❧✦❂ ●❡♥❡"❛❧◆♦♥❝❡❱❛❧✫✫!❁✶✵✮ ④ ✴✴ ❙❡.✐❛❧✳♣.✐♥#❧♥✭✧♥♦♥❝❡❱❛❧ ❡0 ❞✐0#✐♥#♦ ❛ ●❡♥❡.❛❧◆♦♥❝❡❱❛❧✧✮❀ ✴✴ ❙❡.✐❛❧✳♣.✐♥#❧♥✭♥♦♥❝❡❱❛❧✮❀ ✴✴ ❙❡.✐❛❧✳♣.✐♥#❧♥✭●❡♥❡.❛❧◆♦♥❝❡❱❛❧✮❀ ❞❡❧❛②✭✶✵✵✵✮❀ ♥♦♥❝❡❱❛❧ ❂✭✉✐♥!✸✷❴!✮✇❡❜✸✳❊!❤●❡!❚"❛♥ ❛❝!✐♦♥❈♦✉♥!✭✫❛❞❞"❡ ✮❀ !✰✰❀ ⑥ ✴✴❈♦♠✐❡♥③❛ ❧❛ ♣❡#✐❝✐9♥ ❞❡ ♣❛.F♠❡#.♦ ❝♦♥!"❛❝!✳♦♣!✐♦♥ ✳❣❛ ❂ ✺✵✵✵✵✵✵❀ !"✐♥❣ ❢✉♥❝ ❂✧❣❡!❈♦♥!"♦❧❙✐❣♥❛❧✭✮✧❀ !"✐♥❣ ♣❛"❛♠ ❂❝♦♥!"❛❝!✳❙❡!✉♣❈♦♥!"❛❝!❉❛!❛✭✫❢✉♥❝✮❀ !"✐♥❣ "❡ ✉❧! ❂❝♦♥!"❛❝!✳❈❛❧❧✭✫♣❛"❛♠✮❀ ✴✯❈♦♥✈✐❡.#❡ ❧❛ .❡0♣✉❡0#❛ ❞❡ ❧❛ ❇❧♦❝❦❝❤❛✐♥ ❛❧ ♣❛.F♠❡#.♦ ❞❡0❡❛❞♦ ▲❛ .❡0♣✉❡0#❛ ✈✐❡♥❡ ❡♥ ❢♦.♠❛#♦ ❏0♦♥ ②❛ /✉❡ ✉0❛ ❏❙❖◆✲❘O❈ O.♦#♦❝♦❧✯✴ ✐♥! "❡ ✉❧!■♥!❂❞❡ ❡"✐❛❧❏ ♦♥✭"❡ ✉❧!✮❀ "❡!✉"♥ "❡ ✉❧!■♥!❀ ⑥ 4. getReference: Similar a la función getControlSignal, esta función pide al Smart Contract el último valor de referencia/setpoint que hay recibido. ✐♥! ❣❡!❘❡❢❡"❡♥❝❡✭✮ ④ ✴✴❈♦♠✐❡♥③❛ ❧❛ ♣❡#✐❝✐9♥ ❞❡ ♣❛.F♠❡#.♦ ❝♦♥!"❛❝!✳♦♣!✐♦♥ ✳❣❛ ❂ ✺✵✵✵✵✵✵❀ !"✐♥❣ ❢✉♥❝ ❂✧❣❡!❘❡❢❡"❡♥❝❡✭✮✧❀ !"✐♥❣ ♣❛"❛♠ ❂❝♦♥!"❛❝!✳❙❡!✉♣❈♦♥!"❛❝!❉❛!❛✭✫❢✉♥❝✮❀ !"✐♥❣ "❡ ✉❧! ❂❝♦♥!"❛❝!✳❈❛❧❧✭✫♣❛"❛♠✮❀ 121 7. CONTROL PI EN BLOCKCHAIN ✐♥" #❡%✉❧"■♥"❂❞❡%❡#✐❛❧❏%♦♥✭#❡%✉❧"✮❀ #❡"✉#♥ #❡%✉❧"■♥"❀ ⑥ 5. deserialJson: Función que extrae los valores de la respuesta JSON que se recibe del Smart Contract al invocar sus funciones. ✐♥" ❞❡%❡#✐❛❧❏%♦♥✭%"#✐♥❣ #❡%✉❧"✮④ ❝♦♥%" %✐③❡❴" ❝❛♣❛❝✐"② ❂❏❙❖◆❴❖❇❏❊❈❚❴❙■❩❊✭✻✮✰❏❙❖◆❴❆❘❘❆❨❴❙■❩❊✭✹✮✰ ✶✷✵❀ ❉②♥❛♠✐❝❏%♦♥❉♦❝✉♠❡♥" ❞♦❝✭❝❛♣❛❝✐"②✮❀ ✴✴ ❉❡#❡$✐❛❧✐③❡ )❤❡ ❏❙❖◆ ❞♦❝✉♠❡♥) ❉❡%❡#✐❛❧✐③❛"✐♦♥❊##♦# ❡##♦# ❂❞❡%❡#✐❛❧✐③❡❏%♦♥✭❞♦❝✱ #❡%✉❧"✮❀ ✴✴ ❚❡#) ✐❢ ♣❛$#✐♥❣ #✉❝❝❡❡❞#✳ ✐❢ ✭❡##♦#✮ ④ ❙❡#✐❛❧✳♣#✐♥"✭❋✭✧❞❡%❡#✐❛❧✐③❡❏%♦♥✭✮ ❢❛✐❧❡❞✿ ✧✮✮❀ ❙❡#✐❛❧✳♣#✐♥"❧♥✭❡##♦#✳❝❴%"#✭✮✮❀ ⑥ ✴✴❊①)$❛❡ ❞❡ ❧❛ $❡#♣✉❡#)❛ ❏❙❖◆ ❡❧ ❝♦♥)❡♥✐❞♦ ❞❡❧ ❝❛♠♣♦ ✧$❡#✉❧)✧ ❝♦♥%" ❝❤❛#✯ ❡"✉❧%❥"♦♥ ❂❞♦❝❬✧ ❡"✉❧%✧❪❀ ✐♥% ❡"✉❧%❥"♦♥✐♥% ❂"% %♦❧✭ ❡"✉❧%❥"♦♥✱ ✵✱✶✻✮❀ ❡%✉ ♥ ❡"✉❧%❥"♦♥✐♥%❀ ⑥ 7.4.4 Desarrollo del código del Smart Contract Se ha desarrollado un Smart Contract muy sencillo para la Blockchain de Ethereum usando el lenguaje Solidity, a continuación se muestra el código para analizarlo con más profundidad: ♣ ❛❣♠❛ "♦❧✐❞✐%② ❫✵✳✺✳✵❀ ❝♦♥% ❛❝% @■❈♦♥% ♦❧❧❡ ④ ✴✴❉❡❢✐♥✐❝✐'♥ ❞❡ ✈❛+✐❛❜❧❡. ✐♥% ❘❡❢❡ ❡♥❝❡❀ ✐♥% ❑♣❀ ✐♥% ❑✐❀ ✐♥% ■♥♣✉%❙✐❣♥❛❧❀ ✐♥% ❈♦♥% ♦❧❙✐❣♥❛❧❀ ✐♥% ❈♦♥% ♦❧❙✐❣♥❛❧❆❞❛♣❀ ✐♥% ❡ ♦ ❀ ✐♥% ❡ ♦ ❴✶❀ ✴✴❉❡❢✐♥✐❝✐'♥ ❞❡ ❡✈❡♥/♦. ✭♣❛+❛ ✉.❛+❧♦. ❡♥ ❧❛ ✐♥/❡+❢❛③ ✇❡❜✮ ❡✈❡♥% ❘❡❢❊✈❡♥%✭ ✐♥% ❘❡❢❡ ❡♥❝❡ ✮❀ ❡✈❡♥% ❑♣❊✈❡♥%✭ 122 7.4 Diseño y montaje ✐♥" ❑♣ ✮❀ ❡✈❡♥" ❑✐❊✈❡♥"✭ ✐♥" ❑✐ ✮❀ ❡✈❡♥" ❈♦♥"-♦❧❙✐❣♥❛❧❊✈❡♥"✭ ✐♥" ❳✱ ✐♥" ❈♦♥"-♦❧❙✐❣♥❛❧❆❞❛♣✱ ✐♥" ❡--♦-✱ ✐♥" ❡--♦-❴✶ ✮❀ ❡✈❡♥" 8❡"❊--♦-❴✶❊✈❡♥"✭ ✐♥" ❡--♦-❴✶ ✮❀ ✴✴❉❡❢✐♥✐❝✐'♥ ❞❡ ❝♦♥*+,✉❝+♦, ❝♦♥ ❝♦♥❢✐❣✉,❛❝✐'♥ ✐♥✐❝✐❛❧ ❝♦♥8"-✉❝"♦-✭✮ ♣✉❜❧✐❝ ④ ❘❡❢❡-❡♥❝❡ ❂ ✷✵✵✵❀ ❑♣ ❂ ✸❀ ❑✐ ❂ ✵❀ ■♥♣✉"❙✐❣♥❛❧❂✵❀ ❈♦♥"-♦❧❙✐❣♥❛❧❂✵❀ ❈♦♥"-♦❧❙✐❣♥❛❧❆❞❛♣❂✵❀ ❡--♦-❂ ✵❀ ❡--♦-❴✶❂✵❀ ⑥ ✴✴❋✉♥❝✐'♥ 2✉❡ ♠♦❞✐❢✐❝❛ ❧❛ ❘❡❢❡,❡♥❝✐❛ ❢✉♥❝"✐♦♥ 8❡"❘❡❢❡-❡♥❝❡✭✐♥" ❘✮♣✉❜❧✐❝ -❡"✉-♥8✭✐♥"✮ ④ ❘❡❢❡-❡♥❝❡❂❘❀ ❡♠✐" ❘❡❢❊✈❡♥"✭❘✮❀ ⑥ ✴✴❋✉♥❝✐'♥ 2✉❡ ♠♦❞✐❢✐❝❛ ❡❧ ♣❛,6♠❡+,♦ ❑♣ ❢✉♥❝"✐♦♥ 8❡"F❛-❛♠❡"❡-❑♣✭✐♥" ❴❑♣✮♣✉❜❧✐❝ -❡"✉-♥8✭✐♥"✮ ④ ❑♣❂❴❑♣❀ ❡♠✐" ❑♣❊✈❡♥"✭❑♣✮❀ ⑥ ✴✴❋✉♥❝✐'♥ 2✉❡ ♠♦❞✐❢✐❝❛ ❡❧ ♣❛,6♠❡+,♦ ❑✐ ❢✉♥❝"✐♦♥ 8❡"F❛-❛♠❡"❡-❑✐✭✐♥" ❴❑✐✮♣✉❜❧✐❝ -❡"✉-♥8✭✐♥"✮ ④ ❑✐❂❴❑✐❀ ❡♠✐" ❑✐❊✈❡♥"✭❑✐✮❀ ⑥ ✴✴❋✉♥❝✐'♥ 2✉❡ ♠♦❞✐❢✐❝❛ ❡❧ ❡,,♦, ❛❝✉♠✉❧❛❞♦ ❢✉♥❝"✐♦♥ 8❡"❊--♦-❴✶✭✐♥" ❴❡--♦-❴✶✮♣✉❜❧✐❝ -❡"✉-♥8✭✐♥"✮ ④ ❡--♦-❴✶❂❴❡--♦-❴✶❀ ❡♠✐" 8❡"❊--♦-❴✶❊✈❡♥"✭❡--♦-❴✶✮❀ ⑥ ✴✯❋✉♥❝✐'♥ 2✉❡ ❡❥❡❝✉+❛ ❡❧ ❝6❧❝✉❧♦ ❞❡ ❧❛ *❡:❛❧ ❞❡ ❝♦♥+,♦❧ ❛❧ ,❡❝✐❜✐, ✉♥ ♥✉❡✈♦ ✈❛❧♦, ❞❡ +❡♠♣❡,❛+✉,❛✯✴ 123 7. CONTROL PI EN BLOCKCHAIN ❢✉♥❝$✐♦♥ '❡$❈♦♥$*♦❧❙✐❣♥❛❧❈❛❧❝✭✐♥$ ❳✮♣✉❜❧✐❝ *❡$✉*♥'✭✐♥$✮ ④ ■♥♣✉$❙✐❣♥❛❧❂❳❀ ✴✴❈❛❧❝✉❧❛ ❡❧ ❡''♦' ❡**♦*❂❘❡❢❡*❡♥❝❡✲■♥♣✉$❙✐❣♥❛❧❀ ✴✴❈❛❧❝✉❧❛ ❧❛ )❡*❛❧ ❞❡ ❝♦♥-'♦❧ ❈♦♥$*♦❧❙✐❣♥❛❧❂❑♣✯❡**♦*✰❑✐✯❡**♦*❴✶❀ ✴✴❆❝-✉❛❧✐③❛ ❡❧ ❡''♦' ❛❝✉♠✉❧❛❞♦ ❡**♦*❴✶❂❡**♦*❴✶✰❡**♦*❀ ✴✯❈♦♠♣'✉❡❜❛ 5✉❡ ❧❛ )❡*❛❧ ❞❡ ❝♦♥-'♦❧ ❡)-6 ❞❡♥-'♦ ❞❡ ❧♦) '❛♥❣♦) ❡)-❛❜❧❡❝✐❞♦) ❡5✉✐✈❛❧❡♥-❡ ❛ ❧♦) ❧9♠✐-❡) ❞❡ )❛-✉'❛❝✐:♥✯✴ ✐❢ ✭❈♦♥$*♦❧❙✐❣♥❛❧❃✷✺✺✵✮ ④ ❈♦♥$*♦❧❙✐❣♥❛❧❂✷✺✺✵❀ ⑥ ✐❢ ✭❈♦♥$*♦❧❙✐❣♥❛❧❁✲✷✺✺✵✮ ④ ❈♦♥$*♦❧❙✐❣♥❛❧❂✲✷✺✺✵❀ ⑥ ✴✴❆❞❛♣-❛❝✐:♥ ❞❡ ❧♦) '❛♥❣♦) ❞❡ )❛❧✐❞❛ ❬✲✷✺✺✵✱✷✺✺✵❪ ❛ ❬✵✱✷✺✺✵✵❪ ❈♦♥$*♦❧❙✐❣♥❛❧❆❞❛♣❂✺✯✭❈♦♥$*♦❧❙✐❣♥❛❧✰✷✺✺✵✮❀ ❡♠✐$ ❈♦♥$*♦❧❙✐❣♥❛❧❊✈❡♥$✭❳✱❈♦♥$*♦❧❙✐❣♥❛❧❆❞❛♣✱❡**♦*✱❡**♦*❴✶✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡ ❧❛ )❡*❛❧ ❞❡ ❝♦♥-'♦❧ ❢✉♥❝$✐♦♥ ❣❡$❈♦♥$*♦❧❙✐❣♥❛❧✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭❈♦♥$*♦❧❙✐❣♥❛❧❆❞❛♣✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡ ❧❛ ❑♣ ❢✉♥❝$✐♦♥ ❣❡$❑♣✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭❑♣✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡ ❧❛ ❑✐ ❢✉♥❝$✐♦♥ ❣❡$❑✐✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭❑✐✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡ ❧❛ ❘❡❢❡'❡♥❝✐❛ ❢✉♥❝$✐♦♥ ❣❡$❘❡❢❡*❡♥❝❡✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭❘❡❢❡*❡♥❝❡✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡ ❧❛ )❡*❛❧ ❞❡ ❡♥-'❛❞❛ ❢✉♥❝$✐♦♥ ❣❡$■♥♣✉$❙✐❣♥❛❧✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭■♥♣✉$❙✐❣♥❛❧✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡❧ ❡''♦' ❢✉♥❝$✐♦♥ ❣❡$❊**♦*✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭❡**♦*✮❀ ⑥ ✴✴❋✉♥❝✐:♥ 5✉❡ ❞❡✈✉❡❧✈❡ ❡❧ ✈❛❧♦' ❞❡❧ ❡''♦' ❝❛❧❝✉❧❛❞♦ ❢✉♥❝$✐♦♥ ❣❡$❊**♦*✶✭✮ ♣✉❜❧✐❝ ✈✐❡✇ *❡$✉*♥' ✭✐♥$✮ ④ *❡$✉*♥ ✭❡**♦*❴✶✮❀ 124 7.4 Diseño y montaje ⑥ ⑥ En el Smart Contract se diferencian 3 tipos de estructuras: 1. Funciones “Set”: Son funciones que cambian el estado de una variable, para invocarlas es necesario enviar una transacción firmada, y utiliza “Gas” que es una medida del consumo necesario para ejecutar esa función por el nodo que mine esa transacción, por tanto es necesario pagar con Ethereum para cambiar el estado de una variable en la Blockchain pública de Ethereum. 2. Funciones “Get”: Son funciones que permiten leer el Smart Contract, no incurren en ningún coste. 3. Funciones “Event”: Son funciones que monitorizan las variables y generan un evento cuando cambia alguna variable monitorizada, con estas funciones se evita el realizar continuas peticiones a la Blockchain y en este proyecto se usarán para capturar con la interfaz web los cambios de las variables. 7.4.5 Desarrollo de una interfaz web Para poder interactuar con el Smart Contract de una forma más ágil que usando las funciones de Arduino, se ha desarrollado una interfaz web para modificar los principales parámetros del Controlador PI y monitorizar todas las variables de interés involucradas. Se ha hecho uso de la librería Web3.js y la Extensión web Metamask que permite interactuar con los Smart Contracts de la Blockchain de Ethereum, este código es más extenso que los anteriores, se van a repasar los puntos más importantes relacionados con Blockchain y no con creación de interfaces web: ✴✯❙❡ ✐♥❞✐❝❛ ❡❧ ♥♦❞♦ ❛❧ +✉❡ -❡ ❝♦♥❡❝.❛✱ ❡♥ ♥✉❡-.0♦ ❝❛-♦ ❡-.❛ ✐♥❢♦0♠❛❝✐3♥ ❧❛ ♣0♦✈❡❡ ▼❡.❛♠❛-❦ +✉❡ ❡- ❡❧ ❝✉00❡♥. 80♦✈✐❞❡❡0✯✴ ✇❡❜✸ ❂♥❡✇ ❲❡❜✸✭✇❡❜✸✳❝✉,,❡♥-.,♦✈✐❞❡,✮❀ ✴✯❙❡ ❝0❡❛ ✉♥❛ ✈❛0✐❛❜❧❡ ❞❡ .✐♣♦ ✧❝♦♥.0❛❝.✧ ❝♦♥ ❧❛ ✐♥❢♦0♠❛❝✐3♥ ❆❇■✱ ❡-.❛ ✐♥❢♦0♠❛❝✐3♥ ♣❡0♠✐.❡ ❛ ❧❛ ❧✐❜0❡0>❛ ❲❡❜✸ ❝♦♥♦❝❡0 +✉A ❢✉♥❝✐♦♥❡- ❡-.B♥ ✐♠♣❧❡♠❡♥.❛❞❛- ❡♥ ❡❧ ❙♠❛0. ❈♦♥.0❛❝.✯✴ ✈❛, .■❈♦♥-,♦❧❧❡, ❂✇❡❜✸✳❡-❤✳❝♦♥-,❛❝-✭✧❨❖❯❘ ❆❇■✧✮❀ ✴✴❙❡ ✐♥❞✐❝❛ ❧❛ ❞✐0❡❝❝✐3♥ ❞❡❧ ❙♠❛0. ❈♦♥.0❛❝. ❝♦♥ ❡❧ +✉❡ ✐♥.❡0❛❝.✉❛0 ✈❛, .■❂.■❈♦♥-,♦❧❧❡,✳❛-✭ ✬ ✵①✾✶✻❊✺✹✽✺✸❛✻❈❆❡✾✵❜✾✶✽❛❞❊✺✹✾✻❇✻✸❉❢✼❢❋✵❞✺❞✺ ✬ ✮❀ ✴✯❋✉♥❝✐♦♥❡- ✧●❡.✧ +✉❡ ❧❡❡♥ ❡❧ ❡-.❛❞♦ ❞❡❧ ❙♠❛0. ❈♦♥.0❛❝. ❛❧ 0❡❝❛0❣❛0 ❧❛ ✐♥.❡0❢❛③ ✇❡❜✯✴ .■✳❣❡-❘❡❢❡,❡♥❝❡✭❢✉♥❝-✐♦♥✭❡,,♦,✱ ,❡P✉❧-✮④ ✐❢✭✦❡,,♦,✮ ④✩✭✧★❘❡❢❡,❡♥❝❡✲,❡❛❞✧✮✳❤-♠❧✭ ✬ ❘❡❢❡,❡♥❝❡✿ ✬ ✰,❡P✉❧-✴✶✵✵✮❀ ❝♦♥P♦❧❡✳❧♦❣✭,❡P✉❧-✮❀ 125 7. CONTROL PI EN BLOCKCHAIN ⑥ ❡❧#❡ ❝♦♥#♦❧❡✳❡((♦(✭❡((♦(✮❀ ⑥✮❀ ,■✳❣❡/❑♣✭❢✉♥❝/✐♦♥✭❡((♦(✱ (❡#✉❧/✮④ ✐❢✭✦❡((♦(✮ ④✩✭✧★❑♣✲(❡❛❞✧✮✳❤/♠❧✭ ✬ ❑♣✿ ✬ ✰(❡#✉❧/✮❀ ❝♦♥#♦❧❡✳❧♦❣✭(❡#✉❧/✮❀ ⑥ ❡❧#❡❝♦♥#♦❧❡✳❡((♦(✭❡((♦(✮❀ ⑥✮❀ ,■✳❣❡/❑✐✭❢✉♥❝/✐♦♥✭❡((♦(✱ (❡#✉❧/✮④ ✐❢✭✦❡((♦(✮ ④✩✭✧★❑✐✲(❡❛❞✧✮✳❤/♠❧✭ ✬ ❑✐✿ ✬ ✰(❡#✉❧/✮❀ ❝♦♥#♦❧❡✳❧♦❣✭(❡#✉❧/✮❀ ⑥ ❡❧#❡❝♦♥#♦❧❡✳❡((♦(✭❡((♦(✮❀ ⑥✮❀ ,■✳❣❡/■♥♣✉/❙✐❣♥❛❧✭❢✉♥❝/✐♦♥✭❡((♦(✱ (❡#✉❧/✮④ ✐❢✭✦❡((♦(✮ ④✩✭✧★■♥♣✉/❙✐❣♥❛❧✲(❡❛❞✧✮✳❤/♠❧✭ ✬ ❚❡♠♣❡(❛/✉(❡✿ ✬ ✰(❡#✉❧/✴✶✵✵✮❀ ❝♦♥#♦❧❡✳❧♦❣✭(❡#✉❧/✮❀ ⑥ ❡❧#❡❝♦♥#♦❧❡✳❡((♦(✭❡((♦(✮❀ ⑥✮❀ ,■✳❣❡/❈♦♥/(♦❧❙✐❣♥❛❧✭❢✉♥❝/✐♦♥✭❡((♦(✱ (❡#✉❧/✮④ ✐❢✭✦❡((♦(✮ ④✩✭✧★❈♦♥/(♦❧❙✐❣♥❛❧✲(❡❛❞✧✮✳❤/♠❧✭ ✬ ✉❂❈♦♥/(♦❧❙✐❣♥❛❧✿ ✬ ✰(❡#✉❧/✴✶✵✵✮❀ ❝♦♥#♦❧❡✳❧♦❣✭(❡#✉❧/✮❀ ⑥ ❡❧#❡❝♦♥#♦❧❡✳❡((♦(✭❡((♦(✮❀ ⑥✮❀ ,■✳❣❡/❊((♦(✭❢✉♥❝/✐♦♥✭❡((♦(✱ (❡#✉❧/✮④ ✐❢✭✦❡((♦(✮ ④ 126 7.4 Diseño y montaje ✩✭✧★❊%%♦%✲%❡❛❞✧✮✳❤.♠❧✭ ✬ ❊%%♦%❂❘❡❢❡%❡♥❝❡✲❚❡♠♣❡%❛.✉%❡✿ ✬ ✰%❡;✉❧.✮❀ ❝♦♥;♦❧❡✳❧♦❣✭%❡;✉❧.✮❀ ⑥ ❡❧;❡❝♦♥;♦❧❡✳❡%%♦%✭❡%%♦%✮❀ ⑥✮❀ ?■✳❣❡.❊%%♦%✶✭❢✉♥❝.✐♦♥✭❡%%♦%✱ %❡;✉❧.✮④ ✐❢✭✦❡%%♦%✮ ④ ✩✭✧★❊%%♦%✶✲%❡❛❞✧✮✳❤.♠❧✭ ✬ ❊%%♦%❆❝✉♠✉❧❛❞♦❂❡%%♦%❴✶✰❡%%♦%✿ ✬ ✰%❡;✉❧.✮❀ ❝♦♥;♦❧❡✳❧♦❣✭%❡;✉❧.✮❀ ⑥ ❡❧;❡ ❝♦♥;♦❧❡✳❡%%♦%✭❡%%♦%✮❀ ⑥✮❀ ✴✯❊✈❡♥&♦( )✉❡ ♣❡,♠✐&❡♥ ♠♦♥✐&♦,✐③❛, ❡❧ ❙♠❛,& ❈♦♥&,❛❝& (✐♥ ,❡❝❛,❣❛, ❝♦♥&✐♥✉❛♠❡♥&❡ ❧❛ ♣6❣✐♥❛ ♦ (✐♥ ❡❥❡❝✉&❛, ❝♦♥&✐♥✉❛♠❡♥&❡ ❢✉♥❝✐♦♥❡( ●❡&✯✴ ✈❛% ❘❡❢❊✈❡♥.❂?■✳❘❡❢❊✈❡♥.✭④⑥✱ ✬ ❧❛.❡;. ✬ ✮❀ ✈❛% ❑♣❊✈❡♥.❂?■✳❑♣❊✈❡♥.✭④⑥✱ ✬ ❧❛.❡;. ✬ ✮❀ ✈❛% ❑✐❊✈❡♥.❂?■✳❑✐❊✈❡♥.✭④⑥✱ ✬ ❧❛.❡;. ✬ ✮❀ ✈❛% ❈♦♥.%♦❧❙✐❣♥❛❧❊✈❡♥.❂?■✳❈♦♥.%♦❧❙✐❣♥❛❧❊✈❡♥.✭④⑥✱ ✬ ❧❛.❡;. ✬ ✮❀ ✈❛% ;❡.❊%%♦%❴✶❊✈❡♥.❂?■✳;❡.❊%%♦%❴✶❊✈❡♥.✭④⑥✱ ✬ ❧❛.❡;. ✬ ✮❀ ❘❡❢❊✈❡♥.✳✇❛.❝❤✭❢✉♥❝.✐♦♥✭❡%%✱ %❡;✉❧.✮④ ✐❢ ✭✦❡%%✮ ④ ✐❢ ✭%❡;✉❧.✳❜❧♦❝❦❍❛;❤ ✦❂ ✩✭✧★✐♥;.%❛♥;✧✮✳❤.♠❧✭✮✮ ✩✭✧★❧♦❛❞❡%✧✮✳❤✐❞❡✭✮❀ ✩✭✧★✐♥;❚%❛♥;✧✮✳❤.♠❧✭ ✬ ❇❧♦❝❦ ❤❛;❤✿ ✬ ✰%❡;✉❧.✳❜❧♦❝❦❍❛;❤✮❀ ✩✭✧★❘❡❢❡%❡♥❝❡✲%❡❛❞✧✮✳❤.♠❧✭ ✬ ❘❡❢❡%❡♥❝❡ ❜② ❡✈❡♥.✿ ✬ ✰%❡;✉❧.✳❛%❣;✳❘❡❢❡%❡♥❝❡✴✶✵✵✮❀ ⑥ ❡❧;❡ ④✩✭✧★❧♦❛❞❡%✧✮✳❤✐❞❡✭✮❀ ❝♦♥;♦❧❡✳❧♦❣✭❡%%✮❀ ⑥ ⑥✮❀ ❑♣❊✈❡♥.✳✇❛.❝❤✭❢✉♥❝.✐♦♥✭❡%%✱ %❡;✉❧.✮④ ✐❢ ✭✦❡%%✮ ④ ✐❢ ✭%❡;✉❧.✳❜❧♦❝❦❍❛;❤ ✦❂ ✩✭✧★✐♥;.%❛♥;✧✮✳❤.♠❧✭✮✮ ✩✭✧★❧♦❛❞❡%✧✮✳❤✐❞❡✭✮❀ ✩✭✧★✐♥;❚%❛♥;✧✮✳❤.♠❧✭ ✬ ❇❧♦❝❦ ❤❛;❤✿ ✬ ✰%❡;✉❧.✳❜❧♦❝❦❍❛;❤✮❀ ✩✭✧★❑♣✲%❡❛❞✧✮✳❤.♠❧✭ ✬ ❑♣ ❜② ❡✈❡♥.✿ ✬ ✰%❡;✉❧.✳❛%❣;✳❑♣✮❀ ⑥ 127 7. CONTROL PI EN BLOCKCHAIN ❡❧"❡ ④✩✭✧★❧♦❛❞❡+✧✮✳❤✐❞❡✭✮❀ ❝♦♥"♦❧❡✳❧♦❣✭❡++✮❀ ⑥ ⑥✮❀ ❑✐❊✈❡♥8✳✇❛8❝❤✭❢✉♥❝8✐♦♥✭❡++✱ +❡"✉❧8✮④ ✐❢ ✭✦❡++✮ ④ ✐❢ ✭+❡"✉❧8✳❜❧♦❝❦❍❛"❤ ✦❂ ✩✭✧★✐♥"8+❛♥"✧✮✳❤8♠❧✭✮✮ ✩✭✧★❧♦❛❞❡+✧✮✳❤✐❞❡✭✮❀ ✩✭✧★✐♥"❚+❛♥"✧✮✳❤8♠❧✭ ✬ ❇❧♦❝❦ ❤❛"❤✿ ✬ ✰+❡"✉❧8✳❜❧♦❝❦❍❛"❤✮❀ ✩✭✧★❑✐✲+❡❛❞✧✮✳❤8♠❧✭ ✬ ❑✐ ❜② ❡✈❡♥8✿ ✬ ✰+❡"✉❧8✳❛+❣"✳❑✐✮❀ ⑥ ❡❧"❡ ④✩✭✧★❧♦❛❞❡+✧✮✳❤✐❞❡✭✮❀ ❝♦♥"♦❧❡✳❧♦❣✭❡++✮❀ ⑥ ⑥✮❀ ❈♦♥8+♦❧❙✐❣♥❛❧❊✈❡♥8✳✇❛8❝❤✭❢✉♥❝8✐♦♥✭❡++✱ +❡"✉❧8✮④ ✐❢ ✭✦❡++✮ ④ ✐❢ ✭+❡"✉❧8✳❜❧♦❝❦❍❛"❤ ✦❂ ✩✭✧★✐♥"8+❛♥"✧✮✳❤8♠❧✭✮✮ ✩✭✧★❧♦❛❞❡+✧✮✳❤✐❞❡✭✮❀ ✩✭✧★✐♥"❚+❛♥"✧✮✳❤8♠❧✭ ✬ ❇❧♦❝❦ ❤❛"❤✿ ✬ ✰+❡"✉❧8✳❜❧♦❝❦❍❛"❤✮❀ ✩✭✧★■♥♣✉8❙✐❣♥❛❧✲+❡❛❞✧✮✳❤8♠❧✭ ✬ ❚❡♠♣❡+❛8✉+❡ ❜② ❡✈❡♥8✿ ✬ ✰+❡"✉❧8✳❛+❣"✳❳✴✶✵✵✮❀ ✩✭✧★❈♦♥8+♦❧❙✐❣♥❛❧✲+❡❛❞✧✮✳❤8♠❧✭ ✬ ✉❂❈♦♥8+♦❧❙✐❣♥❛❧ ❜② ❡✈❡♥8✿ ✬ ✰+❡"✉❧8✳❛+❣"✳❈♦♥8+♦❧❙✐❣♥❛❧❆❞❛♣✴✶✵✵✮❀ ✩✭✧★❊++♦+✲+❡❛❞✧✮✳❤8♠❧✭ ✬ ❊++♦+❂❘❡❢❡+❡♥❝❡✲❚❡♠♣❡+❛8✉+❡ ❜② ❡✈❡♥8✿ ✬ ✰+❡"✉❧8✳❛+❣"✳❡++♦+✮❀ ✩✭✧★❊++♦+✶✲+❡❛❞✧✮✳❤8♠❧✭ ✬ ❊++♦+❆❝✉♠✉❧❛❞♦❂❡++♦+❴✶✰❡++♦+ ❜② ❡✈❡♥8✿ ✬ ✰+❡"✉❧8✳❛+❣"✳❡++♦+❴✶✮❀ ⑥ ❡❧"❡ ④✩✭✧★❧♦❛❞❡+✧✮✳❤✐❞❡✭✮❀ ❝♦♥"♦❧❡✳❧♦❣✭❡++✮❀ ⑥ ⑥✮❀ "❡8❊++♦+❴✶❊✈❡♥8✳✇❛8❝❤✭❢✉♥❝8✐♦♥✭❡++✱ +❡"✉❧8✮④ ✐❢ ✭✦❡++✮ ④ ✐❢ ✭+❡"✉❧8✳❜❧♦❝❦❍❛"❤ ✦❂ ✩✭✧★✐♥"8+❛♥"✧✮✳❤8♠❧✭✮✮ ✩✭✧★❧♦❛❞❡+✧✮✳❤✐❞❡✭✮❀ ✩✭✧★✐♥"❚+❛♥"✧✮✳❤8♠❧✭ ✬ ❇❧♦❝❦ ❤❛"❤✿ ✬ ✰+❡"✉❧8✳❜❧♦❝❦❍❛"❤✮❀ ✩✭✧★❊++♦+✶✲+❡❛❞✧✮✳❤8♠❧✭ ✬ ❊++♦+❆❝✉♠✉❧❛❞♦❂❡++♦+❴✶✰❡++♦+ ❜② ❡✈❡♥8✿ 128 7.4 Diseño y montaje ✬ ✰!❡#✉❧&✳❛!❣#✳❡!!♦!❴✶✮❀ ⑥ ❡❧#❡ ④✩✭✧★❧♦❛❞❡!✧✮✳❤✐❞❡✭✮❀ ❝♦♥#♦❧❡✳❧♦❣✭❡!!✮❀ ⑥ ⑥✮❀ ✴✯❇♦$♦♥❡' ✇❡❜ *✉❡ ♣❡-♠✐$❡♥ ❡❥❡❝✉$❛- ❢✉♥❝✐♦♥❡' ❙❡$ ❡♥ ❡❧ ❙♠❛-$ ❈♦♥$-❛❝$ ❛❧ ♣✉❧'❛- ❡❧ ❜♦$7♥ '❡ ❧❧❛♠❛ ❛ ▼❡$❛♠❛'❦ ♣❛-❛ *✉❡ ❢✐-♠❡ ❧❛ $-❛♥'❛❝❝✐7♥ ② ❡♥✈<❡ ❡❧ ♣❛-=♠❡$-♦ ❝♦--❡'♣♦♥❞✐❡♥$❡ ❛ ❧❛ ❢✉♥❝✐7♥ ✐♥✈♦❝❛❞❛✯✴ ✩✭✧★❜✉&&♦♥❘❡❢✧✮✳❝❧✐❝❦✭❢✉♥❝&✐♦♥✭✮ ④ ✩✭✧★❧♦❛❞❡!✧✮✳#❤♦✇✭✮❀ ?■✳#❡&❘❡❢❡!❡♥❝❡✭✩✭✧★❘❡❢❡!❡♥❝❡✧✮✳✈❛❧✭✮✱ ✭❡!!✱ !❡#✮ ❂❃ ④ ✐❢ ✭❡!!✮ ✩✭✧★❧♦❛❞❡!✧✮✳❤✐❞❡✭✮❀ ⑥✮❀ ⑥✮❀ ✩✭✧★❜✉&&♦♥❑♣✧✮✳❝❧✐❝❦✭❢✉♥❝&✐♦♥✭✮ ④ ✩✭✧★❧♦❛❞❡!✧✮✳#❤♦✇✭✮❀ ?■✳#❡&?❛!❛♠❡&❡!❑♣✭✩✭ ✧★❑♣✧✮✳✈❛❧✭✮✱ ✭❡,,✱ ,❡-✮ ❂❃ ④ ✐❢ ✭❡,,✮ ✩✭✧★❧♦❛❞❡,✧✮✳❤✐❞❡✭✮❀ ⑥✮❀ ⑥✮❀ ✩✭✧★❜✉;;♦♥❑✐✧✮✳❝❧✐❝❦✭❢✉♥❝;✐♦♥✭✮ ④ ✩✭✧★❧♦❛❞❡,✧✮✳-❤♦✇✭✮❀ @■✳-❡;@❛,❛♠❡;❡,❑✐✭✩✭✧★❑✐✧✮✳✈❛❧✭✮✱ ✭❡,,✱ ,❡-✮ ❂❃ ④ ✐❢ ✭❡,,✮ ✩✭✧★❧♦❛❞❡,✧✮✳❤✐❞❡✭✮❀ ⑥✮❀ ⑥✮❀ ✩✭✧★❜✉;;♦♥❊,,♦,❆❝✧✮✳❝❧✐❝❦✭❢✉♥❝;✐♦♥✭✮ ④ ✩✭✧★❧♦❛❞❡,✧✮✳-❤♦✇✭✮❀ @■✳-❡;❊,,♦,❴✶✭✩✭✧★❊,,♦,❴✶✧✮✳✈❛❧✭✮✱ ✭❡,,✱ ,❡-✮ ❂❃ ④ ✐❢ ✭❡,,✮ ✩✭✧★❧♦❛❞❡,✧✮✳❤✐❞❡✭✮❀ ⑥✮❀ ⑥✮❀ En el código HTML se diferencian 4 bloques: 1. Definición de comunicación con el Smart Contract 2. Petición de las variables al Smart Contract 129 7. CONTROL PI EN BLOCKCHAIN 3. Actualización de las variables mediante monitorización de eventos en la Blockchain 4. Utilización de botones para actualizar las variables en la Blockchain, al utilizar los botones se realiza una llamadas a la extensión Metamask que permite firmar transacciones desde una interfaz web 7.5 Despliegue 7.5.1 Despliegue del código Arduino Para cargar el código desarrollado en Arduino se utiliza la interfaz Arduino IDE que permite fácilmente compilar y escribir en el Arduino ESP32 el código a través de un puerto serie virtual, simplemente usando una conexión USB, si se desea realizar cambios en el código es necesario conectar el Arduino de nuevo y sustituir el código antiguo por el nuevo. Configuración del Nodo Infura Es necesario configurar un nodo Infura para que el Arduino pueda escribir en la Blockchain. Como se observa en la figura 7.7, configurar un nodo en Infura es muy sencillo, una vez registrado, crear un nuevo proyecto, indicar la Blockchain y se genera automáticamente un “Endpoint” propio al que poder enviar transacciones, en nuestro caso desde el Arduino. Infura también permite llevar un seguimiento de las transacciones que recibe el nodo que se ha configurado. 130