Por Steve Perry
Em 08/05/2017 no site iMasters.
Você provavelmente já ouviu falar sobre blockchain, mas talvez você não tenha certeza de como ele se aplica a você enquanto um desenvolvedor Java. Este tutorial irá esclarecer qualquer confusão. Em uma abordagem passo a passo, vou mostrar como usar o Hyperledger Fabric v0.6 para criar, executar e realizar contratos inteligentes, ou chaincode, escritos na linguagem Java. Você instalará ferramentas, definirá sua rede de blockchain local e, finalmente, criará e executará um contrato inteligente de chaincode.
Pré-requisitos
Para este tutorial, presumo que você tem os seguintes pré-requisitos:
- Você já ouviu falar de blockchain ou do framework Hyperledger Fabric
- Você possui conhecimento e experiência intermediária em programação Java tanto com a linguagem quanto com a plataforma
- Você está familiarizado com ou (idealmente) proficiente em usar:
- Eclipse IDE
- Docker e Docker Compose
- Gradle
- Linha de comando do Linux
- SoapUI ou outro software de cliente HTTP, como o Postman
Você também deve estar confortável instalando software em seu computador com mínima orientação. No que concerne a espaço, eu não estou incluindo instruções detalhadas de instalação para todo o software que você precisa; os sites onde você pode obter o software fornecem instruções de instalação.
Antes de mergulhar neste tutorial, quero falar um pouco sobre blockchain.
Princípios do Blockchain
Blockchain está no hype, mas é bem merecido. Não é só a tecnologia em si que é legal, ela é perturbadora e tem o potencial de revolucionar a forma como negócios são feitos na Internet.
Como? Bem, vamos pensar sobre os atributos fundamentais de um acordo de negócio bem-sucedido:
- Confiança: Temos um acordo, mas posso realmente confiar que você irá honrá-lo (ou me honrar)?
- Transparência: Permite um olhar “por trás dos panos” (o que pode tanto construir a confiança como diminuir a necessidade dela).
- Responsabilidade: Define critérios para determinar se todas as partes concordam que o negócio foi honrado ou não.
A saúde de qualquer relacionamento comercial entre duas ou mais partes significará níveis variáveis dos três atributos acima (por exemplo, mais confiança significa menos transparência exigida, e vice-versa), mas um pouco de todos eles deve estar presente, ou haverá problemas.
Como o blockchain ajuda? Em primeiro lugar, através da utilização de um framework comum, os parceiros de negócios podem estabelecer uma rede de confiança inicial. Em seguida, através do uso de um ledger que é visível para todas as partes empresariais, blockchain fornece transparência. Finalmente, através do uso do consenso de todas as partes na forma de contratos inteligentes (ou chaincode), há responsabilidade.
Então, o que isso significa para você enquanto um desenvolvedor Java?
O rápido crescimento da comunidade Hyperledger e da Hyperledger Fabric significa que a tecnologia blockchain está rapidamente chegando em um projeto de desenvolvimento de software perto de você. Você estará preparado?
O panorama da tecnologia blockchain
Às vezes, a tecnologia de desenvolvimento pode atrapalhar a solução do problema empresarial. Meu objetivo principal neste tutorial é mostrar-lhe como escrever chaincode em Java, então eu escolhi a pilha de desenvolvimento mais simples para esse fim.
Dito isto, existem outras opções para os componentes da pilha. Para este tutorial, usarei o Docker como o ambiente de contêiner de rede, mas outra opção é Vagrant com VirtualBox. Se você nunca usou Vagrant, você deveria pelo menos experimentá-lo.
Considerando que Docker é um ambiente de contêiner, Vagrant usa a virtualização. Quando combinado com VirtualBox, um ambiente de virtualização fornece um nível diferente de controle sobre o ambiente computacional que alguns desenvolvedores preferem (o que o torna uma escolha ideal para desenvolvedores do fabric).
Se você está com a impressão de que o panorama da tecnologia blockchain é muito fluida no momento, você está correto. No entanto, isso significa que você está entrando em blockchain e chaincode no momento certo: no piso térreo. Como esta tecnologia amadurece, o seu investimento em aprendê-la nesta fase inicial vai pagar belos dividendos no caminho.
Blockchain é uma dessas tecnologias disruptivas que tem o potencial de revolucionar a maneira como todos fazem negócios. Não apenas B2B, mas B2C e, eventualmente, C2C. Este é um momento muito emocionante, de fato.
Vamos começar!
Configure o seu ambiente de desenvolvimento
Para executar o chaincode, primeiro você precisa configurar o seu ambiente de desenvolvimento.
Depois de concluir esta seção, você estará pronto para executar um dos exemplos do chaincode do Hyperledger Java, onde você implantará e invocará transações no chaincode real. Depois disso, vou mostrar-lhe como escrever um novo programa chaincode do zero (bem, quase).
Nesta seção você irá:
- Configurar o ambiente de rede – para executar a sua rede blockchain local.
- Instalar o software de compilação – para fazer o build do seu chaincode.
- Instalar um cliente HTTP – para invocar transações no seu chaincode.
- Iniciar a rede blockchain.
- Construir o cliente JAR Java shim.
Não vou mentir para você; há um pouco de trabalho de configuração a ser feito para escrever chaincode. Mas se você seguir estas instruções e aplicar um pouco de diligência, valerá a pena.
1. Configure o ambiente de rede
Neste tutorial, você usará o Docker, junto com as imagens de componentes de rede blockchain pré-construídas do Docker Hub, para executar sua rede blockchain local. Você poderia construir o fabric a partir do zero se você quisesse (é código aberto, afinal), mas nesta fase, é mais fácil usar as imagens pré-construídas Hyperledger Fabric disponíveis no Docker Hub.
Como mencionei na introdução, outra opção (e você pode ver nos documentos do Hyperledger) é usar Vagrant e VirtualBox. Vagrant é uma ótima opção para os desenvolvedores de fabric, embora como desenvolvedores de chaincode, estarmos mais preocupados com a construção, execução e teste de nosso chaincode do que trabalhar com o fabric em si.
Se você já tem a versão 1.12 ou superior do Docker instalada, você pode pular para a próxima parte. Nas instruções que seguem, eu entenderei que você não tem o Docker instalado (isto é, você não está atualizando de uma versão anterior do Docker). A instalação do Docker também instalará o Docker Compose, uma ferramenta para definir e executar aplicativos que exigem vários contêineres, assim como a rede de blockchain Hyperledger local que você executará neste tutorial o faz.
Instale o Docker
Instruções de instalação para Mac, Windows e Linux podem ser encontradas aqui: Docker em Mac, Windows e Linux
Verifique a instalação do Docker
Para testar a sua instalação do Docker, abra uma janela de terminal (ou prompt de comando no Windows) e digite os seguintes comandos:
Você deve obter um resultado como este:
Se você quiser ver Docker em ação, você pode executar a imagem de hello-world assim:
2. Instale o software de compilação
Para o sistema de compilação, o Hyperledger Fabric utiliza Gradle, e você usará isso também para este tutorial. O Gradle é um sistema de automação de compilação que combina sintaxe simples para especificar componentes de compilação, juntamente com os melhores recursos do Apache Ant e do Apache Maven para criar um poderoso sistema de compilação fácil de usar. Não é de admirar que muitos desenvolvedores estejam mudando seus projetos para Gradle.
Leia mais sobre o Gradle (e alguns de seus usuários de alto perfil) na página principal do Gradle.
Instale o Gradle
Para instalar o Gradle, siga as instruções para Mac, Windows e Linux
Verifique a instalação do Gradle
Para verificar a sua instalação do Gradle, abra uma janela de terminal e execute este comando:
Você deve obter um resultado como este:
3. Instale um cliente HTTP
O próximo passo é o software de cliente HTTP, que permite que o seu chaincode se comunique com a interface REST do Hyperledger blockchain fabric. Seu navegador pode emitir um HTTP GET, mas para interagir com o fabric você precisa ser capaz de fazer POST nas mensagens. Isso significa que você precisa de um cliente HTTP.
O cliente HTTP que eu escolhi para este tutorial é SoapUI, que fornece uma edição comunitária livre que é poderosa, fácil de usar e contém muitos recursos.
Instale o SoapUI
Para instalar o SoapUI, siga as instruções de instalação para Mac OS, Windows e Linux
Verifique a instalação do SoapUI
Para verificar se o SoapUI está instalado, inicie o aplicativo em seu computador. No Mac OS, o SoapUI deve abrir para a Página Inicial do SoapUI, mostrada na Figura 1.
4. Inicie a rede de blockchain
Agora que você instalou o software necessário para desenvolver e testar o seu chaincode, é hora de iniciar sua rede de blockchain local. O primeiro passo é definir a configuração da rede.
Primeiro, crie um diretório que servirá como a raiz de todo o código fonte que você usará para o desenvolvimento do chaincode. Neste tutorial, usarei ~/home/mychaincode (ou C:\home\chaincode no Windows).
Em seguida, defina a variável de ambiente GOPATH para este caminho. Não estaremos compilando nenhum código Go, nem construindo pacotes Golang ou outros binários, mas a terminologia Golang é criada em Hyperledger. Então, é uma boa ideia ficar confortável com o pensar em termos da linguagem Go e do GOPATH.
O GOPATHO Hyperledger Fabric é escrito em Go, e o GOPATH é um termo que você verá frequentemente nos documentos do Hyperledger. Então, se você planeja fazer muito desenvolvimento de chaincode usando o Hyperledger, você deve se sentir confortável com ele.O GOPATH é a raiz do seu ambiente Go. Código fonte, binários e outros pacotes Golang são todos referenciados em relação a este caminho.
No Linux, você executaria este comando:
Ou no Windows, você deve usar algo como:
Em seguida, você deve informar ao Docker Compose como compor e executar a rede de blockchain. A definição da rede está em YAML, e você deve nomeá-la docker-compose.yml. Você pode chamar o arquivo de outra coisa, mas quando você inicia o Docker Compose, você deve especificar o sinalizador -f. Eu recomendo permanecer com o padrão, que é docker-compose.yml.
Crie o arquivo docker-compose.yml na raiz do seu GOPATH. Cole os seguintes conteúdos:
Há muita coisa acontecendo aqui, a maioria delas está além do escopo deste tutorial, mas eu quero explicar algumas coisas.
Esse arquivo diz ao Docker Compose para definir dois serviços:
- membersrvc: O node de serviços integrantes que fornece serviços de associação, especificamente uma autoridade de certificação/certificate authority (CA), que é responsável pelo manuseio de toda a logística criptográfica (como emissão e revogação de certificados). A imagem Docker pré-construída que você usará para isso é chamada hyperledger/fabric-membersrvc.
- vp0: O único node de pares de validação na rede. Para fins de desenvolvimento, não precisamos de uma rede de pares de validação extravagante; um único par será suficiente. A imagem Docker pré-construída que você usará para isso é chamada de hyperledger/fabric-peer.
Um grande número de variáveis de ambiente são definidas pelo par vp0. Repare que a variável CORE_LOGGING_LEVEL está definida como DEBUG. Isso produz uma grande quantidade de resultado, que pode ser útil às vezes. No entanto, se desejar menos resultado, altere o nível para INFO. Consulte “Controle de log” nos documentos de Configuração do Hyperledger para obter mais informações sobre os níveis de log.
Mais informações podem ser encontradas sobre a definição do arquivo Docker Compose YML no site do Docker.
Em seguida, repare que o valor CORE_SECURITY_ENABLED é false. Isso significa que o fabric não exigirá que você envie qualquer tipo de credenciais de usuário final. A segurança está além do escopo deste tutorial, mas se você estiver interessado em aprender mais, você pode verificar esta nota sobre a funcionalidade de segurança para suas solicitações chaincode.
Finalmente, uma palavra de cautela: alterar qualquer um desses valores de seus padrões (especialmente os valores de porta) pode fazer com que os exemplos neste tutorial não funcionem. Uma rede de blockchain é um conjunto de componentes de software distribuídos que requerem uma comunicação coordenada precisa. Eu recomendo que você não altere os valores de porta de seus valores padrão até que você entenda como todos os componentes do fabric interoperam.
Agora que a definição de rede blockchain está feita, você está pronto para iniciar sua rede blockchain local. Para fazer isso, execute Docker Compose. Navegue até o seu $GOPATH e execute este comando:
Você deve obter resultado na janela do terminal como este:
Este resultado informa que a rede está funcionando e em execução, e pronta para aceitar solicitações de registro de chaincode.
Nota: as linhas realçadas só devem aparecer na primeira vez que você executar sua rede blockchain, porque Docker tem que baixar as imagens do Docker Hub. Uma vez que elas estão baixadas no seu computador, Docker só as puxará se as imagens do Docker Hub forem mais recentes do que as que você tem no seu computador.
Agora você está pronto para construir o cliente JAR Java shim, que permite que o seu chaincode de linguagem Java se comunique com o framework Hyperledger Fabric.
5. Crie o cliente JAR Java shim
Antes de poder executar os exemplos chaincode, você precisa obter o código-fonte mais recente do repositório GitHub da Hyperledger.
Primeiro, você precisará clonar o Hyperledger Fabric em sua máquina local para construir o seu chaincode (Nota: Esta é uma medida temporária; em algum momento, o cliente JAR Java shim deverá ser acessível a partir do repositório Maven central).
Nota: Lembre-se de que você configurou seu GOPATH para ~/home/mychaincode no Linux (ou Mac) ou C:\home\mychaincode no Windows.
Execute este comando para criar a estrutura de diretórios que os scripts de build de fabric esperados:
Em seguida, navegue até a parte inferior da nova estrutura de diretórios que você criou:
A partir daqui você precisa recuperar o código-fonte do Hyperledger para que você possa construir o cliente JAR Java shim.
Há duas maneiras de acessar a fonte Hyperledger.
- Sem git: navegue até o espelho do Hyperledger no GitHub e clique no botão Clone ou download e depois Download ZIP (veja a Figura 2). Um arquivo ZIP chamado fabric-master.zip será baixado para o seu computador, que você pode extrair para $GOPATH/src/github.com/hyperledger. Nota: certifique-se de alterar o nome do diretório raiz do fabric-master para fabric quando você extrair o arquivo.
- Com git: navegue até $GOPATH/src/github.com/hyperledger, copie o URL do campo de texto na caixa “Clone com HTTPS” (ver Figura 2) e execute este comando usando o URL copiado:
Você deve ver o resultado da janela de terminal como este do comando git:
Agora você está pronto para criar o cliente JAR shim do chaincode Java. Navegue até $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/shim/java e execute estes dois comandos:
O resultado de compilação Gradle deve ficar assim:
A última coisa que a compilação faz é adicionar o cliente JAR shim ao seu repositório Maven local. Neste ponto, você está pronto para criar o seu chaincode. A menos que você atualize o código fonte do fabric em algum momento no futuro, ou apenas queira reconstruir o cliente JAR shim novamente por algum motivo, você não terá que executar o cliente JAR Java shim compilado novamente.
Nenhum comentário:
Postar um comentário