е разпределен Ledger за съхранение, управление и синхронизиране на финансови задължения между различни финансови организации.

Corda разполага с достатъчно добра документация с видео-лекции, която може да бъде намерена . Ще се опитам накратко да опиша как е устроен Corda вътре.
Нека разгледаме основните характеристики на Corda и уникалността му сред другите блокчейн технологии:
- Corda няма собствена криптовалута.
- Corda не използва концепцията за копаене и системата Proof-of-Work.
- Предаването на данни става само между участниците в транзакцията/договора. Тук няма глобално разпространение към всички възли в мрежата.
- Няма централен контролер, който управлява всички транзакции.
- Corda поддържа различни механизми за консенсус.
- Консенсусът се постига между участниците на ниво отделно споразумение/договор, а не на ниво цялата система.
- Транзакцията се потвърдена само от участниците, които се отнасят към нея.
- Corda предлага пряка връзка между формалния човешки юридически език и кода на смарт-договорите.
The ledger
Понятието ledger в Corda е субективно. Няма единно централно хранилище на данни. Вместо това всеки възел поддържа отделна база данни на известните му факти.
Например, представете си мрежа от 5 възела, където кръгът е известен на възела факт.

Както виждаме, Ed, Carl и Demi знаят за факта 3, а Alice и Bob дори не предполагат за него. Corda гарантира запазването на общите факти в базата на всеки възел, като данните ще бъдат идентични.
Състояния
Състояние — това е неизменяем обект, представляващ факт, известен на един или повече възли в мрежата в определен момент от време.
Състоянията могат да съхраняват произволни данни, например, акции, облигации, кредити, идентификационна информация.
Например, следното състояние представлява IOU — споразумение, че Алиса дължи на Боб сума X:

Животът на факта с течение на времето е представен със серия от състояния. Когато е необходимо да се актуализира текущото състояние, създаваме ново, а текущото помечаваме като историческо (historic).

Транзакции
Транзакциите са предложения за актуализация на ledger-a. Те не се разпространяват на всички участници в ledger-a и са достъпни само за тези участници в мрежата, които имат законно право на тяхното разглеждане и управление.
Транзакцията ще бъде добавена в ledger, ако:
- е договорно валидна
- е подписана от всички необходими участници
- не съдържа двойни разходи (doble-spends)
Corda използва модел UTXO (неизразходвано изходно състояние), при който всяко състояние на ledger-а е неизменяемо.
При създаването, транзакцията получава входно състояние от предишната транзакция (по хеш и индекс).

Жизнен цикъл на транзакцията:
- Създаване (В момента транзакцията е само предложение за актуализация на ledger-а)
- Събиране на подписи (Необходимите участници в транзакцията одобряват предложението за актуализация, като добавят подпис към транзакцията)
- Потвърдителна транзакция в ledger
След добавянето на транзакцията в ledger, входните състояния се маркират като исторически и не могат да се използват в бъдещи транзакции.

Освен входните и изходните състояния, транзакцията може да съдържа:
- Команди (параметър на транзакцията, указващ целта на транзакцията)
- Прикачени файлове (календар на празниците, конвертор на валути)
- Временни прозорци (срок на валидност)
- Нотариус (Notary, специални участници в мрежата, валидиращи транзакции)

Договори
Когато говорим за валидността на транзакцията, имаме предвид не само наличието на необходимите подписи, но и валидността по договора. Всяка транзакция е свързана с договор, който я приема и валидира входните и изходните състояния. Транзакцията се счита за валидна само ако всички нейни състояния са валидни.
Договорите в Corda се пишат на всеки JVM език (например, Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Необходимо е да наследите класа Contract и да преопределите метода verify. При невалидност на транзакцията ще се хвърли изключение.
Валидирането на транзакции трябва да бъде детерминирано, т.е. договорът винаги трябва или да приеме, или да отхвърли транзакцията. Поради това валидността на транзакцията не може да зависи от време, случайни числа, възли на мрежата и др.
В Corda договорите се изпълняват в така наречената пясъчна среда — леко модифицирана JVM, която гарантира детерминирано изпълнение на договорите.
Поток
За да автоматизира комуникацията между възлите на мрежата, бяха добавени потоци.
Потокът е последователност от стъпки, която информира възела как да извърши конкретна актуализация на ledger-a, кога е необходимо да подпише и да валидира транзакцията.

Понякога отнема часове или дни, докато транзакцията бъде подписана от всички страни и попадне в регистъра. Какво ще се случи, ако се изключи възел, участващ в транзакцията? Потоците имат контрольни точки, в които състоянието на потока се записва в базата данни на възела. При възстановяване на възела в мрежата той ще продължи от мястото, където е спрял.
Консенсус
За да попадне в регистъра, транзакцията трябва да достигне 2 консенсуса: за валидност и за уникалност.
Решението за валидността на транзакцията се взема само от страните, пряко участващи в нея.
Нотариалните възли извършват проверка на уникалността на транзакцията, предотвратявайки двойни разходи.
Представете си, че Bob има 100$ и иска да преведе 80$ на Charlie и 70$ на Dan, използвайки същото входно състояние.

Такъв номер Corda няма да позволи. Въпреки че транзакцията ще премине проверката за валидност, проверката за уникалност ще се провали.
Заключение
Платформата Corda, разработена от блокчейн консорциума R3, не е чист пример за използване на технологията блокчейн. Corda е достатъчно специализирано средство за финансовите организации.
Източник: habr.com
