Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Коли і навіщо потрібна Corda

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Мене звуть Вячеслав Коротач. Я працюю на позиції Blockchain Solution Architect в компанії 4ire Labs« — українсько-шведській ІТ-консалтинговій компанії. 4ire Labs є офіційним інтегратором NEAR Protocol і Chromia Blockchain, надаючи повний спектр послуг, необхідних для запуску інноваційних рішень FinTech та Blockchain.

Кілька тижнів тому я успішно закінчив розробку Proof of Concept цікавого проекту, пов’язаного з healthcare для одного з наших поважних клієнтів. Оскільки умови NDA не передбачають можливості деталізації, всі імена, назви, цілі й задачі, у статті вони будуть змінені. Без змін залишається тільки назва Corda і опис мого з нею знайомства.

Сподіваюсь, розповідь про цей досвід буде корисною колегам, що вирішили взяти Corda до списку, що аналізується в процесі вибору найбільш підходящої проекту блокчейн-платформи.

На початку

На старті спілкування з замовником мали наступні вводні.

Основна ціль, навіщо їм потрібен блокчейн, — відстежувати і надійно фіксувати для подальшого аналізу та аудиту кроки виконання послідовності дій кількох учасників жорстко заданих процесів. Тобто є чіткі протоколи, які передбачають, що всі хто приймає в них участь, повинні діяти за прискіпливо прописаними сценаріями, один за одним, вчасно, злагоджено, на кожному кроці підтверджуючи вірність дій попереднього учасника. Кожен крок повинен розписуватись real time у приватний (тому що дані критичні до розголошення) блокчейн, ноди якого повинні надійно і одночасно зберігати їх в кількох організаціях — партнерах.

В майбутньому кількість таких організацій — партнерів, а з ними і кількість потрібних блокчейн вузлів буде зростати. І таке додавання повинно бути не складним.

Можлива ситуація, коли не всі вузли блокчейна повинні будуть мати доступ до одних і тих самих даних. Тобто хтось з них забезпечує якісну авторизацію учасників процесів, хтось контролює виконання однієї групи процесів, хтось іншої, а хтось перевіряє перевіряючих :)

Було б дуже добре якби подальше обслуговування системи було пов’язано з використанням Java, як стека, в якому замовник має власну експертизу (обслуговуючи інші продукти компанії).

Після вибору блокчейна нам потрібно, за бажанням замовника, реалізувати на ньому Proof of Concept проекту. Таким PoC домовились вважати програмну реалізацію веб аплікації, комунікуючої з обраним блокчейном, що для одного конкретного технологічного процеса реалізує виконання підтвердженої блокчейном аутентифікації учасників, проведе їх по всьому сценарію процесса,зафіксує кожен крок послідовності виконаних дій, не дасть відхилитись і збереже лог виконання техпроцесу на кількох вузлах блокчейна розташованих на фізично рознесених в інтернеті машинах.

Вибір блокчейну

Після з’ясування вхідних даних ми провели ретельне дослідження іпорівняли кілька популярних, прийнятних для ентерпрайз рішення, блокчейн фреймворків за категоріями, що були найбільш важливі для замовника і критичні для подальшої успішності реалізації проекту.

Для порівняння ми за домовленістю з замовником прийняли наступні фреймворки: Quorum, Hyperledger Fabric, Corda. Порівнювали їх в найважливіших для конкретики проєкту і для замовника категоріях: data privacy, performance,ease of programming. Всі порівняння проводились з урахуванням специфіки проєкту, побажаннь замовника і експертизи спеціалістів (наших і замовника) на момент замовлення.

З невеличкою перевагою цей тур був за Corda і ми узгодили з замовником проведення розробки Proof of Concept саме на ньому. Слід визнати,що невисокий відрив Corda від, скажімо Hyperledger Fabric був обумовлений тим, що спеціалісти нашої компанії мали неабиякий досвід в реалізації проектів на Hyperledger і Quorum і зовсім не стикались до того з розробкою під Corda. То був для нас цікавий челендж, але і ми і замовник розуміли, що знайомство з новою технологією займе немало часу навіть у досвідчених в розробці на інших платформах блокчейн-інженерів — фулстеків.

Та все одно переваги Corda для реалізації саме розглядаємого проекта по деяким пунктам ітогової порівняльної таблиці були настільки очевидні, що ми вирішили піти на додаткові витрати пов’язані з вивченням нової технології для забезпечення проекту клієнта конкурентної переваги за рахунок використання найбільш підходящої для його специфіки технології. Самі ж ми отримували натомість досвід в застосуванні Corda, що теж було привабливим.

Знайомство з Corda

З урахуванням мого поперднього досвіду розробки під EOS, Tezos та інших не самих популярних серед спеціалістів нашої галузі блокчейнів, роботу над розробкою Proof of Concept згадуємого проекту було довірено мені. Саме своїм досвідом знайомства з Corda я і вирішив поділитись у цій статті.

