WEB3DEV

Cover image for Como Criar uma Blockchain Permissionada com o Hyperledger Besu?
Paulo Gio
Paulo Gio

Posted on

Como Criar uma Blockchain Permissionada com o Hyperledger Besu?

https://miro.medium.com/v2/resize:fit:1100/format:webp/0*JVbE-nu7j-DKucT9.jpg

Em nosso artigo anterior sobre o Hyperledger Besu, destacamos a importância do Besu para os desenvolvedores. Hoje, vamos percorrer um processo passo a passo de como criar uma blockchain permissionada com o Hyperledger Besu, concluindo com requisitos técnicos, processo de configuração e muito mais.

Note que estas instruções são projetadas para desenvolvedores que desejam configurar um ambiente local para experimentar o Hyperledger Besu. No entanto, também discutiremos como eles podem configurar facilmente uma rede Hyperledger Besu permissionada de grau de produção no final deste artigo.

O que torna o Hyperledger Besu uma Plataforma ideal para Blockchains Permissionadas?

O Hyperledger Besu é como qualquer outro cliente de execução Ethereum que gerencia e atualiza o estado da blockchain na camada de execução da rede Ethereum. No entanto, o Besu se destaca por uma variedade de razões, incluindo a capacidade de suportar tanto blockchains permissionadas quanto públicas, bem como sua compatibilidade com redes de teste populares como Rinkeby, Ropsten e Goerli.

A plataforma é otimizada para implementar três algoritmos de consenso proeminentes — Prova de Participação (PoS), Prova de Autoridade (PoA) e Prova de Trabalho (PoW). Além disso, oferece armazenamento de classe mundial através do banco de dados de chave-valor RocksDB e implementa a especificação da Enterprise Ethereum Alliance (EEA) para criar uma interface comum em diversos projetos Ethereum de código aberto e fechado.

Desenvolvedores que desejam construir soluções empresariais descentralizadas e blockchains privadas podem usar o ecossistema Besu para alavancar seus recursos exclusivos e potencializar seus produtos com alta escalabilidade, customização e atributos de segurança.

Obtenha uma visão geral da arquitetura do Besu para blockchains privadas explicada na imagem abaixo:

https://miro.medium.com/v2/resize:fit:1100/format:webp/0*v39lLfbbmpesTzW5.jpg

Uma coisa a observar aqui é que: uma rede permissionada na Ethereum não significa que estamos livres de todos os tipos de vulnerabilidades comuns da Blockchain. Ainda precisamos ser cautelosos sobre as possíveis ameaças de segurança para proteger nossos sistemas.

Leia mais em: Most Common Blockchain security Vulnerabilities and how to protect your nodes against them?

Pilha de Tecnologia para Construir uma Rede Privada Besu

A pilha de tecnologia e os requisitos de sistema para criar uma blockchain permissionada com o Hyperledger Besu podem variar em uma série de fatores, como o tamanho da rede, o total de transações submetidas na blockchain, o limite de gás para o bloco e, finalmente, as complexidades de manipulação de consultas JSON-RPC, PubSub ou GraphQL pelo nó.

Este guia explica o desenvolvimento de uma blockchain permissionada com o algoritmo de consenso de Prova de Autoridade IBFT 2.0 no Besu com um nó local e permissões de conta. Veja abaixo a pilha de tecnologia que você precisa:

  • Windows OS
  • Binários
  • Docker
  • Máquina virtual (VM) Java com 4GB de memória
  • VM com tamanho de memória de 6GB e um disco rígido virtual com no mínimo 10GB de espaço
  • Ferramentas de desenvolvimento e IDEs
  • Armazenamento SSD local

Interessado em implantar redes públicas com o Besu?

Leia: How to deploy an Ethereum node using Hyperledger Besu for Public Networks?

Criando uma Blockchain Permissionada com o Hyperledger Besu: 12 Etapas a Seguir

Etapa 1: Instalando o Besu

Instale o Besu usando o guia de início rápido do desenvolvedor. Além disso, você precisa instalar a imagem do Docker e os Binários para obter versões mais estáveis do Besu. De qualquer forma, você pode instalar o Hyperledger Besu a partir do código-fonte com as instruções dadas aqui.

