[Adequado para iniciantes] Construa uma rede blockchain

1. Construa uma cadeia de alianças FISCO BCOS de grupo único

Verifique os requisitos de hardware e sistema de sua máquina virtual antes de fazer o seguinte.

requisito obrigatório

  • FISCO BCOS suporta CPUs com arquiteturas x86_64 e aarch64 (ARM)

  • Como vários grupos de nós compartilham largura de banda de rede, CPU e recursos de memória, para garantir a estabilidade do serviço, não é recomendável configurar muitos nós em uma máquina.

A tabela a seguir é a configuração recomendada para um único grupo e um único nó. O consumo de recursos de um nó está linearmente relacionado ao número de grupos. Você pode configurar razoavelmente o número de nós de acordo com suas necessidades reais de negócios e recursos da máquina.

Podemos usar a ferramenta de desenvolvimento e implantação build_chain.sh para construir uma cadeia. Este script depende de openssl e curl .

Openssl e curl são ferramentas de linha de comando comumente usadas, ambas podem ser usadas para operações como criptografia, descriptografia e transmissão de dados, mas suas funções e cenários de uso são ligeiramente diferentes. O openssl é uma poderosa ferramenta de linha de comando que fornece funções avançadas de criptografia e descriptografia, que podem ser usadas para gerar chaves, criptografar dados, assinar, verificar assinaturas e descriptografar dados.

O openssl pode ser usado para gerar RSA, DSA, ECDSA e outras chaves e suporta uma variedade de algoritmos de criptografia e algoritmos de hash. Além disso, o openssl também pode ser usado para gerar certificados X.509, certificados PKCS#12, etc. Para usar o openssl, você precisa entender o conhecimento e os algoritmos de criptografia relevantes, caso contrário, não será fácil começar.

A função do curl é enviar solicitações HTTP e receber respostas HTTP. Ele também pode ser usado para criptografar e descriptografar dados, mas sua função de criptografia é relativamente simples e geralmente é usado apenas para autenticação HTTP básica e criptografia SSL/TLS. curl suporta vários métodos e protocolos HTTP, como HTTP/1.0, HTTP/1.1, HTTP/2, etc. Além disso, o curl também suporta FTP, FTPS, SMB, SMBS e outros protocolos. Use curl para testar e depurar facilmente solicitações e respostas HTTP e também pode ser usado em scripts de automação.

Em geral, openssl é mais adequado para criptografar e descriptografar operações de dados, o que requer mais criptografia e conhecimento de algoritmo, enquanto o curl é mais adequado para enviar solicitações HTTP e receber respostas HTTP e é adequado para testar e depurar solicitações e respostas HTTP.

Primeiro precisamos especificar um diretório raiz, aqui eu especifico fisco

Verifique se o openssl e o java estão instalados

versão fisco$ openssl

Se o conteúdo a seguir for exibido, significa que openssl depende do
OpenSSL 1.1.1n 15 de março de 2022


Se não houver tal dependência, você precisa baixá-lo manualmente

sistema centos
sudo yum install -y openssl openssl-devel

  • sudo Indica para executar o comando com privilégios de administrador (necessário digitar a senha do administrador);
  • yum é o gerenciador de pacotes YUM;
  • install é o comando de instalação;
  • -y Indica que é confirmado automaticamente durante a instalação, ou seja, não é necessário que o usuário digite a confirmação;

sistema ubuntu
sudo apt install -y openssl curl

  • sudo Indica para executar o comando com privilégios de administrador (necessário digitar a senha do administrador);
  • apt é o gerenciador de pacotes APT;
  • install é o comando de instalação;
  • -y Indica que é confirmado automaticamente durante a instalação, ou seja, não é necessário que o usuário digite a confirmação;

fiscal $ java -verison

Se o seguinte conteúdo for gerado, significa que jdk existe
java versão "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, Modo misto)

Crie uma cadeia FISCO BCOS de 4 nós

Antes de executar o comando a seguir, verifique se o script build_chain.sh está no diretório atual e se 30300~30303,20200~20203,8545~8548a porta da máquina não está ocupada.

fisco$ bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

