Este repositório contém o contrato inteligente ValidatorSelection, responsável pelo gerenciamento dinâmico, monitoramento de disponibilidade (liveness) e rotação automática de validadores na Rede Blockchain Brasil (RBB).
O objetivo principal deste contrato é garantir a saúde e a performance da rede, monitorando quais validadores estão produzindo blocos e removendo automaticamente aqueles que ficarem inativos (offline) por um período superior ao limiar configurado.
O sistema classifica os validadores em dois grupos:
- Validadores Elegíveis (
ElegibleValidators): Nós aprovados pela governança que possuem permissão para validar, mas podem estar desligados ou em manutenção. - Validadores Operacionais (
OperationalValidators): O subconjunto de nós elegíveis que está ativamente participando do consenso e propondo blocos.
A função monitorsValidators() atua como o mecanismo de verificação da rede.
- Ela identifica o
block.coinbase(autor do bloco atual). - Atualiza o registro
lastBlockProposedBypara esse validador. - Verifica se o ciclo atual (
blocksBetweenSelection) foi concluído.
Quando o bloco atual atinge o nextSelectionBlock, o contrato executa a lógica de saneamento:
- Itera sobre todos os Validadores Operacionais.
- Verifica a diferença entre o bloco atual e o último bloco proposto pelo validador.
- Se a diferença for maior que
blocksWithoutProposeThreshold, o validador é considerado inativo. - Trava de Segurança: O validador inativo é removido da lista operacional apenas se a rede mantiver, no mínimo, 4 validadores ativos (requisito para tolerância a falhas em consenso QBFT).
O contrato permite que administradores de uma organização específica gerenciem seus próprios nós sem depender de uma votação de governança central para operações cotidianas:
- Um administrador da "Org A" pode adicionar ou remover um nó da "Org A" da lista de operacionais (desde que o nó já seja elegível).
- Isso é garantido pelo modificador
onlySameOrganization, que valida oorgIddo remetente e do nó alvo no contratoNodeRules.
Os seguintes parâmetros podem ser ajustados via governança:
| Parâmetro | Descrição |
|---|---|
blocksBetweenSelection |
O intervalo de blocos (época) entre cada execução da lógica de verificação/remoção. |
blocksWithoutProposeThreshold |
O número máximo de blocos que um validador pode ficar sem propor antes de ser marcado para remoção. |
nextSelectionBlock |
O número do bloco onde a próxima verificação de seleção ocorrerá. |
O contrato implementa controle de acesso granular:
onlyGovernance: Acesso irrestrito. Pode alterar parâmetros globais e forçar a adição/remoção de qualquer validador.onlyActiveAdmin: Requer que o chamador tenha a roleGLOBAL_ADMIN_ROLEouLOCAL_ADMIN_ROLEe esteja ativo noAccountRules.onlySameOrganization: Garante que o administrador pertença à mesma organização do nó que está sendo manipulado.
Abaixo, um diagrama simplificado do fluxo da função monitorsValidators:
graph TD
A[Chamada monitorsValidators] --> B{Já registrou este bloco?}
B -- Sim --> C[Fim]
B -- Não --> D[Registra block.coinbase]
D --> E{É bloco de Seleção?}
E -- Não --> C
E -- Sim --> F[Verifica Inatividade]
F --> G{Tempo s/ propor > Threshold?}
G -- Sim --> H[Marca para Remoção]
H --> I{Restarão >= 4 Validadores?}
I -- Sim --> J[Remove Validador Operacional]
I -- Não --> K[Mantém Validador por Segurança]
J --> L[Atualiza nextSelectionBlock]
K --> L
L --> C