Blockchain: visión tecnológica

Artículo

Blockchain: visión tecnológica

“Se supone que la principal ventaja de la tecnología Blockchain es que es más segura, pero en general las nuevas tecnologías son menos confiables por parte de la gente, y esta paradoja no puede ser realmente evitada". Vitalik Buterin, creador de Ethereum

Conceptos básicos

  • La cadena de bloques es una base de datos distribuida entre los nodos participantes en la red Blockchain.
  • Dicha base de datos distribuida contiene transacciones firmadas con criptografía de clave pública, permitiendo de esta forma identificar el acceso a la información contenida en la misma.
  • Para guardar información en la base de datos se aplicará un algoritmo de consenso a ejecutar por los nodos mineros. Cuando se resuelva el problema matemático se emitirá el bloque obtenido al resto de nodos, “encadenándose” a la cadena existente. Cada uno de los bloques contiene las transacciones firmadas.
  • Los nodos mineros que consiguen subir un bloque reciben una recompensa en forma de criptomonedas (tanto por el bloque como por las transacciones contenidas en el mismo).
  • La implementación más popular de Blockchain es Bitcoin, protocolo que permite el envío de transacciones entre direcciones (hash de la parte pública de la clave) utilizando la criptomoneda homónima.
  • El impacto mediático de esta tecnología se basa en las siguientes ventajas detectadas:
    • Se eliminan terceros (descentralización)
    • Aumento de la transparencia
    • Seguridad

Elementos que definen una Blockchain

Los elementos que definen una Blockchain son los siguientes:

  1. Criptografía de clave pública: también conocida como criptografía asimétrica, utiliza la implementación de curva elíptica para mejorar el rendimiento respecto a implementaciones tradicionales como RSA. De esta forma se valida la autenticidad del emisor de la transacción por parte de todos los nodos de la red. Para las implementaciones más populares (Bitcoin y Ethereum) esta validación se realiza comparando la clave pública del remitente con el elemento firmado con su clave privada (el elemento a firmar es una versión “hasheada” de la transacción).
  2. Base de datos distribuida: cada uno de los nodos replica completamente la base de datos al unirse a la red de la Blockchain correspondiente (actualmente se está trabajando en un “approach” relacionado con la gestión de históricos). Este proceso de réplica sincroniza todos los bloques de la cadena. Una vez sincronizada, el nodo podrá empezar a operar con normalidad sobre la red (balance de criptomonedas, envío y recepción de transacciones). Es importante destacar que la base de datos se nutre de bloques. Es decir, hasta que una transacción no es confirmada mediante su inclusión en un bloque aceptado, la transacción en sí no se considera válida en la Blockchain.
  3. Algoritmo de consenso: la característica que marca la diferencia entre otros sistemas distribuidos y Blockchain es el algoritmo de consenso. Dicho algoritmo incentiva a participar mediante el envío de recompensas a los mineros encargados de crear los bloques.

Los más destacados por el momento son los siguientes:

  • Proof-of-Work: es el algoritmo más extendido, utilizado por Bitcoin y la versión estable de Ethereum y está orientado a redes públicas.
    • Se basa en la generación de un hash teniendo en cuenta el Merkle Root (raíz hash del árbol que toma a pares los hashes de las transacciones a incluir en un bloque), el hash del bloque anterior, la hora, la dificultad y el nonce (“valor único”).
    • Los valores se van combinando por los mineros hasta generar un hash que tenga N 0s (en la elaboración de esta presentación, el valor de N para Bitcoin es 18).
    • El valor N se va modificando por el protocolo para encajar con los tiempos medios de subida de bloques (10’ para Bitcoin, 15” para Ethereum).
    • Una vez generado el hash de bloque correcto, se envía al resto de la red. La aceptación de dicho bloque se consigue cuando los mineros en la red empiezan a utilizar dicho hash como valor del bloque previo.
    • A cambio del bloque subido, se obtiene una recompensa por bloque y transacciones. En el caso de que se llegue a una solución del hash pero no consiga llegar a ser el nuevo bloque de la cadena (porque alguien lo haya conseguido antes). No se obtendrá recompensa en Bitcoin pero sí en Ethereum (bloques huérfanos y tíos).
  • Proof-of-Authority: algoritmo utilizado por Ethereum para la gestión de redes privadas.
    • El coste de PoW no tiene sentido en redes privadas en las que todas las partes se conocen.
    • Para acelerar la subida de bloques y sus transacciones se definen autoridades, una por cada parte implicada.
    • Cada autoridad dispone de una clave privada en la red que permite firmar las transacciones. La parte pública de la misma se distribuye al resto de autoridades.
    • Cuando se emite una transacción, se valida la firma del remitente y se incluye en un bloque que sube “inmediatamente”.
    • De esta forma los tiempos se reducen exponencialmente, basado en una confianza predefinida.
  • Proof-of-Stake (en desarrollo): algoritmo en desarrollo por Ethereum (y otros protocolos de criptomonedas) que se basa en que las direcciones que tienen una mayor participación en la red (mayor número de criptomonedas, “stake”) tendrán una mayor posibilidad de subir nuevos bloques. 

 

