Hola Mundo: Amor en la Red IOTA
Tags: python, blockchain, web3, tutorial
Published: 2022-08-13 02:58:01

Desliza hasta llegar a la 👉 para saltarte mi bella y poética introducción.

Muchas primaveras han pasado desde que, sin saber lo que hacia, me encontraba descargando mi primer billetera IOTA, un programa bastante básico escrito en Java, un archivo *.jar para ejecutar desde terminal; sin saberlo me encontraba viendo el nacimiento de los primeros proyectos blockchain, y hoy me pregunto, ¿por qué no compré bitcoin en ese momento? 😭 jaja

Ahora vuelvo al mundo blockchain, investigando y leyendo al respecto; entre una cosa y otra IOTA vuelve a mi mente, y me doy cuenta de la evolución que ha tenido desde aquel entonces; más que como moneda, la tecnología que rodea el proyecto me ha parecido una solución muy interesante a los problemas que rodean actualmente a la cadena de bloques.

De forma breve y muy general, actualmente existen dos principales arquitecturas, Proof of Work (PoW) que usa Bitcoin y Ethereum (en el momento que escribo esto) y Proof of Stake (PoS) como lo es Cardano ó Stellar.

Uno de los problemas de PoW es el minado y lo que conlleva, al 2021 salió como nota que el consumo energético de Bitcoin era el equivalente aproximado a la mitad de lo que todo México consume anualmente; aunado a los gastos de hardware, contaminación, etc.

PoS llegó a solucionar esto dado que no requiere de minado, Prueba de Participación, es eso precisamente, mantener una cantidad de “monedas” en tu posesión para demostrar tu participación y poder ser elegido de forma aleatoria para realizar ciertas tareas, como validar transacciones ó crear nuevos bloques, esto dependiendo de la cantidad de reservas que tengas, y quizás ese sea uno de los problemas en esta red, entre mayor sea la cantidad de activos que mantengas más alta será la probabilidad de que seas elegido, y esto se puede reducir a un pequeño grupo de ballenas que acaparan gran porcentaje de reservas.

PoW y PoS comparten un enemigo en común, las transacciones se validan de una en una, lo que genera un cuello de botella, dependiendo de cada tecnología, unas en mayor medidas que otras.

![Blockchain Clásica](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/72vi2lmlpp67z22k132b.gif)

Es cierto que a IOTA le falta un largo camino por recorrer, pero la idea en general me parece muy interesante, les explico: en IOTA para realizar cada transacción debes confirmar otras dos transacciones, y así consecutivamente para cada usuario en la red, de esta forma entre más usuarios existan mayor es la rapidez de la misma, aunado al bajo coste de transacciones.

![Tangle de Iota](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0s2x7esmdjnkd7ny1r2h.gif)

Esto nos pone un problema, dependemos de la cantidad de usuarios, como medida temporal se ha colocado un coordinador que se asegura que las transacciones sean seguras y se espera que en próximas actualizaciones este ya no sea necesario y se elimine, probablemente a lo largo del 2022.

![Big Brother de IOTA](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6jby8rs577wvjnfomz3.gif)

IOTA ha dado un paso más allá creando los cimientos para tecnologías de identidad, ciudades inteligentes, salud, IoT, entre otros, lo que la hace una gran opción a ir explorando e intentar aumentar su red de usuarios. 

Ahora mismo existen otros proyectos ligados como es la red Shimmer y Assembly que complementan a IOTA, para mayor información les sugiero pasarse por la página oficial en https://www.iota.org

👉 Después de esta no tan breve y en extremo simplificada introducción diremos “a lo que nos truje chencha” jaja y comenzaremos a picar un poco de código.

Actualmente hay varias actualizaciones que se están llevando acabo, entonces la disponibilidad de librerías para los distintos lenguajes es limitada, principalmente están disponibles para Rust y Go, lenguajes en el que se crea el ecosistema de IOTA, pero veremos unas versiones preliminares para Python donde podremos experimentar e interactuar con la red.

— Daré por hecho que conocen las bases de Python y Blockchain.

Primeramente crearemos nuestro espacio de trabajo ó entorno virtual.

Ya dentro de nuestra carpeta de trabajo nos dirigimos al siguiente link: https://nightly.link/iotaledger/iota.rs/workflows/python_binding_publish/dev

Una vez ahí descargaremos el paquete zip que coincida con nuestro equipo, en mi caso: osx-iota-client-py3.9-wheel. 
OSX por ser macOS y py3.9 al trabajar con Python en su versión 3.9.

