viernes, diciembre 31, 2021

Mis pequeños y grandes pasitos en 2021: Julio a Diciembre

Desde el mes de Julio de este año hasta hoy mismo 31 de Diciembre, hemos seguido haciendo cosas. Dando pasitos. Algunos más largos, otros más pequeños, pero siempre poniendo baldosas nuevas que poder pisar en la dirección deseada. Hoy os recojo los pequeños y grandes proyectos de esta segunda parte del año, que también los ha tenido, como continuación de los que os dejé en la primera parte de este artículo.

Figura 1: Mis pequeños y grandes pasitos en 2021: Julio a Diciembre

No se trata de una selección de los mejores posts del blog, ni de los más leídos. Nada de eso, solo son cosas nuevas hechas durante este año 2021, que como ya sabéis, es el veneno que llevo dentro. Hacer cosas que molen, sean divertidas, y tengan sentido.

Julio:
  • Movistar Campus & HackBySecurity: Durante este año hemos lanzado muchas Living Apps, y hemos ido ampliando las que tienen más contenido. Tecnológicamente fue una evolución, porque creamos una plataforma para desarrollar este tipo de apps en TV que nos permitió ir mucho más rápido.
Agosto:
Septiembre:
  • Chief Digital Officer de Telefónica: Quizá el momento más destacado del año. Ser nombrado Chief Digital Officer de Telefónica para ocuparme de la innovación, los datos, las plataformas, los productos y los servicios digitales del grupo. Poco más que decir. }:) 
  • LeadWind: Comenzamos la vida pública del Fondo de inversión LeadWind para invertir en Scale-Ups. Desde Enero llevábamos trabajando en él.
  • Distribuidor de 0xWord en Perú: Llevábamos tiempo buscando una colaboración para llevar nuestros libros a este país de latinoamérica, y por fin en Septiembre alcanzamos un acuerdo.
  • Tempos x Tweets: Lanzamos en MyPublicInbox el servicio de Tempos x Tweets para que todos los usuarios de la plataforma puedan ganar Tempos por ayudar con Likes y Retweets en Twitter a otros perfiles de la plataforma. 
Octubre:
  • Apoyos automáticos en Twitter en MyPublicInbox: Con esta característica, se pueden generar Tempos automáticamente todos los días, solo con dar el apoyo automático a las cuentas de Twitter a las que quieres retweetear. Un servicio que hoy en día es parte de mi día a día y que agradezco a todos los que me apoyáis. Fue un pequeño hito para nosotros.
Noviembre:
  • Telefónica Innovation Day: Un día para contar todo lo que estamos haciendo en las áreas de innovación de Telefónica. Yo día la presentación, pero se trabajó mucho durante todo el año para ver los casos y ejemplos que allí contamos.
  • Hack in the Box en Abu Dhabi: De vuelta a las CONs internacinales, me fui a Abu Dhabi a ser uno de los international keynote speakers en la Hack In The Box CyberWeek 
Diciembre:
  • Hispasec & MyPublicInbox: Otro acuerdo de colaboración del que nos sentimos muy contentos, entre la empresa Hispasec y MyPublicInbox. Muy contentos de poder dar Tempos patrocinados a los usuarios de la plataforma.
Como podéis ver, son muchas cositas. Todas han requerido algo de tiempo, cariño, creatividad y trabajo. Además de estos hitos, ha habido muchas cosas que no han salido. Que se han quedado en el camino, que se han perdido por falta de tiempo, de resultados claros, o de recursos. Así son las cosas. Por supuesto, todos estos proyectos han sido el trabajo de muchas, muchas, muchas personas con las que tengo que la suerte de trabajar, colaborar, o enredarnos puntualmente para un proyecto. Y es fantástico.

Y El lado del Mal... claro está:

Por supuesto, para el año 2022 ya hay muchas cosas esperando. Muchas de ellas que se están haciendo estos meses, pero aún no se han completado. Otras están en la fase de ideación, otras irán apareciendo a lo largo del año. Pero no os preocupéis, que os lo iré contando por aquí, en "El lado del mal", que sigue siendo uno de los proyectos más importantes de todos los años, escribir todos los días para estar cerca de vosotros.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, diciembre 30, 2021

Mis pequeños y grandes pasitos en 2021: Enero a Junio

Todos los años me meto en nuevos proyectos o ideas. Es lo que me motiva a seguir más que activo en esta profesión. Este trabajo me incita a crear cosas. A buscar nuevos caminos. A explorar nuevas posibilidades. La verdad es que nunca tengo muy claro dónde me van a llevar, pero sí que es un paso en la dirección correcta. Así que, cuando tengo claro que el paso va a en la dirección adecuada, tiro millos y me pongo en modo ejecución. 

Figura 1: Mis pequeños y grandes pasitos en 2021: Enero a Junio