Principales implementaciones

Desde el nacimiento de Bitcoin, las plataformas que implementan Blockchain y su propia moneda no han parado de crecer (Ethereum, Ripple, Litecoin…). Dentro de estas implementaciones, algunas de las que están teniendo más relevancia son las siguientes:

  1. Bitcoin: es el “padre” del Blockchain. Es concebido como “el oro” de las criptomonedas (comparativa relacionada con la proporción de oro respecto a fiat que existió en el pasado con monedas “físicas”). Las principales cualidades son las siguientes: 

- Se basa en el envío de transacciones entre hashes de claves públicas (“direcciones”). Estas transacciones no están encriptadas. Las transacciones son emitidas adicionalmente a todos los nodos participantes en la Blockchain.

- Cada transacción tiene una entrada y una salida:

- Como se puede observar en el script de salida, se utilizan “comandos” denominados “opcodes” para ejecutar las posibles operaciones. Es un lenguaje basado en pila, de izquierda a derecha. Esto implica que Bitcoin no es Turing completo (impidiendo bucles y condiciones). Está hecho a propósito para evitar posibles ciberataques.

- Gracias a esto (entre otras cosas), Bitcoin no ha sido hackeado nunca en sus 9 años de vida (no confundir con el hackeo de las wallets).

- En las transacciones, es necesario especificar una dirección para el cambio por cómo está implementado el protocolo. Es decir, si tengo 1 BTC y quiero transferir 0.4, si no indico qué hago con el 0.6 restante será enviado al minero que incluya dicha transacción en un bloque como incentivo. Es decir, hay que incluir una segunda dirección para el cambio (la nuestra) en la transacción.

- Los nodos mineros “recogerán” las transacciones (incentivadas con BTC) y empezarán a ejecutar la PoW de acuerdo a lo descrito en anteriores diapositivas para generar el hash de un bloque

- La recompensa por haber subido un bloque a la cadena se ve reflejada en la primera transacción de unos de los bloques posteriores (es conocida como transacción “coinbase”, generando nuevos BTC).

- El límite máximo de BTC que podrá distribuirse por la red es de 21 millones (por características del protocolo).

- El balance de BTC de cada dirección se realiza a través de Unspent Transaction Output (UTXO). Se accede a los hashes de las transacciones que no han gastado BTC para una cuenta, de tal manera que para comprobar el balance de una dirección hay que ir “hacia atrás” en estas transacciones para ir sumando o restando los valores transferidos. Este comportamiento se define como “transaction-based”.

2. Ethereum: es popularmente conocido por la concepción de los Smart Contracts (programas que se ejecutan en la máquina virtual de Ethereum –EVM-) que permiten añadir funcionalidad más allá de la transferencia de criptomonedas a la Blockchain. Las principales cualidades son las siguientes:

- Utiliza actualmente el algoritmo de consenso PoW, pero actualmente se encuentra en un proceso de adaptación a PoS. También da soporte para redes privadas a PoA.

- Utiliza LLL, Serpent y Solidity como lenguajes de programación (principalmente este último) para la definición de Smart Contracts.

- Estos lenguajes son Turing completos, potenciando con ello el ecosistema de desarrollo sobre la plataforma. No obstante, esto implica que el sistema es potencialmente hackeable (de hecho, ya lo ha sido).

- El hacking realizado fue durante un proceso conocido como “crowdsales” para la Decentralized Autonomous Organization (DAO). En resumen, se creó una empresa autónoma a través de Smart Contracts, y uno de los métodos facilitaba la compra de tokens (“acciones”) de la empresa pagando con ETH.

- Debido al comportamiento de las funciones de callback en Solidity, el atacante pudo hacerse con 150M de dólares en ETH. Este evento provocó lo que se conoce como un “hard fork” en el que se creó una nueva moneda (Ethereum Classic, ETC) con la versión previa al ataque del software de esta Blockchain. ETH es la versión modificada del software tras el ataque.

- Un concepto asociado a la ejecución de los Smart Contracts es el gas (unidad de energía). Esta unidad mide la ejecución de un Smart Contract en la red, debiendo pagar en ETH dicho gasto. Existe un límite de gas (4,7 millones por bloque) para que la ejecución de un Smart Contract no repercuta sobremanera en los recursos generales de la red.

