viernes, junio 30, 2023

OpenExpo Europe 2023: Web3 & CyberSec: PoCs & Hacks Just for Fun ( and Harden )

Hoy que es viernes, después de hacer la charla ayer en la DotNet Conference 2023 donde hablé largo y extenso de Latch Web3, y de haber dejado todo publicado en detalle en el un artículo de 6 partes sobre Latch Web3, os subo la charla que impartimos en OpenExpo Europe 2023 sobre estos temas, pero un poco más cortita, ya que teníamos solo 30 minutos.
La presentación la hicimos entre el gran Josep Albors de ESET, viejo camarada y amigo de batallas (y de cómics cómo yo), que se subió al escenario conmigo, donde hablamos de todo lo que tenéis en el artículo de Latch Web3: Un pestillo de seguridad para SmartContracts, donde he seguido el esquema de la charla pero dedicándole tiempo a los detalles.


Esta misma sesión, pero con 45 minutos de tiempo, es la que impartí en la DotNet Conference 2023, que ya os publicaré más adelante, así que si te gusta el mundo Web3, ya puedes ponerte a probar nuestro querido Latch Web3 en tus hacks, y a ver qué creas.
El mundo Web3 tiene conceptos nuevos, pero al mismo tiempo es apasionante por las arquitecturas que se pueden construir, así que te animamos a que te hagas un experto en pentesting en este nuevo mundo. Y recuerda que si quieres aprender de estas tecnologías, tienes Bit2Me Academy, que es una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos además del libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación" de Yaiza Rubio y Félix Brezo que seguro que te ayudan a ponerte las pilas.

Más artículos de Web3, Blockchain & SmartContracts
¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, junio 29, 2023

Level_Up! Consigue tus NFTs mientras cuando supera retos Web3

En nuestra plataforma de CTFs de Web3 seguimos añadiendo funcionalidades que nos enseñen a nosotros a la hora de llevarlas a cabo y que ayuden a aprender al resto de la comunidad. En esta ocasión, hemos incorporado NFTs a la plataforma de level_up!. La idea es que el jugador que va realizando retos y va consiguiendo puntos pueda reclamar sus NFT por el nivel que va adquiriendo.

Figura 1: Level_Up! Consigue tus NFTs mientras cuando supera retos Web3

La idea surgió hace meses. No es la primera vez que trabajamos con NFT, ya que en el taller de Navaja Negra del año 2022 ya hicimos algunos retos, los cuales tuvieron bastante éxito y gustaron. En esta ocasión, la idea es que cualquier que descargue level_up! desde el Github oficial, pueda después configurar sus NFT y las imágenes asociadas a éstos. Nosotros solo damos una propuesta de la dinámica y el juego de NFTs que se pueden conseguir con los puntos que el jugador va consiguiendo.


Creemos que es interesante disponer de un mecanismo en una plataforma de este estilo en el que puedas alcanzar NFTs en función de tu nivel, es una forma de certificar que tienes un nivel. Por otro lado, se puede visualizar como un sistema en el que si alguien quiere verificar unos conocimientos tuyos, puede hacerlo al comprobar que dispones del NFT nivel X.

Añadiendo NFTs a level_up!

Desde el punto de vista técnico, hemos añadido un contrato que se encarga de gestionar los NFT de cada usuario. El contrato es básico y hemos elegido el estándar ERC-1155 debido a que tenemos una colección, en principio de 5 NFTs, y los usuarios pueden ir ‘minteando’ los diferentes NFT. Es decir, el contrato se encarga de gestionar la colección completa y de proporcionar a cada usuario que cumpla con unos requisitos un NFT u otro. Si eres un amante de los NFTS, te animamos que mires el Market de NFTs de Telefónica que hay algunos muy especiales.


El contrato nft.sol implementa la lógica para hacer esto, pero principalmente hereda del ERC-1155 de OpenZeppelin y, posteriormente, añade alguna funcionalidad. La idea es que cuando un jugador consiga N puntos pueda ir reclamando un NFT. A continuación, proporcionamos el listado de NFTs disponibles en la plataforma:
  • Nivel 0: Newbie. Se consigue con 0 puntos. Sólo por crear el jugador ya puedes reclamarlo.
  • Nivel 1: Rookie. Se consigue con 500 puntos. Necesitas superar algunos retos antes de poder solicitarlo.
  • Nivel 2: Hero. Se consigue con 1000 puntos.
  • Nivel 3: Super Hero. Se consigue con 1500 puntos.
  • Nivel 4: Master. Se consigue con 2500 puntos. 
