Audite a blockchain do Monero

Responsável:

Código fonte
O mais importante, o tal do "talk is cheap, show me the CODE". Segue:
https://github.com/area31/audit-xmr
Mais infos no X:
https://x.com/coffnix/status/1906320712349925854
Auditoria do Supply do Monero com audit-xmr
O audit-xmr é um conjunto de ferramentas open-source escrito em C++ que permite a auditoria independente do suprimento (supply) da criptomoeda Monero (XMR). Desenvolvido para garantir a integridade da emissão de moedas, ele se conecta a um nó Monero via interface RPC (Remote Procedure Call) e analisa cada bloco da blockchain para verificar se as recompensas de mineração (transações coinbase) estão consistentes com as regras do protocolo.
O projeto é essencial para a comunidade Monero, que valoriza privacidade e descentralização, oferecendo uma maneira transparente de validar a supply sem depender de exploradores centralizados ou terceiros.
Objetivos e Importância
O principal objetivo do audit-xmr é detectar fraudes como emissões indevidas ou manipulações de recompensa, capacitando:
- Operadores de nós a auditarem suas instâncias;
- Auditores independentes a verificarem nós de terceiros;
- Pesquisadores e entusiastas a analisarem a integridade da supply do Monero sem confiar em terceiros.
Componentes do Projeto
- audit-xmr: Audita blocos em massa e salva resultados num CSV.
- audit-xmr-check: Revalida os dados do CSV contra um outro node de Monero via RPC.
- Módulos auxiliares: Comunicação RPC (rpc.cpp/hpp), logging (log.cpp/hpp), multithread (mutex, threads), configuração e scripts de build.
Arquitetura Geral
O código é modular, dividido em arquivos que separam responsabilidades específicas:
- audit.hpp & audit.cpp: Contêm a lógica central da auditoria de blocos.
- rpc.hpp & rpc.cpp: Gerenciam a comunicação com o nó Monero via RPC.
- audit-xmr.cpp: Coordena a auditoria em larga escala com suporte a múltiplas threads.
- audit-xmr-check.cpp: Valida resultados anteriores.
- log.hpp & log.cpp: Registram atividades detalhadas para depuração.
- Arquivos de suporte como audit-xmr.cfg, build_cmake.sh, build_gpp.sh e CMakeLists.txt.
Estrutura Técnica (AuditResult)
A estrutura `AuditResult` armazena os dados auditados:
- height: Altura do bloco.
- hash: Hash do bloco.
- real_reward: Recompensa oficial extraída do cabeçalho.
- coinbase_outputs: Soma das saídas da transação coinbase.
- total_mined: Total minerado (equivalente à coinbase_outputs).
- issues: Lista de problemas detectados (ex.: "Reward != CoinBase").
- status: "OK" ou "Discrepância".
Como Funciona
Etapa 1: Coleta e Verificação (audit-xmr)
- Conexão ao Nó: Usa `rpc_url` do arquivo de configuração ou argumento `--server`.
- Escopo:
- `--block <altura>`: bloco único; - `--range <início> <fim>`: intervalo; - Sem argumentos: toda a blockchain.
- Para cada bloco:
- Busca via `get_block_info`; - Extrai `real_reward` do cabeçalho; - Calcula `coinbase_outputs` via vout da miner_tx; - Valida integridade de `vin` (entrada única e válida); - Aplica tolerância de 1e9 unidades atômicas (0.001 XMR); - Escreve em CSV e log detalhado.
Etapa 2: Validação Independente (audit-xmr-check)
- Lê o CSV gerado;
- Refaz auditoria via RPC;
- Compara os campos;
- Reporta "OK" ou "ERRO" com detalhes.
Detecção de Fraudes
O sistema identifica e reporta automaticamente:
- Reward != CoinBase: Recompensa não bate com as saídas.
- Reward != TotalMined: Divergência entre recompensa e mineração (coinbase_outputs).
- CoinBase inválida: Estrutura incorreta da transação coinbase.
Essas discrepâncias podem indicar nós maliciosos ou corrupção de dados.
Compilação e Execução
Build
root # ./build_gpp.sh
Ou:
root # ./build_cmake.sh
Configuração
Exemplo de `audit-xmr.cfg`:
root # audit-xmr.cfg rpc_url=http://192.168.200.252:18081/json_rpc threads=8 output_dir=out max_retries=99 timeout=30 server=192.168.200.252
Auditoria
Auditar de 0 até 500000:
root # ./audit-xmr --range 0 500000 --threads max
Validação
Verificar o CSV:
root # ./audit-xmr-check out/auditoria_monero.csv
Resultados
- CSV: altura, hash, recompensa real, coinbase_outputs, total_mined, problemas, status.
- Log: audit_log.txt com depuração detalhada.
Aplicabilidade Prática
- Auditoria Local: Verifique se seu próprio nó está íntegro.
- Auditoria Cruzada: Compare resultados entre diferentes nós.
- Supply Independente: Valide a emissão total sem confiar em terceiros.
- Ambiente Offline: Use apenas o CSV em ambientes isolados.
Benefícios para a Comunidade Monero
- Transparência: Qualquer usuário pode verificar o supply.
- Descentralização: Sem depender de sites ou empresas.
- Segurança: Detecta comportamentos anômalos em nós.
- Performance: Suporte completo a multithreading.
Conclusão
O audit-xmr é uma das ferramentas mais completas para auditoria da supply do Monero. Ele permite auditoria independente, precisa e reproduzível, oferecendo à comunidade um recurso essencial contra fraudes.
Liberdade requer verificação, não confiança.
Próximos Passos
- Agendar auditorias com cron:
0 0 * * * /caminho/audit-xmr --range 0 $(/caminho/audit-xmr --block-height) >> /caminho/audit.log 2>&1
- Contribuir com melhorias no repositório open-source.