Să ne uităm la principalele caracteristici ale Corda și unicitatea sa printre alte blockchain-uri:
- Corda nu are propria sa criptomonedă.
- Corda nu folosește conceptul de minerit și sistemul Proof-of-Work.
- Transferul de date are loc numai între părțile la tranzacție/contract. Nu există o difuzare globală către toate nodurile rețelei.
- Nu există un controlor central care să gestioneze toate tranzacțiile.
- Corda sprijină diverse mecanisme de consens.
- Consensul se realizează între participanți la nivelul unui acord/contract individual, și nu la nivelul întregului sistem.
- O tranzacție este confirmată doar de participanții aferenti acesteia.
- Corda oferă o legătură directă între limbajul juridic uman formal și codul contractului inteligent.
Registrul
Conceptul de registru în Corda este subiectiv. Nu există un singur depozit central de date. În schimb, fiecare nod menține o bază de date separată de fapte cunoscute de el.
De exemplu, imaginați-vă o rețea de 5 noduri, unde un cerc este un fapt cunoscut de nod.
După cum putem vedea, Ed, Carl și Demi știu despre fapta 3, dar Alice și Bob nici măcar nu sunt conștienți de asta. Corda garantează că faptele comune sunt stocate în baza de date a fiecărui nod, iar datele vor fi identice.
State
Statul este imuabil un obiect care reprezintă un fapt cunoscut de unul sau mai multe noduri de rețea la un anumit moment în timp.
Statele pot stoca date arbitrare, de exemplu, acțiuni, obligațiuni, împrumuturi, informații de identificare.
De exemplu, următoarea stare reprezintă un IOU - un acord prin care Alice îi datorează lui Bob o sumă de X:
Ciclul de viață al unui fapt în timp este reprezentat de o succesiune de stări. Când este necesar să actualizăm starea curentă, creăm una nouă și o marchem pe cea actuală ca istorică.
Tranzacție
Tranzacțiile sunt propuneri de actualizare a registrului. Acestea nu sunt difuzate tuturor participanților la registru și sunt disponibile numai pentru acei participanți la rețea care au dreptul legal de a le vizualiza și gestiona.
O tranzacție va fi adăugată în registru dacă:
- valabil contractual
- semnat de toți participanții solicitați
- nu conține cheltuieli duble
Corda folosește modelul UTXO (ieșire de tranzacție necheltuită), în care fiecare stare de registru este imuabilă.
Când este creată o tranzacție, starea de ieșire a tranzacției anterioare (prin hash și index) este transferată la intrare.
Ciclul de viață al tranzacției:
- Creare (În acest moment, tranzacția este doar o propunere de actualizare a registrului)
- Strângeți semnături (părțile solicitate la tranzacție aprobă propunerea de actualizare prin adăugarea unei semnături la tranzacție)
- Trimiteți tranzacția în registru
Odată ce o tranzacție este adăugată în registru, stările de intrare sunt marcate ca istorice și nu pot fi utilizate în tranzacții viitoare.
Pe lângă stările de intrare și de ieșire, o tranzacție poate conține:
- Comenzi (parametrul tranzacției care indică scopul tranzacției)
- Atașamente (calendar de sărbători, convertor valutar)
- Ferestre de timp (perioada de valabilitate)
- Notar (Notar, participanți la rețea specială care validează tranzacțiile)
contracte
Când vorbim despre valabilitatea tranzacției, ne referim nu doar la prezența semnăturilor necesare, ci și la valabilitatea contractuală. Fiecare tranzacție este asociată cu un contract care o acceptă și validează stările de intrare și de ieșire. O tranzacție este considerată validă numai dacă toate stările sale sunt valide.
Contractele în Corda sunt scrise în orice limbaj JVM (de exemplu, Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Este necesar să se moștenească dintr-o clasă Contract și anulați metoda verifica. Dacă tranzacția este nevalidă, va fi lansată o excepție.
Validarea tranzacției trebuie să fie deterministă, adică contractul trebuie să accepte sau să respingă întotdeauna tranzacția. În legătură cu aceasta, valabilitatea tranzacției nu poate depinde de timp, numere aleatorii, fișiere gazdă etc.
În Corda, contractele sunt executate într-un așa-numit sandbox - o JVM ușor modificată care garantează executarea deterministă a contractelor.
Fluxuri
Pentru a automatiza comunicarea între nodurile de rețea, au fost adăugate fire.
Un flux este o secvență de pași care îi spune unui nod cum să efectueze o anumită actualizare a registrului și în ce moment tranzacția trebuie să fie semnată și validată.
Uneori durează ore, zile până când tranzacția este semnată de toate părțile și intră în registru. Ce se întâmplă dacă deconectați un nod care participă la o tranzacție? Firele au puncte de control, la care starea firului este scrisă în baza de date a nodului. Când un nod este restabilit în rețea, acesta va continua de unde a rămas.
Consens
Pentru a intra în registru, o tranzacție trebuie să ajungă la 2 consensuri: valabilitate și unicitate.
Decizia privind valabilitatea unei tranzacții este luată numai de părțile direct implicate în aceasta.
Nodurile notarilor verifică unicitatea tranzacției și previn dublarea cheltuielilor.
Să ne imaginăm că Bob are 100 USD și dorește să transfere 80 USD lui Charlie și 70 USD lui Dan folosind aceeași stare de intrare.
Corda nu vă va permite să realizați un astfel de truc. Deși tranzacția va trece de verificarea validității, verificarea de unicitate va eșua.
Concluzie
Platforma Corda, dezvoltată de consorțiul blockchain R3, nu este un caz de utilizare pur pentru tehnologia blockchain. Corda este un instrument foarte specializat pentru instituțiile financiare.
Sursa: www.habr.com