Actualmente, sumando todos los puntos de los retos de level_up! no se puede conseguir. Está hecho para que cuando sigamos aumentando retos se pueda conseguir. Por supuesto, hay que recordar que level_up! es OpenSource y está pensado para que cada uno pueda descargarlo y montárselo en un entorno local casero y personalice cómo quiera la plataforma, por lo que cada uno puede añadir o eliminar los NFTs que quiera, así como personalizarlo (siempre respetando la licencia de level_up! :D)

Figura 4: Score "0"

Cuando nos registramos como jugador tenemos 0 puntos, ya que no hemos resuelto ningún reto, pero podemos reclamar el primer NFT. Al reclamarlo, se ‘mintea’ el NFT para el usuario y se podrá visualizar en la misma vista de jugador o, incluso, cargarlo en tu wallet de Metamask. Cuando se reclama el NFT se produce una petición de firma de un mensaje. Esto es realmente interesante desde el punto de vista de la seguridad.

Figura 5: Firma con Metamask

Cada vez que se solicita un NFT la plataforma validará si tienes derecho a un NFT por los puntos que tengas. Además, se enviará un mensaje aleatorio para que el usuario lo firme, de forma que se pueda verificar que el usuario es quién debe ser y que el NFT es ‘minteado’ para él. Es un proceso de seguridad necesario en el mundo Web3 para verificar que alguien es quién está detrás de cierta acción. Hay que tener cuidado en no caer en la posibilidad de un replay de la firma, como ya vimos en el reto Replay Me.

Una vez reclamado y firmado el mensaje se valida la transacción y se lleva a cabo. El usuario dispone de su NFT visible en la vista de jugador cada vez que accede. Ya con este NFT se puede visualizar el nivel que tiene el usuario en la plataforma.

Figura 6: NFT "Newbie"

Además, como se comentaba, el jugador puede meter su NTF a su Wallet y llevarlo consigo. Hay que recordar que level_up! está pensado principalmente para entornos privados y de testeo, bajo el control nuestro siempre, pero podrían llevarse en un Wallet sin problema. Cuando uno va consiguiendo superar retos puede ir reclamando NFTs. El botón de Reclamar NFT se habilitará solo cuando pueda reclamar al menos uno por los puntos acumulados que se tengan.

En la siguiente imagen, se puede ver cómo el jugador tiene más de 1.000 puntos y tiene 3 NFTs minteados y visibles en la plataforma. Están indicando el nivel del jugador en la plataforma y la superación de retos por valor de esos NFT.

Figura 7: Puntos y NFTs conseguidos.

En el mes de julio volveremos con un reto nuevo en level_up! y con la liberación de un writeup. Seguimos pensando en mejorar cosas y añadir funcionalidades a la plataforma. Esta nueva versión de level_up! ya fue liberada, por lo que esperemos que sigas aprendiendo con nosotros de la Web3 y los retos de seguridad que esta propone.

El mundo Web3 tiene conceptos nuevos, pero al mismo tiempo es apasionante por las arquitecturas que se pueden construir, así que te animamos a que te hagas un experto en pentesting en este nuevo mundo. Y recuerda que si quieres aprender de estas tecnologías, tienes Bit2Me Academy, que es una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos además del libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación" de Yaiza Rubio y Félix Brezo que seguro que te ayudan a ponerte las pilas.

Más artículos de Web3, Blockchain & SmartContracts
Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González

Contactar con Pablo González

miércoles, junio 28, 2023

Latch Web3: Un pestillo de seguridad para SmartContracts (Parte 6)

En la última entrada de este artículo terminamos viendo cómo quedaba el pareado y generación de un Latch Web3 haciendo el proceso desde el Backend de la DApp utilizando la función pair del SDK de Latch con los parámetros de una Latch Web3 Application, y haciendo el uso de la Latch App móvil para generar el Token de Pareado y la Latch Web3 Wallet del usuario para firmar la transacción. Ahora vamos a ver el proceso completo funcionando en un par de vídeos, que seguro que será más sencillo.

