Que la tecnología blockchain está aquí para quedarse no es nada nuevo, pero que la previsión de inversión para los sucesivos años aumenta hasta 3.6 Billones de dólares en 2022 en Europa, según IDC, no deja indiferente a nadie y las entidades financieras no están indiferentes a esta tecnología.

Por este motivo, hoy vamos a ver una cadena de bloques con una finalidad específica para ámbitos financieros: Corda.

Contexto

Desde la creación de la plataforma de blockchain con Bitcoin para realizar transacciones de forma eficiente, inmutables, sin intermediarios, transparentes, han aparecido variantes que solucionan diferentes casos de uso.

Una de ellas es Corda, un producto de la empresa financiera R3 que actualmente tiene más de 300 socios empresariales de ámbito privado-público.

Este producto está comercializado por Corda Enterprise en la versión para empresas, y Corda Open Source de código abierto.

El principal usuario de Corda es la banca y es que Corda tiene unas características que la hacen ser específica de los casos de uso de entornos financieros.

También tiene otros ámbitos como las cadenas de transporte y suministros, seguros o sistemas médicos.

Características de Corda

Es una red privada

Es una red permisionada, esto es que para utilizar la red se tiene que registrar como usuario, de esta forma asegura la identidad de los participantes.

Gestiona contratos inteligentes

Es la base de Corda, mediante estos contratos gestiona acuerdos entre las diferentes partes que componen el contrato.

No es una moneda

A diferencia de otros DLT con contratos inteligentes como Ethereum, Corda no gestiona monedas digitales y tampoco soporta una moneda propia. Corda es un marco de trabajo que gestiona contratos inteligentes, que pueden llegar a representar dinero físico u otros activos.

Siendo muy generalistas, representan “el hecho”. Podemos definir ‘el hecho’, como la situación en el que suceden ciertas acciones en el tiempo o podemos definirlo por la frase "lo que es el caso".

A modo de ejemplo, “así es el caso” en que ambos participantes, firman el seguro de accidentes por la cantidad de 100$ quedando como tomador y asegurado, con la empresa aseguradora Rue del Percebe. De este modo queda representado ‘el hecho’ en un contrato inteligente de Corda.

Para entender mejor este punto, imaginemos la relación entre dos actores: una oficina de banco y usuario con una cuenta a la vista con un IBAN. Este último ingresa en ventanilla la cantidad simbólica de un euro.

Pues bien este hecho ejecutaría un contrato de ingreso en el que atestigua que las partes han intervenido y que es una transacción que no tiene repudio y no se puede modificar.

Otro ejemplo que representa el hecho entre actores de banca es la contratación de productos de terceros, como un seguro de vida ligado a la concesión de un préstamo personal.

El contrato daría fe de que los intervinientes, el prestatario, aseguradora y prestamista forman un vínculo según las cláusulas adheridas al mismo, con las características habituales, no hay repudio, es inalterable, es pública entre las partes.

Las transacciones distribuidas entre las partes del contrato

A diferencia de las DLT convencionales, Corda no comporte las transacciones por todos los nodos de la red, sino que las comparte entre los nodos que tienen transacciones en común.

Esto quiere decir que no publica la transacción a todos los nodos de la red, por lo que mantiene la privacidad entre las partes.

Siguiendo el ejemplo anterior de la aseguradora, el contrato solo estará disponible para el nodo de la aseguradora y el nodo de la entidad financiera.

Si cada uno de estos actores tienen relación con terceros, por ejemplo la aseguradora con un conjunto de talleres de reparación, funerarias o centros médicos, este contrato no sería compartido, solo y únicamente por los intervinientes del contrato.

Esto que parece obvio, no siempre es así en otra DLT, por ejemplo en Ethereum.

Consenso de transacción: validado por un nodo llamado notario

Otras de las diferencias con otras DLT es que el consenso solo se hace entre las partes involucradas y por un tercero que hace de Notario, justificando que una transacción solo se ha realizado una vez.

Sin embargo, mantiene la ventaja principal de las DLT: la inmutabilidad. Una vez que el contrato se ha gestionado, el contrato puede servir como base legal en que caso de disputas.

Entrando un poco más en el detalle de cómo se realizan las transacciones en Corda, podemos decir que se ejecutan en dos fases:

Por lo tanto, si la firma está registrada en la red el poseedor de la firma es su legítimo dueño. Una vez comprobadas se ejecuta el contrato.

Si este nodo especial llamado notario, da fé de la transacción, esta se ha ejecutado correctamente y queda grabada en la cadena de bloques.

Flujo de trabajo definido entre integrantes del contrato

En términos de programación, llevar a cabo un contrato es sencillo ya que al estar basado en un marco de trabajo, no da lugar a la ambigüedad o errores de interpretación.

Es decir, un usuario nuevo de la red de blockchain de Corda si quiere crear un contrato tiene que regirse por las normas de la red, no se puede inventar normas de ejecución u operaciones o cómo se sincronizan los datos entre nodos, de ahí que haya un flujo de trabajo, en el que todos los componentes de la red trabajan de la misma forma.

La transacción de un contrato entre los intervinientes tiene un flujo conversacional, bien sincronizado que hace que el desarrollo de contratos y su ejecución sea igual para todos los integrantes de la red de Corda o nuevos usuarios.

Conceptos

Vistas las características generales de Corda, profundizaremos un poco en ellas de forma que podamos entender mejor cómo funciona y qué ventajas ofrece frente a otros productos.

UTXO

Corda usa el modelo de de transacciones UTXO (unspent transaction output) en lugar del modelo Account/Balance. Por comparación, Bitcoin usa el modelo UTXO y Ethereum usa el modelo Account/Balance.