Checking
fisco-bcos binary...
Verificação binária aprovada.
==================================================== ==========
Gerando chave CA...
================================== ==============================
Gerando chaves ...
Processando IP:127.0.0.1 Total:4 Agência:agência Grupos:1
==================================================== ============
Gerando configurações...
Processando IP:127.0.0.1 Total:4 Agência:agência Grupos:1
================== ==============================================
[INFO] Execute o download_console Script .sh no diretório nomeado pelo IP para obter o console FISCO-BCOS.
por exemplo, bash /home/ubuntu/fisco/nodes/127.0.0.1/download_console.sh
==================================================== ============
[INFO] Caminho FISCO-BCOS: bin/fisco-bcos
[INFO] Porta inicial: 30300 20200 8545
[INFO] IP do servidor: 127.0.0.1:4
[INFO] Dir. de saída : /home/ubuntu/fisco/nodes
[INFO] Caminho da chave CA: /home/ubuntu/fisco/nodes/cert/ca.key
==================== ==========================================
[INFO] Tudo concluído. Arquivos em /home/ubuntu/fisco/nodes

Se não houver nenhum script build_chian.sh, você precisará baixá-lo manualmente

## Baixe o script
fisoc$ curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.9.1/build_chain.sh && chmod u+x build_chain.sh

Bash: interpretador de shell. build_chain.sh é um script Bash, então precisamos usar este Shell para interpretar e executar este script

build_chain.sh: É uma ferramenta de desenvolvimento e implantação para construir rapidamente a cadeia de alianças FISCO BCOS. O uso dessa ferramenta pode ajudar os usuários a gerar rapidamente arquivos de configuração para nós em uma cadeia.

-l: Especifique o endereço IP (127.0.0.1 é especificado aqui)

":4": significa construir quatro nós

-p 30300,20200,8545: indica o número da porta de escuta do nó blockchain e vários números de porta são separados por vírgulas. Neste exemplo, ele especifica três números de porta, que são 30300 (o número da porta de escuta da cadeia), 20200 (o número da porta de conexão do banco de dados) e 8545 (o número da porta de escuta do WebSocket). Esses números de porta são usados ​​para comunicação e interação entre os nós da blockchain. No uso real, esses números de porta precisam ser modificados de acordo com a situação real.

Após a configuração do nó, um arquivo de nós será gerado no diretório atual. Precisamos entrar no diretório nodes/127.0.0.1/ e digitar o seguinte comando para iniciar todos os nós

fisco/nodes/127.0.0.1$ bash start_all.sh

Se a inicialização for bem-sucedida, será exibido algo como o seguinte
tente iniciar node0
tente iniciar node1
tente iniciar node2
tente iniciar node3
 node1 inicie com êxito
 node2 inicie com êxito
 node0 inicie com êxito
 node3 inicie com êxito

start_all.sh: Bash script para iniciar todos os nós, ele percorrerá e iniciará arquivos de script com config.ini e start

Verifique se o processo foi iniciado

fisco/nodes/127.0.0.1$ ps -ef | grep -v grep | grep fisco-bcos

Após a execução bem-sucedida, será gerado o seguinte:
fisco 5453 1 1 17:11 pts/0 00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config. ini
fisco 5459 1 1 17:11 pts/0 00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
fisco 5464 1 1 17:11 pts /0 00 :00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini
fisco 5476 1 1 17:11 pts/0 00:00:02 /home /ubuntu/ fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini

ps -ef É o comando utilizado para listar as informações do processo em execução no sistema Linux.

| é um caractere pipe, que é usado para usar a saída do comando anterior como a entrada do próximo comando.

grep -v grep é um comando de filtragem para remover linhas contendo a palavra-chave "grep".

grep fisco-bcos é um comando de busca por palavra-chave para encontrar linhas contendo a palavra-chave "fisco-bcos".

Assim, o comando geral  ps -ef | grep -v grep | grep fisco-bcos listará informações sobre todos os processos em execução no momento, removerá as linhas que contêm a palavra-chave "grep" e exibirá apenas as linhas que contêm a palavra-chave "fisco-bcos".

Verifique a saída do registro

fisco/nodes/127.0.0.1$ tail -f nodes/127.0.0.1/node0/log/log* | grep conectado

Normalmente, as informações de conexão serão enviadas continuamente. A partir da saída, pode-se ver que o node0 está conectado aos outros 3 nós
info|2019-01-21 17:30:58.316769| [P2P][Service] heartBeat,connected count =3
info| 2019-01-21 17:31:08.316922| [P2P][Service] heartBeat,connected count=3
info|2019-01-21 17:31:18.317105| [P2P][Service] heartBeat,connected count =3

