O documento descreve os principais conceitos da plataforma Corda para blockchain, incluindo nós, ledger, smart contracts, transações, flows e consenso. É apresentado um exemplo de fluxo de transferência de dinheiro entre bancos na rede Corda para ilustrar como esses conceitos se integram na prática.
3. BANCO A BANCO B
1
7
• Não existe um “ledger central”
• Cada nó da rede mantém um vault de
facts.
• Facts são como linhas na tabela.
• Todos os nós armazenam “shared fact”
identico as cópias.
• Nem todos os facts no ledger serão
compartilhados com outros nós.
• O quadrado preto "11" é um exemplo de
um fato que não é compartilhado com
nenhum dos nós.
6
5
Id Fact
1 “Much consensus”
7 “So bilateral”
11 “Wow ledger”
Id Fact
1 “Much consensus”
6 “Very fact”
7 “So bilateral”
5 “amaze network”
11
Ledger
4. • O IOUState é um exemplo de um State que basicamente
possui um remetente, um destinatário e um valor
!
• Em um IOUState, os participantes – as partes envolvidas
são os remetentes e os destinatários.
IOU
From: Bank A
To: Bank B
Value: 100
PARTICIPANTS
Bank A
Bank B
IOU Contract
REF
State
5. Transações
• Uma nova transação IOU válida deve ter:
1. Nenhum inputs.
2. Um output.
3. Assinatura para ambos o remetente e o destinatario.
SIGBank A SIGBank B
IOU State
TRANSACTION
1
2
3
6. Contratos
CASH1
CASH0
CASH CONTRACT
REFERENCES
REFERENCES
VALIDATES
!
• A plataforma Corda usará todo o
código do contrato referenciado
para verificar uma transação
(proposta)
• A função de verificação está definida
no código do contrato.
!
fun verify(tx: Transaction): Unit In Kotlin, Unit is a
type with only one
value: the Unit
object. This type
corresponds to
the void type in
Java/C.
7. Flows
O fluxo de negócios entre duas partes
• Este é o fluxo que Banco A e o Banco B usam para concordar com
um IOU, em Corda pode ser chamado como um sub-fluxo.
INITIATOR
(Bank A)
SIGN TX
SEND(TX + SIG)
GET DATA
FROM
INTERNAL
SYSTEM
INSPECT
AND
VERIFY TX
SEND(TX + SIG)
CREATE TX
RESPONDER
(Bank B)
SIGN TX
INSPECT
AND
VERIFY TX
COMMIT TX
COMMIT TX
FLOW SUSPENDED AND
CHECKPOINTED
END
END
8. Flows
// Banco A !
tx = new Tx()!
peer = “Bank_B”!
sig = sign(tx)!
payload = (tx, sig)!
res = sendAndReceive(payload, peer)!
check(res.sigB)!
verify(res.tx)!
commit(res.tx)!
!
// Banco B
peer = “Bank_A”!
Res = receive(peer)
check(res.sigA)!
verify(res.tx)
sigB = sign(res.tx)
payload = (res.tx, sigB)!
send(payload, peer)
commit(res.tx)
Ao chamar a rede, a thread
do Banco A é suspensa e
serializada em disco (ou
marcada). Se o nó do Banco
A falhar ou reiniciar, ela pode
desserizar a therad e continuar
o fluxo quando o nó for
reiniciado
9. Consenso
Verification consensus
No Corda temos dois tipos de consenso:
Uniqueness consensus
• envolve a certeza de que uma
transação (e todas as suas
dependências) é assinada por
todos os nós requeridos e satisfaz
as restrições no código do
contrato
• RAFT / BFT / (Custom) • evita “double-spends”
• envolve a certeza de que os
outputState criados em uma
transação são os sucessores únicos
dos estados de inputState
referenciados por essa transação
10.
11.
12. Node Internals
Designing for Corda
CorDapp
FLOW
1. Build tx
IN2 OUT2
OUT1
IN1
2. Verify & sign
3. Gather sigs
4. Finalize
STATES CONTRACTS
APIs
NODE
EXTERNAL INTERNAL INTERNAL EXTERNAL
JDBC
EXTERNAL DB
NODE B
!
NODE Z
!
NOTARY
AMQP
…
…
RPC CALL
API
HTTP REQUEST
CordaRPCOps
startFlowDynamic()
vaultAndUpdates()
verifiedTransactions()
…
…
RPC CALL
RPC CALL
API
HTTP RESPONSE
ServiceHub
VAULT
KEY-VALUE STORE
TXS …
…
MESSAGING
Corda
13. Exemplo de um cenário
▪ Corda realizando transferência de dinheiro
entre os bancos…
14. !
NODE A
NOTARY
NODE
[Validity;Uniqueness]
DISTRIBUTED NOTARY
SERVICE
!
NODE B
!
NODE C
NODE D
Name: Banco A
Address: 192.168.0.3:10005
Public key: 5h54h5wv632vhy55
Name: Banco D
Address: 192.168.0.4:10005
Public key: 5hw03nnk43jknkj4n
Name: Banco C
Address: 192.168.0.2:10005
Public key: t453wv84bvt3cj5w3h
DOORMAN SERVICE
CERTIFICATE SIGNING
RAFT ou BFT
CORDA NETWORK - TRANSFERÊNCIA ENTRE BANCOS
NETWORK MAP SERVICE
ORACLE NODE
15. !
NODE A
NOTARY
NODE
[Validity;Uniqueness]
DISTRIBUTED NOTARY
SERVICE
!
NODE B
!
NODE C
NODE D
DOORMAN SERVICE
CERTIFICATE SIGNING
RAFT ou BFT
NETWORK MAP SERVICE
1. A chamado através de uma
API é feita ao Banco A com a
intenção de realizar uma
transferência de dinheiro para
o Banco D.
2. O Banco A inicia um fluxo,
criando uma nova proposta de
transação e assina.
ORACLE NODE
CORDA NETWORK - TRANSFERÊNCIA ENTRE BANCOS
19. !
NODE A
NOTARY
NODE
[Validity;Uniqueness]
DISTRIBUTED NOTARY
SERVICE
!
NODE B
!
NODE C
NODE D
DOORMAN SERVICE
CERTIFICATE SIGNING
RAFT ou BFT
NETWORK MAP SERVICE
6. Banco A verifica a transação
e checa a assinatura do Banco
D.
ORACLE NODE
CORDA NETWORK - TRANSFERÊNCIA ENTRE BANCOS
Os nós não envolvidos não recebem
nenhuma das transações do Banco A ou
Banco D
20. !
NODE A
NOTARY
NODE
[Validity;Uniqueness]
DISTRIBUTED NOTARY
SERVICE
!
NODE B
!
NODE C
NODE D
DOORMAN SERVICE
CERTIFICATE SIGNING
RAFT ou BFT
NETWORK MAP SERVICE
8. Notary pode validar a transação através do
consenso (RAFT ou BFT) ou uniqueness evitando o
“double spending”.
ORACLE NODE
CORDA NETWORK - TRANSFERÊNCIA ENTRE BANCOS
21. !
NODE A
NOTARY
NODE
[Validity;Uniqueness]
DISTRIBUTED NOTARY
SERVICE
!
NODE B
!
NODE C
NODE D
DOORMAN SERVICE
CERTIFICATE SIGNING
RAFT ou BFT
NETWORK MAP SERVICE
9. Banco A recebe do Notary a transação validada, E
atualiza os ledgers de cada nó envolvido nessa
transação.
ORACLE NODE
CORDA NETWORK - TRANSFERÊNCIA ENTRE BANCOS
22. DEMO Bank of Corda TransferWorld
https://github.com/arthurmsouza/transferworld-cordapp