En el caso de UTXO, una sola transacción puede crear múltiples salidas, como sería el caso cuando se envía a múltiples direcciones, pero cada salida de una transacción en particular solo se puede usar como una entrada en la cadena de bloques.

Cualquier referencia posterior es un doble gasto prohibido y un intento de gastar el mismo dinero dos veces. Es decir, ninguna transacción puede ser enviada a un bloque UTXO anterior, porque solo puede existir una entrada de dinero por bloque UTXO.

Si no nos fijamos en la siguiente imagen TX0, TX1… solo tienen una entrada del tipo ‘Input’ con múltiples salidas ‘output’, si se intentara hacer un reenvío de un TX1 este sería un doble gasto en la misma estructura y por definición no sería posible.

Si este fuese el caso, para poder realizarlo habría que reescribir la cadena de transacciones UTXO y poder tener la capacidad computacional para generar los hashes del minado por cada bloque en el que se encontrara cada TX.

En relación a Corda el funcionamiento es el mismo, pero aún más seguro ya que al ser una red permisionada y tener restringido el acceso por un sistema KYC (Know Your Customer), nadie que se identifique fehacientemente intentaría sabotear la red. Aun así, para evitar futuros males se confía en el sistema de transacciones en sistema de referencia UTXO.

Recuerda que en Corda no existe una moneda digital, ni Fiat, solo su representación, entonces cuando Corda dice que usa el sistema UTXO, ¿a qué se refiere?

Básicamente las transacciones representan contratos con un conjunto de propiedades que lo definen e internamente ese contrato tiene un identificador único, con su marca de tiempo.

Una vez ejecutado, ese contrato no se puede volver a ejecutar, y si lo hace será, por ejemplo, por que los valores de las propiedades cambien y estén de acuerdos las partes que intervienen o simplemente los intervinientes se ratifiquen en el contrato, para ello tienen que proporcionar la firma digital que los identifica.

Esta situación volvería a generar un identificador único, con una marca de tiempo diferente, por lo tanto la clave está en la marca de tiempo de la ejecución.

State Object

Corda no utiliza una red de BroadCast Global para comunicar la ejecución de un contrato, sino que utiliza un mecanismo en las que las transacciones son visibles sólo entre participantes y es compartido sólo con aquellos que tienen una razón legítima para verlo.

Estas transacciones se basan en un objeto de estado que representa un acuerdo entre dos o más partes, prestatario(s), prestamista(s) y un valor, dentro de una marca de tiempo:

Fuente: CordaFuente: Corda

En el diagrama anterior, vemos la representación de un State Object que realiza un depósito de 100 $ en un banco comercial, propiedad de una compañía de envíos ficticia.

Efectivamente solo se registra el hecho, no gestiona dinero digital o Fiat, solo registra que en ventanilla se ha registrado la entrada en caja la cantidad de 100 dólares. En el que además se lee correctamente el propósito legal.

Consenso

En Corda el consenso de una transacción se realiza en dos pasos diferenciados por las partes del contrato y el notario, llamados:

En este primer paso del consenso, cada integrante del contrato comprueba que existen las firmas digitales de todos los integrantes antes de aprobar la transacción.

Fuente: CordaFuente: Corda

En esta parte del consenso de una transacción. Este solo lo verifica un nodo de tipo notario, es el encargado de verificar que no existe un doble envío de la transacción.

Las partes pueden tener la certeza de que la transacción que se está realizando es única, es decir, no existe ninguna otra transacción repetida, sobre la cual hayamos alcanzado previamente el consenso.

 Fuente: Corda Fuente: Corda

Si una o más de las entradas ya se han consumido en otra transacción, esto se conoce como doble gasto y la propuesta de transacción se considera inválida.

Flow

Las redes Corda utilizan mensajería punto a punto, broadcast en lugar de una transmisión global a todos los nodos. Esto significa que la coordinación de una actualización del libro mayor requiere que los participantes de la red especifiquen exactamente qué información debe enviarse, a qué contrapartes y en qué orden.

En lugar de tener que especificar estos pasos manualmente, Corda automatiza el proceso utilizando flujos. Un flujo es una secuencia de pasos que le dice a un nodo cómo lograr una actualización específica del libro mayor, como emitir un activo o liquidar una transacción.

 Fuente: Corda Fuente: Corda

A esta situación se llama Flujo, en la siguiente imagen vemos cómo es modelo de Flujo de una tx hasta su validación y consenso.

Vemos que hay tres actores, dos intervinientes y un notario. En su estado inicial (1) se carga el contrato en la red, seguidamente el participante uno invoca el contrato mediante su firma, el segundo interviniente verifica la firma (3 Verify Tx), estampa la suya (3 Gather CounterParty Sig).

Posteriormente el notario asignado al contrato verifica el State Object firmando el contrato(5). Por último, distribuye el estado del contrato por las parte involucradas (6).

 Fuente: Corda Fuente: Corda

Conclusiones

Con las propiedades de Corda que hemos visto anteriormente podemos resumir en tres ejes centrales:

La combinación de objetos de estado (datos), código de contrato (operaciones permitidas), protocolos de transacción (flujo de negocios), hacen que un desarrollador pueda realizar aplicaciones (CorDapp) de contabilidad distribuida (DLT) dentro de Corda.

Corda es un buen candidato y rival para otras plataformas como Ripple, ya que las aplicaciones CorDapp están basadas en dos lenguajes de programación bien extendidos, Java y Kotlin, por lo que las posibilidades de desarrollo son infinitas llegando a los terminales móviles que tengan sistemas operativos, Android e IOS con Kotlin y plataformas PaaS como pueden ser AWS o Azure con Java.

Happy coding!

Cuéntanos qué te parece.

Enviar.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.