— er et distribueret ledger til opbevaring, administration og synkronisering af finansielle forpligtelser mellem forskellige finansielle organisationer.

Corda har en rimelig god dokumentation med video-forelæsninger, som kan findes . Jeg vil forsøge kort at beskrive, hvordan Corda fungerer indeni.
Lad os se på de vigtigste funktioner ved Corda og dets unikke egenskaber blandt andre blockchains:
- Corda har ikke sin egen kryptovaluta.
- Corda bruger ikke konceptet mining og Proof-of-Work-systemet.
- Dataoverførsel sker kun mellem deltagerne i transaktionen/kontrakten. Der er ingen global broadcasting til alle noder i netværket.
- Der er ingen central controller, der styrer alle transaktioner.
- Corda understøtter forskellige konsensusmekanismer.
- Konsensus opnås mellem deltagerne på niveauet af en enkelt aftale/kontrakt, og ikke på niveauet for hele systemet.
- Transaktionen bekræftes kun af de deltagere, der er relateret til den.
- Corda tilbyder direkte forbindelse mellem formelt juridisk sprog og smart contracts kode.
Ledger
Begrebet ledger i Corda er subjektivt. Der er ingen central lagerbygning for data. I stedet understøtter hver node en separat database af de fakta, den kender.
For eksempel, forestil dig et netværk af 5 noder, hvor en cirkel er et kendt faktum for noden.

Som vi ser, kender Ed, Carl og Demi til faktum 3, mens Alice og Bob ikke engang har mistanke om det. Corda sikrer, at fælles fakta bevares i hver nodes database, og dataene vil være identiske.
Statuser
Status er uforanderlig et objekt, der repræsenterer et faktum, der er kendt af en eller flere noder i netværket på et givet tidspunkt.
Statuser kan indeholde vilkårlige data, såsom aktier, obligationer, lån, identifikationsoplysninger.
For eksempel repræsenterer følgende status et IOU — en aftale om, at Alice skylder Bob et beløb X:

Livscyklussen for et faktum over tid præsenteres som en sekvens af statuser. Når det nuværende stat skal opdateres, opretter vi en ny, mens den nuværende betegnes som historisk (historic).

Transaktioner
Transaktioner er forslag til opdatering af ledgeren. De broadcastes ikke til alle deltagere i ledgeren og er kun tilgængelige for de deltagere i netværket, der har lovligt ret til at se og håndtere dem.
Transaktionen vil blive tilføjet til ledgeren, hvis den er:
- kontraktligt gyldig
- underskrevet af alle nødvendige deltagere
- ikke indeholder dobbeltforbrug (double-spends)
Corda bruger UTXO-modellen (unspent transaction output), hvor hver tilstand af ledgeren er uforanderlig.
Ved oprettelse modtager transaktionen output-tilstanden fra den tidligere transaktion (via hash og indeks).

Transaktionens livscyklus:
- Oprettelse (I øjeblikket er transaktionen kun et forslag til opdatering af ledgeren)
- Indsamling af underskrifter (De nødvendige deltagere i transaktionen godkender forslaget til opdatering ved at tilføje en underskrift til transaktionen)
- Commit af transaktionen til ledgeren
Efter tilføjelse af transaktionen til ledgeren markeres indgangsforholdene som historiske og kan ikke bruges i fremtidige transaktioner.

Udover indgangs- og udgangsforhold kan transaktionen indeholde:
- Kommandoer (transaktionsparameteren, der angiver målet for transaktionen)
- Bilag (kalender for helligdage, valutakonverter)
- Tidsvinduer (gyldighedsperiode)
- Notarius (Notary, særlige deltagere i netværket, der validerer transaktioner)

Kontrakter
Når vi taler om gyldigheden af en transaktion, mener vi ikke kun tilstedeværelsen af nødvendige underskrifter, men også gyldigheden i henhold til kontrakten. Hver transaktion er knyttet til en kontrakt, der accepterer den og validerer indgangs- og udgangsforhold. En transaktion betragtes kun som gyldig, hvis alle dens forhold er gyldige.
Kontrakter i Corda skrives på ethvert JVM-sprog (f.eks. Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Det er nødvendigt at arve fra klassen Contract og overskrive metoden verify. I tilfælde af ugyldighed af transaktionen skal der kastes en undtagelse.
Validering af transaktioner skal være deterministisk, d.v.s. kontrakten skal altid enten acceptere eller afvise transaktionen. Derfor kan gyldigheden af transaktionen ikke afhænge af tid, tilfældige tal, filer fra netværksnoder m.m.
I Corda udføres kontrakter i det såkaldte sandkassemiljø — en lidt ændret JVM, der sikrer deterministisk udførelse af kontrakter.
Strømme
For at automatisere kommunikationen mellem netværksnoder blev strømme tilføjet.
En strøm er en sekvens af trin, der instruerer noden i, hvordan man udfører en bestemt opdatering af ledgeren, hvornår man skal underskrive og validere transaktionen.

Nogle gange kræver det timer eller dage, før en transaktion er underskrevet af alle parter og registreret i ledgeren. Hvad sker der, hvis man slukker for en node, der deltager i transaktionen? Strømme har kontrolpunkter, hvor strømtilstande gemmes i nodens database. Når noden genoprettes i netværket, vil den fortsætte der, hvor den stoppede.
Konsensus
For at komme ind i ledgeren skal transaktionen opnå to konsensus: om gyldighed og om unikhed.
Beslutningen om transaktionens gyldighed tages kun af de parter, der er direkte involveret.
Notari-noderne kontrollerer transaktionen for unikhed og forhindrer dobbeltforbrug.
Forestil dig, at Bob har 100$, og han ønsker at overføre 80$ til Charlie og 70$ til Dan ved hjælp af den samme indgangsstatus.

Denne trick fungerer ikke med Corda. Selvom transaktionen går igennem gyldighedskontrollen, vil unikhedskontrollen fejle.
Konklusion
Corda-platformen, udviklet af blockchain-konsortiet R3, er ikke et rent eksempel på brug af blockchain-teknologi. Corda er et tilstrækkeligt specialiseret værktøj til finansielle institutioner.
Kilde: habr.com