Figura 42: Latch Web3: Un pestillo de seguridad para SmartContracts (Parte 6)


Como habíamos explicado en la parte anterior, en el Backend de la DApp, que en nuestro ejemplo es el Market de NFTs de Telefónica que utiliza un SmartContract en Polygon para realizar la transacción de los NFTs, hemos habilitado una zona de configuración de Latch Web3, y como podéis ver en este vídeo, el proceso es tan sencillo como hacer estos pasos:

1.- El usuario se loga en el Backend de la Dapp con su Web3 Wallet.
2.- Ir a la zona de Vincular Latch en el Backend de la DApp.
3.- Solicitar el Token de Pareado en la Latch App móvil.
4.- Introducir el Token de Pareado en el Backend de la DApp
5.- Vincular
6.- Firmar la transacción con la Latch User Web3 Wallet. 

Figura 43: Proceso de Pareado y generación de Latch Web3 completo

Y listo. Cada usuario deberá realizar lo mismo para configurar su Latch Web3 y proteger las acciones de su Wallet en ese SmartContract de esa DApp con un Latch. Ahora veremos cómo lo hace.

Paso 4: Abrir y Cerrar el Latch Web3

Una vez que ya está creado el Latch Web3 para el SmartContract de la Dapp - en este caso del Market de NFTs de Telefónica -, el usuario ya podrá cambiar el estado de ese Latch Web3 en todo momento desde su aplicación móvil de Latch. Para ello solo necesitará abrir o cerrar el "pestillo" de Latch.

Figura 44: Latch Web3 en App Móvil de Latch

Cuanto esto se realiza en la app móvil de Latch, esta se conecta al Backend de Latch para cambiar el valor del AccountID (estado del Latch), pero como es una Latch Application Web3, entonces el Backend de Latch generar una llamada al SmartContract de Latch con la función setStatus(), donde le da el nuevo valor del Latch, así como la Public Address de la Wallet del usuario que ha hecho este cambio.

Figura 45: Flujo conceptual de cambio y consulta de estado del Latch Web3

Con estos valores, el SmartContract de Latch generar una nueva entrada en la Blockchain (en este caso de Polygon), con el hash de ese Latch y su valor, lo que le permite al SmartContract de Latch consultar su estado en cualquier momento.
Supongamos ahora que el usuario cierra el Latch Web3 desde su App móvil, y alguien intenta comprar en el Market de NFTs de Telefónica con su cuenta, lo que sucederá es que el SmartContract de la DApp hará una llamada al SmartContract de Latch para conocer el valor del Latch Web3 de esa Public Address Wallet del usuario -.

Figura 47: Latch Cerrado, no se puede ejecutar la transacción

Como en este caso concreto estará cerrado, dará un error y no permitirá que se realice la transacción de compra/venta del NFT, tal y como se puede ver en la imagen anterior, donde el error lo vemos en la User Wallet Web3.

Figura 48: Latch abierto, se puede firmar la transacción en Metamask

Si por el contrario, el Latch Web3 de ese usuario se encontrará abierto, el proceso sería totalmente normal y transparente, pero por detrás se ha comprobado este Second Factor Authoritation (2FA) para ver si era posible realizar la transacción o no, aún teniendo control de la Wallet Web3 del usuario.

Figura 49: Funcionamiento de Latch Web3 para proteger transacciones

En el vídeo podéis ver el proceso completo con las dos posibilidades, es decir, Latch Web3 cerrado, y Latch Web3 abierto, para entender el sencillo funcionamiento de este proceso una vez configurado todo correctamente.

Y aún hay más....

Puede parecer que hemos terminado, pero aún queda más que hablar de esta tecnología, porque por supuesto hay otra opción de configurar Latches en SmartContracts, que es mediante el uso de Oraculos. Esta implementación aún no la hemos hecho pública, pero en la siguiente parte os dejaré la información de cómo hemos solicitado la patente e implementado Latch Web3 basada en Oraculos Web3. Pero será en otra entrada.

El mundo Web3 tiene conceptos nuevos, pero al mismo tiempo es apasionante por las arquitecturas que se pueden construir, así que te animo a que innoves en él. Y recuerda que si quieres aprender de estas tecnologías, tienes Bit2Me Academy, que es una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos además del libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación" de Yaiza Rubio y Félix Brezo que seguro que te ayudan a ponerte las pilas.

Más artículos de Web3, Blockchain & SmartContracts

martes, junio 27, 2023

Latch Web3: Un pestillo de seguridad para SmartContracts (Parte 5)

Hoy toca ya ver el paso a paso para poder tener un Latch Web3 en tu SmartContract que los usuarios puedan utilizar para proteger las acciones que un SmartContrat hace cuando se firma una transacción desde su Wallet. Es decir, que aunque un atacante consigas las claves de la Wallet de un usuario necesarias para firmar un transacción con un SmartContract, exista un 2FA basado en Latch que permita controlar con un canal paralelo si se puede ejecutar o no esa acción.

Figura 33: Latch Web3. Un pestillo de seguridad para SmartContracts (Parte 5)

Para ello, hay que seguir los pasos en orden, que es necesario para hacer que el sistema funcione en una Dapp que tiene un Backend en un servidor Web2, y lógica de aplicación Web3 basada en un SmartContract.  Para ello, comenzamos.

Paso 1: Creamos el SmartContract de la DApp

Este es el primer paso del proceso. Para eso, el SmartContract de la DApp debe realizar tres cosas nada más al principio que ya hemos visto en la anterior parte del artículo.
  1. Importar latcheable.sol
  2. Heredar de latcheable "is latcheable"
  3. Configurar el Latch Proxy en la Blockchain correcta
Una vez hecho esto, ya en el código del SmartContract podrá elegir los puntos en los que comprobar el estado del Latch con una sencilla llamada al método de getStatus() del SDK de Latch usando dos parámetros, que serán la dirección pública del SmartContract de la DApp desplegado, y la dirección pública del usuario que está firmando la transacción.

4. Pon Latches en la funciones sensibles del SmartContract

function getStatus(address dAppSC, address clientAccount) returns (bool);

Las direcciones tienen formato Ethereum todas ellas, pero con esto, ya tendríamos el código de un SmartContract Latcheado. Y cuando acabes todo el proceso, deber ir a por el siguiente punto, que es:

5.- Despliega el SmartContract y quédate con la dirección pública

Paso 2: El Developer crea la Aplicación en Latch

Con este sencillo funcionamiento anterior, en un SmartContract de una DApp se puede comprobar el estado de los Latches de los usuarios a la hora de realizar las acciones, pero es necesario antes crear estos Latches. Para ello, primero el Developer tiene que abrirse una cuenta de Desarrollador en Latch.

Una vez en el panel del desarrollador, se debe crear una Latch Web3 Application en la parte de My applications, y se debe dar un Nombre, configurar la dirección pública del SmartContract de la DApp a proteger y la dirección pública de la Developer Web3 Wallet Web3.

Figura 35: Creación de Aplicación Latch Web3

Cuando haya configurado esa información, debe dar al botón de firmar transacción para garantizar que tanto el SmartContract de la DApp, como la Wallet del Developer (WEB3WALLET) son suyas. Para ello, la transacción que debe firmar es la cadena Latch-Web3 (WEB3SIGNATURE), y una vez hecho, quedará creada la aplicación.
Figura 36: Firma de la transacción con la Developer Web3 Wallet

Si el SmartContract de la DApp no pertenece a ese developer, entonces se recibirá un error como el  siguiente, ya que la plataforma comprueba quién el el dueño de ese SmartContract de la DApp.

Figura 37: Error en la creación de la Latch Web3 Aplication

Si está correcto, el Developer tendrá ya la Latch Web3 Application creada en la lista de sus aplicaciones y podrá acceder en todo momento al SECRET_KEY que necesitará para realizar las llamadas a la API.

Figura 38: Latch Web3 App creada correctamente

Una vez hecho esto, ya solo nos queda crear un sistema para que los Latch UserID puedan crear Latches Web3 en el SmartContract de la Dapp.

Paso 3: Creación de Latches Web3 desde la Latch App

Los usuarios de Latch deben poder crear los Latches en el SmartContract de la DApp desde su Latch App móvil que está conectada con el Backend de Latch. Para ello, solicitan un token de pareado que deben introducir en una zona de configuración de seguridad de cuenta habilitado para ello en el Backend de la DApp

Figura 39: Esquema de pareado de cuentas para generar un Latch