Чим же виявилась Corda для мене, як розробника, чим вона відрізняється від інших блокчейнів, з якими я мав попередній досвіді які проблеми виникли в мене при її вивченні і застосуванні?

Насамперед я повинен відразу сказати, що досліджував Corda виключно як розробник для реалізації конкретної задачі. Тобто все що я бачив інфраструктурне, впроваджене компанією R3 як надійний базис для довгострокового розвинення проекту Corda, для навчання і підтримки розробників, бізнесів, стартапів, які вирішать взяти собі за основу цей блокчейн, мене, звісно вражало, але я намагався не дуже в то занурюватись, щоб не гаяти часу і якомога швидше і якісніше виконати завдання по реалізації PoC. Та повз моєї уваги не пройшло те, що зі спеціалістами R3 дуже просто налагодити прямий контакт і мати змогу отримувати підказки по оптимізації рішень, як і домовитись, навіть, на проведення з засновниками проекту діалогу про можливість отримання проектом заоходжувального гранту від R3.

Звісно, не тільки Corda має такі програми, але порівняльно з іншими вони, як мені здалося, ведуть ту роботу набагато системніше. Так за кілька тижнів я мав кілька прямих зідзвонів зі спеціалістами R3 і відчував як високий рівень їх кваліфікації, так і зацікавленість в налагодженні таких прямих взаємодій.

З точки зору проблем з вивченням технології Corda, я не зіткнувся з проблемами від слова «зовсім». Дуже якісна документація добре систематизована, чудово ілюстрована, велика кількість відео, що полегшують як перше знайомство, так і заглиблення в технологію. Коментовані приклади на широке коло можливих бізнес-випадків (включаючи фінансові взаємовідносини, хто кому, скільки винен іза що, supply-chain задачі, та навіть приклади коду ігор) складають чудову базу для того, щоб мати за основу будь якої розробки готовий добре коментований темплейт.

Впевнено можу сказати, що навіть якщо ви не є гуру в Java чи Kotlin (основні язики смарт-контрактів Corda), то це не унеможливлює для Вас використання Corda. Я не найдосвідченіший в Java розробці спеціаліст, але мого рівня в C++ і не дуже високого рівня Java виявилось цілком досить, щоб не мати проблем з кодуванням CorDapps. Набагато важливішим при цьому стає досвід в розробці блокчейн-проектів.

З точки зору відмінності технології Corda від інших більш розповсюджених блокчейн-технологій цікавим сюрпризом виявилось те, що Corda не зберігає дані транзакцій на всіх вузлах мережі. Всі вузли Corda є перевіреними вузлами, тобто там немає потреби в консенсусі, що забезпечить довіру в умовах коли довіряти не можна нікому. Це відразу відсікає застосування Corda в проектах, де таку довіру в не перевіреному постійно змінюючомуся колі учасників будувати потрібно.

Corda підходить для проектів де всі один одного знають і знають наскільки один одному і в яких питаннях довіряти можна. Тобто це ідеально для організацій — партнерів по бізнесу, різних департаментів великих корпорацій, міжбанківських операцій, тощо. Маючи зрозумілих учасників і зрозумілі процеси їх взаємодій, можна вирішувати, яка інформація на яких вузлах повинна циркулювати та зберігатись. Інші учасники мережі можуть навіть не мати уявлення які дані було передано з однієї ноди на іншу і нем’ютебельно збережено на обох, та на третій, що буде для них в подальшому аудитором.

Для проектів, що мають критичні умови на розповсюдження даних, то є найкращим рішенням. Ще й за непотреби організовувати складну процедуру консенсусу, то дає значний приріст в швидкості обробки транзакцій. ВІдсутність потреби зберігання на вузлах «зайвої» для них інформації вирішує безліч питань зі складністю масштабування блокчейн-проектів та з ціною зберігання даних.

Слід доповнити, що за такої політики в Corda можуть бути збережені не тільки хеші документів, а й самі документи і навіть медіа у вигляді файлів будь яких форматів. До речі, саме ці властивості і забезпечували розглядаємому проєкту найкращу сумісність з ідеологією Corda.

Розробка PoC проєкту

З замовником узгодили, що веб аплікація, яка буде комунікувати з блокчейном Corda може бути написана з використанням будь яких технологій веб розробки.

Я обрав фреймворк Python Django як найбільш мені знайомий, на якому я міг швидко, без зайвих зусиль, написати будь який інтерфейс користувача. Це давало мені змогу використати розвинутий механізм аутентифікації користувача, вбудований в Django і доповнити його механізмом аутентифікації на блокчейні Corda з використанням специфічної бібліотеки Accounts, яка з’явилась в останніх реалізаціях цієї блокчейн-платформи. Вийшло зовсім непогано і симпатично, не зважаючи на те що для реалізації PoC,з причин економії бюджету та відсутності вимог замовника до UI та UX, ми не стали залучати спеціалістів з дизайну і фронт-енд розробки.

