Monday, May 21, 2018

The Blagchain



Últimamente, he estado aprendiendo sobre Blockchain y Ethereum. Dos temas bastante interesántes y actuales...pero como dicen...la mejor manera de aprender es haciendo...así que me puse a trabajar en el Blagchain.

Entonces, que es Blagchain? Basicamente, es una pequeña aplicación Blockchain que tomas algunas cosas de Blockchain y otras cosas de Ethereum y fué creado como algo educacional...en el Blagchain puedes obtener un usuario, crear o un producto o comprarlo y todo será almacenado en una estructura en cadena...

Antes de ir a las imagenes...vamos a hablar un poco sobre la tecnología que elegí para este proyecto...

Existen muchas tecnologías disponibles...así que escoger la correcta siempre es complicado...a la mitad del proyecto, puedes darte cuenta de que no...esa no fué la decición más acertada...algún otro lenguaje puede ayudarte a hacer las cosas más rápido y mejor...o quizás aquella característica en especial no está disponible y no lo sabías porque nunca antes la habías necesitado...

Cuando comencé a aprender acerca de Blockchain y Ethereum...sabía que quería escribir Blagchain utilizándo una interface web...así que los primeros lenguages que vinieron a mi mente estaban fueran de la discusión...basicamente porque no tienen interface web o porque sería realmente complicado crear una aplicación web utilizándolos...además, también quería un lenguaje con pocas dependencias  y de instalación y extensión sencillas...quería un lenguaje sencillo pero potente y veloz...y fué así...casi de inmediato sabía cual era el lenguaje que tenía que utilizar...

Crystal es similar a Ruby pero más veloz...y elegante -;) Además...tiene a Kemal, un framework web parecido a Sinatra.

Cuando descubrí Crystal estaba impresionado por lo bien que está diseñado...especialmente porque...aún está en Alpha! Como un lenguaje tan joven puede ser tan bueno? No lo entiendo...pero Crystal es realmente impresionante...

En fín...veamos como trabaja Blagchain...

Por supuesto...no es una dapp...pero eso está bien porque solo vamos a usarlo de manera local...utiliza dos aplicaciones web que funcionan en puertos diferentes...uno trabajando como servidor y el otro trabajando como cliente...


Puedes agregar un nuevo producto...


Pueden ver aquí que tenemos un Genesis Block, un nuevo block porque hemos posteado un producto (Y estan conectados via el Previous Hash) y también puede ver que cada transacción cuesta 0.1 Blagcoin...


Ahora, podemos utilizar otro browser para crear un nuevo usuario...


Como este usuario no creo el producto el/ella...puede comprarlo...y agregar una nueva transacción a la cadena...


El dinero (Blagcoin) va de una cuenta a la otra. La cadena crece y todo queda registrado...


Que pasa cuando no tenemos suficiente Blagcoin para comprar algo?


Bueno...si te gustan este tipo de cosas...aquí están la cantidad de líneas que me tomo hacer la aplicación...

Blagchain.cr (Parte Servidor) --> 129 lineas
BlagchainClient.cr (Parte Cliente) --> 125 lineas
index.ecr (HTML, Bootstrap y JQuery) --> 219 lineas

Así que ni siquiera 500 lineas de código para toda la aplicación...impresionante, no? -;)

Y claro...se que aunque sea quieren ver un poco del código fuente, no? Bueno...por qué no? -:)

BlagchainClient.cr
post "/sellArticle" do |env|
  user = env.params.body["user"]
  article = env.params.body["article"]
  description = env.params.body["description"]
  price = env.params.body["price"]
  amount = (env.session.float("amount") - 0.1).round(2)
  env.session.float("amount", amount)
  HTTP::Client.post("http://localhost:3000/addTransaction", form: "user=" + user + 
                    "&article=" + article + "&description=" + description + "&price=" + price)
  env.session.bool("flag", true)
  env.redirect "/Blagchain"
end

Saludos,

Blag.
SAP Labs Network.

No comments: