Una breve introducción a IPFS

Jose Armando Rivera Ramirez
NinjaCom
Published in
5 min readMay 14, 2020

Hola, este es mi primer artículo, será una introducción acerca de IPFS una tecnología que está tomando cada vez más relevancia cuando nos referimos a una web descentralizada tratare de explicar los conceptos que considero importantes para tener un panorama general acerca de su funcionamiento.

Actualmente cuando alguien ingresa a algún sitio de Internet realiza una petición la cual llega a alguno de los servidores del sitio al cual intenta acceder, esto puede presentar ciertos problemas debido a que si muchas personas intentan acceder al mismo sitio simultáneamente el ancho de banda disminuye por lo tanto la velocidad de carga también o puede que el servidor reciba tantas solicitudes al mismo tiempo que simplemente quede fuera de línea, otro problema que se puede presentar es que ocurra algún error o simplemente sea necesario dar mantenimiento al sistema, mientras un ingeniero soluciona el problema o termina el mantenimiento es imposible acceder a esa sitio. Es posible tener infraestructura que pueda subsanar los problemas mencionados o algunos otros sin embargo los costos incrementan. Una posible solución a este problema puede ser IPFS.

Fuente: https://es.wikipedia.org/wiki/Sistema_de_archivos_interplanetario

Tomando la definición que nos otorga su sitio; IPFS o (sistema de archivos interplanetarios) “es un de protocolo p2p de hipermedia diseñado para hacer la web rápida, segura y más libre”. Como se menciona es una red peer-to-peer que, en otras palabras, es un conjunto de nodos conectados que comparten archivos por ende es una red descentralizada. Esto provee ventajas ya que al intentar descargar un archivo no solo se está descargando de una computadora sino de todo un conjunto por lo cual la velocidad de transferencia es mayor a la que tendríamos si fuera solo un servidor, así mismo evita los ataques de denegación de servicio (DDOS) ya que si dejaran fuera de línea alguno de los nodos existirían otros nodos desde los cuales se podría acceder al archivo solicitado.

Un ejemplo de la diferencia de un archivo desde un servidor de Wikipedia y el segundo desde IPFS

https://en.wikipedia.org/wiki/Aardvark

https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Aardvark.html

Como se puede notar los enlaces son diferentes, para acceder a un archivo en IPFS se utiliza un hash único e inmutable por lo cual no es posible que alguien te envié contenido que no coincide con el que estás buscando también evita tener redundancia de archivos ya que si alguien subiera exactamente el mismo archivo simplemente generara el mismo hash.

Pero que ocurre si quieres subir un archivo el cual estará en constante cambio por ejemplo una página de internet, IFPS cuenta con una característica Inter-Planetary Name System (IPNS) la cual permite crear y actualizar enlaces y de esta manera actualizar el contenido de dicho enlace. Además retomando el querer subir una página utilizando IPFS puede que sea complicado recordar un hash para acceder a algún sitio, por lo cual se puede utilizar DNSLink ya que con el uso de DNS_TXT puede mapear nombres de dominio a una dirección IPFS como se muestra a continuación:

https://ipfs.io/ipfs/QmVMxjouRQCA2QykL5Rc77DvjfaX6m8NL6RyHXRTaZ9iya/introduction/

https://ipfs.io/ipns/docs.ipfs.io/introduction/

Por último, una característica importante acerca de IPFS es que es modular lo cual permite usar una sola de sus bibliotecas en un sistema distribuido o todas juntas. Existen aún más conceptos y funcionalidades sin embargo para evitar que el articulo pasare a mostrar un ejemplo para subir un archivo a IPFS, por lo cual si deseas saber más te sugiero consultar su documentación oficial.

IPFS se puede utilizar como instancia con js-ipfs o corriendo un Daemon con su implementación en go-ipfs, en este caso usaremos go-ipfs, lo primero es ir a su sitio y descargar la versión de acuerdo a nuestro sistema.

https://dist.ipfs.io/#go-ipfs
Fuente: https://dist.ipfs.io/#go-ipfs

Para instalarlo en macOS o Linux

$ tar xvfz go-ipfs.tar.gz 
$ cd go-ipfs
$ ./install.sh

Windows

Se descomprime el archivo y pasamos ipfs.exe a algún lugar en el %PATH%

Para verificar la instalación

$ ipfs help

Deberá mostrar una ventana como esta.

Después necesitamos inicializar IPFS con una configuración local para ello ejecutaremos el siguiente comando:

$ ipfs init

Deberemos obtener una ventana como esta sin embargo como en mi caso que ya lo hice previamente por lo cual obtengo la segunda ventana.

Fuente: https://docs.ipfs.io/introduction/usage/

Para iniciar el Daemon ejecutaremos el siguiente comando

$ ipfs daemon 

Una vez que el Daemon está corriendo en otra terminal ejecutaremos el siguiente comando en este caso yo subí la imagen anterior.

$ ipfs add imagen.png

Para asegurarnos que permanezca en la red podemos realizar un pin en nuestro nodo tomando el hash que se generó previamente.

$ ipfs pin add QmXDXVJN2zYeTmxpdojfxN4eCh35t6YFEy3YeDCN2MWxB4 

Para poder ver el archivo que subimos sin apagar el Daemon desde nuestro podemos acceder, deveras cambiar el hash al que genero tu archivo.

http://127.0.0.1:8080/ipfs/QmXDXVJN2zYeTmxpdojfxN4eCh35t6YFEy3YeDCN2MWxB4

Una vez que varios nodos han replicado nuestro archivo podríamos acceder a él desde el navegador, igual cambiando el hash al archivo.

https://ipfs.io/ipfs/QmXDXVJN2zYeTmxpdojfxN4eCh35t6YFEy3YeDCN2MWxB4

Con esto ya subiste tu primer archivo a IPFS, para finalizar me gustaría agregar que IPFS se está usando para implementar nuevas tecnologías, si te gustaría que hablara acerca de ellas, saber más o tienes alguna duda o sugerencia no olvides dejarla en los comentarios. Eso es todo. :)

--

--