Corda es un libro mayor distribuido para almacenar, administrar y sincronizar obligaciones financieras entre varias instituciones financieras.

Corda tiene bastante buena documentación con video conferencias, que se pueden encontrar
aquí . Trataré de describir brevemente cómo se construye Corda en su interior.
Considere las características principales de Corda y su singularidad entre otras blockchains:
- Corda no tiene su propia criptomoneda.
- Corda no utiliza el concepto de minería y el sistema de Prueba de trabajo.
- La transferencia de datos ocurre solo entre los participantes de la transacción / contrato. No hay transmisión global a todos los nodos de la red.
- No hay un controlador central que gestione todas las transacciones.
- Corda admite varios mecanismos de consenso.
- Se llega a un consenso entre los participantes a nivel de un acuerdo / contrato por separado, y no a nivel de todo el sistema.
- Una transacción es confirmada solo por los participantes relacionados con ella.
- Corda ofrece un enlace directo entre el lenguaje legal humano formal y el código de contrato inteligente.
El libro mayor
El concepto de libro mayor en Corda es subjetivo. No hay un único almacén de datos central. En cambio, cada nodo mantiene una base de datos separada de los hechos que conoce.
Por ejemplo, imagine una red de 5 nodos, donde el círculo es un hecho conocido por el nodo.

Como podemos ver, Ed, Carl y Demi saben sobre el hecho 3, y Alice y Bob ni siquiera sospechan de él. Corda garantiza la preservación de los hechos generales en la base de datos de cada nodo, y los datos serán idénticos.
Estados
Un estado es un objeto
inmutable , que es un hecho conocido por uno o más nodos de red en un punto particular en el tiempo.
Los estados pueden almacenar datos arbitrarios, por ejemplo, acciones, bonos, préstamos, información de identificación.
Por ejemplo, el siguiente estado es un pagaré, un acuerdo de que Alice le debe a Bob la cantidad de X:
El ciclo de vida de un hecho a lo largo del tiempo está representado por una secuencia de estados. Cuando es necesario actualizar el estado actual, creamos uno nuevo y marcamos el actual como histórico.

Transacciones
Las transacciones son sugerencias para actualizar ledger-a. No se transmiten a todos los participantes del libro mayor y están disponibles solo para aquellos miembros de la red que tienen el derecho legal de verlos y administrarlos.
Se agregará una transacción al libro mayor si:
- contrato válido
- firmado por todos los participantes necesarios
- no contiene desechos dobles (gastos dobles)
Corda utiliza el modelo UTXO (salida de transacción no gastada), en el que cada estado del libro mayor es inmutable.
Cuando se crea una transacción, el estado de entrada de la transacción anterior (por hash e índice) se transmite a la entrada.
Ciclo de vida de la transacción:
- Creación (por el momento, la transacción es solo una propuesta para actualizar ledger-a)
- Colección de firmas (los participantes requeridos en la transacción aprueban la propuesta de actualización agregando una firma a la transacción)
- Transmitir confirmación en el libro mayor
Después de agregar una transacción al libro mayor, los estados de entrada se marcan como históricos y no se pueden usar en transacciones futuras.
Además de los estados de entrada y salida, una transacción puede contener:
- Comandos (parámetro de transacción que indica el propósito de la transacción)
- Adjuntos (calendario de vacaciones, conversor de divisas)
- Ventanas temporales (período de validez)
- Notario (Notario, miembros especiales de la red, validando transacciones)
Contratos
Cuando hablamos de la validez de la transacción, nos referimos no solo a la disponibilidad de las firmas necesarias, sino también a la validez del contrato. Cada transacción está asociada con un contrato que lo acepta y valida los estados de entrada y salida. Una transacción se considera válida solo si todos sus estados son válidos.
Los contratos en Corda se escriben en cualquier lenguaje JVM (por ejemplo, Java, Kotlin).
class CommercialPaper : Contract { override fun verify(tx: LedgerTransaction) { TODO() } }
Debe heredar de la clase
Contract y anular el método de
verificación . En caso de validación no válida, se lanza una excepción.
La validación de las transacciones debe ser determinista, es decir El contrato siempre debe aceptar o rechazar la transacción. En relación con esto, la validez de una transacción no puede depender del tiempo, números aleatorios, archivos host, etc.
En Corda, los contratos se ejecutan en el llamado sandbox, una JVM ligeramente modificada que garantiza la ejecución determinista de los contratos.
Corrientes
Para automatizar la comunicación de los hosts, se han agregado hilos.
Una secuencia es una secuencia de pasos que le indica al nodo cómo realizar una actualización específica del libro mayor, momento en el que es necesario firmar y validar la transacción.

A veces, lleva horas, días hasta que todas las partes firman la transacción y termina en el libro mayor. ¿Qué sucede si desconecta el nodo involucrado en la transacción? Las secuencias tienen puntos de interrupción en los que el estado de la secuencia se escribe en la base de datos de nodos. Al restaurar un nodo en la red, continuará desde el lugar donde se detuvo.
Consenso
Para entrar en el libro mayor, una transacción debe alcanzar un consenso: sobre validez y unicidad.
La decisión sobre la validez de una transacción la toman solo las partes directamente involucradas.
Los nodos notarizados verifican que la transacción sea única, evitan el doble gasto.
Supongamos que Bob tiene $ 100 y quiere transferir $ 80 a Charlie y $ 70 a Dan usando el mismo estado de entrada.

Tal truco que Corda no permitirá arrancar. Aunque la transacción pasará una verificación de validación, la verificación de unicidad fallará.
Conclusión
La plataforma Corda, desarrollada por el consorcio R3 blockchain, no es un ejemplo puro del uso de la tecnología blockchain. Corda es una herramienta altamente especializada para instituciones financieras.