Etapa 2: Baixando o Curl

Use este link para baixar o Curl, que na maioria das vezes oferece o pacote de origem necessário no desenvolvimento da rede Besu.

Agora, vamos criar a blockchain. Nossa infraestrutura de rede no Besu basicamente incluirá quatro nós. Você pode adicionar/reduzir os nós de acordo com a necessidade.

Etapa 3: Criando Pastas

Cada nó que mantém a rede Besu precisará de um diretório para registrar os dados da blockchain. Assim, execute o seguinte comando para criar um diretório de dados para todos os quatro nós; Node-1, Node-2, Node-3 e Node-4.

Permissioned-Network/
├── Node-1
│   ├── data
├── Node-2
│   ├── data
└── Node-3
│   ├── data
└── Node-4
   ├── data
Enter fullscreen mode Exit fullscreen mode

Etapa 4: Criação de Arquivos de Configuração

Os arquivos de configuração na rede blockchain permissionada definem o arquivo gênesis do IBFT 2.0 e o total de pares de chaves de nó a serem gerados. Observe que este arquivo de configuração contém dois nós JSON aninhados, a propriedade gênesis que define o arquivo gênesis do IBFT 2.0 e a propriedade blockchain que especifica o número de pares de chaves a serem gerados.

Em seguida, copie a definição do arquivo de configuração fornecida para outro arquivo chamado ibftConfigFile.json e salve este arquivo no diretório Permissioned-Network.

