on detsentraliseeritud Ledger, mis on mĂ”eldud erinevate finantsasutuste vaheliste finantskohustuste hoidmiseks, haldamiseks ja sĂŒnkroniseerimiseks.

Cordal on piisavalt hea dokumentatsioon koos videoloengutega, mida saab leida . PĂŒĂŒan lĂŒhidalt selgitada, kuidas Corda seestpoolt töötab.
Vaatame Cordat peamisi omadusi ja selle ainulaadsust teiste plokiahelate seas:
- Cordal ei ole oma krĂŒptovaluutat.
- Corda ei kasuta kaevandamise kontseptsiooni ega Proof-of-Work sĂŒsteemi.
- Andmete edastamine toimub ainult tehingu/kontakti osaliste vahel. Siin ei toimu globaalset edastamist kÔigile vÔrgu sÔlmedele.
- Ei ole keskset haldurit, kes juhib kÔiki tehinguid.
- Corda toetab erinevaid konsensuse mehhanisme.
- Konsensus saavutatakse osaliste vahel eraldi kokkuleppe/kontakti tasandil, mitte kogu sĂŒsteemi tasandil.
- Tehing kinnitatakse ainult osaliste poolt, kes on sellega seotud.
- Corda pakub otsest seost formaalse inimeste juriidilise keele ja nutilepingute koodi vahel.
Ledger
Corda mĂ”iste ledger on subjektiivne. Ei ole ĂŒhtset keskset andmehoidlat. Selle asemel toetab iga sĂ”lm eraldi andmebaasi tuntud faktide osas.
NÀiteks kujutame ette 5 sÔlmest koosnevat vÔrku, kus ring on tuntud sÔlme fakt.

Nagu nĂ€eme, teavad Ed, Carl ja Demi faktist 3, kuid Alice ja Bob sellest isegi ei kahtle. Corda tagab, et iga sĂ”lme andmebaasis sĂ€ilivad ĂŒhiselt tuntud faktid ning andmed on identsed.
Oleku
Olek on muutmatu objekt, mis esindab fakti, mis on tuttav ĂŒhele vĂ”i sĂ”ltumatule sĂ”lmest sellise aja hetkel.
Oleku andmed vÔivad sisaldada erinevaid teavet, nagu aktsiad, vÔlakirjad, laenud ja isikutÔendavad andmed.
NÀiteks esindab jÀrgmine olek IOU - kokkulepe, et Alice peab Bobile summa X:

Fakti elutsĂŒkkel ajas on esindatud olekute jĂ€rjestusega. Kui praegust olekut tuleb ajakohastada, loome uue ja mĂ€rkame praeguse ajalooliseks (historic).

Tehingud
Tehingud on ettepanekud ledgeri ajakohastamiseks. Need ei edastata kÔigile ledgeri osalistele ja on kergesti kÀtte saadavad ainult neile, kellel on seaduslik Ôigus neid vaadata ja hallata.
Tehing lisatakse ledgerisse, kui see:
- lepinguliidina
- kÔigi vajalike osaliste poolt allkirjastatud
- ei sisalda kahekordset kulutamist (double-spends)
Corda kasutab UTXO (kasutamata tehingu vÀljund) mudelit, kus iga ledger-i olek on muutumatu.
Tehingu loomisel edastatakse sisendina eelneva tehingu vÀljundi olek (hashi ja indeksi kaudu).

Tehingu elutsĂŒkkel:
- Loomine (Praegu on tehing vaid ettepanek ledger-i uuendamiseks)
- Allkirjade kogumine (Tehingu vajalikud osalised kinnitavad ettepaneku uuendamiseks, lisades tehingule allkirja)
- Tehingu kinnitamine ledger-is
PÀrast tehingu lisamist ledger-isse mÀrgitakse sisendolekud ajaloolisteks ja neid ei saa tulevastes tehingutes kasutada.

Lisaks sisend- ja vÀljundolekutele vÔib tehing sisaldada:
- KÀsklused (tehingu parameeter, mis mÀÀrab tehingu sihi)
- Manused (pĂŒhade kalender, valuutakonverter)
- Ajaraamid (kehtivusaeg)
- Notar (Notary, erilised vÔrgu osalised, kes valideerivad tehinguid)

Lepingud
Kui rÀÀgime tehingu kehtivusest, siis mÔtleme mitte ainult vajalike allkirjade olemasolule, vaid ka kehtivusele lepingu jÀrgi. Igal tehingul on leping, mis aktsepteerib seda ja valideerib sisend- ja vÀljundolekud. Tehingut peetakse kehtivaks ainult siis, kui kÔik selle olekud on kehtivad.
Corda lepingud kirjutatakse igasugustes JVM keeles (nÀiteks Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Tuleb pĂ€rida klassist Leping ja ĂŒletada meetod verify. Kui tehing on kehtetu, peavad nad viskama vĂ€lja erandi.
Tehingute valideerimine peab olema deterministlik, t.j. leping peab alati kas aktsepteerima vĂ”i tagasi lĂŒkkama tehingu. SeetĂ”ttu ei tohi tehingu kehtivus sĂ”ltuda ajast, juhuslikest numbritest, vĂ”rgu sĂ”lme failidest jne.
Cordas kĂ€ivad lepingud nii-öelda liivakastis â veidi muudetud JVM-is, mis tagab lepingute deterministliku tĂ€itmise.
Voogud
VÔrgu sÔlmede suhtlemise automatiseerimiseks on lisatud voogusid.
Vool on tegemise sammude jada, mis ĂŒtleb sĂ”lmele, kuidas konkreetset ledger-i uuendamist teostada, millal on vaja tehingut allkirjastada ja valideerida.

MĂ”nikord on vajalik oodata tunde vĂ”i pĂ€evi, kuni tehing on kĂ”ikide osaliste poolt allkirjastatud ja jĂ”uab pearaamatusse. Mis juhtub, kui tehingus osalev sĂ”lm vĂ€lja lĂŒlitatakse? Voogudel on kontrollpunktid, kuhu voogude seisund salvestatakse sĂ”lme andmebaasi. Kui sĂ”lm ressursside vĂ”rgus taastub, jĂ€tkab see sealt, kus see jĂ€i.
Konsensus
Tehing peab jÔudma 2 konsensusele, et sattuda pearaamatusse: kehtivuse ja ainulaadsuse suhtes.
Tehingu kehtivuse otsuse teevad vaid osalised, kes on otseselt seotud.
Notaari sÔlmed kontrollivad tehingu ainulaadsust ja ennetavad kahekordset raiskamist.
Kujutame ette, et Bob'il on 100$ ja ta soovib edastada 80$ Charliele ja 70$ Danielile, kasutades sama sisendseisundit.

Selline trikk ei toimi Corda sĂŒsteemis. Kuigi tehing lĂ€bib kehtivuse kontrolli, ebaĂ”nnestub ainulaadsuse kontroll.
KokkuvÔte
Corda, mida arendab R3 blockchain-konsortsium, ei ole puhas nÀide blockchain-tehnoloogia kasutamisest. Corda on piisavalt kitsalt spetsialiseeritud vahend finantsorganisatsioonidele.
Allikas: habr.com