Este año he hecho eso muchas veces, grandes y pequeños pasos, en grandes y pequeños proyectos, y este estos son los diez proyectos, grandes y pequeños, que me llevo como recuerdo para mí de un año 2021 que tuvo de todo. Aquí os los dejo un resumen de lo más destacado para mí en mi día a día durante los meses Enero a Junio de este año. Todos son proyectos que me han llevado tiempo y cariño, así que son importantes para mí.

Enero: 
Febrero:
Marzo:
Abril:
Mayo:
  • Asistente para fortificar Twitter en MyPublicInbox con ESET: Un pequeño proyecto, pero que me encanta. El asistente de fortificación de cuentas Twitter para evitar que te las roben, para mejorar tu privacidad, y para evitar el abuso de las mismas, que hicimos junto con nuestros amigos de ESET en MyPublicInbox.
  • GeeksHubs Academy patrocina Tempos en MyPublicInbox: Este mes de Mayo comenzamos un proyecto precioso con GeeksHubs Academy llamado "hackYourCareer" para ayudar a que todo el mundo hackee su carrera profesional y sea lo que quiera en el mundo de la tecnología. 
Junio:
  • LEIA: Primer milestone del Proyecto LEIA en el que presentábamos nuestros avances con el uso de la inteligencia artificial y la lengua española de la mano de Microsoft, Amazon y Google en la Real Academia de la Lengua.
Como siempre, son cosas que hago con todos los equipos de personas con los que tengo la suerte de trabajar. Algunos son pequeños proyectos con mi equipo de Ideas Locas, con 0xWord, con MyPublicInbox, Singularity Hackers, otros son más grandes con Wayra o Telefónica. Pero siempre haciendo cosas. que Eppur si muove.

En la siguiente parte os dejo los siguientes seis meses, lo que hemos hecho con Cálico Electrónico, con Aura y las Living Apps, con Movistar Home, y más cosas grandes y pequeñas, que han sido muchos días pensando en qué hacer nuevo }:)

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


miércoles, diciembre 29, 2021

Cómo "Klingonizar" un iPhone y tenerlo troyanizado con Control de Voz (6 de 6)

No quería terminar este año sin terminar esta serie de "Cómo "Klingonizar" un iPhone y tenerlo troyanizado con Control de Voz", que realmente queda muy poco que añadir a todo lo dicho anteriormente, donde lo que se trata ya es de seguir buscando escenarios, scripts de control, y jugar con ello, pero nada especialmente distinto. Eso sí, para cerrarlo quería dejaros las últimas reflexiones que hicimos para jugar con ello para hacer ataques divertidos.

Figura 46: Cómo "Klingonizar" un iPhone y tenerlo
troyanizado con Control de Voz (6 de 6)

El primero de los escenarios que se nos ocurrió es cómo lanzar remotamente los comandos, y tras ver que podíamos hacer que los comandos en Klingon - como vimos en la parte anterior - se lanzaran desde grabaciones, se nos ocurrieron las mismas "maldades que se te pueden ocurrir, seguramente a ti, os las cuento.

Usar altavoces remotos

Por supuesto, tener un altavoz BlueTooth en un dormitorio o salón al que se puede conectar cualquier dispositivo, podría ser utilizado para lanzar los comandos remotamente. En el siguiente vídeo podéis ver que cualquier emisión - en este caso desde los altavoces de un MacBook hace que el terminal iPhone reaccione a los comandos en Klingon.

Figura 47: Lanzando un script en Klingon desde un Mac

Esto quiere decir, que, si tienes un altavoz cerca de tu terminal iPhone también podría salir desde allí el comando, no solo de una persona cercana. Pero...también lo podemos hacer con un entorno de "Waterholing" usando los SmartSpeakers de la casa.

Alexa Echo o Google Home "Waterholing" Skills

En Alexa Echo o Google Home se pueden configurar Skills, y si el SmartSpeaker está bajo nuestro control en el hogar, por ejemplo, se podrían configurar Skills para lanzar los comandos de voz en Klingon, haciendo que "Alexa" o "Google Assistant" digan algo parecido al comando Klingon que quieras que se ejecute. 
Para ello, hay que configurar una Skill de algo que pueda pedirle tu objetivo a Alexa o Google Assistant en el SmartSpeaker, y hacer que lo que respondan sean los comandos en Klingon. Una bonita trampa de "waterholing". Solo hay que esperar que la "víctima" pida esta Skill con su terminal iPhone Klingonizado cerca, otro escenario de "trolling" curioso.

Conclusiones

Al final, todo este escenario de Klingonizar un iPhone ha sido un ejercicio curioso que permite dejar troyanizado un terminal iPhone con comandos de voz aprovechando un descuido. Que permite usar el dispositivo sin saber el passcode si la víctima usa esta característica, (no muy extendida). Para mí fue una forma de explicar claramente a Mi Hacker cómo, un vídeo chulo de una demo de comandos de voz en iPhone que vio en TikTok podría llevarle a extender la superficie de exposición de su terminal, y por tanto de su privacidad.