Ya descargado lo descomprimimos y nos quedará un archivo con extensión *.whl, lo movemos a la carpeta de nuestro proyecto y lo instalamos usando ´pip install´ + nombre del archivo.whl:

![Instalación de librería python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60gq2ft2y3zvsek53l79.png)

Creamos un archivo que se llame 'como les dé la gana', yo usaré 'main.py', si lo quieren hacer desde la terminal usaremos el comando 'touch main.py'.

![Creación de archivo main.py](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8qtcocdpkhfjhj5xbeah.png)

- Les dejo el código explicado enseguida:

![YA dame el código!](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5d56u4805wovcms2fg1t.jpeg)


```python
import os, hashlib
import iota_client

# Generamos nuestra semilla, es la que vemos comúnmente
# de 12 o 24 palabras al crear una billetera cripto, pero
# por efectos prácticos la crearemos simple.
random_seed = hashlib.sha256(os.urandom(256)).hexdigest()
print(f'Your SEED is: {random_seed}')

# La semilla generada la guardamos en una constante, ya que es
# con la que trabajaremos, si solo concatenamos la variable de arriba se
# generará una nueva semilla cada vez que ejecutemos el programa.
SEED = "fda69617e3f7f793e3a3785c5bfb23b408ed7bfe3b52df7f84f062f5db581844"


# Instanciamos el método Client.
client = iota_client.Client()


# Con la semilla creada generaremos la
# dirección pública del monedero, la que le utilizas
# para que te transfieran, usualmente inicia con la palabra
# iota, pero por ser la red de prueba inicia con atoi.
address_list = client.get_addresses(
    seed=SEED,
    account_index=0,
    input_range_begin=0,
    input_range_end=1,
    get_all=True
)


# Esta es nuestra dirección IOTA
print(f' + Your IOTA address is:\n{address_list[0][0]}')


# Si quieres fondearla con dinero de prueba utiliza la página
# de abajo e introduce la dirección que acabas de crear.
# https://faucet.chrysalis-devnet.iota.cafe
print(f' + Get your IOTA balance:\n{client.get_address_balance(address_list[0][0])["balance"]}')


# Preparamos el mensaje que enviaremos a la red IOTA
my_message = 'Hola Mundo! gg'.encode('utf8')

# Aquí enviamos el mensaje a la RED tangle de IOTA
message = client.message(
    index='RigelGC', data=my_message
)

# Cada mensaje en la red IOTA tiene su ID único que podemos utilizar
# para rastrearlo a través del siguiente explorador.
iota_explorer = 'https://explorer.iota.org/devnet/search/'
print(f'My message is here: { iota_explorer + message["message_id"] }')

# Aquí nos muestra toda la información del mensaje, el Payload es el que contiene los datos,
# en la sección data, recuerda que se envía cada carácter en ASCII, hay que tener
# presente el tamaño del mensaje a enviar.
print(message)

# Y listo, tu primer Hola Mundo en la red Tangle de IOTA.

```
- El output de nuestro programa sería:

![Voilá, resultado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8x6jl55wmu1oka2boly1.png)

Si visitamos el link veríamos nuestro mensaje en el explorador. La demás información corresponde a la metadata de nuestro mensaje. 

En los links de abajo dejo la wiki de IOTA con información detallada.

Sencillo ¿cierto?, pueden indagar más de todo lo que se puede hacer con esta útil herramienta y echar a volar su imaginación, o quizás no tanto jaja.

![emm... no recuerdo jeje..](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5trsuiaqeaqbyg5qbsyf.png)

---

Recuerden que la Web 3.0 está aquí y proyectos como Assembly en IOTA son un claro ejemplo de que está red viene cargada de grandes soluciones.

Espero les halla parecido interesante. 
Les pondré algunos links de utilidad en la parte de abajo.

Proyecto IOTA
https://www.iota.org

Librería Python de IOTA
https://nightly.link/iotaledger/iota.rs/workflows/python_binding_publish/dev

Link para fondear la wallet de la red de pruebas de IOTA
https://faucet.chrysalis-devnet.iota.cafe

Explorador de la devnet de IOTA
https://explorer.iota.org/devnet/search/

Wiki Original de IOTA
https://wiki.iota.org/iota.rs/libraries/python/examples#generating-seed-and-addresses


![Imagen chistosa xD](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tv9gri32o0fc7fr3xhca.jpeg)


Fin...(?)