— to rozproszona księga do przechowywania, zarządzania i synchronizacji zobowiązań finansowych między różnymi instytucjami finansowymi.

Corda ma dość dobrą dokumentację z wykładami wideo, które można znaleźć . Postaram się krótko opisać, jak Corda działa w środku.
Przyjrzyjmy się głównym cechom Corda oraz jego unikalności wśród innych blockchainów:
- Corda nie ma własnej kryptowaluty.
- Corda nie stosuje koncepcji wydobywania ani systemu Proof-of-Work.
- Przekazywanie danych odbywa się tylko między uczestnikami transakcji/umowy. Nie ma globalnego broadcastingu do wszystkich węzłów sieci.
- Brak centralnego kontrolera zarządzającego wszystkimi transakcjami.
- Corda wspiera różne mechanizmy konsensusu.
- Konsensus osiągany jest między uczestnikami na poziomie pojedynczej umowy/transakcji, a nie na poziomie całego systemu.
- Transakcja jest potwierdzana tylko przez uczestników, których dotyczy.
- Corda oferuje bezpośrednie połączenie między formalnym językiem prawnym a kodem inteligentnych kontraktów.
The ledger
Pojęcie ledger w Corda jest subiektywne. Nie ma jednego centralnego repozytorium danych. Zamiast tego każdy węzeł utrzymuje oddzielną bazę danych znanych mu faktów.
Na przykład wyobraź sobie sieć z 5 węzłami, gdzie okrąg to znany węzłom fakt.

Jak widzimy, Ed, Carl i Demi znają fakt 3, podczas gdy Alice i Bob nawet o nim nie wiedzą. Corda zapewnia, że wspólne fakty będą przechowywane w bazach danych każdego węzła i będą identyczne.
Stany
Stan — to niemodyfikowalny obiekt, który reprezentuje fakt znany jednemu lub kilku węzłom sieci w danym momencie.
Stany mogą przechowywać dowolne dane, na przykład akcje, obligacje, kredyty, informacje identyfikacyjne.
Na przykład, następujący stan reprezentuje IOU — umowę, że Alice jest winna Bobowi kwotę X:

Cykl życia faktu z upływem czasu jest reprezentowany przez sekwencję stanów. Gdy trzeba zaktualizować bieżący stan, tworzymy nowy, a bieżący oznaczamy jako historyczny.

Transakcje
Transakcje to propozycje aktualizacji ledger-a. Nie są one transmitowane do wszystkich uczestników ledger-a i są dostępne tylko tym uczestnikom sieci, którzy mają do nich legalne prawo dostępu i zarządzania.
Transakcja zostanie dodana do ledger-a, jeśli:
- ważność kontraktowa
- podpisany przez wszystkich wymaganych uczestników
- nie zawiera podwójnych wydatków (double-spends)
Corda używa modelu UTXO (unspent transaction output), w którym każdy stan ledger-a jest niezmienny.
Podczas tworzenia, do transakcji na wejściu przekazywany jest output stanu poprzedniej transakcji (zgodnie z hashem i indeksem).

Cykl życia transakcji:
- Tworzenie (Na tym etapie transakcja jest jedynie propozycją aktualizacji ledger-a)
- Zbieranie podpisów (Wymagani uczestnicy transakcji zatwierdzają propozycję aktualizacji, dodając podpis do transakcji)
- Zatwierdzenie transakcji w ledgerze
Po dodaniu transakcji do ledger-a, stany wejściowe są oznaczane jako historyczne i nie mogą być używane w przyszłych transakcjach.

Oprócz stanów wejściowych i wyjściowych, transakcja może zawierać:
- Komendy (parametr transakcji wskazujący cel transakcji)
- Załączniki (kalendarz świąt, konwerter walut)
- Okna czasowe (termin ważności)
- Notariusz (Notary, szczególni uczestnicy sieci, walidujący transakcje)

Kontrakty
Mówiąc o ważności transakcji, mamy na myśli nie tylko obecność wymaganych podpisów, ale także zgodność z kontraktem. Każda transakcja związana jest z kontraktem, który akceptuje ją i waliduje stany wejściowe oraz wyjściowe. Transakcja uznawana jest za ważną tylko wtedy, gdy wszystkie jej stany są ważne.
Kontrakty w Corda są pisane w dowolnym języku JVM (np. Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Należy dziedziczyć po klasie Contract i nadpisać metodę verify. W przypadku nieważności transakcji ma zostać zgłoszony wyjątek.
Walidacja transakcji musi być deterministyczna, to znaczy, że kontrakt zawsze musi albo zaakceptować, albo odrzucić transakcję. W związku z tym ważność transakcji nie może zależeć od czasu, liczb losowych, plików węzła sieciowego itd.
W Corda kontrakty są wykonywane w tzw. piaskownicy — nieco zmodyfikowanej JVM, gwarantującej deterministyczne wykonanie kontraktów.
Strumienie
Aby zautomatyzować komunikację węzłów sieci, dodano przepływy.
Przepływ — to sekwencja kroków, która informuje węzeł, jak zrealizować konkretne aktualizacje ledger-a, w którym momencie należy podpisać i zwalidować transakcję.

Czasami wymaga to godzin, dni, aby transakcja została podpisana przez wszystkie strony i trafiła do ledger. Co się stanie, gdy wyłączysz węzeł uczestniczący w transakcji? Strumień ma punkty kontrolne, w których stany strumienia zapisywane są w bazie danych węzła. Po przywróceniu węzła do sieci, będzie kontynuował od miejsca, w którym się zatrzymał.
Konsensus
Aby trafić do ledger, transakcja musi osiągnąć dwa konsensusy: w zakresie ważności i wyjątkowości.
Decyzję o ważności transakcji podejmują tylko strony bezpośrednio w nią zaangażowane.
Węzły notarialne przeprowadzają weryfikację transakcji pod kątem wyjątkowości, zapobiegając podwójnym wydatkom.
Załóżmy, że Bob ma 100$, a chce przesłać 80$ Charlie i 70$ Danowi, używając tego samego stanu wejściowego.

Taki trik nie przejdzie w Corda. Chociaż transakcja przejdzie weryfikację pod kątem ważności, sprawdzenie wyjątkowości nie powiedzie się.
Podsumowanie
Platforma Corda, opracowana przez konsorcjum blockchain R3, nie jest czystym przykładem wykorzystania technologii blockchain. Corda to raczej wyspecjalizowane narzędzie dla instytucji finansowych.
Źródło: habr.com
