Disclaimer: Si este artículo te suena a viejo en algún momento, es porque es viejo. Lo escribí a principios de 2019, y si ve la luz ahora, casi dos años después, es simplemente porque me da pena quitarlo de borradores.
¿A qué huele una unidad de gas? ¿Será inflamable el Ether? ¿De qué color es una transacción minada? Todas estas preguntas vagan por mi cerebro mientras hago búsqueda tras búsqueda en Google, intentando no meterme demasiado en el infierno que es la página de resultados de cualquier palabra clave remotamente relacionada con criptomonedas.
¿El denomindador común de todos ellos? Que están centrados en la especulación, y en intentar explicar de manera sencilla la tecnología a gente que no está interesada en la tecnología, sino en un gran beneficio económico a corto plazo.
- ¿Qué es Ethereum? Información para inversores
- Gráfico precio Ethereum
- La moneda Ethereum (lo que necesitas saber)
- What is Ethereum? The most comprehensive beginners guide
Toda esta (inútil y desmoralizante) cantidad de información hace que, si tienes el ánimo bajo, termines desistiendo rápidamente de introducirte en el mundo de las criptomonedas. ¿Acaso necesito ser rico para encontrar una aplicación práctica al conocimiento que adquiera? ¡Un Bitcoin es casi el doble de mi sueldo mensual! Y es que ya sea por azares del destino o por mala suerte, me he metido a desarrollar Smart Contracts justo cuando las criptomonedas en general, y Ethereum en particular, no están pasando por su mejor momento.
Parece que la burbuja de especulación creada alrededor de esta tecnología está a punto de reventar, con los chinos apagando sus granjas porque la electricidad invertida en minar es más cara que la recompensa. Si no hay especulación no hay mercado, y sin mercado, lo que ahora es algo mainstream (hemos oído hablar de criptomonedas en la cola de la frutería) corre el riesgo de volver a convertirse en un hobby de nicho. Menos mal que esto lo estoy haciendo por cuestiones académicas, y no en busca de ese dulce, dulce Wei que sumar a mi EOA de Ethereum.
Vamos a tratar de sumergirnos un poco en la parte de desarrollo del mundillo de las criptomonedas, pero sin ahogarnos. Básicamente como cuando vamos a bañarnos al río y entramos despacito porque acabamos de comer.
Breve introducción al blockchain
Asumo que si te ha interesado el blogpost hasta aquí, tienes al menos un conocimiento básico de qué es la tecnología blockchain y dónde radica su interés. Si no, este vídeo lo resume de manera bastante didáctica:
Por ponerlo en bullet points:
- Un bloque agrupa transacciones.
- Estas transacciones pueden representar cualquier cosa…
- …aunque normalmente representan que Alice le ha enviado divisas de la criptomoneda de turno a Bob.
- Todas las transacciones nuevas van a un pool de transacciones sin confirmar.
- Cada cierto tiempo, los nodos que participan en la blockchain, que pueden
ser operados por cualquier hijo de vecino, cogen unas cuantas transacciones
de dicho pool, las agrupan en un bloque, e intentan minarlo.
- Antes de comenzar a minarlo, cada nodo añade una transacción que representa la recompensa. En Bitcoin, es así como se acuña nueva criptomoneda, aunque otras blockchains usan otros métodos, como un impuesto sobre las transacciones que se minen.
- La dificultad de minar un bloque radica en que el hash del mismo ha de
comenzar por un número determinado de ceros.
- Esto es lo que se conoce como proof of work, una forma elegante de decir “mira qué de FPGAs me he comprado”.
- Para modificar el hash del bloque, como no se pueden modificar las transacciones, se modifica una parte variable llamada nonce.
- Cuando un nodo encuentra un nonce que haga que el hash del bloque satisfaga el proof of work, lo distribuye al resto de nodos, que aseguran que el hash concuerda con el nonce y las transacciones.
- Si todos los nodos están de acuerdo en que el bloque es correcto, este se añade a la cadena, los nodos abortan el minado fallido, recogen más transacciones del pool, y comienza el minado de un nuevo bloque.
Una transacción no está realmente confirmada cuando entra en un bloque: el último bloque de la cadena es el más débil, ya que está sujeto a escenarios excepcionales tales como que dos mineros minen un bloque simultáneamente. Si esto sucediese, cuando se mine el siguiente bloque se llegará al consenso de cuál de los dos bloques simultáneos anteriores es el que pervive, y las transacciones del descartado volverán al pool. Pero eso queda fuera del alcance de este post, así que haced como que no os he dicho nada.
¿Qué es un Smart Contract?
El objetivo de una blockchain concreta (Bitcoin, por ejemplo) puede ser únicamente la transferencia de moneda digital. Sin embargo, algunas blockchains (y, en concreto, Ethereum), además de a dicha transferencia, dan soporte a una cosa llamada Smart Contracts: la capa de lógica de negocio que se ejecuta sobre la cadena de bloques.
Bueno, no exactamente “sobre” la cadena de bloques. Al fin y al cabo, esta no es más que datos replicados en los nodos participantes. Donde se ejecuta realmente un Smart Contract es en una máquina virtual (Ethereum Virtual Machine, a.k.a. EVM) que se ejecuta en dichos nodos.
Estos Smart Contracts suelen estar escritos en un lenguaje de programación sencillo (Solidity, entre otros), no muy lejano a Java o C#, y con unas capacidades relativamente limitadas: a pesar de ser lenguajes Turing-completos, la EVM impone restricciones sobre el tiempo que puede ejecutarse un Smart Contract, el número de operaciones que puede realizar en ese tiempo, y los datos a los que puede acceder.
¿Cuál es el objetivo de un Smart Contract?
El concepto de Smart Contract no surgió con el de blockchain, sino que es mucho anterior. Fueron planteados por primera vez por Nick Szabo en la década de los 90. La idea principal es que, mientras que el cumplimiento de un contrato tradicional solo puede ser asegurado mediante métodos coercitivos (normalmente con el Estado de por medio, con medidas tales como sanciones económicas o privación de la libertad, en teoría siempre al amparo de la ley), un Smart Contract, valiéndose de métodos digitales, aseguraría su cumplimiento por la sencilla inevitabilidad de este.
Si tenemos una pieza de código que…:
- Una vez puesta en producción, no puede modificarse.
- No es controlada por ninguna de las partes, sino por una red de nodos distribuida operada por agentes anónimos que han de alcanzar un consenso sobre el resultado de la ejecución de dicho código.
- Al ejecutarse realizará una acción para la que normalmente usaríamos contratos
tradicionales, tales como…
- …transferencia de bienes
- …obtención de licencias
- …contratación de seguros
- …y un largo etcétera
- Puede comprobar precondiciones para asegurar que su ejecución es posible.
- Por ejemplo, que una persona tenga tanto o más dinero del que intenta gastar.
- Puede comprobar postcondiciones para asegurar que su ejecución fue correcta.
- Por ejemplo, que al destinatario efectivamente le ha llegado el asset que estaba comprando.
- Su resultado es público, pudiendo consultarse y verificarse en cualquier momento por cualquiera.
…entonces tenemos un Smart Contract en el sentido más estricto del concepto.
Sin embargo, los Smart Contracts son la parte de una blockchain que un desarrollador puede programar, por lo que, en realidad, su aplicación va más allá que simplemente reemplazar los aburridos y farragosos contratos tradicionales.
Pensad en ellos como programas que funcionan sobre una nube pública a la que cualquiera, con una conexión a Internet, tiene acceso. Y, además, podemos acceder a sus estado y ejecutar sus funciones mediante APIs REST o JavaScript. ¿La cosa empieza a parecer más interesante?