Qué es y cómo subir archivos a IPFS

René Silva Valdés
Ethereum DApps
Published in
4 min readAug 27, 2019

Pequeña introducción y tutorial de como subir archivos al sistema IPFS (Interplanetary File System).

Interplanetary File System Protocol.

El Sistema de archivos interplanetario (IPFS, por sus siglas en inglés) es un sistema distribuido utilizado para almacenar y acceder a archivos, sitios web, aplicaciones y datos. Si bien el uso de IPFS no se limita únicamente a las DApps (ni menos a las de Ethereum), este sistema nos permite almacenar archivos en Internet sin la necesidad de un servidor de hosting, manteniendo así el paradigma de la descentralización en nuestra aplicación.

Cómo funciona

De manera similar a BitTorrent, los archivos que se cargan en la red son almacenados en distintos computadores, asignándole a cada archivo un identificador (hash criptográfico). Luego, al buscar un archivo, se le pide a la red que encuentre nodos que almacenen el contenido para obtenerlo. A nivel técnico, IPFS implementa una estructura de datos llamada Merkle DAG, una combinación de un árbol de Merkle con un grafo acíclico dirigido (DAG, por sus siglas en inglés).

Arbol de Merkle.
DAG simple.

Algunas de las ventajas de IPFS son:

  • Dificulta que un sitio web se desconecte, pues la información puede obtenerse de varios lugares.
  • Puede acelerar la web cuando se está lejos o desconectado, pues la información puede obtenerse de alguno de los nodos cercanos en lugar de un único nodo lejano.

Por otro lado, algunas de las desventajas de su implementación actual son:

  • Las direcciones de sitios web son antiestéticas y difíciles de recordar.
  • Cada vez que se realiza un cambio en un archivo y se carga nuevamente en IPFS, el hash cambia, por lo que la dirección del archivo también cambiará.

Subir archivos a IPFS

Para subir archivos a IPFS es necesario contar con un nodo conectado a la red, que podemos obtener de dos formas:

  • Utilizando un nodo propio: Para conectar nuestro computador a la red necesitamos descargar e instalar la implementación de IPFS. Una vez instalado, podremos conectarnos a la red IPFS y transferir nuestros archivos.
  • Utilizando un nodo remoto (e.g Infura): Cuando un nodo IPFS se ejecuta como un daemon, expone una API HTTP que le permite controlar el nodo y ejecutar los mismos comandos que en la consola. Teniendo acceso a un nodo IPFS, podemos hacer uso de esta API para cargar archivos.

Utilizando nodo propio

Para subir archivos a la red IPFS primero debemos tener la implementación descargada e instalada. La descarga la podemos realizar desde este sitio. Para instalar IPFS, ejecutamos los siguientes comandos (probados en Ubuntu):

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

Podemos verificar la instalación ejecutando:

$ ipfs help

Una vez instalado IPFS, conectamos nuestro nodo a la red ejecutando:

$ ipfs daemon

Luego, en otro terminal, podremos cargar archivos ejecutando el comando

$ ipfs add <nombre del archivo>

Obtendremos como output similar a lo siguiente:

added QmamAZHNXDbE7qU3l1nd0h45hnUdb9ymC454o4A7hKhh 1.png

En donde el valor de en medio corresponde al hash de nuestro archivo. Con este hash podremos acceder a nuestro archivo mediante el gateway, esto lo hacemos accediendo al link:

https://gateway.ipfs.io/ipfs/<hash_del_archivo>

La red almacenará nuestro archivo siempre que otros pares accedan a él, por lo que es esperable que después de un tiempo el archivo deje de estar disponible (de manera similar a lo que ocurre con los torrents). Si deseamos que nuestro archivo se almacene por un tiempo prolongado tenemos dos opciones:

  • Tener nuestro propio nodo conectado y almacenar nuestro archivo en el, contribuyendo a la red IPFS.
  • Utilizar un gateway para almacenar nuestro archivo.

Si optamos por la segunda opción, podemos utilizar el gateway de Infura, al cual podemos acceder mediante el link:

https://ipfs.infura.io/ipfs/<hash_del_archivo>

Al acceder a nuestro contenido mediante el nodo Infura, este creará una copia “permanentemente” del archivo.

Utilizando API HTTP de Infura

Ya que Infura nos provee acceso a su nodo IPFS, y por ende, a su API HTTP, podemos hacer uso de esta herramienta para cargar archivos via solicitudes HTTP. Para cargar un archivo mediante el nodo de Infura ejecutamos en consola el comando:

$ curl "https://ipfs.infura.io:5001/api/v0/add" -F file=@"<nombre_del_archivo>"

Obtendremos un output similar al siguiente:

{“Name”:”1.png”,”Hash”:”QmamAZHNXDbE7qU3l1nd0h45hnUdb9ymC454o4A7hKhh”,”Size”:”331777"}

Y con esto habremos cargado nuestro archivo a IPFS, pudiendo acceder a el con su hash mediante el gateway de IPFS y también mediante el gateway de Infura.

IPFS y DApps

El sistema de archivos IPFS puede complementar el uso de una blockchain en una DApp, pues un problema que puede enfrentar una implementación blockchain es el almacenamiento de grandes volúmenes de datos. Gracias a IPFS se podría, por ejemplo, almacenar únicamente los hashes de los archivos requeridos por la Dapp en la blockchain y acceder a estos archivos mediante IPFS. Otro uso que se le pude dar a IPFS es de hosting para nuestra aplicación, aunque esto presenta algunos inconvenientes como la escasa vistosidad de los links generados.

A partir de este tutorial introductorio, podemos concluir que IPFS es un sistema que promete cambiar el paradigma de la red actual de cara a problemas como la disponibilidad de la información, la censura y la centralización. Además, notamos que su uso puede complementar a otras tecnologías, como blockchain, en la implementación de una Descentralized Application.

Muchas gracias por leerme. Si encuentras algún error en el post o si tienes alguna observación/comentario no dudes en comentar.

またね!

--

--