Por supuesto, para mí fue una bonita oportunidad para jugar como hacemos habitualmente en el equipo de Ideas Locas, con todas las posibilidades de la tecnología, y en especial con iPhone, que nos encanta esto de buscarle las esquinitas.

Figura 50: Libro de Hacking iOS:iPhone & iPad (2ª Edicón) en 0xWord de
Chema Alonso, Ioseba Palop, Pablo González y Alejandro Ramos entre otros.

Os he dejado en la Figura 49, como última parte de esta serie, el vídeo de la conferencia que impartí en la Ekoparty 2020, donde explico todo esto con detalle, por si te apetece recorrer nuestra forma de pensar y jugar con la tecnología.

¡Saludos Malignos!

*********************************************************************
*********************************************************************

Autor: Chema Alonso (Contactar con Chema Alonso)  


martes, diciembre 28, 2021

Consultorio del Dr. Maligno para ayudarte con tus deberes de seguridad informática, hacking o pentesting en FP, Universidad, Másters o Escuela42

[Esto, como os podéis imaginar por la fecha, era una broma del Día de los Inocentes en España]

Este año he decidido volver a hacer una acción de formación muy especial para todos esos estudiantes que tenemos de Ciberseguridad, Hacking, Pentesting o Seguridad Informática. Muchas veces he recibido preguntas en mi buzón de MyPublicInbox que han tenido que ver con sus prácticas, con trabajos de clase, con proyectos que valen créditos, y yo los he resuelto todos lo mejor que he podido.

Figura 1: Consultorio del Dr. Maligno para ayudarte con tus deberes de seguridad informática, hacking o pentesting en FP, Universidad, Másters o Escuela42

Tanto es así, que alguno de los que me escribió y le resolví las prácticas arreglándole el código de uno de sus proyectos, me regaló una cesta de navidad con embutidos de los ricos, ricos. Y yo me sentí muy bien, no por las viandas - que también -, sino por haber vuelto a resolver un problema de la universidad. Ya os he contado muchas veces que para mí es como un juego. 

Recuerdo que os conté la aventura de resolver el factorial de 100, o cómo le explicaba a un amigo lo importante que era saber cómo resolver un problema de forma eficiente, a veces usando estructuras de datos como árboles AVL o algoritmos de recta de barrido, o los famosos diagramas de Voronoi. Me encanta mi profesión y me encanta enseñar, como os narraba en la historia de la Mayeútica y el problema de la recta pintada píxel a píxel.

Figura 2: Pregunta de Escuela 42 recibida y respondida en mi buzón público

Así que, como propósito para el año 2022, que tiene pinta de que vamos a volver a estar confinados a ratitos, he pensado abrir el buzón público en MyPublicInbox del Dr. Maligno y que sea más asequible en Tempos para los estudiantes, ya que será solo de 100 Tempos, y en la plataforma de MyPublicInbox, de una entrada, con las campañas que hay activas y el servicio de Tempos por Tweets se pueden conseguir 300 Tempos sin necesidad de comprarlos.
Este es el buzón del Dr. Maligno, listo para resolver dudas de clase que tengan que ver, principalmente, con la ciberseguridad, el hacking, el pentesting y la seguridad informática, pero como sabéis soy, ante todo, informático, con lo que si es de programación, de algorítmica, redes, BBDD, Inteligencia Artificial, DevOps, DevSecOps (por supuesto), correo electrónico, servicios de Internet en general, criptografía, criptomonedas, BlockChain o Web 3.0, más que contento de contestarla. 


Que lo más importante es que los estudiantes no abandonen sus estudios, que acaben cuanto antes, y que se pongan a trabajar en este área profesional de ciberseguridad. Aprobar exámenes nunca ha sido lo importante, ya lo sabéis, y que unos problemas se compliquen, no debe impedir el aprendizaje de los alumnos. Yo te ayudo a resolverlo. 

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


lunes, diciembre 27, 2021

Paco, ¿has pedido un "Satisfyer" en Amazon? Alexa, y las visitas indiscretas en tu casa

Este mes de diciembre, con la llegada de gente a casa, nos pusimos a jugar un poco en el equipo de Ideas Locas con las cosas malas que puede hacer una visita con ganas de enredar, si le dejas solo con tu Amazon Alexa. Al final, este dispositivo tiene la característica de que está asociado a tu cuenta personal, así que si no lo tuneas bien, y lo dejas por defecto, puedes encontrarte con que otras personas le hablen como si fueras tú, y le pidan cosas.

Figura 1: Paco, ¿has pedido un "Satisfyer" en Amazon?
Alexa, y las visitas indiscretas en tu casa

