Construindo um aplicativo Blockchain com Plutus

E aí, pessoal! Prontos para embarcar na viagem maluca das notícias de cripto? No nosso canal do Telegram, vamos explorar o mundo das criptomoedas com leveza e bom humor. É como um papo de bar sobre Bitcoin, só que sem a ressaca no dia seguinte! 😄 Junte-se a nós agora e vamos desvendar esse universo juntos! 💸🚀

Junte-se ao Telegram


Construindo um aplicativo Blockchain com Plutus

Introdução 

Parabéns! Você acabou de embarcar em uma jornada emocionante no mundo do desenvolvimento de blockchain com Plutus. Como alguém que já passou por isso, deixe-me dizer-lhe que é mais do que apenas escrever código – trata-se de construir as bases para sistemas descentralizados que poderão remodelar as indústrias.

As blockchains estão causando um impacto significativo em vários setores, fornecendo soluções descentralizadas e transparentes. A evolução na tecnologia de desenvolvimento mudou significativamente o cenário tanto para os desenvolvedores quanto para as comunidades. Além da descentralização, o blockchain oferece vantagens como tempos de transação mais rápidos e eliminação da necessidade de verificação por terceiros, diminuindo assim fraudes e ameaças cibernéticas. Para os desenvolvedores, dominar o desenvolvimento de aplicativos blockchain é uma habilidade valiosa, especialmente quando se trabalha com ferramentas robustas como o Plutus. Plutus é uma plataforma de contrato inteligente no blockchain Cardano que fornece uma base sólida para a criação de aplicativos descentralizados (DApps) seguros e eficientes.

O que é Cardano?

um para gerenciar transações e contas, enquanto o outro é dedicado ao tratamento de contratos e cálculos inteligentes. O objetivo final da Cardano é desenvolver uma plataforma blockchain que ofereça maior segurança, escalabilidade e adaptabilidade em comparação com seus antecessores. Encontra aplicações em vários setores, como gestão da cadeia de abastecimento, verificação de identidade digital e serviços financeiros em mercados em desenvolvimento.

Plutus

Em termos mais simples, Plutus é uma linguagem para criação de contratos na plataforma Cardano. Ele é baseado em Haskell, uma linguagem de programação funcional, o que significa que você não escreve Plutus Core diretamente – em vez disso, os scripts são gerados automaticamente por um plugin dentro do compilador Haskell. Esse recurso permite a verificação formal, que utiliza provas matemáticas para garantir a veracidade do contrato e aumentar a segurança, reduzindo possíveis bugs no contrato inteligente.

Na blockchain Cardano, o Plutus funciona perfeitamente, permitindo que os desenvolvedores interajam diretamente com o banco de dados e a infraestrutura da Cardano. Isto facilita o desenvolvimento e implantação de contratos inteligentes que podem interagir diretamente com a rede Cardano. Plutus oferece ferramentas para simulação de contratos inteligentes sem a necessidade de um nó Cardano completo, permitindo a experimentação antes do lançamento na rede principal. Plutus é a escolha ideal para desenvolvedores que desejam criar aplicativos descentralizados robustos e eficientes.

Público

Este artigo destina-se a desenvolvedores novatos que se aventuram na programação blockchain com experiência mínima em codificação. Iremos guiá-lo passo a passo na configuração do seu espaço de trabalho, na compreensão dos princípios fundamentais do blockchain e na construção de um aplicativo blockchain básico usando o Plutus como ponto de partida.

Configurando o ambiente de desenvolvimento

É essencial começar com uma preparação ideal para sua aventura de desenvolvimento. Portanto, estabelecer um ambiente de apoio para Plutus constitui a base para este estágio.

1. Instalando o Plutus

Baixe o Plutus do repositório oficial: 

git clone https://github.com/input-output-hk/plutus-apps.git
cd plutus-apps
nixshell

Verifique a instalação usando: plutus -v

2. Escolhendo um IDE

Ao desenvolver aplicativos com Plutus, ter o IDE certo é crucial. Plutus é baseado em Haskell, portanto, é recomendado ter um IDE com suporte para Haskell. Duas opções populares para o desenvolvimento de Plutus são Visual Studio Code (VS Code) e Plutus Playground. Aqui está um guia expandido sobre como configurar e usar esses IDEs para desenvolvimento Plutus.

