Aprende Blockchain: Tu primera DAPP en Ethereum — Parte 1
Technology

Aprende Blockchain: Tu primera DAPP en Ethereum — Parte 1

March 5, 2018

Las últimas semanas he estado muy interesado en el tema de blockchain, y me he involucrado con tecnologías como Bitcoin y Ethereum, además de leer mucho sobre el tema y asistir a un par de conferencias, lo que me ha permitido conocer Blockchain a nivel conceptual, cosa que explico en mi artículo sobre el tema, el cuál encuentras aquí.

A raíz de este interés personal, me he percatado de que muchos estamos hablando de la tecnología, sin embargo, son pocos los que saben realmente montar uno de estos servicios, así que me di a la tarea de buscar información y tutoriales de desarrollo en Solidity (lenguaje sobre el que se construyen Smart Contracts en Ethereum).

 

 

La importancia del desarrollo en Ethereum es que representa una oportunidad laboral importante para los próximos años, es decir, las grandes empresas de innovación del mundo están buscando talento que sepa escribir en Solidity, y tan así es el caso que, en una conferencia en el Tecnológico de Monterrey con Demetrio Strimpopolus, -Líder de BanregioLabs-, cuando le pregunté de donde obtenían a sus expertos para sus pruebas con esta tecnología, me contestó lo siguiente:

 

 

Dentro de BanregioLabs, estamos aprendiendo por nuestra propia cuenta y experimentando en conjunto. El talento es bienvenido pero escaso, y por esa razón tenemos las puertas abiertas a startups que puedan colaborar con nosotros y nos ayuden a robustecer la comunidad.

Dada la situación, considero que es una buena idea comenzar a enseñar -desde mis humildes conocimientos-, cómo construir tu primer experimento en Blockchain con una aplicación descentralizada de conteo de votos para impulsar a los desarrolladores a aprender más a fondo sobre esta tecnología, y con el tiempo convertirse en la próxima generación de Blockchain Developers.

En esta primera parte del tutorial, te enseñaré sobre los conceptos básicos de la arquitectura de Ethereum, además de instalar los paquetes básicos que necesitaremos, entre los que se encuentran Ganache, que funcionará como un Blockchain falso que podemos correr en servidor local, así como Web3.js para comunicarnos con él a través de Javascript y finalmente Solc: el compilador para nuestro contrato en Solidity.

 

 

¿Porqué una DAPP (Descentralized App) de Votos?

Ya que Blockchain ofrece la posibilidad de montar sobre una red que no pertenece a nadie en particular y que es perfectamente segura, creo que una DAPP de votos es excelente para comprender los beneficios de la tecnología en un entorno completamente aplicado.

La descentralización permite que los votos no estén contabilizados en un servidor central, por lo que la distribución de la información es equitativa y de acceso publico, además de garantizar la autenticidad de cada uno de los votos emitidos, siendo imposible de cambiar o alterar.

 

Captura del resultado final en el navegador.

 

Quisiera agregar, que si bien el tutorial utiliza conceptos muy técnicos, te animo a que no pierdas el interés, sin importar si no sabes absolutamente nada sobre programación o servidores, ya que la mayor parte de esta guía consiste en copiar y pegar, así que míralo como un juguete súper innovador que te dará súper poderes si algún día decides meterte más en el tema.

Mientras tanto, disfruta de aprender de ésta tan revolucionaria tecnología.

Dicho esto, vamos a la acción:

Requisitos

  1. Un editor de texto. Yo utilizo Sublime Text 3.
  2. Tu navegador web.
  3. Muchas ganas de aprender.

Modelo Cliente — Servidor vs Arquitectura Ethereum

Lo primero que tienes que entender para visualizar cómo funciona Blockchain realmente es la diferencia contra el modelo Cliente-Servidor de toda la vida, el cual te será muy familiar si eres desarrollador Front-End, y en caso contrario, creo que queda muy bien explicado a través de este diagrama:

 

Modelo Cliente-Servidor Tradicional

 

Como puedes ver, la información está guardada dentro de la nube en un servidor central en Amazon o Microsoft. No obstante, al utilizar la arquitectura de Ethereum, las cosas se ven masomenos así:

 

Arquitectura de una DAPP en Ethereum

 

La diferencia radica en que el modelo Cliente-Servidor centraliza los datos en un servidor, lo que significa que cualquiera que sea dueño puede ejercer poder sobre él, y si la información contenida es delicada, puede negar el acceso o modificar los datos. En cambio, al montar una DAPP sobre la arquitectura de Ethereum, esa información es respaldada y verificada por toda la red de mineros que lo sostienen.