Dependiendo de las skills que le tengas activadas, se pueden hacer más o menos cosas - ya os haremos una lista de cosas sensibles que se puede hacer dependiendo de cada skill -, pero por defecto os dejo algunas cosas que hemos probado para que te asegures de que no te lo hace nadie cuando en estas fiestas tengas visitas, que... quién sabe, podrías tener a una sobrino, primo, cuñado, vecino, amigo con ganas de jugar.

Figura 2: Preguntar por los recordatorios a tu Alexa

Dos cosas que pueden afectar a tu privacidad son la lista de recordatorios, y los eventos que tienes los próximos 30 días, así que prueba a ver si tu Alexa responde a estas dos preguntas a desconocidos, y qué información da, porque podría salir algo que no te interesara que otros supieran.

Figura 3: Qué eventos tengo

Y otras dos menos graciosas, la primera en modo susurro, alguien te puede poner una alerta despertador a la hora que le dé la gana. Este es un viejo truco que he usado yo toda la vida con Siri en iPhone, pero que ahora se puede hacer también para dejarle una sorpresa cualquier noche.

Figura 4: Activando una alerta despertador

Y la última, para los que son de "gatillo rápido" en Amazon, hay que recordar que Alexa puede añadir objetos a la lista de la compra con un simple comando de voz. Así que alguien te podría añadir cosas que luego no esperas.

Figura 5: Añadiendo "juguetes" a la lista de la compra

Ésta última, tiene como consecuencia, además, que tu perfil de intereses va a ser marcado con el tipo de objetos que se añaden a la cesta de la compra, así que, no te extrañe si recibes luego anuncios y publicidad de cosas similares. Así que, antes de invitar a nadie a casa, revisa las opciones de seguridad de Alexa para asegurarte de que te responde solo a ti, y si lo quieres que responda a todo, asegúrate de qué cosas no deseas que haga para otros.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


domingo, diciembre 26, 2021

Los Cuentos de Habichuelas Mágicas con BitCoin que usan los Falsos Brokers para engatusar a sus víctimas #BitCoin #Criptomonedas

El miércoles y el jueves de esta semana me encontré con dos campañas promocionadas de malvertising en Twitter con estafas de Falsos Brokers de BitCoin que además utilizaban la imagen del CEO de Google, Sundar Pichai, para convencer a los ingenuos. Nada nuevo bajo el sol, solo que aprovechaban la previa de la cena de Nochebuena para acelerar, ya que si tenían a víctimas nuevas capturadas, podrían hacer de altavoz durante la cena, ya que estarían en el momento todavía de ver cómo suben las ganancias de las nuevas víctimas.

Figura 1: Los cuentos de la lechera de BitCoin que usan
los Falsos Brokers para engatusar a sus víctimas


@chema_alonso Cuidado con los amigos que se están forrando con BitCoins en las cenas de navidad. Pueden estar siendo estafados #bitcoin #estafas #aprendocontiktok ♬ Los días contados - Despistaos
Vaya por delante que no estoy demonizando las criptomonedas, ni los BitCoins, ni la Web 3.0, que hasta nosotros llevamos un tiempo trabajando en ese concepto, como es el caso de Movistar Tokens, donde se premian con Tokens a los usuarios. Y por supuesto, si sabes qué es lo que estás haciendo, y cómo lo estás haciendo, puedes invertir en cualquier criptomoneda, pero sabiendo dónde y cómo, y no con estas campañas de Falsos Brokers

Figura 3: Entender e investigar BlockChain & BitCoin
de Felix Brezo y Yaiza Rubio en 0xWord

¿El problema? Pues que para mucha gente que no entiende qué son las criptomonedas, cómo funcionan, cómo se compran y cómo se gestionan, acaban cayendo como moscas en estas estafas de los Falsos Brokers, que además se lo curran usando imágenes de personas famosas, cómo el caso de Sundar Pichai, CEO de Google, que os contaba al principio que ha sucedido esta semana.

Figura 4: Estafa con la imagen de El Mundo, ABC, El País, etc...
y el CEO de Google, Sundar Pichai




Figura 5: Habichuela Mágica del taxista que escuchó la conversación
e invirtió en BitCoins y se forró.

En esta ocasión, hablé con el equipo de Twitter, y ellos rápidamente quitaron las campañas y eliminaron las cuentas que estaban utilizando dentro su red para difundir la web de los Falsos Brokers de BitCoins, y en cuestión de minutos ya estaban todas eliminadas. Pero seguro que vuelven, con anuncios en medios tradicionales, con campañas en redes sociales, mensajes en foros, con cualquier forma de pesca para conseguir víctimas propicias.

Figura 6: Misma historia del taxista pero en Australia

Lo curioso ha sido que, buscando información sobre las campañas que utilizan, me he topado en uno de los dominios que utilizan para hacer las Fake News, con "Los Cuentos de Habichuelas Mágicas con BitCoins" que utilizan, y me han sorprendido las historias. Todas maravillosas de gente normal, que se forra por ser más listo que los demás. Lo que muestran claramente es que, el perfil de personas que buscan es gente trabajadora, con poco conocimiento de informática, y que haya oído cosas de los BitCoins.