Opção de editor de código: VSCode, ou Visual Studio Code, é um editor de texto popular e adaptável que funciona com quase qualquer linguagem de programação e oferece extensões úteis. Isso o torna altamente preferido pelos desenvolvedores para suas tarefas de codificação. O VSCode de código aberto oferece um amplo conjunto de ferramentas e recursos para agilizar seu processo de codificação.

Etapas para configurar o VSCode:

  • Baixe o VSCode do site oficial (de acordo com seu sistema operacional)
  • Instale o software
  • Plutus é construído em Haskell, então você precisa instalar a plataforma Haskell, que inclui o Glasgow Haskell Compiler (GHC) e cabal (uma ferramenta de construção para Haskell).
  • Baixar Haskell
  • Instale as extensões Haskell no VS Code (Haskero,Haskell Syntax Higlighting, etc)
  • Configure as extensões e configure extensões adicionais
  • Como você já instalou o Plutus, você está pronto para começar!!

Editor Plutus Online: O Editor Plutus Online serve como um espaço de trabalho conveniente baseado na web, projetado especificamente para escrever contratos inteligentes Plutus. Como não requer instalação, é um ponto de partida ideal para iniciantes desenvolverem suas habilidades de codificação com confiança.

Você pode visitar o site do Plutus Playground e começar!!

Em ambos os cenários, você pode trabalhar com eficiência no desenvolvimento do Plutus. Você pode descobrir uma abordagem produtiva utilizando o Visual Studio Code para projetos abrangentes e, ao mesmo tempo, aproveitando o Plutus Playground para testes e conceituação rápidos, aproveitando assim os benefícios de cada ambiente.

3. Instalando bibliotecas necessárias

Use cabal para instalar bibliotecas essenciais para o desenvolvimento do Plutus.

Compreendendo os conceitos de Blockchain com Plutus  

Em termos mais simples, um Blockchain é um sistema sofisticado em rede para armazenar dados de transações. Em vez de bancos de dados tradicionais onde as informações residem em um único local, este sistema espalha os dados por vários computadores. Cada dado armazenado (ou “bloco”) é conectado a outros blocos usando princípios matemáticos complexos e, uma vez registrados, esses blocos são difíceis de alterar sem causar problemas nos blocos subsequentes. Este design garante que os registros das moedas digitais permaneçam inalterados e seguros.

Blockchain tem três componentes básicos:

  • Blocos: os blocos contêm informações sobre transações junto com metadados. Todos os blocos são vinculados entre si por meio de hash, que forma uma cadeia de blocos, daí o blockchain 
  • Transações: Uma transação é uma transferência de dados de uma entidade para outra dentro do blockchain. No Plutus, as transações são escritas em Haskell e envolvem UTXOs (Unspent Transaction Outputs) de entrada e saída.
  • Cadeias: No Plutus, a cadeia mantém a ordem das transações e garante que elas sejam imutáveis ​​uma vez confirmadas.

No seguinte trecho de código podemos ver a estrutura do Bloco no Plutus:

Construindo um aplicativo Blockchain com Plutus

Cada componente do bloco é mencionado junto com seu tipo de dados

  • O índice é um número inteiro que informa a posição de um bloco
  • Timestamp é a hora em que o bloco foi criado
  • Transações é a string ou uma lista de todas as transações incluídas em um determinado bloco
  • Hash é um padrão único e a chave primária para identificar um bloco
  • O hash anterior refere-se à continuidade e é o hash do último bloco

Neste trecho de código podemos ver a estrutura das Transações no Plutus:

Construindo um aplicativo Blockchain com Plutus

Mecanismos de Descentralização, Imutabilidade e Consenso:

A força do Blockchain está enraizada em três elementos fundamentais: distribuição, permanência e sistema de acordo.

Descentralização: A descentralização se refere a uma característica em que nenhuma entidade única tem poder sobre o banco de dados no Blockchain. Essa configuração torna o colapso e o viés do sistema extremamente improváveis, pois cada dispositivo participante (ou nó) mantém uma cópia do blockchain. Isso garante transparência e evita falhas ou adulterações centralizadas.

A imutabilidade do Blockchain refere-se ao fato de que quaisquer dados gravados nele permanecem inalterados e indeléveis. Uma vez registrada a informação, ela não pode ser modificada ou apagada sem afetar todos os blocos subsequentes, graças ao hashing criptográfico. Isto significa que quaisquer alterações feitas não podem ser revertidas, tornando todo o sistema imutável.