Como se puede ver en el esquema anterior, el usuario desde la Latch App solicita el Token de Pareado, que se entrega al Backend de la DApp. Éste lo envía, haciendo uso del SDK de Latch al Latch Backend junto con la Public Address de la Wallet del usuario. El Latch Backend almacena la Public Address de la Web3 Wallet, y llamará al Latch SmartContract para que cree el Latch de ese usuario, que estará identificado por dos parámetros: La dirección pública del SmartContract y la dirección pública de la Wallet Web3 del usuario. Para realizar este proceso se le exigirá al usuario que firme la transacción de creación del Latch.

Figura 40: El Backend de la DApp inicia Latch con el Application ID y el Secret Key de la Latch Application, y llama con el Pairing Token. La Public Address del SmartContract se coge de msg.sender y la Public Address del Web3 User Wallet de la firma de la transacción.

En el ejemplo que tenemos hecho con el Market de NFTs de Telefónica vemos cómo hemos habilitado una opción en las opciones de seguridad para que el usuario introduzca el Token de Pareado que ha solicitado con su Latch App y firme la transacción con su Wallet Web3, en este caso MetaMask.

Figura 41: Se solicita el Token de Pareado en la Latch App, se introduce en el
Backend de la Dapp. Se firma la transacción con la Wallet Web3 del usuario.
Y el Latch queda creado.

Con esto, ya quedaría realizado el pareado el Latch Web3 ya aparecería en la Latch App móvil del Latch UserID, y ya podremos proteger las transacciones con Latch. Pero esto lo vemos en la siguiente parte de este artículo, que esta ya ha quedado muy larga.

lunes, junio 26, 2023

Latch Web3: Un pestillo de seguridad para SmartContracts (Parte 4)

Para implementar un protección Latch en un SmartContract, hay que realizar una serie de procesos que vamos a ver a continuación. En las partes anteriores hemos visto cómo funciona el concepto, ahora vamos a ver cómo se integra Latch Web3 en un SmartContract y cómo funciona desde el punto de vista de un usuario.

Figura 25: Latch Web3: Un pestillo de seguridad para SmartContracts (Parte 4)

Para poder crear una DApp que tenga un SmartContract con funciones que el usuario pueda abrir o cerrar con su Latch, necesitamos entender cuáles son los elementos que entran en juego en esta arquitectura, poniendo en el medio la arquitectura de Latch.

Componentes de Latch

La arquitectura de Latch la vamos a resumir en los siguientes elementos, que cada uno tendrá su importancia en el funcionamiento:
  • Latch Backend: Es el servidor de Latch. Este servidor gestiona los Latches para las apps del mundo Web2, y va a manejar el Latch SmartContract para mantener los "Latches Web3" de las aplicaciones Web3. Es un servicio web al que los desarrolladores Web2 llaman para las opciones de Pareado, Despareado y Consulta del Latch, y los desarrolladores Web3 tendrán que llamar para las opciones de Pareado y Despareado, ya que la opción de consultar un Latch Web3 se hará con una llamada del SmartContrat.
  • Latch Developer: Es una cuenta Web2 que un desarrollador tendrá que sacarse en el Latch Backend para poder crear las aplicaciones Web2 y Web3 para las que se van a crear Latches o Latches Web3 que protegerán partes de las aplicaciones Web2 y/o Web3.
  • Latch ApplicationID: Cuando un desarrollador quiere proteger una aplicación Web2 o Web3, se generar una identidad para esa aplicación en el mundo Latch, que se llama ApplicationID. Se utilizará para el proceso de pareado y despareado de usuarios a aplicaciones.
  • Latch UserID: Cada usuario que quiere poner un 2FA en sus aplicaciones, tanto Web2 como Web3, primero tiene que tener una cuenta en el servidor de Latch. Esta es cuenta con la que gestionará el pareado, la apertura y el cierre de latches, y con la que un usuario iniciará sesión en la app de Latch en el terminal móvil. Aunque se proteja un SmartContract del mundo Web3, Latch sigue siendo una aplicación del mundo Web2.
  • Latch App: Es la aplicación móvil que maneja el usuario para realizar el pareado y despareado de Latches, para cambiar el estado. Se autentica siempre contra el Latch Backend. Es una arquitectura Web2 clásica.