Розроблені в R3 приклади контрактів з використанням бібліотеки Accounts (supplychain і tictacthor) стали мені у пригоді при розробці CorDapps проекту (так називаються в Corda аплікації, що працюють на блокчейні). Також став у пригоді приклад observablestates-tradereporting з розділу Features коли мені потрібно було організувати відправку транзакцій ноді — аудитору всіх взаємодій між учасниками процесу, що було потрібно реалізувати у згаданому PoC. Як виявилось, в Corda такий бродкаст транзакцій потребує додаткових але не складних дій.

Як і велика кількість інших блокчейнів Corda являє собою машину станів. Кожен стан (State) несе в собі інформацію про якийсь об’єкт і фактично і є об’єктом об’єктно орієнтованої мови програмування (класом Java або Kotlin). Кожен State може в результаті валідної транзакції змінити дані про об’єкт, що він описує.

Валідність транзакції вирішується під час виконання смарт-контракту (Contract) який має інформацію про попередній стан об’єкту, про стан в який його намагаються перевести (змінити значення якихось змінних State) і про умови за яких той стан у такий спосіб може бути змінено. Процедура за допомогою якої транзакція формується, підписується учасниками і спеціальною нотаріальною нодою, перевіряється виконання умов зміни стану за допомогою Contract називається Flow. Після проведення валідної транзакції попередній Стан позначається як «історичний» і наступний State приймає нове поточне значення, відображаючи (в нашому випадку) наступний крок взаємодії учасників «виробничого процесу».

Нові (поточні), як і історичні States зберігаються в Сховища (Vault) вузлів і можуть бути переглянуті за допомогою спеціальних Flows, які теж слід для цього розробити або безпосередньо інспектуванням бази даних, на яких те Сховище реалізується. За замовчанням Сховища реалізуються на H2, але можливі реалізації і на SQL, Oracle, PostgreSQL, тощо.

Коли всі етапи процесу виконані останній State також стає історичним (consumed), що дає змогу тим же учасникам почати новий «виробничій процес» спочатку.

Таким чином, щоб написати CorDapp треба описати на Java чи Kotlin необхідні States, Contracts і Flows. Ці три складові введені окремими гілками у темплейти Corda фреймворка і мають зручну структурованість коду.

Окрім згаданих вище гілок в деяких прикладах маємо вбудований механізм реалізації API з використанням Spring Server, що я з задоволенням і використав, розробивши на базі прикладів від R3 такий API, що комунікує безпосередньо (через RPC виклики) з Flows, процедури ж цього API викликаються за допомогою POST реквестів з веб аплікації на Django.

Деяким викликом стала відладка вже готового CorDapp на тестовій мережі, яку по вимозі замовника слід було розмістити на різних машинах в інтернет (різних AWS інстанцах в моєму випадку). R3 мають кілька способів розгортання мережі Corda на різних вузлах інтернет. Всі вони досить зручні, але всі потребують додаткового часу для такого розгортання. Тому значно простіше при розробці мати кілька нод на одному більш потужному сервері і вже коли все відлагоджене, розгортати CorDapp на окремі сервери.

Не можу не згадати незлим тихим словом інструмент для інспектування Сховищ вузлів — Corda Node Explorer. Завдяки помилкам в поточній реалізації цього інструменту (слід відмітити правда, що він ще в стані 0-вих версій) я витратив додаткових зусиль під час відлагодження CorDapp на нодах. Але зазначу, що він виявився справді зручним (і достовірним) для демонстрації результатів розробки PoC замовнику.

Підсумок

Знайомство з Corda виявилось справді цікавим і корисним. Я відкрив для себе технологію, яку з чистим серцем зможу пропонувати замовникам для використання в тих проектах, де справа йдеться про надійне ентерпрайз рішення з гарною підтримкою від виробників блокчейну і де йдеться про підвищені вимоги до розповсюдження даних.

В останній час особливо часто чую таку вимогу, як щось заважаюче використовувати блокчейн технологію взагалі, але з Corda все працює трошки інакше. Дані знаходяться тільки там, де їм і повинно бути і не зберігаються на вузлах, які до тих даних не мають відношення.

Також для проєктів, які повинні нем’ютабельно зберігати дані для подальшого аудиту між департаментами корпорації, або бізнес партнерами, особливо коли йдеться про логування послідовності якогось жорстко прописаного процесу взаємодії учасників, використання Corda є, на мою думку, одним з найкращих рішень.

Маючи також досвід розробки IoT рішень, можу також рекомендувати застосування Corda для надійного нем’ютабельного зберігання даних від сенсорів в випадках де всі історичні показники сенсорів мають суттєве значення і не повинні бути втраченими чи зміненими після їх фіксації.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дякую, як раз планую розпочати вивчення Corda.

Підписатись на коментарі