Los elementos que definen una Blockchain son los siguientes:
Los más destacados por el momento son los siguientes:
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:
- 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.
Luis es senior manager del área de tecnología de Deloitte con más de 18 años de experiencia profesional en IT. Se incorporó a Deloitte en 2007 dentro del área de DxD. Su carrera siempre ha estado enfocada al desarrollo de aplicaciones de gestión, portales web e integración de sistemas realizados con tecnologías Java y .NET en entornos SOA. Los últimos años de su carrera se han enfocado al área de integración de sistemas y middleware, basadas en SOA, BPM y API Management, trabajando en distintos clientes utilizando soluciones de distintos fabricantes como TIBCO, IBM, Mulesoft y Redhat.