Skip to main content
Corda Blockchain

A Nasdaq, arquiteta e fornecedora da tecnologia e serviços de infraestrutura de mercado mais amplamente adotada do mundo, anunciou recentemente uma parceria com a fornecedora de tecnologia distribuída R3. Vamos falar de Corda blockchain.

Com sua parceria com a R3, a Nasdaq, por meio de seu braço de “Tecnologia de Mercado”, agora será capaz de fornecer soluções que usam a tecnologia Corda blockchain da R3, à medida que ajudam seus clientes a passar de formas tradicionais de emissão, negociação e liquidação de instrumentos financeiros para novos mecanismos habilitados para blockchain. Com tantos clientes institucionais hoje, a Nasdaq está posicionada de maneira única para desempenhar um papel crítico em trazer a revolução da tecnologia de ativos digitais.

Corda é um projeto de blockchain de código aberto, projetado para negócios desde o início. Corda permite que você construa redes blockchain interoperáveis ​​que operam em total privacidade. A tecnologia de contrato inteligente do Corda blockchain permite que as empresas façam transações diretamente.

O Corda Ledger permite a gestão e sincronização de acordos comerciais entre várias partes. Antes de examinarmos de perto o Corda Ledger, é importante primeiro entender a rede Corda blockchain.

Corda Node

Podemos pensar na rede Corda como um grafo totalmente conectado, onde os nós no grafo são nós com potencial para se comunicar com outros nós.

Como não há transmissão global, você deve especificar os destinatários de suas mensagens no Corda. Você controla quem vê e quando eles veem. Os nós Corda descobrem uns aos outros por meio de um serviço de Mapa de Rede. Você pode pensar no serviço como uma lista telefônica, que publica uma lista de nós de pares, contendo metadados sobre quem eles são e quais serviços podem oferecer.

A comunicação ocorre somente como ponta a ponta, onde os pontos se comunicam usando ampq/1.0 sobre tls. Corda é construído em bancos de dados relacionais, filas de mensagens e a Java Virtual Machine (JVM) basicamente.

Corda é construído sobre outra biblioteca de código aberto chamada Quasar, produzida por uma empresa chamada Parallel Universe. A R3 tem um acordo de suporte comercial com a Parallel Universe que permite solicitar correções de bugs priorizadas e outras formas de suporte técnico.

O Quasar implementa fibers e continuations na JVM. Isso permite que os desenvolvedores do Corda escrevam código bloqueante simples e direto e o transformem em máquinas de estado assíncrono altamente escalonáveis ​​que verificam seu estado no disco conforme as mensagens e o fluxo de trabalho progride. Essa abordagem quase transparente significa que os desenvolvedores dificilmente precisam pensar em escrever código para sobreviver a reinicializações de nós, travamentos ou interrupções temporárias em contrapartes: tarefas comuns, mas tediosas e demoradas. Isso é crucial para tornar as transações com várias partes fáceis de usar e os aplicativos Corda agradáveis ​​de desenvolver.

O flow framework

Em vez de especificar cada etapa manualmente, o Corda automatiza o processo usando fluxos. Um fluxo é uma sequência de etapas que informa a um nó como obter uma atualização específica, como emitir um ativo ou liquidar uma negociação.

Depois que um determinado processo de negócios foi encapsulado em um fluxo e instalado no nó como parte de um CorDapp, o proprietário do nó pode instruir o nó para iniciar este processo de negócios a qualquer momento usando uma chamada RPC. O fluxo abstrai todos os problemas de rede, io e simultaneidade do proprietário do nó.

Configurando um ambiente de desenvolvimento Corda

Corda suporta somente java 8, suporte para outras versões ainda estão em desenvolvimento, instale a ultima versão do IntelliJ, o Git e o Gradle 5.6, é de extrema importância que se atente tanto pra versão do java quanto a do Gradle, pois o Corda 4.6, que é a versão estável no momento desta publicação não tem compatibilidade com outras versões de Java e Gradle, versão 4.7 teremos um update quanto a compatibilidade de novas versões do java.

Vamos usar o exemplo CORDAPP para estudo, os principais arquivos e diretórios são os seguintes:

  • O diretório raiz contém alguns arquivos gradle, um README, uma LICENSE e uma instrução TRADEMARK
  • clients contém o código-fonte para integração Spring Boot
    config contém a configuração log4j2
  • contract-java e workflows-java contêm o código-fonte para o exemplo CorDapp escrito em Java
  • contract-kotlin e workflows-kotlin contêm o mesmo código-fonte, mas escrito em Kotlin. CorDapps pode ser desenvolvido em Java e Kotlin
  • gradle contém o invólucro do gradle, que permite o uso do Gradle sem instalá-lo e se preocupar com a versão necessária
  • lib contém o jar Quasar, que reescreve nossos fluxos de CorDapp para serem verificados