Protocolo de Consenso Blockchain: Uma coleção de regras que governam vários aspectos de uma rede blockchain. Esses protocolos exigem que todos os nós participantes da rede concordem com os métodos usados. Os mecanismos de consenso servem para sincronizar esses nós e garantir que todos operem sob as mesmas diretrizes.

Construindo um Blockchain Simples com Plutus

O bloco de construção básico de qualquer blockchain é chamado de ‘bloco’. Neste trecho específico de código, estabelecemos uma estrutura de dados em “bloco”, completa com suas partes constituintes.

Como pesquisador focado no desenvolvimento de blockchain, reconheço a importância de manter a integridade do nosso sistema blockchain. Para conseguir isso, é crucial que cada bloco da cadeia possua um hash distinto. Para isso, empregamos o método de hash SHA256, amplamente reconhecido e confiável na área, para calcular esses hashes usando Plutus.

Construindo um aplicativo Blockchain com Plutus

Depois de definir o que um bloco implica, prossiga para estabelecer seu blockchain usando um bloco genesis, que serve como bloco inicial em qualquer blockchain. Parabéns! Agora você criou um blockchain, mas há mais trabalho a ser feito: você precisará adicionar novos blocos e recuperar também o mais recente.

Vá em frente e consulte o código abaixo caso precise de ajuda!

Construindo um aplicativo Blockchain com Plutus

Implementação de mecanismos de consenso no Plutus 

Inicialmente, Cardano operava em um mecanismo de Prova de Trabalho, mas posteriormente fez a transição para o sistema de Prova de Participação. Notavelmente, o Plutus foi projetado tendo em mente a compatibilidade com o protocolo Ouroboros PoS da Cardano. Esse design garante escalabilidade, eficiência energética e segurança para aplicativos descentralizados (DApps).

Aqui está uma visão geral dos algoritmos de consenso que podem funcionar com Plutus

  • Ouroboros: Ouroboros é um mecanismo de prova de aposta com o qual o Plutus é altamente compatível e depende da aposta da ADA que os validadores estão dispostos a assumir para validar um novo bloco. Os contratos Plutus interagem perfeitamente com o protocolo Ouroboros, garantindo que a execução de contratos inteligentes permaneça segura e com eficiência energética.
  • Prova de Trabalho: PoW é o mecanismo mais antigo e foi amplamente utilizado em todas as criptomoedas mais antigas. Ainda pode ser implementado no papel no caso do Plutus. Isto seria mais útil ao pensar em cenários isolados, como fins educacionais e experimentais.
  • Prova de trabalho delegada e tolerância a falhas bizantinas: Esses mecanismos não são particularmente compatíveis com Cardano, mas ainda podem ser implementados teoricamente no Plutus.

Nesta seção, exploraremos como usar a Prova de Trabalho no Plutus.

Construindo um aplicativo Blockchain com Plutus

No sistema de Prova de Trabalho, os mineiros competem entre si para resolver primeiro um problema matemático complexo, o que lhes confere o direito de validar a criação de uma nova moeda. Neste trecho de código, a função de prova de trabalho procura um número específico chamado ‘nonce’, que quando combinado com o hash do bloco anterior, gera um novo hash que começa com uma quantidade predeterminada de zeros no início. Este é um exemplo simples de PoW, onde o nível de dificuldade se ajusta para tornar mais fácil ou mais difícil encontrar um nonce válido.

Depois de concluir a configuração da Prova de Trabalho, é importante modificar o blockchain para autenticar a prova extraída.

Aqui está o trecho de código de exemplo:

Construindo um aplicativo Blockchain com Plutus

Esta função garante que um novo bloco possa ser anexado à blockchain somente quando sua prova for verificada, preservando assim a autenticidade e consistência da cadeia.

Criando uma API Blockchain simples com Plutus  

Nesta seção, orientaremos você na construção de uma API básica para se comunicar com um aplicativo blockchain desenvolvido via Plutus. Esta API tem dois propósitos: permite aos usuários anexar novos blocos e fornece acesso para explorar o blockchain enviando consultas HTTP.

Etapas para criar uma API:

  • Configure o ambiente para API: Instale o Haskel (que já está feito), em seguida instale o Servant usando Cabal
  • Baixe todas as bibliotecas necessárias:
    • Servidor: Para criar a API
    • Aeson para codificar e decodificar o JSON: cabal install aeson plutus-core
    • Plutus para integrar todo o código e lógica 