- Una diferencia con Bitcoin es la recompensa a los mineros por aquellos bloques que no forman parte de la cadena principal (“stales” hasta que se incluyen en la cadena principal, a partir de dicho momento pasan a denominarse “tíos”).

- Ethereum es un protocolo “account-based”, es decir, la dirección (cuenta) no debe ir hacia atrás en sus transacciones no gastadas para obtener el balance total, ya que el valor está asociado de forma inmediata a la misma.

- El Patricia Trie es la estructura de datos que utiliza Ethereum para almacenar su información (también conocidos como Merkle Patricia Trie). Dentro de estos Patricia Tries, los bytecodes de los Smart Contracts se encuentran en los llamados “Storage Trie” (al desplegarse es asociado a una cuenta nueva).

- La API de Ethereum más extendida es la implementada en JavaScript (web3.js). Proporciona una interfaz JSON RPC para interaccionar con la Blockchain.

- Los clientes más populares para esta API son los siguientes:

    TestRPC: es el más básico de todos y está destinado para un entorno local. Utiliza un único nodo para la red Blockchain y proporciona varias cuentas por defecto.

    Geth: cliente implementado utilizando Golang. Sería el adecuado para un entorno de Desarrollo, al permitir la utilización de diversos nodos. Permite implementar algoritmos de consenso diferentes, como PoW y PoA

    Parity: el cliente más cómodo para el desarrollador y eficiente en el uso de los datos de la Blockchain. Incluye una UI para crear cuentas, enviar transacciones, desplegar Smart Contracts y toda la funcionalidad necesaria para interaccionar con la misma. Permite implementar algoritmos de consenso diferentes, como PoW y PoA. Está basada en Geth.

Truffle es el framework de JavaScript que facilita la gestión de los Smart Contracts, compilando y desplegando automáticamente los mismos (o no haciéndolo si detecta que no hay cambios) además de proporcionar servicios como test unitarios.

3. Hyperledger: es una plataforma de “Blockchain de negocio” promovida por la Linux Foundation. Esta plataforma es aprovechada por diversos desarrolladores que han creado diferentes versiones (Burrow, Sawtooth…). La más popular es la implementada por IBM, Fabric, cuyas cualidades son las siguientes:

- No utiliza criptomonedas. Al estar concebido para redes internas, no tiene sentido incentivar a las partes para que participen en la red.

- Usa redes autorizadas. Los nodos de la red utilizan diferentes CA (Certification Authorities) para firmar con los certificados asociados a su grupo.

- No tiene un algoritmo de consenso como tal. Están trabajando en la implementación de Kafka para que refleje dicho consenso. No obstante, actualmente el único mecanismo plenamente funcional es “Solo” (es decir, no hay algoritmo de consenso).

- Por lo tanto, teniendo en cuenta los argumentos esgrimidos, se puede concluir que Hyperledger Fabric no es una Blockchain (por el momento), sólo un “ledger” distribuido. ¿Por qué hablar de ella?

- Empresas importantes tienen un entorno altamente “IBMizado” à Les resulta interesante utilizar un nuevo componente de la “suite” que les ha funcionado hasta el momento.

- En líneas generales, las compañías siguen sin estar convencidas de tener Blockchain públicas à Hyperledger Fabric aporta un entorno privado securizado por la criptografía.

- Los Smart Contracts se denominan Chaincodes. Estos Chaincodes pueden ser desarrollados en Golang (plenamente funcional) y Java (en progreso). Se despliegan en contenedores Docker, que emulan el comportamiento de la EVM de Ethereum.

- La primera versión de Hyperledger Fabric fue anunciada a mediados de julio de 2017.

Miguel Ángel Rojo

Miguel es un consultor IT con experiencia de 7 años en Java, casi todos ellos en el Sector Público. Actualmente está trabajando en el Blockchain Lab de Deloitte situado en Dublín.

Trabajó durante año y dos meses como analista-programador (TIBCO Business Studio, Spring MVC 2.5.6, Hibernate, Maven, IceFaces, SQL Server 2015). Posteriormente, desempeñó tareas de analista durante otro año y medio (Struts, JSP y las tecnologías indicadas anteriormente a excepción de TIBCO y IceFaces). Ha llevado a cabo la adaptación a JEE6 (JAX-WS, EJB 3.1, JPA 2.0 sobre bases de datos Oracle). También ha desempeñado tareas de jefe de equipo durante un año, en un proyecto de JSF 2.0 + Spring WebFlow contra un negocio en entornos Natural (a través de EntireX).

En el Sector Energético, ha llevado a cabo proyectos de migración de datos basados en Oracle ODI.

Did you find this useful?