Figura 7: Un jubilado de Zaragoza se encuentra un móvil. Lo desbloquea.
 Descubre una plataforma de BitCoins... y se forra. 

Taxistas, inmigrantes, jubilados, pequeños empresarios y autónomos, etcétera. Personas normales que se topan con la "habichuela mágica" del BitCoin y se forran. Y el mismo presentador - que parece sacado de Los Simpsons -, cuenta todas las historias para captar a los pobres incautos. 

Figura 8: El mismo presentador. Historia distinta

La verdad es que las historias son de tanta fantasía que parece mentira que funcionen, pero lo cierto es que buscan eso, personas que quieran creer en eso. Da bastante miedo ver cómo de metido en Internet están estas estafas, y la cantidad de personas que acaban viendo cómo sus ahorros desaparecen.

Figura 9: La misma historia con una azafata

No os pongo más que una historia más que he encontrado, pero como veis este sitio está focalizado en Australia y en España, y las campañas de Fake News no son con famosos, sino con gente normal, así que mucho cuidado con estos, que además usan logos, referencias, y datos de medios de comunicación populares para hacer que parezcan más reales las historias.

Figura 10: Un hombre tuvo que contar su secreto de las inversiones en BitCoins
cuando le pillaron con 461.000 USD en el aeropuerto. Su gran secreto...bye!

Y esto es todo por hoy. Recordad, no se trata de demonizar las criptomonedas, sino de que tengáis cuidado con vuestros familiares y amigos si no entienden. Y si tienes un Euro o un Dólar en una plataforma de brokers de BitCoin, asegurados que podéis sacar dinero probándolo. Si no... malo.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


viernes, diciembre 24, 2021

Reflexiones personales en nochebuena

Hoy es Nochebuena. Y casi se me ha echado encima sin darme ni cuenta. El ritmo frenético de actividad con el que me castigo hace que bote por los días del calendario como si estuviera saltando vallas en una carrera de 110 metros obstáculos. Pero no os engaño ya, es mi veneno. Soy yo el que me castiga sin un minuto libre. El que me obliga a volver a deshacer el Lego cuando ya lo he construido. Desordenar mi vida para volver a ordenarla. Cambiar las cosas de sitio porque la ausencia de actividad, la ausencia de cambio, la ausencia de anhelos es como la cárcel para mí. Y así ha pasado 2021. Con revoluciones diarias en mi vida, y guillotina en la plaza central.

Figura 1: Reflexiones personales en nochebuena

Como a todos vosotros me han pasado cosas buenas y malas. Pesan más las buenas que las malas, pero me pesan aún más las que no han pasado. Las cosas que me han faltado. Los momentos que no han llegado. Las cenas que se han fugado. Las celebraciones que se cancelan por enfermedad. Los conciertos que se han cancelado. Los paseos por el campo que se han torcido. Los ratos de jugar que no he tenido. En aquellas expectativas en las que no ha sucedido nada es donde más me flagelo.

No quiero conectar con la parte sombría de mi yo, y menos en este día, pero sí que ha habido perdidas que me han dolido, y cosas feas que me han pasado que hubiera evitado este año. Así que, a pesar de que yo me considero un tipo fuerte, alegre, optimista y sobre todo, luchador, me quiero acordar de todos los que habéis tenido algún mal momento este año. Porque a pesar de que todo el mundo intenta mostrar lo bueno, no siempre sale todo bien. Y cómo lo pases y lo pelees te define. 

Por otro lado, mi año ha tenido cosas maravillosas. Momentos únicos. Charlas infinitas. Abrazos. Besos. Paseos. Deporte. Proyectos. Sol. Cine en 4DX. Compañeros espectaculares. Y mil y una cosa bonita que me guardo para mí, que aún no he conectado mi cerebro a la red para que salga todo ahí. Me moriré con mis tesoros, mis anhelos, mis éxitos personales y mis fracasos como ser humano. Volvería a vivir 2021, sin duda.

Pero lo mejor es que me voy cargado de mucha ilusión a 2022. Me voy cargado con muchas ganas de vivir. Con muchas ganas de ser. Con muchas ganas de cambiar. De volver a renovarme. De volver a deshacer cosas. De volver a hacer cosas nuevas. Como en 2021. Como en 2020. Como en 2017. Como 2001. Con la ilusión de que en este juego que se pasa de atrás adelante,  estoy en el medio del camino pudiendo ir de adelante atrás. Volvería a vivir cosas que se fueron. Viviré las cosas que están por llegar.

Y hoy es hoy. 

Un día en el que acabo de tener una reunión de trabajo. En la que acabo de sacar cosas que tenía atascadas en las tareas. En el que toca ahora, jugar un rato con mis bichos salvajes, configurarme la cuenta del Metaverso, y esperar que haya regalos de Papá Noel. Así que, estaré escondido fuera del mundo. Me pondré mi gorro rojo y blanco en lugar de azul y marrón, y seré solo un niño comiendo turrón. 

Por desgracia, sé que algunas personas que quiero cenan solos, infectados o en cuarentena, por el dichoso COVID. Y como seguro que a vosotros, me apena que alguien a quién yo quiero tenga que pasar la noche en soledad. Un fuerte beso para ti que cenas sin compañía. Creo que está mal esto, y solo por el sacrificio todos debíamos de celebrar con esas personas otra cena igual cuando se pueda. Así que, apuntaos eso. Si no hay cena por COVID hoy, entonces se celebra la Nochebuena otra vez la semana que viene, en Enero o en Marzo si es necesario, que siempre hay que celebrar. 

Así que, que nada te quite la alegría de celebrar una fiesta. Y hoy, como decía el gran Ángel Martín en su informativo, llévate a la cena un mensaje muy claro, "Tú no eres culpable del COVID"... y recuérdale a tu cuñado lo que te dije de los BitCoins.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, diciembre 23, 2021

BlockChain & SmartContrats: Primer Smart Contract con Solidity

Cuando estaba pensando en que contar para esta serie de artículos de BlockChain & SmartContracts sabía que para llegar al objetivo propuesto tendría explicar en detalle qué son los Smart Contracts, sus usos, sucesos de actualidad que están revolucionando parte de Internet. Al final llegué a la conclusión de que se aprende bastante más haciendo que mirando. Así que antes de continuar con la serie voy a explicaros qué es un Smart Contract enseñándoos a vosotros mismos a programarlo en Solidity.

Figura 1: BlockChain & SmartContrats: Primer Smart Contract con Solidity

En este artículo de hoy voy a realizar una introducción práctica a Smart Contracts creando un contrato básico que maneje las URLs de los artículos de un blog, como podría ser ser "El lado del mal". Para ellos vamos a utilizar Solidity que es el lenguaje de Smart Contracts que se usa en la Blockchain de Ethereum, una de las Blockchain que alberga el mayor número de estos contratos inteligentes. Esto es porque es uno de los lenguajes que más características ofrece a nivel de desarrollo y además de que se puede usar en la Blockchain de Polygon y Solana con algunos ajustes.

Primer SmartContract con Solidity  

Como herramienta de desarrollo vamos a utilizar Remix, un IDE diseñado para Solidity y que además corre sobre la web, con lo que no hace falta instalarlo, también ofrece numerosas utilidades para testear los contratos y “subirlos” a la Blockchain

Figura 2: Remix

Para compilar el código utilizaremos la EVM(Ethereum virtual machine) de Ethereum que viene instalado por defecto en la app de Remix. Me gustaría aclarar que en esta introducción asumiré que sabéis programación básica y si además conocéis conceptos sobre OOP (Programación Orientada a Objetos) será muy fácil que sigáis esta explicación.

Figura 3: Estructura de un Smart Contract

Los archivos en Solidity deben tener la extensión .sol, pero lejos de eso su máquina compiladora o EVM no requiere que tus proyectos tengan una estructura exacta, en este caso se parece a lenguajes como JavaScript. Pero por comodidad vamos a seguir las convenciones establecidas por la comunidad. Un proyecto cualquiera de Web3 que requiera Smart Contracts se suele estructurar como se ve en la Figura 3. Como podéis ver los contratos que se usan en esta webapp se guardan bajo el directorio de contratos. No se suelen usar más porque es muy raro que para una aplicación se utilicen más de 3 o 4 contratos.

Primer paso: versión de Solidity y definir el contrato

La unidad mínima de ejecución de código en Solidity es un contrato, al igual que en Java si no tienes una clase Main no puedes ejecutar código. Para crear este contrato crearemos un archivo llamado FirstContract.sol. Lo primero que tenemos que hacer es definir la versión de Solidity que utilizaremos, en nuestro caso usaremos la última versión la 0.8.x que ha traído numerosas funcionalidades al lenguaje. La versión se define así:
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

Después definiremos contrato y le daremos nombre:
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

contract FirstContract {}
En nuestro ejemplo queremos que el contrato tenga algunos datos del dueño del blog como su edad, su nombre, su dirección de eth (muy importante) y los datos del blog propiamente, que será una lista con todas las URLs de sus posts. Para ello tenemos que conocer las variables y tipos de datos básicos que podemos utilizar.

Variables y tipos de datos básicos
 
