Edgar Barrantes
Jul 22, 2017 · 5 min read

Blockchain es una tecnología que permite tener una base de datos descentralizada. Estos registros que se están guardando se llaman bloques. Y en cada bloque se tiene un campo que especifica el bloque anterior, lo cual hace que el sistema sea inherentemente seguro, pues todo registro va a atado a todos los registros anteriores, haciendo que sea prácticamente imposible modificar los registros anteriores.

Esto permite que un blockchain pueda ser utilizado como un “ledger”, un registro de todas las transacciones que se han hecho de una forma inmutable.

Además, dadas las características del sistema, se ve como una opción para registros médicos, de identidad, eventos, etc.

Ahora, una implementación particular de blockchain es Bitcoin, que fue hecho específicamente para ser usado como una moneda. Uso bitcoin para ejemplificar cómo se registran las transacciones porque su sistema es relativamente sencillo. La idea de bitcoin es que se registren transacciones. Cada transacción tiene ciertos campos, por ejemplo:

  • El campo que registra quién manda la transacción.
  • El que registra quién la recibe.
  • El que registra el monto que se va a pasar.
  • La firma que garantiza que el que envía la transacción es el dueño de la “cuenta” que envía.

Los campos que registran quién recibe y quien envía son llaves públicas. Se está diciendo a la red, hey, yo que tengo esto y quiero pasarlo a esta otra cuenta. El monto es un número. Y la firma es el resultado de firmar la información anterior con la llave privada de la llave pública que envía la transacción.

Ahora, resulta que otro de los campos permite ejecutar un script, un trozo de código. En bitcoin en particular lo que se puede ejecutar es muy limitado, sirve principalmente para verificar llaves. No se pueden hacer loops y no es turing completo.

Si quieren ver la lista completa de lo que se puede hacer, está aquí: https://en.bitcoin.it/wiki/Script

Lo que nos lleva al tema en cuestión, resulta que un día alguien dijo, hey, esto de que se puedan usar scripts me parece genial, pero ¿por qué no hacemos que se pueda ejecutar todo lo que querramos aquí? Y de ahí nació Ethereum.

Ethereum puede ser usado para llamar a la moneda (cryptomoneda) asociada, y también para llamar a la Máquina Virtual Ethereum (EVM), lo cuál es, básicamente, un blockchain programable. En corto, la EVM es un set de protocolos que permiten programar en el blockchain con lenguajes basados en lenguajes “amigables” con javascript o python. Un ejemplo que de un lenguaje similar a Javascript que permite programar en Ethereum es Solidity, y uno similar a python es Serpent. Por el momento, el lenguaje más popular es Solidity.

¿Qué hace que la EVM sea segura y confiable? La EVM tiene paralización en todos los nodos, pero esto no se hace como usualmente para aumentar eficiencia, pues todos los nodos ejecutan los mismos comandos, para asegurar tolerancia a errores, nunca habrá tiempo en el que la máquina no esté funcionando. La EVM se puede describir como una computadora mundial.

Ahora, una de las características principales de Ethereum es que se pueden crear “contratos”. Un contracto es básicamente un set de código (funciones) y datos (el estado) que viven en una dirección específica en el blockchain de Ethereum. Estos contratos está en el block en un formato llamado EVM bytecode. Estos contratos normalmente se crean en uno de los lenguajes que vimos anteriormente y se compilan a bytecode.

Ahora, como la EVM está basada en blockchain, esto quiere decir que una vez que un contrato puesto en la red, ese contrato ya no se puede cambiar. Nunca. Esto es lo que da confianza en los contratos, nunca ninguna de las partes podrá modificar un contrato. Claro, un contrato puede cambiar si fue programado para cambiar, pero esto ya se sabría de antemano (además, como nota al pie, un contrato puede crear otros contratos).

Y a pesar de que lo que pueda programar en la EVM es prácticamente, cualquier cosa, al ser un sistema enfocado en transacciones, los contratos tienen a tratar asunto de dinero, por ejemplo: pagar por servicios que se corren en la misma EVM (o en redes basadas en esta), realizar apuestas, etc.

Todo esto hace que crear y hacer deploy de un contrato con pulgas sea particularmente riesgoso. Por esto algunas recomendaciones rápidas en caso de desarrollar son:

  • Fallar rápido, no escribir código que haga que el código siempre se ejecute, preferir tirar condicionales que rompan el código antes de escribir código que tire defaults para asegurarse que el código no falle.
  • Un contrato puede llamar a otro contrato, lo ideal sería que las funciones sean lo más modulares posibles, para reducir el riesgo de que otro contrato de un error.
  • Siempre escribir tests, Truffle permite correr tests.

Todo esto permite que exista un ecosistema de aplicaciones en la EVM, se les llaman dApps, por ser apps descentralizadas. Este tipo de dApps incluyen proyectos como Golem, que nos permite renderizar vídeos en la red. Mysterium que es un VPN descentralizado, tokencard, que es un sistema que permite pagar con crypto por medio de un tarjeta visa. Y más.

Para estas aplicaciones se crean lo que se conocen como tokens, que son implementaciones en la red de ethereum que son divisas como tal, que permiten pagar por servicios en estas aplicaciones, lo que ha generado un nicho de mercado para gente que gusta especular con monedas. Esto implica que el interés económico está en crecimiento, y la conversión de monedas tradicionales (fiat) a cryptomonedas ha ido en aumento, lo que hace que más gente esté interesada en que los proyectos funcionen.

Lo que nos lleva, para finalizar, a la idea de que lo brillante de usar blockchain para transacciones, aparte de todo lo que hemos dicho hasta ahora, radica principalmente en que, como las personas que participan del ecosistema han invertido o han apostado en él, entonces todos en la red quieren mantener el sistema estable, un ejemplo de esto en el caso de bitcoin fue cuando la empresa bitmain, que tenía un grupo enorme de computadoras destinadas a verificar transacciones llegó a tener al rededor del 40% de la red, lo que los llevó a verificar 6 bloques seguidos, y como esto implica que ellos pudieron haber modificado la cadena como ellos hubieran querido, ellos voluntariamente decidieron empezar a reducir el porcentaje de la red que ellos estaban ocupando, llegando el 16% aproximadamente que tiene ahora.

El sistema mismo se encarga ser la pesadilla de un dictador en potencia. Haciendo la descentralización un ideal por el que todas las partes interesadas quieran trabajar.

Edgar Barrantes

Written by

Right now, this is a profile for following others. In the near future: web, minimalism, personal views and random babbling, which might very well be the same.