En este artículo comparto mi experiencia con la generación de un programa Rust y un BOT Telegram con ChatGPT.
Terminé mi 2022 como debe ser: programando y aprendiendo.
En esta última semana decidí probar la tan cacareada AI de ChatGPT para aprender a programar algunos de los propósitos que me planteado para el 2023, por ejemplo: Rust y un BOT para Telegram.
ChatGPT es una Inteligencia Artificial desarrollada por OpenAI que ha causado mucho revuelo desde el 30 de noviembre de 2022 por la madurez de sus modelos de ML (Machine Learning): GPT-3, que realiza una variedad de tareas de lenguaje natural, Codex, que traduce el lenguaje natural a código de programación, y DALL·E, que crea y edita imágenes originales.
El objetivo de OpenAI es desarrollar y promover una IA segura y “amigable”. El empresario estadounidense Sam Altman (ex presidente de la aceleradora de startups Y Combinator) cofundó OpenAI en 2015 con Elon Musk, quien abandonó el proyecto en 2020. Sam Altman se desempeña como CEO de la empresa con sede en San Francisco.
ChatGPT no es la primera, ni la única, ni la mas avanzada AI. Su mérito radica en ponerla en manos del público general de forma gratuita, aunque limitada, como un abrebocas de la revolución que se nos viene encima.
Generación de un programa en Lenguaje Rust con ChatGPT
Al intentar hacer un API en Rust para el manejo de una tabla de usuarios en una base de datos MongoDB, el resultado fue un poco frustrante.
Generé con ChatGPT prácticamente la totalidad de la API. El resultado fue bueno para animarme a aprender Rust, pero el programa generado a partir de la consulta a ChatGPT no funcionó.
Le pedí un programa completo que implementa operaciones CRUD (acrónimo de «Crear, Leer, Actualizar y Borrar», del original en inglés: Create, Read, Update and Delete) en una tabla de usuarios en MongoDB desde Rust, con cada operación en una función separada y la función main, todo en un único archivo .rs
Esto lo tuve que ir haciendo poco a poco para luego poder ir armando todas las partes.
Luego pedí implementar una API en Rust que maneje una tabla de usuarios en MongoDB con Endpoints para todas las operaciones CRUD y que siga el estilo REST, y que pueda ser llamada mediante Ajax en Javascript.
Lo hizo para una vieja versión de la dependencia de MongoDb para Rust, no me dio completamente la configuración del archivo Cargo.toml (en especial los `features` necesarios por ejemplo para el `serde`), no incluyó los `use` de todos los elementos necesarios (por ejemplo, para `tokio`), no incluyo los `struct` para los Form y Query en los `warp` que definen los Endpoints, entre otras muchas cosas.
Entendí algo importante: para un lenguaje de programación altamente tipado, que pudiera ser el sustituto de Lenguaje C, no es recomendable intentar aprender al estilo Learning-by-Example, en mi caso es necesario hacer algún curso, y luego meterle al Rust.
Generación de un Telegram BOT en Lenguaje Python con ChatGPT
Acá si obtuve un resultado muy satisfactorio por dos razones: ya sabía programar en Python y algunos años atrás intenté hacer este trabajo en PHP (más o menos en 2018, basado en este repo de Eleirbag89 y este artículo de Stackoverflow de how to get price from bitcoin to USD with PHP api) y de alguna manera ya sabía como iniciar el desarrollo del BOT, aunque en el tiempo cambiaron algunas cosas menores.
Según la Wikipedia, Un BOT es un programa informático que efectúa automáticamente tareas reiterativas mediante Internet a través de una cadena de comandos o funciones autónomas previas para asignar un rol establecido; y que posee capacidad de interacción, cambiando de estado para responder a un estímulo.
Inicialmente el proyecto tenía el objetivo de dar las cotizaciones del Bitcoin para luego llegar a tener un mecanismo de avisar cuando la criptomoneda llegara a un valor mínimo específico, enviando una alerta por medio del mismo Telegram.
Lo que me gusto de este ejercicio fue que un proyecto dormido por 4 años, al que le había invertido muchas horas de trabajo para finalmente dejarlo a un lado (y hasta perdí el código fuente por varias mudanzas de un país a otro, cambio de computadoras y no ponerlo en un repositorio Github) a poder desarrollarlo desde cero en 21 horas (2 días de trabajo prácticamente).
La conversación fue en español completamente y ChatGPT lo habla muy bien.
Inicialmente le pedí una información general del desarrollo.
Como la versión gratuita de ChatGPT tiene limitaciones en el tamaño de las respuestas, poco a poco le voy pidiendo el resto de las cosas que se cortan.
Cuando se le pide el código en un lenguaje de programación específico, al final o en algún momento se le debe pedir también los archivos de configuración, los procedimientos de instalación, entre otras cosas, para evitar -por ejemplo- conflictos de versiones de dependencias.
Lo otro es que inicialmente le pedí que me diera el procedimiento para poner a trabajar el BOT en el servicio gratuito de Vercel, y hasta el momento no logré ponerlo a funcionar. Me di por vencido y me tocó poner una pregunta en StackOverflow a ver si alguien me ayuda a solucionar un problema con el forwarding de puertos entre el BOT en Phyton y la instancia Serverless de Vercel.
Al final fue una buena experiencia (no hay mal que por bien no venga), porque aprendí los dos modos de trabajo de los Telegram BOTs, el Polling y el WebHook, aprendí a desplegar aplicaciones en Fly.io, y lo más importante: al sentirme bloqueado, minimizado, derrotado por no poder hacer el despliegue en Vercel, en cuestión de horas busqué una solución viable con algo nuevo, aunque eso implique invertir tiempo en aprender y aprender y aprender más! Eso mismo me paso cuando Heroku finalizó su capa gratuita y me tocó mudar el backend de FynApp a Vercel y frontend a Github Pages.
CONCLUSION
fue una experiencia muy interesante y enriquecedora. Definitivamente el proceso creativo inicial de desarrollo se agiliza y me retó a terminarlo en tiempo record.
Sin embargo aun no voy a perder mi empleo al ser sustituido por una AI.
La cereza del pastel fue las correcciones que hizo mi mamá faltando media hora para terminar el 2022 cuando le mostré este Post. Fue algo hermoso e inesperado, además de quedar contratada para hacer la revisión de todos los Post para mi proyecto de Marca Personal.
Extracto de la Interacción con la AI
La conversación con ChatGPT para generar el Telegram BOT fue así:
Carlos:
dame la programacion necesaria para un bot de telegram en python
Para crear un bot de Telegram en Python, necesitarás hacer lo siguiente:
Asegúrate de tener Python instalado en tu computadora. Si aún no lo tienes, puedes descargarlo desde el sitio oficial de Python (https://www.python.org/downloads/).
Instala la biblioteca de Python para el API de Telegram llamada python-telegram-bot. Puedes hacer esto ejecutando el siguiente comando en tu consola:
Copy code
pip install python-telegram-bot
Crea una cuenta de desarrollador y un bot en el BotFather de Telegram.
El BotFather es un bot en Telegram que te permite crear y gestionar bots. Para crear un bot, debes hablar con el BotFather en Telegram y seguir las instrucciones que te da. Al final de este proceso, el BotFather te dará un token de acceso para tu bot. Guarda este token, ya que lo necesitarás más adelante.
Crea un nuevo archivo de Python y coloca el siguiente código en él:
Copy code
import logging
from telegram.ext import Updater, CommandHandler
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
def start(update, context):
update.message.reply_text('Hola! Soy un bot de Telegram')
def main():
# Creamos el Updater y le pasamos el token de acceso
updater = Updater('TOKEN', use_context=True)
# Añadimos un manejador para el comando /start
updater.dispatcher.add_handler(CommandHandler('start', start))
# Iniciamos el bot
updater.start_polling()
updater.idle()
if name == 'main':
main()
Reemplaza la cadena 'TOKEN' en la línea updater = Updater('TOKEN', use_context=True) por el token de acceso que obtuviste del BotFather.
Ahora, puedes ejecutar el archivo de Python para iniciar tu bot. Si todo ha ido bien, tu bot debería estar en línea y responder a los comandos que envíes a través de Telegram.
Espero que esto te ayude a empezar a crear tu bot de Telegram en Python. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.
…
Carlos:
agrega un handler para leer una api rest y devolver el resultado al usuario
Para agregar un manejador que lea una API REST y devuelva el resultado al usuario, puedes hacer lo siguiente:
Importa la biblioteca requests al principio de tu archivo de Python:
Copy code
import requests
Define una función que haga la llamada a la API REST y procese el resultado. En este ejemplo, asumimos que la API devuelve un objeto JSON y que queremos mostrar al usuario el valor del campo 'mensaje' del objeto:
Copy code
def leer_api(update, context):
# Hacemos la llamada a la API
response = requests.get('https://mi-api.com/recurso')
# Procesamos el resultado
if response.status_code == 200:
# Si la llamada fue exitosa, obtenemos el objeto JSON
resultado = response.json()
mensaje = resultado['mensaje']
update.message.reply_text(mensaje)
else:
# Si la llamada no fue exitosa, informamos al usuario
update.message.reply_text('Ha ocurrido un error al leer la API')
Añade un manejador para el comando /leer_api que llame a la función leer_api cuando se ejecute el comando:
Copy code
updater.dispatcher.add_handler(CommandHandler('leer_api', leer_api))
Ahora, cuando el usuario envíe el comando /leer_api a través de Telegram, el bot hará una llamada a la API REST y enviará al usuario el valor del campo 'mensaje' del objeto JSON que recibió.
Espero que esto te ayude a añadir la funcionalidad que necesitas. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.
…
Carlos:
agrega un handler para leer una api rest del weather ppara una ciudad y devolver el resultado al usuario
Para agregar un manejador que lea una API REST del tiempo para una ciudad y devuelva el resultado al usuario, puedes hacer lo siguiente:
Importa la biblioteca requests al principio de tu archivo de Python:
Copy code
import requests
Define una función que haga la llamada a la API REST y procese el resultado. En este ejemplo, asumimos que la API del tiempo que estamos usando es OpenWeatherMap y que queremos mostrar al usuario la temperatura actual en grados Celsius de la ciudad que se le indique:
Copy code
def obtener_tiempo(update, context):
# Obtenemos el nombre de la ciudad del usuario
ciudad = " ".join(context.args)
# Validamos que se haya especificado una ciudad
if ciudad:
# Hacemos la llamada a la API del tiempo
API_KEY = 'TU_API_KEY' # Reemplaza por tu API key de OpenWeatherMap
url = f'https://api.openweathermap.org/data/2.5/weather?q={ciudad}&units=metric&appid={API_KEY}'
response = requests.get(url)
# Procesamos el resultado
if response.status_code == 200:
# Si la llamada fue exitosa, obtenemos el objeto JSON
resultado = response.json()
temperatura = resultado['main']['temp']
update.message.reply_text(f'La temperatura actual en {ciudad} es de {temperatura:.1f}°C')
else:
# Si la llamada no fue exitosa, informamos al usuario
update.message.reply_text('Ha ocurrido un error al leer la API del tiempo')
else:
# Si no se especificó una ciudad, informamos al usuario
update.message.reply_text('Por favor, especifica una ciudad')
Añade un manejador para el comando /tiempo que llame a la función obtener_tiempo cuando se ejecute el comando:
Copy code
updater.dispatcher.add_handler(CommandHandler('tiempo', obtener_tiempo))
Ahora, cuando el usuario envíe el comando /tiempo seguido del nombre de una ciudad a través de Telegram, el bot hará una llamada a la API del tiempo de OpenWeatherMap y enviará al usuario la temperatura actual en grados Celsius de la ciudad especificada.
Espero que esto te ayude a añadir la funcional
…
Carlos:
agrega un handler para leer tomar varios parametros del usuario y luego llamar a una api rest y devolver el resultado al usuario
Para agregar un manejador que lea varios parámetros del usuario, haga una llamada a una API REST y devuelva el resultado al usuario, puedes hacer lo siguiente:
Importa la biblioteca requests al principio de tu archivo de Python:
Copy code
import requests
Define una función que procese los parámetros del usuario y haga la llamada a la API REST. En este ejemplo, asumimos que queremos que el usuario nos proporcione dos parámetros: valor_1 y valor_2, y que queremos hacer una llamada a una API que multiplica estos dos valores y devuelve el resultado:
Copy code
def multiplicar(update, context):
# Obtenemos los parámetros del usuario
try:
valor_1 = int(context.args[0])
valor_2 = int(context.args[1])
except (ValueError, IndexError):
update.message.reply_text('Por favor, proporciona dos valores numéricos')
return
# Hacemos la llamada a la API
url = 'https://mi-api.com/multiplicar'
data = {'valor_1': valor_1, 'valor_2': valor_2}
response = requests.post(url, json=data)
# Procesamos el resultado
if response.status_code == 200:
# Si la llamada fue exitosa, obtenemos el resultado
resultado = response.json()['resultado']
update.message.reply_text(f'El resultado de multiplicar {valor_1} y {valor_2} es {resultado}')
else:
# Si la llamada no fue exitosa, informamos al usuario
update.message.reply_text('Ha ocurrido un error al llamar a la API')
Añade un manejador para el comando /multiplicar que llame a la función multiplicar cuando se ejecute el comando:
Copy code
updater.dispatcher.add_handler(CommandHandler('multiplicar', multiplicar))
Ahora, cuando el usuario envíe el comando /multiplicar seguido de dos valores numéricos a través de Telegram, el bot hará una llamada a la API que multiplica estos valores y enviará al usuario el resultado de la multiplicación.
Espero que esto te ayude a añadir la funcionalidad que necesitas. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.
…
Carlos:
como hago para hacer deploy de este programa en vercel y que responda al BotFather de Telegram
Para hacer deploy de tu programa de Python en Vercel y que responda al BotFather de Telegram, debes seguir estos pasos:
Asegúrate de tener una cuenta en Vercel y de haber instalado la CLI de Vercel en tu computadora. Si aún no tienes una cuenta en Vercel, puedes crearla en https://vercel.com/. Si aún no has instalado la CLI de Vercel, puedes hacerlo ejecutando el siguiente comando en tu consola:
Copy code
npm install -g vercel
Inicia sesión en Vercel desde la consola usando el comando:
$ vercel login.
Crea un archivo vercel.json en el directorio raíz de tu proyecto con el siguiente contenido:
Copy code
{
"version": 2,
"builds": [
{ "src": "*.py", "use": "@vercel/python" }
]
}
Este archivo indica a Vercel qué archivos deben ser procesados y con qué runtime. En este caso, estamos indicando que todos los archivos con extensión .py deben ser procesados con el runtime de Python de Vercel.
Crea un archivo .env en el directorio raíz de tu proyecto con el siguiente contenido:
Copy code
TOKEN=TU_TOKEN
Reemplaza TU_TOKEN por el token de acceso que obtuviste del BotFather cuando creaste tu bot. Este archivo contiene las variables de entorno de tu proyecto. En este caso, estamos definiendo la variable de entorno TOKEN que luego podremos usar en nuestro código para acceder al token de acceso del bot.
Ejecuta el comando vercel en la consola para hacer deploy de tu proyecto. Vercel te pedirá que selecciones un nombre para tu proyecto y que confirmes la configuración de deploy.
$ vercel
Una vez que el deploy haya finalizado, Vercel te proporcionará una URL.
Copia esta URL y pégala en la sección "Webhook URL" del menú de configuración del BotFather.
Luego, envía el comando /setwebhook al BotFather para que comience a enviar actualizaciones a tu bot.
$ curl -X POST https://api.telegram.org/bot/setWebhook -H "Content-type: application/json" -d '{"url": "https://project-name.username.vercel.app/api/webhook"}'
Con estos pasos, tu bot debería estar configurado y listo para recibir actualizaciones a través de Vercel. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.
…
Carlos:
cuales comandos necesito para poder instalar telegram.ext y el programa anterior
Para instalar la biblioteca telegram.ext y ejecutar el programa de Python que te proporcioné anteriormente, necesitarás hacer lo siguiente:
Asegúrate de tener Python instalado en tu computadora. Si aún no lo tienes, puedes descargarlo desde el sitio oficial de Python (https://www.python.org/downloads/).
Instala la biblioteca de Python para el API de Telegram llamada python-telegram-bot. Puedes hacer esto ejecutando el siguiente comando en tu consola:
Copy code
pip install python-telegram-bot
Crea un archivo de Python y coloca el siguiente código en él:
Copy code
import logging
from telegram.ext import Updater, CommandHandler
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
def start(update, context):
update.message.reply_text('Hola! Soy un bot de Telegram')
def main():
# Creamos el Updater y le pasamos el token de acceso
updater = Updater('TOKEN', use_context=True)
# Añadimos un manejador para el comando /start
updater.dispatcher.add_handler(Command
…
Carlos:
como hago para crear un pipenv con todo esto
Para crear un pipenv con la biblioteca python-telegram-bot y el código que te proporcioné anteriormente, debes seguir estos pasos:
Asegúrate de tener pipenv instalado en tu computadora. Si aún no lo tienes, puedes instalarlo ejecutando el siguiente comando en tu consola:
Copy code
pip install pipenv
Crea un directorio para tu proyecto y accede a él a través de la consola.
Ejecuta el siguiente comando para crear un pipenv y especificar que quieres usar Python 3.8:
Copy code
pipenv --python 3.8
Una vez que el pipenv haya sido creado, instala la biblioteca python-telegram-bot ejecutando el siguiente comando:
Copy code
pipenv install python-telegram-bot
Crea un archivo de Python y coloca el siguiente código en él:
Copy code
import logging
from telegram.ext import Updater, CommandHandler
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
def start(update, context):
update.message.reply_text('Hola! Soy un bot de Telegram')
def main():
# Creamos el Updater y le pasamos el token de acceso
updater = Updater('TOKEN', use_context=True)
# Añadimos un manejador para el comando /start
updater.dispatcher.add_handler(CommandHandler('start', start))
# Iniciamos el bot
updater.start_polling()
updater.idle()
if name == 'main':
main()
Reemplaza TOKEN por el token de acceso que obtuviste del BotFather cuando creaste tu bot.
Crea un archivo Pipfile en el directorio raíz de tu proyecto con el siguiente contenido:
Copy code
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
python-telegram-bot = "*"
[requires]
python_version = "3.8"
…
MINE: MarketPlace de NFT para títulos de propiedad de bienes muebles físicos (vehículos, motos, botes, entre otros).
MINE es una plataforma que permite hacer transacciones sin necesidad de presencia física de los compradores y vendedores en las localidades o países donde se realice la operación, con transacciones de compra/ventas pagadas en criptomonedas, con compras protegidas para el resguardo de la seguridad tanto del comprador como del vendedor.
Esta solución está basada en tecnologías de la Web3, mediante la creación de una DApp desplegada en la Blockchain de Ethereum.
Los Usuarios (compradores, vendedores) deben conectar su Wallet para:
Registrarse.
Autenticarse.
Registrar nuevos bienes para la venta.
Comprar bienes.
Adicionalmente deben tener datos de contacto para negociar bienes y los precios:
DNI / Cédula.
Nombre.
Apellido.
Teléfono.
Correo electrónico.
Habrá una exhibición pública de los bienes. Los observadores también necesitan una Wallet para consultar y ver.
Los Bienes serán mostrados por categorías.
La moneda para mostrar los precios de los Bienes será US Dollar y la de intercambio oficial será el ETH.
Inicialmente estará solamente disponible en Medellín, Colombia.
Se asociará una comisión a cada uno de los NFT registrados en la DApp para que cada vez que se transfiera este NFT envíe un porcentaje al propietario del Smart Contract.
Se cobrará una comisión por cada venta realizada.
¿Cuál problema soluciona el proyecto?
¿Te ha pasado que quieres comprar o vender un vehículo fuera de tu localidad y no encuentras las personas o herramientas necesarias para poder realizar la transacción?
¿Estás cansado de los Marketplaces en redes sociales que no entregan la información verdadera de lo que buscas, y si ofreces un producto no se le da la suficiente visibilidad?
¿Estás cansado de pagar altas comisiones por transferencias bancarias para pagar bienes?
¿Cómo solucionarlo?
MINE: Una plataforma que permite hacer transacciones sin necesidad de presencia física de los compradores y vendedores en las localidades o países donde se realice la operación, con transacciones de compra/venta pagadas en criptomonedas, con compras protegidas para el resguardo de la seguridad tanto del comprador como del vendedor.
Esta solución está basada en tecnologías de la web3, mediante la creación de una DApp desplegada en la Blockchain de Ethereum.
Impacto para la Sociedad
En Latinoamérica no hay un Marketplace de NFT de bienes físicos como este.
Ahorro de Tiempo: comprador y vendedor pueden hacer las transacciones sin salir de casa/oficina.
Confianza y credibilidad entre las partes: porque los Bienes son auditados por peritos certificados, y estos Peritos pueden ser escogidos por los compradores.
No pasar por bancos: evitando así intermediarios.
Evitar altos “fees” de grandes transacciones y/o transferencias internacionales.
Valor Agregado respecto a la Web2
Descentralización:
La lógica de negocios es un Smart Contract.
El Frontend del App no puede ser censurado.
Los datos no están bajo control de los desarrolladores.
La Blockchain donde está desplegado el Smart Contract es Ethereum.
El Frontend está construido un de código abierto.
Trazabilidad de bienes, transacciones, firmas de involucrados.
Transparencia.
Actores
Comprador:
Pone el dinero de la compra del Bien.
Debe tener los fondos en su Wallet.
Paga el impuesto.
Vendedor:
Dueño del Bien.
Debe cubrir los gastos de la publicación del contrato y minteo (emisión) del NFT, con las características especificadas más adelante.
Paga el fee (comisión) del Perito o la certificación.
Peritos / Certificadores:
Certificar la validez del Bien, luego podrá venderse.
Firma la transacción cuando se cambia el Bien de dueño en el mundo real.
Cobrar fee de transacciones.
Servicio de creación de documentos digitales: si un producto no tiene título de propiedad, se genera.
El perito es el responsable legal de la transacción.
Notario:
A nivel físico-legal, realiza el cambio de los documentos.
A nivel digital, firma la transacción con su dirección / Wallet.
Recibe los impuestos.
Administrador (nuestra Wallet):
Cobrar comisiones.
Manda a ejecutar transferFrom de la cuenta del comprador a la del vendedor.
Aparte de la foto principal, puede haber fotos adicionales (ejemplo: moto, vehículo, bote: desde distintos ángulos).
Un apartado de fotos solo visible para el vendedor y el comprador que ya de su visto bueno de intención de compra, y de los peritos, en donde estará el documento de propiedad.
Posibles Problemas
Conversión de ETH a USD/COP u otra moneda, y viceversa.
NFT duplicados (que se publique el mismo Bien para la venta varias veces).
Más de un dueño.
Penalizaciones en caso de fraude en las propiedades.
Arquitectura
Planes a Futuro
Los bienes solamente podrán ser vendidos siempre que estén verificados por un Perito certificado. Los Peritos deben tener una certificación oficial para ejercer sus funciones, validados por las entidades reguladoras a nivel de la región donde ejerzan sus actividades. Para esto aparecerá una insignia al mostrar el Bien que indique tal condición.
Los Peritos serán los encargados de auditar y certificar que los Bienes existan y estén en regla. Sobre ellos recaerá la responsabilidad legal de legitimidad de los Bienes. Podrán interactuar con el sistema usando sus Wallets y ganando una comisión por las compras y las ventas.
Compra/venta de bienes inmuebles: propiedades raíz, locales comerciales, entre otros agregando a la Metadata dirección, coordenadas GPS, fotos de exteriores e interiores.
Compra/venta de activos virtuales: parcelas en el Metaverso, obras de arte NFT, entre otros.
Compra/venta de Joyas.
Subasta de bienes y activos.
Expandir la operación a otros países de Latinoamérica.
Utilizar como medio de pago Stable Coins cómo Tether(USDT).
Fotos adicionales en la Metadata de los Bienes, así como las fotos privadas.
Encriptaciones de datos sensibles de los usuarios (PII) almacenados en el IPFS.
Mostrar los precios en moneda local (por ejemplo, COP).
Herramientas utilizadas
Frontend
ReactJs
Web3.js (Wallet connection)
Chakra-UI (maquetación)
Mocha (testing)
HTML
CSS
JavaScript
VS Code (coding & peer programming)
Backend
Solidity
Hardhat
Open Zeppelin
Chain.link (integración de tasa cambiaria entre ETH – y USDT)
Nuestra convocatoria como equipo fue bastante espontánea. Eimer convocó a Carlos, luego ambos convocaron en el canal #General del Discord del reto #EthDevProgram y así aparecieron Javier, José y Fidelina. Finalmente, el grupo adoptó el nombre GOF5 (Gang of Five).
Entre nosotros hay un espíritu de igualdad y se respetan las intervenciones de cada quién. Esto surgió de manera natural desde el principio.
Comenzamos a reunirnos para ver cuáles ideas teníamos. Cada uno expuso su idea, y con mente maestra íbamos agregando detalles y otras cosas que fueron apareciendo.
Dejamos aterrizar la idea un día o dos, y luego se sometió a votación. Nadie hizo presión, ni publicidad, ni lobby. No se compraron votos. No importó tampoco de quién fueron las ideas.
Acordamos comenzar a hacer reuniones diarias para poder alcanzar las metas. Las primeras reuniones duran menos de 1 hora para poner a funcionar la mente maestra y darle forma al proyecto. Luego de establecer el tablero Jira, comenzar a crear y asignar tareas en el Backlog, nos reunimos diariamente en Stand Ups de 15-20 minutos para hacer el seguimiento, viendo que se hizo el día anterior, que se planea hacer el día de hoy y la existencia de algún bloqueo.
Comenzamos a trabajar en el Whitepaper, en reuniones un tanto maratónicas (3-5 horas) pero muy productivas. Delimitamos el proyecto, describimos actores, procedimientos, y sobre todo, la parte conceptual: la historia, el impacto, valor agregado de la Web 3 sobre hacerlo en la Web 2, posibles problemas, marco legal, el pitch, las tecnologías, entre otras cosas.
En un momento dado perdimos la fe en el proyecto, porque llegamos a pensar que no tenía mucho sentido la parte conceptual respecto a las ventajas de la Blockchain vs las aplicaciones actuales de la Web 2.0 y la complejidad de los asuntos legales implicados en el traspaso de bienes, sin embargo, logramos establecer bien el valor agregado que podemos dar solucionando el problema con nuestra plataforma que facilitaría y daría seguridad en la compra/venta de bienes de los usuarios.
En otra sesión maratónica definimos el Pitch Elevator de 90 segundos, la presentación del proyecto, los logos para el Dapp y el grupo, y una maqueta con el diseño de las pantallas.
Ya con la agenda para las próximas 2 semanas más clara, comenzamos a trabajar en equipos para el Frontend, Backend y Operaciones.
Nuestro slogan oficial: “Resolvamos con lo que hay”.
Metodología de trabajo, Seguimiento y Entregables
Establecimos Scrum como metodología de trabajo ágil y Jira como herramienta para hacer el seguimiento.
Establecimos Sprint de 1 semana a partir del 23 de agosto de 2022.
Se hizo en 2 Sprint y al final de cada uno hubo un entregable:
Se convoca cada año para educar y capacitar a la comunidad para construir y usar sistemas descentralizados.
Es una conferencia para constructores de todo tipo: desarrolladores, diseñadores, investigadores, implementadores de clientes, ingenieros de pruebas, operadores de infraestructura, organizadores comunitarios, economistas sociales, artistas y más.
Para mí fue magia pura. Las palabras no son suficientes para describir esta increíble experiencia. Gracias al apoyo total recibido por Source Meridian, con el cual esta experiencia fue posible para mí.
Devcon Bogota 2022 Carlos J Ramirez – Una Experiencia Inolvidable
Aparte de toda la gente nueva que conocí de la comunidad y el ecosistema, aparte de encontrarme con muchos de los compañeros, mentores y profesores del Ethereum Developer Program, fue darme cuenta del camino a seguir para consolidarme como Blockchain Developer.
Participantes del Platzi Ethereum Developer Program compartiendo en la Chiva Chillout de ETH Latam en la Devcon Bogota 2022
Preámbulo a la Devcon Bogota 2022
Terminé el Ethereum Developer Program el 13 de septiembre de 2022. Fueron 3 meses intensos en los que volví a sentirme como un estudiante universitario, con el rush de las entregas de trabajos, cursos, prácticas y el proyecto final.
La gente de Platzi nos consiguió entradas a precios de Developer para la Devcon y pensé “quiero estar allí, quiero ser parte de eso”. Le pedí apoyo a Source Meridian, la empresa en donde tengo el privilegio de trabajar desde 2019, y me apoyaron en todo; cómo es su costumbre, fue un apoyo por todo lo alto: inmejorable hospedaje, pasajes de avión, viáticos y traslados, todo.
El lunes antes de la Devcon asistí a un día completo de evento en español de ETH Latam.
Es difícil seleccionar la mejor presentación, pero una de las que más me impactó fue la de JJ Campusano, sobre ¿Qué es Ethereum? historia y futuro, desde 2013 hasta el 2030, la evolución de una red planetaria de coordinación humana.
Algunos de mis compañeros del Ethereum Developer Program de Platzi participaron como Developers y colaboradores y pude conocer de primera mano sus experiencias, que me animaron a participar en los próximos eventos de este tipo.
Pude ver la cantidad y la calidad de los proyectos, destacando los de Push.org (para enviar notificaciones entre usuarios vía Wallets) y Lit Protocol (encriptación de archivos en IPFS).
La Sustracción se trata de no dar mucho poder a las instituciones o grupos de personas, como sucede en el mundo de las empresas y gobiernos. “Sustraer no significa hacer menos, significa sustraer tu poder para poder lograr más educación, comunicación, coordinación e investigación”.
Otra charla en la apertura fue la de Vitalik Buterin “Ethereum en 30 Minutes”, donde explica aspectos conceptuales y técnicos de la Blockchain, el nuevo mecanismo de consenso PoS (Proof of Stake), el flujo de las transacciones, la estructura de los bloques, los Merkle Trees, los lenguajes de alto nivel, y los siguientes pasos luego de The Merge.
El archivo de Charlas y Workshops se puede acceder mediante la dirección:
Recuerdo uno en particular, el de “DAO Governance Design Jam” sobre la dinámica de la toma de decisiones en una DAO, en la que tuvimos oportunidad de compartir con @LayerOne de la MakerDAO, quien compartió experiencias de la vida real en una organización autónoma descentralizada.
Tuve oportunidad de asistir a Workshops sobre la nueva forma de llegar a consensos mediante el PoS (Proof of Stake), donde pude entender entre otras cosas el concepto del MEV (Maximal Extractable Value), que se refiere al valor máximo que se puede extraer de la producción de bloques por encima de la recompensa de estos, y las tarifas de gas estándares incluyendo, excluyendo y cambiando el orden de las transacciones en un bloque. Es una manera que tienen los validadores o participantes del PoS para priorizar los bloques que van a procesar, maximizando sus ganancias.
En el workshop “Demystifying Ethereum Assembly” aprendimos como incrustar Assembly en Solidity (el lenguaje de programación para crear Smart Contracts en la EVM de Ethereum). Aunque es un poco más difícil de entender e implementar, esta forma de programar ahorra los GAS fees, que son un tema de gran debate en la comunidad Ethereum por los altos costos de operación; un punto álgido en la adopción de esta Blockchain.
En el workshop “Hunting and Monitoring for On-Chain Attacks”, aprendimos a diseccionar un ataque en cadena del mundo real, clasificando cada paso que puede tomar el atacante en cuatro etapas distintas (financiación, preparación, explotación y lavado de dinero) y recorrimos el desarrollo de un enfoque heurístico/ML para identificar estos ataques utilizando la red Forta.
En el workshop “Build a DApp on Optimism: How to Conquer L2 Bridging”, aprendimos cómo crear fácilmente una DApp que aproveche L2 Bridge Box de Truffle, que ayuda a configurar rápidamente una DApp para manejar todas las complejidades que conlleva el puente L2. Estos puentes permiten descargar a la Mainnet (L1) de operaciones costosas, realizando los cálculos y actualizando el estado de la L1 únicamente con los resultados, y dejando el cómputo y el detalle de los resultados en la L2.
Finalmente, uno de los Workshops más espectaculares fue “Danksharding + Data Availability Sampling (DAS) Workshop”, donde estuve muy cerca de Vitalik Buterin (creador de Ethereum), de Dankrad Feist (creador del Danksharding) y del equipo detrás de esta tecnología en desarrollo.
El Danksharding es básicamente una propuesta para poder aumentar la cantidad de datos que se pueden almacenar en la Blockchain, para que se pueda utilizar como las bases de datos de nuestros tiempos. Esto debido a que el costo de almacenamiento en Ethereum es costoso, lo cual limita su uso y tamaño.
Side Events
Hubo gran cantidad de eventos paralelos a la Devcon.
Tuve oportunidad de ir a varios, entre ellos el Workshop de Chain.Link sobre NFT Dinámicos en las oficinas de Platzi, el evento de Platzi y NEAR en el hotel Hilton, el encuentro de Open Zeppelin en el Hyatt Grand Bogotá.
Los alumnos de Platzi tuvimos oportunidad de conocer a los mentores, profesores y representantes de la plataforma que llevaron el Ethereum Developer Program, al igual que toda la gente de la Ethereum Foundation.
La Devcon y el lugar de los SWAGs. Se trata de obsequios que dan los proveedores de servicios, patrocinadores, o personas que promueven sus proyectos. Los regalos son más que todo franelas, gorras, sweaters, tazas de café, entre otros. Tuve que comprar una maleta más grande para poder traerme todo lo que me regalaron.
Uno de mis preferidos fue el SWAG de ENS por tener mi nombre de dominio “carlosjramirez.eth”. El regalo consistió en una escarapela con mi avatar y la experiencia de un dispositivo NFC que genera un POAP (Proof of Attendance Protocol) al acercar el smartphone a la escarapela. El POAP lleva el mensaje “I met carlosjramirez.eth at Devcon 6”. Los POAPs se usan como constancia de que se estuvo en un lugar, se asistió a un evento o se conoció a alguien.
Otro SWAG interesante fue el café “ETHER Coffee: Devcon Bogotá Special Blend” que dieron como parte del paquete de inscripción en la Devcon. Un detallazo sin duda.
El cierre del Evento
“Ethereum no es sólo una tecnología, Ethereum es una comunidad, es un movimiento, y así como todos los movimientos, todas las comunidades, nosotros tenemos valores. Y uno de esos valores son las libertades civiles, derechos civiles”.
Kurt Opssahl habló sobre “Privacy and Free Expression” y la importancia de ampliar la comunidad de desarrolladores de Ethereum, de mantenernos unidos, de seguir desarrollando aplicaciones y protocolos para poder fortalecer el paradigma descentralizado, la unión y poder contrarrestar las acciones de censura del sistema en contra el movimiento.
Destacó el caso de Tornado Cash, en el que uno de los programadores, Alexey Pertsev, fue detenido en Holanda y está en la cárcel sin cargos formales ni fecha de juicio. Acusado por la OFAC (Office of Foreign Assets Control) en agosto 2022 de lavado de dinero por la naturaleza de la Dapp que desarrolló junto a Roman Semenov y Roman Storm, y su papel en el lavado de más de $ 455 millones en criptomonedas robadas por la organización de piratería Lazarus Group, vinculada a Corea del Norte.
El developer que detuvieron en Holanda por contribuir al desarrollo de Tornado cash es Alexey Pertsev. En la foto de la derecha lo pueden ver presentando en EthCC. Lo que se viene no va a ser fácil para los que están construyendo este nuevo sistema. 🪖 https://t.co/g6AQCArhswpic.twitter.com/u1tiD1L6p8
Según el blog de Chainalysis: “Tornado Cash puede ser una solución práctica para usuarios legítimos que buscan privacidad financiera, como aquellos que desean donar a causas políticas sin hacer públicos los detalles o aquellos que desean mantener la información sobre su riqueza privada. Pero también es atractivo para los ciberdelincuentes que buscan lavar dinero. El comunicado de prensa del Tesoro anunciando las sanciones de Tornado Cash señaló específicamente el papel de Tornado Cash en el lavado de más de $ 455 millones en criptomonedas robadas del protocolo Ronin Bridge de Axie Infinity por la organización de piratería afiliada a Corea del Norte, Lazarus Group, y su recepción de fondos robados de Harmony Bridge y Nomad Bridge en junio y agosto de este año. Desde 2019, casi el 30% de los fondos enviados a través de él han estado vinculados a actores ilícitos, y la República Popular Democrática de Corea ha sido uno de sus principales beneficiarios.”
La sorpresa más grande fue el fin, cuando Skylar dijo “bueno, con esto concluimos la Devcon, así que gracias por todo y ahora, retornemos a construir”. Todo parecía un final medio vacío y sin emoción, cuando de repente alguien dijo “hola, eh, tengo una pregunta… ¿estamos melos?” y comenzó el espectacular cierre con una parranda al estilo Carnaval de Barranquilla.
Fue increíble toda la energía que había en el evento.
El Networking era brutal. En los almuerzos tuvimos la oportunidad de conocer a muchos developers y dueños de proyectos y protocolos, así como también inversionistas.
Después de las presentaciones, charlas y workshops, la parte más importante de la Devcon es el networking, conocer gente, hacer contactos, compartir experiencias y hacer comunidad.
Algunos de los proyectos con los que hice contacto:
Dapp de Ethereum NFT Dinámico con Chainlink Keeper e IPFS
NFT Dinámico con Chainlink Keeper e IPFS: Aplicación tipo Dapp para crear un NFT dinámico, que cambia su metadata dependiendo de ciertas condiciones que definamos, en este caso un lapso de tiempo. Utiliza servicio Keeper de Chainlink, IPFS, Hardhat, React, Faucet Goerli y Solidity.
Solidity es un lenguaje de alto nivel orientado a contratos.
Su sintaxis es similar a la de JavaScript y está enfocado específicamente a la Máquina Virtual de Ethereum (EVM).
Solidity está tipado de manera estática y acepta, entre otras cosas, herencias, librerías y tipos complejos definidos por el usuario.
Que es el Automation de Chainlink
Chainlink Automation (previamente llamado Keeper de Chainlink) es una capa de computación off-chain descentralizada para automatizar las funciones de los contratos inteligentes e introducir nuevas prestaciones a las dApp.
Los desarrolladores ya no tienen que llevar a cabo procesos de forma manual, ni confiar en servidores centralizados, ni llevar a cabo cambios en su protocolo para poder automatizar funciones on-chain cuando se cumplan ciertas condiciones: en vez de eso pueden delegar esa tarea a los Keepers de Chainlink.
IPFS o InterPlanetary File System, es un sistema de archivo descentralizado que busca garantizar la seguridad, privacidad y resistencia a la censura de tus datos.
Es el mecanismo que se usa en la Web3 y Blockchain para hacer persistencia de archivos sin tener que utilizar servicios centralizados como AWS S3 Buckets.
Pokémon Factory: contrato inteligente para generar Pokemones
Pokémon Factory: contrato inteligente de Ethereum para generar Pokemones, con sus habilidades, tipos y debilidades. Desarrollado mediante el lenguaje Solidity.
Debe estar conectado para enviar un comentario.