Разгледзім асноўныя асаблівасці 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 (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