{
  "genesis": {
    "config": {
      "chainId": 1337,
      "berlinBlock": 0,
      "ibft2": {
        "blockperiodseconds": 2,
        "epochlength": 30000,
        "requesttimeoutseconds": 4
      }
    },
    "nonce": "0x0",
    "timestamp": "0x58ee40ba",
    "gasLimit": "0x47b760",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "alloc": {
      "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {
        "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",
        "comment": "A chave privada e este comentário devem ser ignorados. Em uma cadeia real, a chave privada NÃO deve ser armazenada",
        "balance": "0xad78ebc5ac6200000"
      },
      "627306090abaB3A6e1400e9345bC60c78a8BEf57": {
        "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",
        "comment": "A chave privada e este comentário devem ser ignorados. Em uma cadeia real, a chave privada NÃO deve ser armazenada",
        "balance": "90000000000000000000000"
      },
      "f17f52151EbEF6C7334FAD080c5704D77216b732": {
        "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",
        "comment": "A chave privada e este comentário devem ser ignorados. Em uma cadeia real, a chave privada NÃO deve ser armazenada",
        "balance": "90000000000000000000000"
      }
    }
  },
  "blockchain": {
    "nodes": {
      "generate": true,
      "count": 4
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Dica de segurança: As contas no arquivo gênesis acima não devem estar na rede principal (mainnet) ou em uma rede pública, exceto para serem usadas nas redes de testes. Isso ocorre porque o arquivo exibe chaves privadas, possivelmente criando preocupações de segurança de conta. Esse não é o caso do Hyperledger Besu. Na verdade, todas as blockchains empresariais permissionadas devem seguir as mesmas práticas para evitar problemas relacionados à segurança.

Etapa 5: Gerando Chaves de Nó e o Arquivo Gênesis

Use o diretório Permissioned-Network para gerar o arquivo gênesis e a chave do nó:

besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key
Enter fullscreen mode Exit fullscreen mode

Aqui é onde o Besu cria o seguinte diretório para networkFiles:

  • genesis.json – O arquivo gênesis inclui a propriedade extraData que especifica que todos os quatro nós são validadores.
  • Um diretório separado (keys) para cada nó sob o nome de endereço do nó, que contém as chaves públicas e privadas de cada nó:
networkFiles/
├── genesis.json
└── keys
    ├── 0x438821c42b812fecdcea7fe8235806a412712fc0
    │   ├── key
    │   └── key.pub
    ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5
    │   ├── key
    │   └── key.pub
    ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184
    │   ├── key
    │   └── key.pub
    └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a
        ├── key
        └── key.pub
Enter fullscreen mode Exit fullscreen mode

Etapa 6: Adicionando o Arquivo Gênesis ao Diretório Permissioned-Network

Copie e cole o arquivo genesis.json para o diretório Permisssioned-Network.

Etapa 7: Adicionando as Chaves Privadas dos Nós aos Diretórios dos Nós

Copie os arquivos de chave de cada nó para o diretório de dados (data) deles:

Permissioned-Network/
├── genesis.json
├── Node-1
│   ├── data
│   │    ├── key
│   │    ├── key.pub
├── Node-2
│   ├── data
│   │    ├── key
│   │    ├── key.pub
├── Node-3
│   ├── data
│   │    ├── key
│   │    ├── key.pub
├── Node-4
│   ├── data
│   │    ├── key
│   │    ├── key.pub
Enter fullscreen mode Exit fullscreen mode

Etapa 8: Criação do Arquivo de Configuração de Permissões

Você precisa de arquivos de configuração de permissões para especificar nós na rede e sua lista de permissões específica. Para criar o arquivo, forneça as seguintes configurações de permissão para um arquivo chamado permissions_config.toml. Armazene uma cópia nos diretórios dos Nós - Node-1/data, Node-2/data, Node-3/data e Node-4/data.

permissions_config.toml

accounts-allowlist=["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "0x627306090abaB3A6e1400e9345bC60c78a8BEf57"]
nodes-allowlist=[]
Enter fullscreen mode Exit fullscreen mode

Este arquivo de configuração de permissões consiste nas duas primeiras contas do arquivo gênesis. Adicione nós permissionados após iniciar o nó usando o método de API JSON-RPC perm_addNodesToAllowlist.

Etapa 9: Iniciando os nós: Node-1, Node-2, Node-3 e Node-4

Inicie o Node-1

Execute o seguinte comando:

besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled \
--permissions-accounts-config-file-enabled \
--rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" \
--rpc-http-cors-origins="*"
Enter fullscreen mode Exit fullscreen mode

Inicie o Node-2

Configure o terminal, transite para o diretório Node-2 e, em seguida, inicie o Node-2:

Execute o seguinte comando:

besu --data-path=data --genesis-file=..\genesis.json --permissions-nodes-config-file-enabled \
--permissions-accounts-config-file-enabled --rpc-http-enabled \
--rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" \
--rpc-http-cors-origins="*" --p2p-port=30304 --rpc-http-port=8546
Enter fullscreen mode Exit fullscreen mode

Inicie o Node-3

Abra um terminal separado e vá para o diretório Node-3 antes de iniciar o nó. Execute o seguinte comando:

besu --data-path=data --genesis-file=..\genesis.json --permissions-nodes-config-file-enabled \
--permissions-accounts-config-file-enabled \
--rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" \
--rpc-http-cors-origins="*" --p2p-port=30305 --rpc-http-port=8547
Enter fullscreen mode Exit fullscreen mode

Iniciando o Node-4

Inicie outro terminal, vá para o diretório Node-4 e inicie o nó:

besu --data-path=data --genesis-file=..\genesis.json \
--permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled \
--rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" \
--rpc-http-cors-origins="*" --p2p-port=30306 --rpc-http-port=8548
Enter fullscreen mode Exit fullscreen mode

Nota: Toda vez que você inicia os nós, o comando gera um URL de formato enode que precisaremos atualizar nas configurações de permissões na próxima etapa.

Etapa 10: Adicionando os URLs enode dos Nós aos Arquivos de Configuração de Permissões

Configure outro terminal e adicione cada nó ao arquivo de configuração de permissão. Implemente o método JSON-RPC perm_addNodesToAllowlist para isso.

Agora, substitua <EnodeNode1>, <EnodeNode2>, <EnodeNode3> e <EnodeNode4> por seus respectivos URLs enode mencionados abaixo:

Node-1:

curl -X POST -data '{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}' http://127.0.0.1:8545
Enter fullscreen mode Exit fullscreen mode

Node-2:

curl -X POST -data
'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}' http://127.0.0.1:8546
Enter fullscreen mode Exit fullscreen mode

Node-3:

curl -X POST -data
'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}' http://127.0.0.1:8547
Enter fullscreen mode Exit fullscreen mode

Node-4:

curl -X POST -data
'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}' http://127.0.0.1:8548
Enter fullscreen mode Exit fullscreen mode

Etapa 11: Adicionando os Nós como Pares

Adicione Node-1, Node-2, Node-3 e Node-4 como pares usando o método de API JSON-RPC admin_addPeer.

Para fazer isso, substitua <EnodeNode1> por seu URL enode que aparece ao iniciar o Node-1. Para Node-2, 3 e 4, os URLs enode são adicionados abaixo:

Node-2:

curl -X POST --data 
'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode1>"],"id":1}' http://127.0.0.1:8546
Enter fullscreen mode Exit fullscreen mode

Node-3:

curl -X POST --data 
'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode1>"],"id":1}' http://127.0.0.1:8547
Enter fullscreen mode Exit fullscreen mode

Node-4:

curl -X POST --data 
'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode1>"],"id":1}' http://127.0.0.1:8548
Enter fullscreen mode Exit fullscreen mode

Substitua <EnodeNode2> pelo URL enode que aparece ao iniciar o Node-2.

Node-3:

curl -X POST --data 
'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode2>"],"id":1}' http://127.0.0.1:8547
Enter fullscreen mode Exit fullscreen mode

Node-4:

curl -X POST --data 
'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode2>"],"id":1}' http://127.0.0.1:8548
Enter fullscreen mode Exit fullscreen mode

Substitua <EnodeNode3> pelo URL enode que aparece ao iniciar o Node-3.

Node-4:

curl -X POST --data 
'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode3>"],"id":1}' http://127.0.0.1:8548
Enter fullscreen mode Exit fullscreen mode

Etapa 12: Certifique-se de que a Rede Permissionada esteja Funcionando Conforme o Esperado

Verificação da contagem de pares

Use curl e chame o método de API JSON-RPC net_peerCount para confirmar o funcionamento suave dos nós como pares:

curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' localhost:8545
Enter fullscreen mode Exit fullscreen mode

A saída confirma que o Node-1 (que executa o serviço JSON-RPC) consiste em três pares (Node-2, Node-3 e Node-4)

{
  "jsonrpc" : "2.0",
  "id" : 1,
  "result" : "0x3"
}
Enter fullscreen mode Exit fullscreen mode

Parabéns! Sua rede permissionada agora está ativa e funcionando no ecossistema Besu. Você pode autenticar seu funcionamento realizando transações de contas na lista de permissões de contas e aquelas fora da lista de permissões de nós. Além disso, você pode iniciar um novo nó a qualquer momento e parar o nó existente conforme necessário.

Uma abordagem rápida e de baixo código: Hyperledger Besu em Produção

Como mencionado, este guia explica como criar uma blockchain permissionada com o Hyperledger Besu representando o ambiente web local. No entanto, a rede de produção no Hyperledger Besu é diferente. O que funciona bem na configuração local pode falhar quando está aberto ao mundo para aplicações reais. A saída deve corresponder aos requisitos de nível empresarial dos dias atuais, e o custo deve estar sob controle. A implantação de protocolos é apenas um aspecto; há gerenciamento de nuvem, DevOps, monitoramento e algumas outras camadas de infraestrutura vitais a serem gerenciadas ao todo, além de construir seu caso de uso.

Para simplificar sua experiência de desenvolvimento, a Zeeve oferece implantação de baixo código de nós e redes Hyperledger Besu que leva apenas alguns minutos para ser concluída. Qualquer pessoa pode se inscrever na Zeeve e implementar sua rede de nível de produção sem complicações. Além disso, a Zeeve garante o desempenho de alto nível da rede com monitoramento de nó 24/7 com alertas e notificações proativas.

A Zeeve permite que você contorne várias camadas de gerenciamento de infraestrutura e acelere seu tempo para produção. Comece sua jornada com o Hyperledger Besu hoje com a Zeeve e veja como ela pode simplificar sua experiência de implementação Besu.

Fale com nossos especialistas em blockchain para entender melhor como a Zeeve pode ajudá-lo!

Originalmente publicado em https://www.zeeve.io em 8 de junho de 2023.

Artigo original publicado por Zeeve. Traduzido por Paulinho Giovannini.

Latest comments (0)