Figura 26: Latch App con el nuevo diseño
  • Latch Pairing Token: El Token de pareado es un TOTP que se genera el Latch USERID en la app móvil de Latch para generar un Latch en una Latch Application. Es decir, el usuario pide un Token de pareado en la app de Latch, se lo entrega a la aplicación en la que quiere crear el Latch, y la aplicación hablará con el Latch Backend para crear el Latch. El Latch concreto será lo que llamamos AccountID que explico aquí.
  • Latch AccountID: Este es el Latch. Cuando se hace un proceso de Pareado, lo que se crea en la base de datos de Latch Backend es un AccountID, cuando se desparea un usuario de un ApplicationID se elimina este AccountID, cuando se cambia el estado del Latch se cambia el valor de este AccountID y cuando se consulta el estado de un Latch, se consulta el estado del AccountID. En el mundo Web2, este AccountID es necesario controlarlo en las aplicaciones protegidas por Latch. En el mundo Web3, vamos a ver que este AccountID no lo utilizamos para consultar el estado desde los SmartContract de la DApp que se protege, ya que utilizaremos la dirección pública de la Wallet del usuario. No obstante, en el mundo Web3 este AccountID sigue existiendo en el Backend de Latch y es lo que cambia el usuario de Web3 desde su app de Latch en el terminal móvil.
De toda esta parte primera, que tiene más que ver con "Latch Web2", podéis ver el seminario de "Cómo integrar Latch en aplicaciones .NET" del gran Ioseba Palop. Tienes también los tutoriales de cómo usar e integrar Latch en plataformas de todo tipo, así como en aplicaciones escritas en Java, PHP, Python, etcétera, en la lista de vídeo-tutoriales de Latch.


Ahora vamos la parte que hemos extendido para que se puedan integrar Latch Web3 en SmartContracts que dan soporte a DApps. Para ello, es importante identificar los siguientes elementos.
  • Latch SmartContract: Nuestro Latch BackEnd se ha extendido y tiene una pieza nueva en forma de SmartContract que gestiona nuestra DApp. Es decir, el Latch SmartContract es una extensión de Latch Backend en una cadena de bloques. De momento, está desplegado solo en Polygon, porque aún estamos en fase alfa de este servicio. Es el que va a permitir a cualquier SmartContract de la red Polygon consultar el estado de los Latches. Además, cuando un usuario de Latch cree o cambie el estado de un AccountID en su aplicación móvil de Latch, el Latch BackEnd utilizará este SmartContract para anclar el estado de ese Latch Web3 de ese usuario en la BlockChain de Polygon.
Figura 28: Diagrama de arquitectura Latch Web3.
Market SC y App Client son la DApp y el SC de la Dapp a proteger.
  • Latch Web3 Developer Wallet: Un desarrollador que quiera usar Latch para proteger el SmartContract de una Dapp, deberá tener una Wallet. Esta la va a necesitar para firmar la creación de la Latch Web3 Application.
  • Latch Web3 User Wallet: Si el usuario quiere firmar un transacción en el SmartContract de una DApp, tendrá obligatoriamente que tener una Wallet. Si quiere tener un Latch Web3 para proteger su cuenta en ese SmartContract de la Dapp, deberá tener un usuario de Latch también. Es decir, esta wallet es la identidad Web3 del usuario en la Dapp con la que se parea un Latch UserID.
  • Latch Web3 Account Status: Este es el equivalente al Latch AccountID de Web3 en la Web3. En este caso, el Latch Web3 Account Status es un valor que se almacena en un bloque de la BlockChain de Polygon. Este valor lo escribe y lo actualiza el Latch SmartContract manejado por el BackEnd de Latch, y lo consulta el SmartContract de la DApp protegida por Latch mediante llamadas al Latch SmartContract.
  • Latch Web3 Application (APP_ID): Para que se puedan parear usuarios de Latch con el SmartContract de la Dapp, es necesario que el Latch Developer creer una Latch Web3 Application. Para ello, deberá firmar la creación de esta aplicación con su Latch Web3 Developer Walled. Y se creará un ApplicationID que se utilizará para el pareado y despareado de Latches, así como para el cambio de estado de estos en el BackEnd de Latch.
  • Latch Web3 Application Secret Key: Para poder llamar a la función de parear o desparear, el desarrollador deberá utilizar una contraseña, en forma de SECRET_KEY que recibirá cuando se cree la Latch Web3 Application en la herramienta de administración de Latch.
