Розглянемо основні особливості Corda та унікальність його серед інших блокчейнів:
- Corda не має власної криптовалюти.
- Corda не використовує концепцію майнінгу та систему Proof-of-Work.
- Передача даних відбувається лише між учасниками транзанкції/контракту. Тут немає глобального броадкастингу всім вузлам мережі.
- Немає центрального контролера, який керує всіма транзакціями.
- Corda підтримує різні механізми консенсусу.
- Консенсус досягається між учасниками на рівні окремої угоди/контракту, а не на всій системі.
- Транзакція підтверджується лише учасниками, які належать до неї.
- Corda пропонує прямий зв'язок між формальною людською юридичною мовою та кодом смарт-контрактів.
Книга
Концепція ledger в Corda суб'єктивно. Немає єдиного центрального сховища даних. Натомість кожен вузол підтримує окрему базу даних відомих йому фактів.
Наприклад, уявіть мережу з 5 вузлів, де коло – це відомий вузлу факт.
Як ми бачимо, Ed, Carl та Demi знають про факт 3, а Alice та Bob про нього навіть не підозрює. Corda гарантує збереження загальних фактів до бази кожного вузла, причому дані будуть ідентичними.
стану
Стан - це незмінний об'єкт, що є фактом, відомий одному або декільком вузлам мережі в певний момент часу.
Стани можуть зберігати довільні дані, наприклад, акції, облігації, кредити, ідентифікаційну інформацію.
Наприклад, наступний стан являє собою IOU — угоду про те, що Аліса заборгувала Бобу суму X:
Життєвий цикл факту з часом представлений послідовністю станів. Коли потрібно оновити поточний стан, ми створюємо новий, а поточний позначаємо як історичний (historic).
Транзакції
Транзакції – це пропозиції щодо оновлення ledger-a. Вони не транслюються всім учасникам ledger-a і доступні лише тим учасникам мережі, які мають законне право на їх перегляд та управління.
Транзакція буде додана до ledger, якщо вона:
- контрактно валідна
- підписано всіма необхідними учасниками
- не містить подвійних витрат (doble-spends)
Corda використовує модель UTXO (unspent transaction output), в якій кожен стан ledger є незмінним.
При створенні транзакції на вхід передається output стан попередньої транзакції (по хешу та індексу).
Життєвий цикл транзакції:
- Створення (На даний момент транзакція лише пропозиція з оновлення ledger-a)
- Збір підписів (Необхідні учасники транзакції схвалюють пропозицію щодо оновлення шляхом додавання підпису до транзакції)
- Коміт транзакції в ledger
Після додавання транзакції в ledger вхідні стани позначаються як історичні і не можуть використовуватись у майбутніх транзакціях.
Крім вхідних та вихідних станів, транзакція може містити:
- Команди (параметр транзакції, що вказує на мету транзакції)
- Вкладення (календар свят, конвертер валют)
- Тимчасові вікна (термін дії)
- Нотаріус (Notary, особливі учасники мережі, що валідують транзакції)
контракти
Коли ми говоримо про валідність транзакції, то маємо на увазі не лише наявність необхідних підписів, а й валідність за контрактом. Кожна транзакція пов'язана з контрактом, який приймає її та валідує вхідні та вихідні стани. Транзакція вважається валідною, тільки якщо всі її стани валідні.
Контракти в Corda пишуться будь-якою JVM мовою (наприклад, Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Необхідно успадковуватись від класу Контракт та перевизначити метод перевірити. У разі невалідності транзації викинеться виняток.
Вадидація транзакцій має бути детермінованою, тобто. Договор завжди повинен або прийняти, або відхилити транзакцію. У зв'язку з цим валідність транзакції неспроможна залежати від часу, випадкових чисел, файлів вузла мережі та інших.
У Corda контракти виконуються в так званій пісочниці — трохи зміненій JVM, що гарантує виконання контрактів.
потоки
Щоб автоматизувати спілкування вузлів мережі, було додано потоки.
Потік - це послідовність кроків, яка повідомляє вузлу, як виконати конкретне оновлення ledger-a, коли необхідно підписати і провалідувати транзакцію.
Іноді потрібний годинник, дні поки транзакція підпишеться всіма сторонами і потрапить у ledger. Що ж станеться, якщо відключити вузол, який бере участь у транзакції? Потоки мають контрольні точки, в яких стан потоку записується в базу даних вузла. При відновленні вузла в мережі він продовжить з місця, де зупинився.
консенсус
Щоб потрапити в ledger, транзакція має досягти 2 консенсусу: на валідність та на унікальність.
Рішення про валідність транзакції приймається лише сторонами, залученими до неї безпосередньо.
Нотаріальні ноди проводять перевірку транзакції на унікальність, запобігають подвійним витратам.
Уявімо, що у Bob-a є 100 $, і він хоче перекласти 80 $ Charlie і 70 $ Dan-у, використовуючи один і той же вхідний стан.
Такий трюк Corda не дозволить провернути. Хоч транзакція пройде перевірку на валідність, перевірка на унікальність провалиться.
Висновок
Платформа Corda, розроблена блокчейн-консорціум R3, не є чистим прикладом використання технології блокчейн. Corda - це достатньо вузькоспеціалізований засіб для фінансових організацій.
Джерело: habr.com