est un Ledger distribué pour le stockage, la gestion et la synchronisation des obligations financières entre différentes organisations financières.

Corda dispose d'une documentation assez bonne avec des vidéos de cours disponibles. Je vais essayer de décrire brièvement comment Corda fonctionne en interne.
Examinons les principales caractéristiques de Corda et son unicité par rapport à d'autres blockchains :
- Corda n'a pas de cryptomonnaie propre.
- Corda n'utilise pas le concept de minage ni le système Proof-of-Work.
- Le transfert de données se fait uniquement entre les participants de la transaction/du contrat. Il n’y a pas de diffusion mondiale à tous les nœuds du réseau.
- Il n'y a pas de contrôleur central supervisant toutes les transactions.
- Corda prend en charge divers mécanismes de consensus.
- Le consensus est atteint entre les participants au niveau d'un accord/contrat spécifique, et non au niveau de l'ensemble du système.
- Une transaction est confirmée uniquement par les participants qui y sont concernés.
- Corda propose un lien direct entre un langage juridique humain formel et le code des contrats intelligents.
Le ledger
Le concept de ledger dans Corda est subjectif. Il n'existe pas de stockage central de données unique. Au lieu de cela, chaque nœud maintient une base de données distincte des faits qui lui sont connus.
Par exemple, imaginez un réseau de 5 nœuds, où le cercle désigne un fait connu par le nœud.

Comme nous le voyons, Ed, Carl et Demi connaissent le fait 3, tandis qu'Alice et Bob n'en ont même pas connaissance. Corda garantit la conservation des faits communs dans la base de chaque nœud, et les données seront identiques.
États
Un état est un objet immuable représentant un fait connu d'un ou plusieurs nœuds du réseau à un moment donné.
Les états peuvent stocker des données arbitraires, par exemple des actions, des obligations, des prêts, des informations d'identification.
Par exemple, l'état suivant représente un IOU — un accord selon lequel Alice doit à Bob la somme X :

Le cycle de vie d'un fait au fil du temps est représenté par une séquence d'états. Lorsque l'état courant doit être mis à jour, nous en créons un nouveau et marquons l'état actuel comme historique.

Transactions
Les transactions sont des propositions de mise à jour du ledger. Elles ne sont pas diffusées à tous les participants du ledger et sont accessibles uniquement à ceux du réseau qui ont le droit légal de les consulter et de les gérer.
Une transaction sera ajoutée au ledger si elle :
- contractuellement valide
- signée par tous les participants nécessaires
- ne contient pas de double dépenses (double-spends)
Corda utilise un modèle UTXO (unspent transaction output), où chaque état du registre est immuable.
Lors de la création, l'état de sortie de la transaction précédente (par hachage et index) est transmis en entrée dans la transaction.

Cycle de vie d'une transaction :
- Création (À ce stade, la transaction n'est qu'une proposition de mise à jour du registre)
- Collecte des signatures (Les participants nécessaires à la transaction approuvent la proposition de mise à jour en ajoutant leur signature à la transaction)
- Commit de la transaction dans le registre
Après l'ajout de la transaction dans le registre, les états d'entrée sont marqués comme historiques et ne peuvent plus être utilisés dans de futures transactions.

En plus des états d'entrée et de sortie, une transaction peut contenir :
- Commandes (paramètre de la transaction indiquant l'objectif de la transaction)
- Pièces jointes (calendrier des jours fériés, convertisseur de devises)
- Fenêtres temporelles (durée de validité)
- Notaire (Notary, participants particuliers du réseau validant les transactions)

Contrats
Lorsque nous parlons de validité d'une transaction, nous entendons non seulement la présence des signatures nécessaires, mais aussi la validité contractuelle. Chaque transaction est liée à un contrat qui l'accepte et valide les états d'entrée et de sortie. Une transaction est considérée comme valide seulement si tous ses états sont valides.
Les contrats dans Corda sont écrits dans n'importe quel langage JVM (par exemple, Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Il est nécessaire d'hériter de la classe Contract et de redéfinir la méthode verify. En cas d'invalidité de la transaction, une exception doit être levée.
La validation des transactions doit être déterministe, c'est-à-dire que le contrat doit toujours soit accepter, soit rejeter la transaction. Pour cette raison, la validité de la transaction ne peut dépendre du temps, de nombres aléatoires, de fichiers de nœud du réseau, etc.
Dans Corda, les contrats s'exécutent dans ce qu'on appelle un bac à sable — une JVM légèrement modifiée, garantissant une exécution déterministe des contrats.
Flux
Pour automatiser la communication entre les nœuds du réseau, des flux ont été ajoutés.
Un flux est une séquence d'étapes qui indique à un nœud comment effectuer une mise à jour spécifique du registre, à quel moment il doit signer et valider la transaction.

Il faut parfois des heures, voire des jours, avant qu'une transaction soit signée par toutes les parties et inscrite dans le ledger. Que se passera-t-il si l’on déconnecte un nœud participant à la transaction ? Les flux ont des points de contrôle où l'état du flux est enregistré dans la base de données du nœud. Lors de la restauration du nœud dans le réseau, il continuera là où il s'était arrêté.
Consensus
Pour être inscrite dans le ledger, une transaction doit atteindre un consensus sur deux aspects : sa validité et son unicité.
La décision sur la validité d'une transaction n'est prise que par les parties directement impliquées.
Les nœuds notaires vérifient la transaction pour s'assurer de son unicité, prévenant ainsi les doubles dépenses.
Imaginons que Bob a 100$ et qu'il souhaite transférer 80$ à Charlie et 70$ à Dan, en utilisant le même état d'entrée.

Une telle manœuvre ne sera pas possible avec Corda. Bien que la transaction passe le test de validité, la vérification d'unicité échouera.
Conclusion
La plateforme Corda, développée par le consortium blockchain R3, n'est pas un exemple pur d'utilisation de la technologie blockchain. Corda est un outil assez spécialisé pour les institutions financières.
Source : habr.com