tail -f: A opção do comando tail, que significa rastrear o arquivo e exibir o conteúdo no final do arquivo em tempo real.

nodes/127.0.0.1/node0/log/log*: Especifique o caminho do arquivo e o nome do arquivo a ser rastreado, o que significa rastrear todos os arquivos que terminam com "log" neste diretório.

|: O caractere pipe, usado para usar a saída do comando anterior como a entrada do próximo comando.

grep connected: Indica para filtrar linhas contendo a string "connected".

Verifique se existe consenso

fisco/nodes/127.0.0.1$ tail -f nodes/127.0.0.1/node0/log/log* | grep +++

Em circunstâncias normais, ++++A geração do selo será continuamente gerada, indicando que o consenso é normal
info|2020-12-22 17:24:43.729402|[g:1][CONSENSUS][SEALER]++++ +++++ ++++++ Gerando selo, blkNum=1, tx=0, nodeIdx=1, hash=2e133146...
info|2020-12-22 17:24:47.740603|[g:1 ][CONSENSUS][ SEALER]++++++++++++++++ Gerando selo, blkNum=1, tx=0, nodeIdx=1, hash=eb199760...

No FISCO BCOS, o processo de consenso produzirá continuamente "+++", o que significa que o processo está em execução e capaz de se comunicar com outros nós. Portanto, se este símbolo for emitido continuamente, significa que o processo de consenso está funcionando normalmente e pode se comunicar com outros nós. Este símbolo geralmente é usado para verificar se o processo de consenso está funcionando corretamente e é capaz de se comunicar com outros nós. Deve-se observar que, se este símbolo não for exibido, pode indicar que o processo de consenso não está funcionando corretamente e é necessária uma investigação mais aprofundada.

Dois consoles de configuração e uso

pronto para depender

# Instale o java no sistema ubuntu
sudo apt install -y default-jdk

#centos system install java
sudo yum install -y java java-devel

obter console

fisco$ curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.2/download_console.sh && bash download_console.sh

Após a conclusão do download, você pode descompactar o pacote compactado do console
fisco$ tar -zxvf console.tar.gz

Se você não conseguir fazer o download por muito tempo devido a problemas de rede, tente curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh

Copiar arquivos de configuração do console, certificados

Copie o arquivo de configuração
fisco$ cp -n console/conf/config-example.toml console/conf/config.toml