Lo interesante de Ethereum, es que dentro de estos bloques, además de guardar información podemos ejecutar código en su lenguaje de desarrollo: Solidity. Permitiendo el desarrollo de diversos tipos de contratos inteligentes, dada la capacidad de que este código sea inalterado y ejecutado de acuerdo a lo estipulado.

Por desgracia, para correr correctamente una DAPP, todos los usuarios deben descargar una copia completa del Blockchain desde su creación, por lo que, la intención no es desmontar el modelo cliente-servidor, si no aprovechar las ventajas de la arquitectura de Blockchain para motivos específicos, como es el caso.

Instalando tus herramientas básicas

Puesto que poseo una Mac, la instalación la ejecutaré completamente en este sistema operativo, sin embargo, también agregaré una sección con los pasos para Windows, aunque si tienes problemas, puedes comentarlo y te ayudaré con gusto.

Los 3 software que instalaremos son los siguientes:

  1. Ganache: Es un simulador del Blockchain en tu computadora local, por lo que no tendrás que pagar ni un peso por subir tu contrato a la red de Ethereum, y podrás probarla sin mayor problema antes de que decidas hacerlo.
  2. Web3.js: Éste es una colección de librerías que te permiten comunicarte e interactuar con un nodo local o remoto de Ethereum a través de Javascript.
  3. Solc: Básicamente el compilador con el cuál correremos nuestro contrato y lo colocaremos en el nodo de Ethereum.

MacOS

Si nunca has abierto tu terminal, lo que puedes hacer es simplemente presionar ⌘ + Espacio para abrir Spotlight y buscar “Terminal”. El primer resultado que te aparezca es el que tienes que abrir, de tal manera que cuando veas lo siguiente en tu pantalla, podrás continuar:

 

Mi terminal se verá algo diferente a la tuya por algunas cosas que tengo instaladas, pero puedes ignorarlas.

 

Lo primero que tienes que hacer es descargar e instalar Brew, un software que te permite manejar y descargar paquetes directamente desde tu terminal, y lo puedes hacer desde https://brew.sh/.

En caso de que ya lo tengas, simplemente copia las siguientes líneas una por una (para evitar errores) en tu consola de comandos para descargar e instalar Ganache, Web3.js y Solc.

<script src=”https://gist.github.com/ernestognw/8631b3c245dcdc81d9e4a8efff215b70.js”></script>

Los comandos anteriores actualizarán brew a su versión más actual e instalarán Nodejs, que es el framework con el que nos comunicaremos con Ganache a través de Web3.js. En seguida creará una carpeta en la raíz de tu computadora que corresponderá a la carpeta de este tutorial y donde se instalarán las dependencias.

Al final, si todo sale bien, encontrarás la siguiente línea al final de tu Terminal (o algo similar), que te indicará que todo está correcto. Y en caso contrario, te recuerdo que siempre haré un espacio para resolver dudas.

+ solc@0.4.20
+ web3@0.20.1
+ ganache-cli@6.0.3

Windows

  1. Instala Visual Studio Community Edition.
  2. Instala Windows SDK for Windows
  3. Instala Python 2.7 si es que aún no lo tienes, y asegúrate de añadir su la dirección de instalación a tu PATH.
  4. Instala git si aún no lo has hecho, y añádelo también al PATH.
  5. Instala OpenSSL desde aquí. Asegúrate de elegir el paquete correcto para la arquitectura de tu PC e instala el paquete completo, no la versión Lite.
  6. Descarga e instala node v8.1.2.
  7. Abre tu consola (la encuentras como Shell en tu buscador) y ejecuta el siguiente comando:
npm install ganache-cli web3@0.20.1 solc

Finalmente, hay que tener en cuenta que Ganache, al ser un simulador de Blockchain, por defecto crea 10 cuentas ficticias en el Blockchain y les otorga a cada una la cantidad de 100 Ethers para hacer fáciles las pruebas, por lo que no debes preocuparte por ahora de eso.

Piensa en ellas como si fueran cuentas bancarias con dinero en ellas (Ether es la Crypto moneda del ecosistema de Ethereum). Por ahora necesitarás estas cuentas para hacer transacciones, enviando y recibiendo Ether. Veremos esto probablemente en la segunda parte del tutorial.