Una cosa muy importante que debemos tener en cuenta es que todo lo que se guarde como estado se guardará para siempre en la Blockchain y eso tiene un coste. En Solidity existen los siguientes tipos de datos básicos:
  • Bool: Son expresiones booleanas.
  • Strings: Listas de caracteres, palabras, frases. Es decir, cadenas de texto.
  • Integers: números enteros que se pueden definir de diferentes maneras en función de lo que necesitemos.
  • Address: que es un tipo de dato muy especial en el que se guardan direcciones de ethereum ya sean cuentas de wallets o direcciones de otros contratos.
  • Arrays: En Solidity los arrays pueden ser de cualquier tipo pero solo pueden contener elementos de un mismo tipo. En versiones anteriores de Solidity solo se permitía usar arrays con una longitud fija, lo que cambiaba el paradigma un poco, pero a partir de la versión 0.8.x se pueden utilizar arrays dinámicos.
En el código se definirían escribiendo primero la palabra clave del tipo de dato después el nombre y la asignación. En Solidity el punto y coma es obligatorio así que no lo olvidéis.
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

contract FirstContract {
// a boolean is defined like bool isAdult = ownerAge <= 18
address public owner; // In the form 0x923c89…
string public ownerName = "Chiquito de la Calzada";
uint256 public ownerAge = 23;
// An array that will contain all the posts urls
string[] public posts;
} 
Propiedades y métodos

También queremos unas cuantas funciones para actualizar el dueño del contrato, añadir o eliminar Posts, obtenerlos. Los contratos en Solidity funcionan de manera muy parecida a las clases en programación orientada a objetos. Tienen propiedades y métodos pero una vez subidos a la Blockchain solo se pueden acceder a los métodos. Al igual que en las clases de OOP creamos un constructor que servirá para inicializar el objeto con unas ciertas propiedades. Los métodos (también llamados funciones) y el constructor se definen de la siguiente manera:
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

contract FirstContract {
    // code that goes before …
    //Contract contstructor
constructor(address _firstOwner){
    owner = _firstOwner;
     }
  //Definition of contract methods
    function setOwnerState(
        address _newOwner,
        string memory  _ownerName,
        uint256  _age
    ) public {
        require(msg.sender == owner, "Error, you are not the owner");
        owner = _newOwner;
        ownerName = _ownerName;
        ownerAge = _age;
    }
}
Como veis en el código he introducido muchas cosas nuevas, vamos a explicarlas una a una:

Figura 4: Declaración del método o función

Para declarar la función se utiliza la palabra reservada function y como en la mayoría de los lenguajes se definen los parámetros como si fueran variables pero sin asignación. Os habréis dado cuenta de que usó la palabra memory al declarar el string _ownerName, eso lo veremos más adelante.


Figura 5: Modificadores de acceso

Acto seguido podemos ver que está escrita la palabra reservada “public”. Esta palabra es un modificador de acceso, estos se pueden establecer en las variables globales si queremos pero en las funciones son obligatorias. Por defecto en Solidity existen los siguientes:
  • Public: Establece la función como pública y a está podrá acceder cualquier persona que posea el contrato y también podrá ser usada en los contratos que hereden de este.
  • Private: La función solo puede ser llamada por el mismo contrato pero no será heredable.
  • Internal: Es como public solo que deja de ser accesible por las personas.
  • External: La función será accesible por otros contratos, pero ni se heredará ni será accesible por el contrato actual.
Figura 6: Require

Es una función en la que evaluamos condiciones y si no se cumplen rompen el flujo de ejecución del Smart Contract y devuelve al cliente un error con el string que pasemos. En este caso accedemos a quién llama la función y si esta persona no es el dueño la función no se ejecutará.

Toda función que pueda ser llamada desde fuera tiene una variable accesible llamada “msg”. Esta tendría las siguientes propiedades:
  • msg.sender: La direccion de eth de quién llamo la funcion.
  • msg.value: La cantidad de eth que se ha enviado con esa función.
  • Otras más que por ahora no voy a nombrar que no son importantes en este momento.
Las Naming Conventions son simplemente las convenciones establecidas a la hora de nombrar variables, funciones… En Solidity son las siguientes:
  • Uso de barra baja para variables locales, sirve para distinguir fácilmente el ámbito en el que puede actuar una variable, si la variable es global pues no hay que hacer nada, pero si por el contrario la variable tiene un ámbito local en una función por ejemplo se utiliza la barra baja para nombrarla “_variable”.
  • CamelCase: La convención para nombrar variables, funciones, objetos… Es la misma que en JavaScript, el uso de la nomenclatura CamelCase. La cual simplemente es “esMayorDeEdad”.
Condicionales y bucles

Ahora podemos cambiar el dueño del contrato y sus propiedades siempre que queramos. Vamos a implementar unas funciones que nos permitan añadir posts, eliminarlos y leerlos utilizando condicionales y bucles.
  • Condicionales: En Solidity funcionan igual que en otros lenguajes pero las expresiones de evaluación no, además como todo tiene que correr dentro de un nodo de la Blockchain que solo maneja números y direcciones no existen como tal strings puros, entonces manejar strings se vuelve peliagudo a veces como cuando hay que compararlos. Lo que debemos hacer es hashearlos mediante la función keccka256 y entonces compararlos.
  • Bucles: Funcionan igual que en lenguajes como Java solo que en Solidity solo tenemos la versión normal del “for” en la que hay que hacer i++ y demás.