Inicialmente, ao construir a API, vamos começar incorporando um novo bloco e suspendendo o estado existente do blockchain. Estas ações já foram realizadas conforme detalhado nas seções anteriores.

Agora você pode prosseguir e definir os endpoints:

{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— Defina o tipo de bloco (consulte o Capítulo 3)data Block = Block  { index :: Int  , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } derivando (Show, Eq)— Blockchain é simplesmente uma lista de blocostype Blockchain = [Block]— Defina o tipo de APItype BlockchainAPI = “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain— Espaço reservado para o blockchain, inicialmente começando apenas com o genesis blockgenesisBlock = Block 0 “2024-09-12 00:00:00” “Genesis Block” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]– Manipuladores para os endpoints da APIaddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock]    liftIO $ putStrLn “Bloco adicionado!”    return newBlockchain— Manipulador para recuperar o chainviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain-Ponto de entrada principal para executar a APIapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer inicialBlockchain)

Explicação do código acima:

  • O bloco é definido de forma semelhante aos capítulos anteriores
  • A biblioteca servidora é usada para definir a estrutura da API. Existem dois métodos para definir pontos de extremidade da API: GET e POST, que significam recuperar e adicionar o blockchain, respectivamente.
  • Também definimos manipuladores (addBlockHandler) para manipular os novos blocos que estão sendo adicionados e visualizar o outro bloco
  • No final, há uma função principal que é o coração do código, une tudo e executa o servidor API.

Seguindo a definição da API, há duas maneiras de incluir os Endpoints e coletar detalhes do Blockchain Endpoint.

Construindo um aplicativo Blockchain com Plutus

Viva! Você integrou efetivamente esta seção, permitindo executar a API com Cabal. Prossiga para a próxima fase com confiança, pois tudo parece definido!

Executando e testando o aplicativo 

Após a construção da API blockchain, vamos realizar alguns testes. Podemos utilizar ferramentas como Postman ou curl para interagir com a API, garantindo que seu bom funcionamento seja confirmado.

Etapas para executar e testar o aplicativo:

  • Compile o programa e execute-o:  cabal build   cabal run
  • Inicie o servidor: A API deve estar disponível em http://localhost:8080
  • Teste e adicione os endpoints do bloco

 “índice”: 1,  
“carimbo de data e hora”: “2024-09-12 12:30:00”, 
 “dataField”: “Este é meu novo bloco”,  
“previousHash”: “some_hash”,  
“hash”: “novo_bloco_hash”}

Veja o Blockchain

curl http://localhost:8080/chain

Como pesquisador, configurei com sucesso um aplicativo blockchain básico que agora opera com uma API criada utilizando Plutus. Esta API permite que outros aplicativos ou usuários se envolvam com meu blockchain de maneira integrada, concedendo-lhes a capacidade de anexar novos blocos e inspecionar o estado atual do blockchain.

Exemplo ao vivo de construção de um aplicativo Blockchain com Plutus

Construindo um aplicativo Blockchain com Plutus
Construindo um aplicativo Blockchain com Plutus
Construindo um aplicativo Blockchain com Plutus

O trecho de código acima é uma execução passo a passo de:

  • Etapa 1: Crie o tipo de dados Block com os atributos necessários usando a sintaxe Plutus.
  • Etapa 2: Implemente o método calcula_hash.
  • Etapa 3: Defina o tipo de dados Blockchain e inicialize-o com um bloco genesis.
  • Etapa 4: Implemente métodos para adicionar novos blocos e recuperar o bloco mais recente usando Plutus.
  • Etapa 5: adicione a funcionalidade Prova de Trabalho ao tipo de dados Bloco e atualize o tipo de dados Blockchain.
  • Etapa 6: Configure o ambiente API para lidar com solicitações usando Plutus.
  • Etapa 7: teste o aplicativo minerando um novo bloco e verificando o blockchain usando Postman ou Curl

Parabéns! Você chegou ao final do módulo e aprendeu todos os fundamentos do Plutus.

Explorar a programação blockchain com Plutus não envolve apenas codificação; trata-se de moldar a estrutura fundamental dos sistemas descentralizados, que podem revolucionar vários setores. Continue seus estudos e aproveite sua jornada de codificação!

Confira também: Como projetar, desenvolver e implantar sua própria criptomoeda: um guia passo a passo

2024-09-14 10:24