Copie o certificado sdk
fisoc$ cp -r nodes/127.0.0.1/sdk/* console/conf/

No Linux, cpé uma ferramenta de linha de comando para copiar arquivos e diretórios. Em vez disso,-n é uma opção usada para significar "não substituir".

Especificamente, ao usar cpo comando para copiar arquivos, substituir o arquivo de destino é um problema potencial se ele já existir. Ao usar -na opção, você pode evitar a substituição de um arquivo de destino existente, mas apenas imprima uma mensagem de erro e pergunte ao usuário se deseja substituir.

-ré cpuma opção para o comando para copiar recursivamente uma árvore de diretórios inteira. Isso significa que ele copiará o diretório especificado e todos os seus subdiretórios e arquivos, incluindo permissões, propriedade, timestamps, etc. de todos os arquivos e diretórios. Quando a opção é usada cp -r, ela trata automaticamente da cópia de diretórios e arquivos e não pergunta se você deseja sobrescrever os arquivos existentes.

Iniciar o console

tax/console$ bash start.sh

Envie as seguintes informações para indicar que a inicialização foi bem-sucedida, caso contrário, verifique se a configuração da porta do nó em conf/config.toml está correta

Obter informações do console

# Obtenha a versão do cliente 
[grupo:1]> getNodeVersion 
ClientVersion{ 
    version='2.6.0', 
    supportedVersion='2.6.0', 
    chainId='1', 
    buildTime='20200819 15:47:59', 
    buildType=' Darwin /appleclang/RelWithDebInfo', 
    gitBranch='HEAD', 
    gitCommitHash='e4a5ef2ef64d1943fccc4ebc61467a91779fb1c0' 
} 
# Obter informações do nó 
[grupo:1]> getPeers 
[ 
    PeerInfo{ 
        nodeID='c1bd77e188cd07 83256ee068 38020f24a697f9af785438403d3620967a4a3612e3abc4bbe986d1e9dddf62d4236bff0b7d19a935a3cd44889f681409d5bf8692', 
        ipAndPort='127.0.0 .1:30302 ' , 
        agência = 'agência',
        tópico=[ 
    },
 
        ],
        node='node2' 
    PeerInfo{ 
        nodeID='7f27f5d67f104eacf689790f09313e4343e7887a1a7b79c31cd151be33c7c8dd57c895a66086c3c8e0b54d2fa493407e0d9646b2bd9fc29a94fd3663a5332e6a', 
        ipAndPort='127.0.0.1:57266', 
        agency='agency', 
        topic=[ 
            _block_notify_1 
        ], 
        node='node1' 
    }, 
    PeerInfo{ 
        nodeID='862f26d9681ed4c12681bf81a50d0b8c66dd5b6ee7b0b42a4af12bb37b1ad2442f7dcfe8dac4e737ce9fa46aa94d904e8c474659eabf575d6715995553245be5', 
        ipAndPort='127.0.0.1:30303', 
        agência='agência', 
        tópico=[ 

        ],
        nó='nó3' 
    } 
]
[grupo:1]>

Implantar e invocar contratos

Para facilitar a experiência rápida do usuário, alguns exemplos de contratos simples são incorporados ao console do console. Meu diretório raiz é fisco, então meu caminho aqui é: fisco/console/contracts/solidity, e usamos o HelloWorld.sol dentro como Exemplos neste capítulo

O conteúdo do contrato HelloWorld é o seguinte:

solidez de pragma>=0,4,24 <0,6,11;

contrato HelloWorld {     string nome;

    constructor() public {         name = "Olá, Mundo!";     }

    função get() public view retorna (string de memória) {         nome de retorno;     }

    função set(string memory n) public {         name = n;     } }


implantar contrato

# Digite o seguinte comando no console para retornar o endereço do contrato se a implantação for bem-sucedida 
[group:1]> deploy HelloWorld 
transaction hash: 0xd0305411e36d2ca9c1a4df93e761c820f0a464367b8feb9e3fa40b0f68eb23fa 
contract address:0xb3c223fc0bf66469 59f254ac 4e4a7e355b50a344

contrato de chamada

# Veja a altura atual do bloco 
[grupo:1]> getBlockNumber 
1 # 
Chame 

a interface get para obter a variável de 
nome ----- --------------------------------------------- ----- ---------------------------------- 
Código de retorno: 0 
descrição: transação executada com sucesso 
Mensagem de retorno : Sucesso 
--- --------------------------------------------- ----- ---------------------------------------- 
Valores de retorno: 
[ 
    " Alô, Mundo!" 
] 
-------------------------------------------- ------ ------------------------------------------- 
# Veja a altura atual do bloco, A altura do bloco permanece inalterada, porque a interface get não altera o status do ledger 
[grupo:1]> getBlockNumber 
1


# 调用set设置name 
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 set "Hello, FISCO BCOS" 
transaction hash: 0x7e742c44091e0d6e4e1df666d957d12311662 2ab90b718699ce50f54ed791f6e 
------------------------- -------------------------------------------------- ------------------ 
status da transação: 0x0 
descrição: transação executada com sucesso 
------------------------ -------------------------------------------------- -------------------- 
Mensagem de recebimento 
de saída : Sucesso 
Mensagem de retorno: Sucesso 
--------------------- -------------------------------------------------- ---------------------- 
Registros de eventos 
Evento: {} 
[grupo:1]> getBlockNumber 
2
 
# Verifique novamente a altura atual do bloco, o aumento da altura do bloco significa que o bloco foi produzido e o estado do ledger mudou
 
# Chame a interface get para obter a variável de nome e verifique se a configuração é válida 
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get 
---------------- ----- --------------------------------------------- ----- ---------------------- 
Código de retorno: 0 
descrição: transação executada com sucesso 
Mensagem de retorno: Sucesso 
---------- ----- --------------------------------------------- ----- ---------------------------- 
Valores de retorno: 
[ 
    "Hello,FISCO BCOS" 
] 
------ ----- --------------------------------------------- ----- -------------------------------- 

# Sair do console 
[group:1]> quit

Acho que você gosta

Origin blog.csdn.net/LforikQ/article/details/130942409
Recomendado
Clasificación