Vamos a crear ahora unas cuantas funciones para añadir, eliminar posts

_existsUrl: Esta función se va a encargar de decirnos si ya se guardó antes una URL.
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

contract FirstContract {
    // code that goes before …
    //Contract contstructor
    constructor(address _firstOwner){
    owner = _firstOwner;
    }
    function addPostUrl(string memory _url) public {
        require(msg.sender == owner, "Error, you are not the owner"); 
        require(!_existsUrl(_url), "The url already exists");
        posts.push(_url);
    }
}
Primero el parámetro que se le pasa es un string memory porque no queremos que eth guarde esos datos en la Blockchain. Después le asignamos el modificador private dado que no queremos que la función sea accedida desde fuera de nuestro contrato. Os habréis fijado que tenemos unos cuantos modificadores más, eso lo explicaré en la continuación de este artículo.

Posteriormente le decimos que retorne un valor booleano. Iniciamos un bucle tal y como vemos en el código para iterar los posts que están dentro del array. Dentro del bucle evaluamos que si existe retorna falso. Puede parecer un poco raro como se hace la comparación entre “_url” y “posts[i]” pero Solidity requiere que los strings se comparen de esa forma. Finalmente si ningún valor ha coincidido le retornamos false.

addPost: Esta función se va a encargar de añadir las URLs de los post a la Blockchain.
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

contract FirstContract {
    // code that goes before …
    //Contract contstructor
    constructor(address _firstOwner){
    owner = _firstOwner;
     }
  //Definition of contract methods
    function addPostUrl(string memory _url) public {
        require(msg.sender == owner, "Error, you are not the owner"); 
        require(!_existsUrl(_url), "The url already exists");
        posts.push(_url);
    }
}
Definimos la función con el parámetro de la URL que será de tipo string y además con el modificador memory para asegurarnos que eth no guarda este valor en la Blockchain. Como modificador de acceso le ponemos publicidad puesto que queremos poder llamarla desde fuera del contrato. Evaluamos si quien envía la petición es el dueño del contrato, si no lo es rompemos el flujo de ejecución. De lo contrario evaluamos que no exista ninguna url como la que nos pasa. Por último hacemos un push al array de los posts. Cabe destacar que el método push solo está disponible en los arrays de tipo memory.

getPosts: Esta función retorna todos los posts almacenados en la Blockchain.
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

contract FirstContract {
    // code that goes before …
    //Contract contstructor
    constructor(address _firstOwner){
    owner = _firstOwner;
     }
    function getPosts() public view returns(string[] memory){
       return posts;
    }
}
Primero definimos la función y le ponemos un modificador de acceso “público”, después le añadimos “view” un modificador que simplemente le dice a Solidity que la función no realiza escritura en la base de datos con lo que no nos cobrara fees. Finalmente le decimos que retorne un array de strings.

● deletePost: Esta función se va a encargar de eliminar la url proveída de la Blockchain.
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;
	
contract FirstContract {
// code that goes before …
//Contract contstructor
constructor(address _firstOwner){
owner = _firstOwner;
 }
function deletePostUrl(string memory _url) public {
require(_existsUrl(_url),
"The provided url does not exist"
);
for(uint i=0; i<posts.length; i++){
if( keccak256(abi.encodePacked(_url))==
    keccak256(abi.encodePacked(posts[i]))
){
// as we do not care about the orde
delete posts[i];
    }
   }
  }
}
Primero definimos la función y el parámetro que va a recibir, que va a ser igual que en la anterior función. Le añadimos el modificador de acceso público y como no retorna nada pues no hace falta poner el “returns”. Después nos aseguramos de que existe la URL que hay que borrar. Por último creamos el array y cuando encontramos el elemento simplemente lo eliminamos con la palabra reservada delete. Cabe destacar que solo habrá que eliminar una vez la URL dado que por el diseño que hemos implementado no puede existir una misma URL dos veces.

Figura 7: Libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación"
de Yaiza Rubio y Félix Brezo

Ahora tenemos un Smart Contract funcional. Como este artículo ha quedado muy larga continuaremos desarrollando el contrato en el siguiente artículo de la serie de Blockchain & Smart Contracts en la que veremos conceptos más avanzados de Solidity y testearmos y desplegaremos nuestro contrato a la “TestNet” de Ethreum. Os dejo el código en este repositorio de GitHub. Más artículos sobre este mundo Web3:
¡Nos vemos en próximos artículos de esta serie!

Autor: Chema Garabito. Desarrollador Full-Stack. Ideas Locas Telefónica CDO.

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares