— je distribuovaný ledger na uchovávanie, správu a synchronizáciu finančných záväzkov medzi rôznymi finančnými organizáciami.

Corda má dostatočne kvalitnú dokumentáciu s video prednáškami, ktorú možno nájsť . Pokúsim sa stručne opísať, ako je Corda zostavená interne.
Pozrime sa na hlavné rysy Corda a jeho jedinečnosť medzi ostatnými blockchainmi:
- Corda nemá vlastnú kryptomenu.
- Corda nevyužíva koncept ťažby a systém Proof-of-Work.
- Prenos údajov prebieha iba medzi účastníkmi transakcie/zmluvy. Tu nie je globálne vysielanie všetkým uzlom siete.
- Nie je centrálny kontrolór, ktorý by spravoval všetky transakcie.
- Corda podporuje rôzne mechanizmy konsenzu.
- Konsenzus sa dosahuje medzi účastníkmi na úrovni jednotlivých zmlúv, nie na úrovni celého systému.
- Transakcia je potvrdená iba účastníkmi, ktorých sa týka.
- Corda ponúka priamu väzbu medzi formálnym právnym jazykom a kódom smart zmlúv.
Ledger
Pojem ledger v Corda je subjektívny. Nie je žiadne jednotné centrálne úložisko údajov. Namiesto toho každý uzol udržiava samostatnú databázu známych faktov.
Napríklad si predstavte sieť zo 5 uzlov, kde kruh predstavuje fakt známy uzlu.

Ako vidíme, Ed, Carl a Demi poznajú fakt 3, zatiaľ čo Alice a Bob o ňom ani netušia. Corda zaručuje zachovanie spoločných faktov v databáze každého uzla, pričom údaje budú identické.
Stavy
Stav — je to nezmeniteľný objekt, ktorý predstavuje fakt známy jednému alebo viacerým uzlom siete v určitom okamihu.
Stavy môžu uchovávať ľubovoľné údaje, napríklad akcie, dlhopisy, úvery, identifikačné informácie.
Napríklad nasledujúci stav predstavuje IOU — dohodu, že Alice dlhuje Bobovi sumu X:

Životný cyklus faktu v priebehu času je predložený sekvenciou stavov. Keď je potrebné aktualizovať aktuálny stav, vytvoríme nový, pričom aktuálny označíme ako historický (historic).

Transakcie
Transakcie sú návrhy na aktualizáciu ledgeru. Nie sú vysielané všetkým účastníkom ledgeru a sú prístupné iba tým účastníkom siete, ktorí majú zákonné právo na ich zobrazenie a správu.
Transakcia bude pridaná do ledgeru, ak je:
- kontraktne platná
- podpísaná všetkými potrebnými účastníkmi
- neobsahuje dvojité výdavky (doba-spends)
Corda používa model UTXO (nevyčerpaný výstup transakcie), v ktorom je každý stav ledgeru nemenný.
Pri vytváraní sa do transakcie odovzdáva výstupný stav predchádzajúcej transakcie (podľa hash a indexu).

Životný cyklus transakcie:
- Vytvorenie (Momentálne je transakcia len návrh na aktualizáciu ledgeru)
- Zber podpisov (Potrební účastníci transakcie schvaľujú návrh na aktualizáciu pridaním podpisu k transakcii)
- Zavedenie transakcie do ledgeru
Po pridaní transakcie do ledgeru sú vstupné stavy označené ako historické a nemôžu byť použité v budúcich transakciách.

Okrem vstupných a výstupných stavov môže transakcia obsahovať:
- Príkazy (parametrizácia transakcie, určuje cieľ transakcie)
- Prílohy (kalendár sviatkov, konvertor mien)
- Časové okná (platnosť)
- Notár (Notary, špeciálni účastníci siete, ktorí validujú transakcie)

Zmluvy
Keď hovoríme o platnosti transakcie, máme na mysli nielen prítomnosť potrebných podpisov, ale aj platnosť podľa zmluvy. Každá transakcia je spojená so zmluvou, ktorá ju prijíma a validuje vstupné a výstupné stavy. Transakcia sa považuje za platnú iba vtedy, keď sú všetky jej stavy platné.
Zmluvy v Cordě sú písané v akomkoľvek jazyku JVM (napríklad Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Je potrebné dediť z triedy Contract a predefinovať metódu verify. V prípade neplatnosti transakcie by malo byť vyhodené výnimku.
Validácia transakcií musí byť deterministická, t.j. zmluva musí vždy buď prijať, alebo odmietnuť transakciu. V súvislosti s tým platnosť transakcie nemôže závisieť od času, náhodných čísel, súborov uzla siete a podobne.
V Cordě sa zmluvy vykonávajú v takzvanej pieskovnici — mierne upravenej JVM, ktorá zaručuje deterministické vykonanie zmlúv.
Prúdy
Aby sa automatizovala komunikácia uzlov siete, boli pridané prúdy.
Prúd je sekvencia krokov, ktorá hovorí uzlu, ako vykonať konkrétnu aktualizáciu ledgeru, kedy je potrebné podpísať a validovať transakciu.

Niekedy trvá hodiny, dni, kým transakcia podpíše všetkými stranami a dostane sa do ledgeru. Čo sa stane, ak odpojíte uzol, ktorý sa zúčastňuje na transakcii? Prúdy majú kontrolné body, kde sa stavy prúdu zapisujú do databázy uzla. Po obnovení uzla v sieti pokračuje tam, kde prestal.
Konsenzus
Aby sa transakcia dostala do ledgeru, musí dosiahnuť dva konsenzusy: na platnosť a na jedinečnosť.
Rozhodnutie o platnosti transakcie prijímajú len strany, ktoré sú do nej priamo zapojené.
Notárske uzly overujú transakciu na jedinečnosť a predchádzajú dvojitým výdavkom.
Predstavme si, že Bob má 100$ a chce previesť 80$ Charlovi a 70$ Danovi, a to všetko z rovnakého vstupného stavu.

Takýto trik Corda neumožní. Hoci transakcia prejde overením na platnosť, overenie na jedinečnosť zlyhá.
Záver
Platforma Corda, vyvinutá blockchainovým konzorciom R3, nie je čisto príkladom použitia technológie blockchain. Corda je dostatočne úzko špecializovaný nástroj pre finančné organizácie.
Zdroj: habr.com