Lo siguiente que debes hacer para comprobar que todo salió bien, es correr el siguiente comando en tu terminal para ejecutar Ganache:

node_modules/.bin/ganache-cli

Si seguiste los pasos correctamente, deberá aparecer la siguiente información, la cuál muestra cada una de las cuentas que creó Ganache por defecto, y otra información que por el momento no nos conviene discutir:

Ganache CLI v6.0.3 (ganache-core: 2.0.2)
Available Accounts
==================
(0) 0x5c252a0c0475f9711b56ab160a1999729eccce97
(1) 0x353d310bed379b2d1df3b727645e200997016ba3
(2) 0xa3ddc09b5e49d654a43e161cae3f865261cabd23
(3) 0xa8a188c6d97ec8cf905cc1dd1cd318e887249ec5
(4) 0xc0aa5f8b79db71335dacc7cd116f357d7ecd2798
(5) 0xda695959ff85f0581ca924e549567390a0034058
(6) 0xd4ee63452555a87048dcfe2a039208d113323790
(7) 0xc60c8a7b752d38e35e0359e25a2e0f6692b10d14
(8) 0xba7ec95286334e8634e89760fab8d2ec1226bf42
(9) 0x208e02303fe29be3698732e92ca32b88d80a2d36
Private Keys
==================
(0) a6de9563d3db157ed9926a993559dc177be74a23fd88ff5776ff0505d21fed2b
(1) 17f71d31360fbafbc90cad906723430e9694daed3c24e1e9e186b4e3ccf4d603
(2) ad2b90ce116945c11eaf081f60976d5d1d52f721e659887fcebce5c81ee6ce99
(3) 68e2288df55cbc3a13a2953508c8e0457e1e71cd8ae62f0c78c3a5c929f35430
(4) 9753b05bd606e2ffc65a190420524f2efc8b16edb8489e734a607f589f0b67a8
(5) 6e8e8c468cf75fd4de0406a1a32819036b9fa64163e8be5bb6f7914ac71251cc
(6) c287c82e2040d271b9a4e071190715d40c0b861eb248d5a671874f3ca6d978a9
(7) cec41ef9ccf6cb3007c759bf3fce8ca485239af1092065aa52b703fd04803c9d
(8) c890580206f0bbea67542246d09ab4bef7eeaa22c3448dcb7253ac2414a5362a
(9) eb8841a5ae34ff3f4248586e73fcb274a7f5dd2dc07b352d2c4b71132b3c73f0
HD Wallet
==================
Mnemonic:   cancel better shock lady capable main crunch alcohol derive alarm duck umbrella
Base HD Path: m/44'/60'/0'/0/{account_index}
Listening on localhost:8545

También puedes instalar la Interfaz Gráfica de Usuario desde http://truffleframework.com/ganache/, pero no es totalmente necesario.

Y listo, ahora ya tienes en tu computador las herramientas necesarias para correr una simulación de Blockchain de manera local. Piensa que ahora puedes hacer experimentos con esta tecnología y que acabas de abrirte un mundo de posibilidades.

Si bien, este apenas es la primera de tres partes, espero que haya despertado tu atención lo suficiente como para ponerte a investigar un poco más.

Conclusión

El desarrollo de DAPPS en Ethereum difiere del Modelo Cliente-Servidor tradicional en su manera de organizar la información y el acceso a ella, por lo que a pesar de tener sus desventajas, es muy útil para aplicaciones puntuales, como la creación de una interfaz de votos, que es el proyecto que desarrollaré durante esta serie de tutoriales.

Mantente atento a la segunda parte que subiré en algunos días para continuar con el desarrollo de tu DAPP, y mientras tanto, infórmate más. Lee la documentación de Solidity y la página oficial de Ethereum para que puedas entender mejor cómo funciona su tecnología.

Recuerda, el talento en esta industria aún es muy escaso, y además deseado, lo cual puede suponer un primer paso para una carrera profesional en el sector.

Quedo atento a cualquier duda en mi correo personal, el cual te dejo aquí abajo, así como en mis redes sociales y directamente a los mensajes de este tutorial, esperando poder ser de ayuda (Te recuerdo, yo también estoy aprendiendo de esto.)

ernesto@ernesto-garcia.com
fb.com/ErnestoGrcaNW

Be passionated. Read a lot.

-E.

2

Follow Ernesto García on

Comments (0)

Leave a Reply

Your email address will not be published. Required fields are marked *