Vale, ya casi estamos terminando, que nos quedan solo dos elementos más, propios de la DApp que vamos a fortificar con Latch Web3. Los elementos son, simplemente, el Backend de la DApp y el SmartContract de la DApp. Y cada uno deberá realizar diferentes acciones en Latch.
  • DApp SmartContract: Es el encargado de la lógica Web3 que hay detrás de una DApp. Deberá integrar las capacidades de Latch, y luego en cada llamada de ejecución que reciba desde una dirección pública de la wallet de un usuario, podrá consultar el estado del Latch Web3 de ese usuario mediante una llamada la Latch SmartContract usando la función getStatus() del SmartContract de Latch, que devolverá el estado del Latch para cada usuario.
  
Figura 29: SmartContract a proteger is Latcheable  
 
Para poder hacer uso de esta función, deberá importar el fichero Latcheable.sol y heredar de Latcheable. Para desplegar el SmartContract protegido con Latch se puede usar cualquiera de las herramientas habituales: remix, hardhat… ya que el despliegue del SmartContract Latcheable no tiene nada especial o diferente de cualquier otro SmartContract. Latcheable tiene un modificador (isLatcheable) que se utilizará en todos aquellos métodos del Smart Contract que se quieran proteger.   

Figura 30: Latcheable.sol en GitHub

También debes configurar Latch Proxy para la Blockchain seleccionada. Para que el SmartContract pueda consultar adecuadamente el estado del Latch es necesario indicar a nuestro contrato la dirección del contrato de Latch en esa Blockchain. Para ello, se deberá modificar el valor PROXY_LATCH (que aparece en nuestro contrato al haber heredado de la librería Latcheable.sol) invocando al método llamado setProxyLatch. En la imagen anterior se ver la función setProxyLatch en Latcheable.sol en GitHub.
 
Este valor es diferente si estamos en mainnet o testnet. También podrá cambiar entre distintas cadenas de Blockchainsa futuro. Valores a utilizar para PROXY_LATCH.
 
- Testnet (Mumbai): 0xEa8dA5e902664Cf5E8a4235A0dd6dF65949706e4 
- Mainnet (Polygon): 0x3Ce3c3d135A2D194A318B74f35Deefc28f431dde  

A continuación, un ejemplo usando remix, donde ejecutamos la operación setProxyLatch:

Figura 31: Ejemplo de despliegue con Remix,
configurando proxyLatch en TestNet.

Una vez desplegado el contrato, es necesario guardar la dirección (address) del contrato para poder darlo de alta posteriormente en el panel de aplicaciones de Latch Web3.  

Es importante notar que, con esta arquitecta, actualmente el pestillo de Latch será único para todos los métodos protegidos. Es decir, un usuario podrá tener un Latch por SmartContract a proteger. El soporte a operaciones, que permite que un usuario maneje ene latches en una aplicación estará disponible en versiones posteriores. 
    • DApp SmartContractEste será el encargado del proceso de pareado y despareado de los Latches. Para ello, deberá llamar a las funciones de pareo y de despareo en formato Web3 y haciendo uso de ApplicationID, el Token de Pareado, el Secret Key para garantizar que es el dueño de la Latch Web3 Application, y la dirección pública del Wallet del usuario que está creando el Latch, que lamamos WEB3WALLET, y que es una dirección Ethereum pública del usuario que desea parear el servicio, y por último, para que no pueda crear un Latch Web3 cualquiera, el valor WEB3SIGNATURE, que es una firma de la cadena “Latch-Web3” por parte del usuario con su clave privada, y que es es una forma de certificar que el usuario dispone de dicha clave privada.
    Figura 32: Ejemplo de pareado para generar un Latch Web3

    Estos son todos los elementos que hay que conocer, y que aunque parecen muchos, la verdad es que no son tantos y cuando pones cada uno en su sitio todo tiene sentido. Pero será más fácil en la siguiente parte que veremos el paso a paso para crear un SmartContract con Latch Web3 en el orden adecuado, y podremos ver en funcionamiento el sistema con nuestro ejemplo hecho sobre el Market de NFTs de Telefónica.