Estado

Primeiro, você deve definir valores para um contrato (como um valor, um titular, …) como um estado de contrato. Por meio de um fluxo. uma instância do estado do contrato será armazenada e será extraída por uma consulta.

Esta classe de estado implementa a interface ContractState da seguinte maneira.

Interface ContractState

Contrato e Comando

Um contrato em Corda não é como um contrato inteligente em outras plataformas de razão. Em vez disso, como um contrato em nossa vida real, ele define os seguintes 2 tipos de interfaces:

  • Tipo de Negócio (Criar, Emprestar, Emitir…)
  • Condição (validades contratuais, Não pode ser maior que…)
Contrato em Corda — Corda blockchain

Flow — Iniciador

Agora nós temos um estado e um contrato (incluindo um comando). Aqui, você combina essas instâncias usando uma lógica chamada de flow.

Existem 2 tipos de flows, um flow iniciador (remetente) e um flow de contraparte (aceitador). Em um cenário real, são como funções, como credor — tomador, comprador — vendedor, …
Nesta seção, implementaremos um flow iniciador (remetente).

Flow — Corda blockchain

Flow — Aceitador

Finalmente, construímos uma lógica de aceitador respondendo ao fluxo de um iniciador. Da mesma forma que o fluxo de iniciador anterior, o fluxo de aceitador também tem construtores e método de substituição call (). (Veja abaixo.) Um construtor é invocado por InitteFlow () no iniciador anterior, e você deve implementar a lógica de aceitação no método call ().
(A seguinte anotação @InitiatedBy indica que esta classe é um fluxo de aceitador contra uma classe de iniciador.)

Flow — Corda blockchain

O código completo desse exemplo se encontra nesse git

Executando o nosso exemplo

O comando a seguir executa scripts gradle em todas as subpastas e, em seguida, fazedo o deploy dos nós e preparando nossa aplicação

Em windowss execute com gradlew deployNodes no linux ./gradlew deployNodes

gradlew deployNodes no linux ./gradlew deployNodes

Agora em dentro de workflows-java\build\nodes podemos ver que temos 4 pastas de nós

Corda blockchain — workflows-java\build\nodes

Inicie os nós executando o seguinte comando na raiz da pasta cordapp-example:

  • Unix/Mac OSX: workflows-kotlin/build/nodes/runnodes
  • Windows: workflows-kotlin\build\nodes\runnodes.bat

Cada Servidor do spring boot precisa ser startado separadamente com o comando na pasta raiz do projeto:

  • gradlew.bat runPartyAServer

Se for executar oPartyB use runPartyBServer e assim por diante…

gradlew.bat runPartyAServer

Agora acessando o seu navegador, você deve ver uma tela como essa, IOU é o termo curto para I Owe You (Eu Devo Voce)

Interagindo com o exemplo CorDapp
Via HTTP

Os servidores Spring Boot são executados localmente nas seguintes portas:

  • PartyA: localhost:50005
  • PartyB: localhost:50006
  • PartyC: localhost:50007

Essas portas são definidas em clients/build.gradle.
Cada servidor Spring Boot expõe os seguintes endpoints:

  • /api/example/me
  • /api/example/peers
  • /api/example/ious
  • /api/example/create-iou com parametros iouValue e partyName que é o nome do nó
Corda blockchain

Um IOU pode ser criado enviando um PUT para o endpoint /api/example/create-iou diretamente ou usando o formulário da web servido a partir do diretório inicial.
Para criar um IOU entre PartyA e PartyB, execute o seguinte comando na linha de comando:

IOU entre PartyA e PartyB

Este comando instrui o PartyA a concordar um IOU com o PartyB. Quando o processo for concluído, ambos os nós terão uma cópia assinada e autenticada do IOU. PartyC não vai.

Este foi um tutorial inicial pra dar um overview da plataforma corda, para um melhor entendimento é interessante executar primeiro, outros exemplos básicos e ai sim com uma melhor compreensão tentar desenvolver seus próprios contratos.

segueo código completo do exemplo — https://github.com/Odilio/cordapp

Escrito pelo #FERA Odilio Noronha para Medium: https://medium.com/rapaduratech/corda-na-nasdaq-a-defacto-plataforma-blockchain-para-o-mercado-financeiro-f5c1c482d82f

Sobre o Autor