è un registro distribuito per la memorizzazione, la gestione e la sincronizzazione degli obblighi finanziari tra diverse organizzazioni finanziarie.

Corda ha una documentazione piuttosto completa con video-lezioni, che si possono trovare . Proverò a descrivere brevemente come è strutturato Corda internamente.
Esaminiamo le caratteristiche principali di Corda e la sua unicità rispetto ad altri blockchain:
- Corda non ha una criptovaluta propria.
- Corda non utilizza il concetto di mining e il sistema Proof-of-Work.
- La trasmissione dei dati avviene solo tra i partecipanti alla transazione/ contratto. Non c'è broadcasting globale a tutti i nodi della rete.
- Non esiste un controllo centralizzato che gestisca tutte le transazioni.
- Corda supporta diversi meccanismi di consenso.
- Il consenso si raggiunge tra i partecipanti a livello di singolo accordo/contratto, non a livello di intero sistema.
- La transazione viene confermata solo dai partecipanti coinvolti.
- Corda offre un collegamento diretto tra il linguaggio giuridico umano formale e il codice dei contratti smart.
Il registro
Il concetto di ledger in Corda è soggettivo. Non esiste un'unica archiviazione centrale dei dati. Invece, ogni nodo mantiene un database separato dei fatti a lui noti.
Ad esempio, immagina una rete di 5 nodi, dove il cerchio rappresenta un fatto noto al nodo.

Come possiamo vedere, Ed, Carl e Demi conoscono il fatto 3, mentre Alice e Bob nemmeno lo sospettano. Corda garantisce che i fatti comuni siano conservati nel database di ogni nodo, e i dati saranno identici.
Stati
Uno stato è immutabile un oggetto che rappresenta un fatto noto a uno o più nodi della rete in un determinato momento.
Gli stati possono contenere dati arbitrari, come azioni, obbligazioni, prestiti, informazioni identificative.
Ad esempio, il seguente stato rappresenta un IOU - un accordo secondo cui Alice deve a Bob una somma X:

Il ciclo di vita di un fatto nel tempo è rappresentato da una sequenza di stati. Quando è necessario aggiornare lo stato attuale, creiamo un nuovo stato e segniamo quello attuale come storico (historic).

Transazioni
Le transazioni sono proposte di aggiornamento del ledger. Non vengono trasmesse a tutti i partecipanti al ledger e sono disponibili solo per coloro che hanno il diritto legittimo di visualizzarle e gestirle.
La transazione verrà aggiunta al ledger se:
- è contrattualmente valida
- è firmata da tutti i partecipanti necessari
- non contiene spese doppie (double-spends)
Corda utilizza un modello UTXO (unspent transaction output), in cui ogni stato del ledger è immutabile.
Durante la creazione, la transazione riceve come input lo stato output della transazione precedente (attraverso hash e indice).

Ciclo di vita di una transazione:
- Creazione (Attualmente la transazione è solo una proposta di aggiornamento del ledger)
- Raccolta delle firme (I partecipanti necessari alla transazione approvano la proposta di aggiornamento aggiungendo la propria firma alla transazione)
- Commit della transazione nel ledger
Dopo l'aggiunta della transazione al ledger, gli stati di input vengono contrassegnati come storici e non possono essere utilizzati in future transazioni.

Oltre agli stati di input e output, la transazione può contenere:
- Comandi (parametro della transazione che indica l'obiettivo della transazione)
- Allegati (calendario delle festività, convertitore di valuta)
- Finestre temporali (durata)
- Notaio (Notary, partecipanti speciali della rete che convalidano transazioni)

Contratti
Quando parliamo di validità di una transazione, ci riferiamo non solo alla presenza delle firme necessarie, ma anche alla validità secondo il contratto. Ogni transazione è associata a un contratto che la accetta e convalida gli stati di entrata e uscita. Una transazione è considerata valida solo se tutti i suoi stati sono validi.
I contratti in Corda possono essere scritti in qualsiasi linguaggio della JVM (ad esempio, Java, Kotlin).
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
È necessario estendere la classe Contract e sovrascrivere il metodo verify. In caso di invalidità della transazione, deve essere sollevata un'eccezione.
La validazione delle transazioni deve essere deterministica, ossia il contratto deve sempre accettare o rifiutare la transazione. Di conseguenza, la validità della transazione non può dipendere dal tempo, dai numeri casuali, dai file del nodo della rete, ecc.
In Corda, i contratti vengono eseguiti nella cosiddetta sandbox, una JVM leggermente modificata che garantisce l'esecuzione deterministica dei contratti.
Flussi
Per automatizzare la comunicazione tra i nodi della rete, sono stati aggiunti dei flussi.
Un flusso è una sequenza di passaggi che informa un nodo su come eseguire un aggiornamento specifico del ledger, indicando quando è necessario firmare e validare la transazione.

A volte sono necessarie ore o persino giorni affinché la transazione venga firmata da tutte le parti e registrata nel ledger. Cosa accade se un nodo coinvolto nella transazione si disconnette? I flussi hanno punti di controllo, nei quali gli stati del flusso vengono registrati nel database del nodo. Quando il nodo viene ripristinato nella rete, riprenderà da dove si era fermato.
Consenso
Per essere registrata nel ledger, una transazione deve raggiungere 2 consensi: sulla validità e sull'unicità.
La decisione sulla validità della transazione è presa solo dalle parti direttamente coinvolte.
I nodi notarili verificano l'unicità della transazione, evitando doppie spese.
Immaginiamo che Bob abbia 100$ e voglia trasferire 80$ a Charlie e 70$ a Dan, utilizzando lo stesso stato di input.

Corda non permetterebbe un tale trucco. Sebbene la transazione superi il controllo di validità, il controllo di unicità fallirebbe.
Conclusione
La piattaforma Corda, sviluppata dal consorzio blockchain R3, non è un esempio puro di utilizzo della tecnologia blockchain. Corda è uno strumento piuttosto specializzato per organizzazioni finanziarie.
Fonte: habr.com
