Meetup Ethereum Sevilla: Swarm.
Repositorio para el meetup de Ξthereum Sevilla sobre Swarm que se realizará el Jueves 6 de Diciembre en la Colmena.
Introducción
Swarm es una plataforma de almacenamiento distribuido y servicio de difusión de contenidos, un servicio de capa base nativa de la pila Ξthereum web3. El objetivo principal de Swarm es proporcionar un almacenamiento descentralizado y redundante para el código Đapp y los datos, así como para la cadena de bloques y los datos de estado. Swarm también se propone suministrar varios servicios de capa base para la web3, incluyendo mensajería nodo a nodo, streaming de medios, servicios de bases de datos descentralizados e infraestructura escalable de canales estatales para economías de servicios descentralizados.
Diseñado para Ξthereum
Desde la perspectiva del usuario final, Swarm no es tan diferente de la World Wide Web. En segundo plano, la diferencia es que el contenido se aloja en una red de almacenamiento peer-to-peer en lugar de en servidores individuales. Esta red peer-to-peer es autosuficiente gracias a un sistema de incentivos integrado que utiliza la contabilidad peer-to-peer y permite el intercambio de recursos para el pago. Swarm está diseñado para integrarse perfectamente con la capa de red multiprotocolo devp2p de Ξthereum, así como con la blockchain de Ξthereum para la resolución de nombres de dominio, pagos de servicios y seguros de disponibilidad de contenido.
Características
Tolerancia a fallos
Almacenamiento redundante: la replicación garantiza la disponibilidad de los datos, incluso en caso de producirse un fallo en los nodos o una pérdida de datos.
Resistente a la censura
Los sitios no pueden ser "retirados": los datos se almacenan en toda la red sin nodos centrales vulnerables.
Resistente a ataques DDoS
La red peer-to-peer o p2p totalmente descentralizada es más resistente contra ataques DDoS que cualquier otro sistema centralizado.
Tiempo de inactividad cero
La redundancia garantiza que la red siga entregando datos incluso cuando los nodos individuales están fuera de línea.
Autosuficiente
El sistema de incentivos incorporado garantiza la viabilidad económica de la red.
Instalación
· Usando la imagen preparada de virtualbox
Hemos preparado una imagen para importarla en virtualBox con todo lo necesario para empezar con Swarm, podéis encontrarla a través del siguiente enlace
Es una imagen de
43GB
pero está comprimida y pesa4.3GB
Las credenciales de la máquina virtual son:
User:user
Passwd:user
En el /home/
he creado una carpeta llamada /swarm
con un HTML muy básico para poder hacer una prueba de nuestra primera web en Swarm
En /home/user/Documentos/
hay un archivo llamado infoAccountSwarm
, en él podeis encontrar la wallet que se ha creado, información sobre la misma y sobre el nodo
En el .bash_history
podéis observar todos los comandos que se han utilizado en el proceso de instalación. De igual manera history
también muestra los comandos introducidos durante el proceso de instalación
Nuestra primera web
Por comodidad usaremos tmux para disponer de más de una terminal en la misma ventana. Se pueden seguir estos pasos simplemente abriendo dos terminales o usando cualquier otra alternativa que prefiera el usuario (terminator, por ejemplo)
- Abrimos una terminal y creamos una sesion de tmux con tres terminales
$ tmux new-session \; split-window -h \; split-window -v
Para movernos entre las terminales de tmux usaremos
Ctrl+b →
,Ctrl+b ←
...
Para conocer más comandos y atajos disponibles en tmux podéis visitar la siguiente web
- En una de las divisiones ejecutamos el cliente ligero (en este caso usamos Ropsten):
$ geth --testnet --syncmode=light
- En otra división conectamos nuestro nodo con la cuenta generada:
$ swarm -bzzaccount 5ba32decbbf981812dcec51f0472b34b3ed24c63
passphrase: ColmenaUser!
- En la tercera división creamos el hash de nuestro HTML básico:
$ swarm up /home/user/swarm/index.html
Este nos devuelve (recordad que el hash puede variar):
c5f4639a3fe728642b70c199df373c732dd81cd49b88573788712bf70ca204b6
- Abrimos el navegador en localhost y añadimos el hash generado anteriormente: http://localhost:8500/bzz:/c5f4639a3fe728642b70c199df373c732dd81cd49b88573788712bf70ca204b6
Enhorabuena!! con estos pasos ya tendríamos nuestro HTML básico en Swarm!
· Haciendo una instalación desde cero:
Dependencias
Necesitamos tener Go y Git instalado.
- Instalamos
git
:
sudo apt install -y git
- Instalación de
Go
:
(En este caso vamos a instalar la version 1.10
podeis mirar aqui si queréis instalar otra versión)
wget -c 'https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz' -O go1.10.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
sudo rm -Rf go1.10.3.linux-amd64.tar.gz
- Metemos
Go
en nuestro Path, editando nuestro.profile
:
nano $HOME/.profile
- Añadimos las siguientes líneas al final:
PATH="$PATH:/usr/local/go/bin"
GOPATH="$HOME/go"
PATH="$PATH:$GOROOT/bin:$GOPATH/bin"
- Después recargamos nuestra terminal:
source $HOME/.profile
Si escribimos go version
debería mostrarnos la versión que tenemos instalada.
- En mi caso suelo usar
tmux
para dejar aplicaciones corriendo en segundo plano, pero podéis usar la más cómoda para ustedes, procedemos con la instalación detmux
:
sudo apt install -y tmux
Geth
)
Instalamos un nodo de Ethereum (usaremos Podemos instalarlo desde el código fuente, más información aquí
- Instalamos dependencias:
sudo apt-get install -y software-properties-common
- Añadimos el repositorio de Ethereum:
sudo add-apt-repository -y ppa:ethereum/ethereum
- Actualizamos repositorio:
sudo apt-get update
- Acutalizamos e instalamos la versión estable de swarm:
sudo apt-get install -y ethereum-swarm
- Instalamos la versión estable de swarm:
sudo apt-get install -y geth
- Finalmente instalamos el demonio de
geth
:
go install ./cmd/geth
- Comprobamos que la instalación de Swarm se ha realizado correctamente:
swarm version
- Creamos una cuenta de Ethereum:
geth account new
Una vez que hemos introducido nuestra contraseña debería de mostarnos algo así:
Address: {9r3cd699C0lm3n41dpow40098ad8f5587b538f0f1}
- En una ventana de
tmux
iniciamos el nodo de Ethereum (usaremos un cliente ligero, podemos dividir la pantalla pulsandoCtrl + b + "
):
geth --testnet --syncmode=light
Si tenemos problemas con el nodo y necesitamos borrar la base de datos lo podemos hacer con: geth --testnet removedb
- Usamos la cuenta creada anteriormente para conectar con swarm (recordad modificarla por la que hayais creado):
swarm --bzzaccount 9r3cd699C0lm3n41dpow40098ad8f5587b538f0f1
-
Verificamos que Swarm esta funcionando, abrimos nuestro navegador en localhost y el puerto 8500
-
Creamos un
HTML
básico para poder mostrarlo y ver el funcionamiento, copiamos la ruta hacia ese archivo (en nuestro caso la ruta es:/home/swarm/example.html
) y creamos un hash de ese archivo:
swarm up /home/swarm/example.html
- Este nos devuelve:
fe1c81c0a0462d112502c57994191800b03c35303ab3be7f65119d0d28aaf45e
- Si abrimos el navegador en localhost con el hash generado podemos ver nuestro archivo
HTML
:
localhost:8500/bzz:/fe1c81c0a0462d112502c57994191800b03c35303ab3be7f65119d0d28aaf45e
Como podemos ver ha sido bastante fácil todo el proceso, espero que esta guía les sirva de ayuda.
Si comprobáis que algo no está bien o no funciona correctamente, podéis hacer un Pull Request
para que entre tod@s podamos tener un documento que sirva de ayuda.
Gracias a la Colmena por cedernos el espacio y a todos los asistentes por venir a pasar un buen rato aprendiendo juntos sobre la tecnología que más nos gusta.
Recordad que dar una estrella ⭐ al repositorio es reconocer el trabajo y siempre son bienvenidas 😄
Enlaces de interés:
- Página principal.
- Repositorio oficial.
- Issues.
- Código fuente.
- Documentación.
- Proyectos.
- Roadmap.
- Roadmap (2018).
- Descargas.
- Gitter.
- Reddit/r/ethswarm.
- Twitter Swarm.
- Twitter Ethersphere.
- Swarm Orange Summit 2018
- Working groups
- Comunicado POC3 (21-Junio-2018).
- Swarm public gateway.
- Swarm Đapps.
- Código fuente Đapps.
- Orange papers (swap, swear and swindle)
- Podcast.
- Videos
- Swarm team