# Executar um Nó de Validador

## O que é um nó de validador?

Para se tornar um validador da Chiliz Chain, é necessário ter uma configuração de hardware específica e ser capaz de executar um nó de Validador. Um nó é um sistema de computador configurado especificamente para validar transações antes de comprometê-las na Chiliz Chain.

## Lançando o nó de Validador

Para executar um nó de Validador, você precisa definir os seguintes parâmetros:

*TL;DR você precisa executar o seguinte comando (certifique-se de atualizar o parâmetro `nodekeyhex`!)*

```bash
docker run \
-v $(pwd)/my-datadir:/datadir \
--name ccv2-node \
-p 30303:30303 \
chilizchain/ccv2-geth:latest \
--mine \
--chiliz \ # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
--datadir=/datadir \
--password=/datadir/password.txt \
--allow-insecure-unlock \
--unlock=f9100d364b45a8fdbd178ed1edfe632cc7eb2ecc \
--syncmode=full \
--gcmode=archive \
--miner.etherbase=REPLACE_WITH_VALIDATOR_ADDRESS \
--nodekeyhex=2668f377e69de_EXAMPLE_REPLACE_WITH_YOUR_VALUE_c88bea3e337446ed73 \
--nat=extip:140.250.140.250 \ # Este é apenas um exemplo.
--verbosity=4
```

## Pré-requisitos

Para executar o nó de validador da Chiliz Chain, você deve ter o Docker Engine instalado em sua máquina ou servidor.

Portanto, conclua a instalação do Docker antes de prosseguir.

### Requisitos do sistema

Você precisará de um servidor dedicado para executar seu nó de validador. Este servidor deve ter pelo menos 4GB de RAM, 2 núcleos de CPU e um disco de estado sólido (SSD) para desempenho ideal. Recomenda-se ter pelo menos 300 GB de espaço livre em disco para sincronizar com a cadeia. Você pode usar um provedor de nuvem como Amazon Web Services, Google Cloud Platform ou Microsoft Azure, ou pode configurar seu próprio servidor.

## Imagens Docker pré-construídas

Veja ou use as imagens Docker pré-construídas do repositório público Chiliz Chain 2.0 no Docker hub.

## Lançando um nó de Validador e iniciando a sincronização

O ponto de partida recomendado para executar um nó de validador da Chiliz Chain é com o volume de dados montado. Se este método for usado para recriar um contêiner Docker, os dados serão armazenados no diretório e podem ser facilmente reutilizados ou clonados para outro validador.

### Criar o endereço do validador

Crie o nó de validador com o seguinte comando:

```sh
docker run --rm -ti \
-v $(pwd)/keystore:/root/.ethereum/keystore/ \
chilizchain/ccv2-geth:latest \
--chiliz \  # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
account new

```

Você precisará digitar uma senha para o arquivo da chave secreta.

* **Endereço público da chave**: Ao executar o validador, este endereço será usado para definir o parâmetro --unlock.

```sh
docker run \
-v $(pwd)/my-datadir:/datadir \
--name ccv2-node \
-p 30303:30303 \
chilizchain/ccv2-geth:latest \
--chiliz \ # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
...
--nodekeyhex=2668f377e69de_EXAMPLE_REPLACE_WITH_YOUR_VALUE_c88bea3e337446ed73 # Este é apenas um exemplo.
...
```

* **Caminho do arquivo de chave secreta**: Este arquivo precisa ser movido para o diretório "keystore" dentro do datadir $(pwd)/my-datadir que você criou nos passos anteriores, então o caminho final do arquivo será "$(pwd)/my-datadir/keystore/UTC–(TIMESTAMP)-(ADDRESS)". NÃO altere o nome do arquivo.
* **Senha**: A senha que você digitou durante a execução do comando anterior precisa ser armazenada em um arquivo: $(pwd)/my-datadir/password.txt Este arquivo será usado para definir o parâmetro --password ao executar o nó de validador. Não se esqueça de que todos os arquivos no caminho do host $(pwd)/my-datadir estarão localizados no contêiner no diretório /datadir, por isso o parâmetro de senha deve ser definido como no exemplo a seguir:

```sh
docker run \
-v $(pwd)/my-datadir:/datadir \
--name ccv2-node \
-p 30303:30303 \
chilizchain/ccv2-geth:latest \
--chiliz \ # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
...
--password=/datadir/password.txt
...

```

É muito importante ter as seguintes recomendações em mente:

* Você pode compartilhar seu endereço público com qualquer pessoa. Outros precisam dele para interagir com você.
* Você NUNCA deve compartilhar a chave secreta com ninguém! A chave controla o acesso aos seus fundos!
* Você deve FAZER BACKUP do seu arquivo de chave! Sem a chave, é impossível acessar os fundos da conta!
* Você deve LEMBRAR da sua senha! Sem a senha, é impossível descriptografar a chave!

### Gerar a chave do nó de validador

*Esta seção é opcional.*

Recomenda-se gerar uma string hexadecimal aleatória para o nó.

Isso é útil para rastreabilidade nos logs e para evitar problemas de conexão com a cadeia.

Para isso, você pode usar <https://www.browserling.com/tools/random-hex> e gerar uma chave hexadecimal com 64 caracteres por nó.

Ao executar um nó de validador, você pode definir --nodekeyhex com esse valor. Isso garantirá que, ao reiniciar o nó, ele tenha o mesmo endereço de nó (chamado "endereço enode") e permitirá uma depuração futura mais fácil.

```sh
docker run \
-v $(pwd)/my-datadir:/datadir \
--name ccv2-node \
-p 30303:30303 \
chilizchain/ccv2-geth:latest \
--chiliz \ # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
...
--nodekeyhex=2668f377e69de_EXAMPLE_REPLACE_WITH_YOUR_VALUE_c88bea3e337446ed73 # Este é apenas um exemplo.
...

```

## Definir o mecanismo de mapeamento de porta NAT

De acordo com a documentação do Geth, o parâmetro --nat tem diferentes opções: any, none, upnp, pmp e extip:\<IP>. O padrão é any. Recomendamos usar extip:\<IP>, onde IP é o IPv4 público onde o validador está sendo lançado.

```sh
docker run \
-v $(pwd)/my-datadir:/datadir \
--name ccv2-node \
-p 30303:30303 \
chilizchain/ccv2-geth:latest \
--chiliz \ # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
...
--nat=extip:140.250.140.250 # Este é apenas um exemplo.
...

```

## Definir a verbosidade

Para uma depuração mais profunda, a verbosidade de log pode ser definida como:

* 0=silent
* 1=error
* 2=warn
* 3=info
* 4=debug
* 5=detail

O valor padrão para o parâmetro --verbosity é 3. Recomendamos usar 4.

```sh
docker run \
-v $(pwd)/my-datadir:/datadir \
--name ccv2-node \
-p 30303:30303 \
chilizchain/ccv2-geth:latest \
--chiliz \ # para Chiliz Mainnet. Use --spicy para Spicy Testnet.
...
--verbosity=4 # Este é apenas um exemplo.
...

```
