Apenas para fins educacionais; não constitui recomendação de investimento. Investimentos podem resultar em perdas.
Resposta direta
Monitore o caminho de controle de um sistema atualizável, além do endereço do proxy. Um alerta deve identificar quem pode autorizar e executar um upgrade, qualquer atraso obrigatório, as implementações antiga e nova e os calldata de inicialização. Após a execução, leia de forma independente a configuração on-chain e teste os comportamentos críticos.
O endereço do proxy e seus saldos podem permanecer iguais enquanto o código delegado altera permissões, taxas, contabilidade, pausas ou lógica de saque. Uma auditoria anterior não cobre automaticamente uma nova implementação nem sua inicialização.
Como funciona
Primeiro, identifique o padrão de proxy. O ERC-1967 define slots de armazenamento separados para eip1967.proxy.implementation, eip1967.proxy.beacon e o slot opcional eip1967.proxy.admin. Alterações diretas da implementação devem emitir Upgraded; mudanças do endereço do beacon, BeaconUpgraded; e mudanças do slot de administrador, AdminChanged. Em um proxy beacon, também chame implementation() no beacon, pois ele pode trocar sua implementação sem alterar o slot beacon do proxy.
Não deduza o modelo completo de autoridade pelo slot de administrador. Um proxy Transparent pode ser controlado por um ProxyAdmin, enquanto a autorização de upgrade UUPS é implementada no contrato lógico atual por meio de _authorizeUpgrade. Rastreie proprietários, papéis, limites de multisig, timelocks, governadores, caminhos de emergência e a capacidade de alterar esses controles.
Use assinaturas de eventos e leituras periódicas de estado. O ERC-1967 recomenda os eventos, mas não obriga toda implementação a emiti-los. Registre cadeia, bloco, transação, proxy, implementação ou beacon, hash do código em execução, executor e estado de controle relevante a partir de endpoints RPC independentes. Alerte sobre operações agendadas, canceladas e executadas e aguarde a política de confirmação ou finalidade escolhida para a cadeia antes de considerar o estado definitivo.
Exemplo
Um proxy de empréstimos é controlado por um multisig 3 de 5 por meio de um timelock de 24 horas. Quando um upgrade é agendado, o monitor registra o identificador da proposta, alvo, calldata, horário mínimo de execução, implementação atual, implementação proposta e situação da verificação do código-fonte. Os revisores comparam o código e os layouts de armazenamento, inspecionam a chamada de inicialização e verificam mudanças em papéis, chamadas externas, taxas, regras de pausa e caminhos de saque.
Após a execução, o monitor relê o slot ERC-1967 relevante, verifica o código implantado em execução e confere pós-condições esperadas, como versão da implementação, administradores ou detentores de papéis, estado de pausa, contabilidade dos ativos e prévia de saque somente para leitura. Um novo alerta é disparado se o endereço ou hash observado divergir da proposta revisada ou se a consulta periódica encontrar uma mudança não informada por evento.
Riscos
- Risco de controle: Um multisig nominal pode ser contornado por outro proprietário, papel, módulo, governador, chave de emergência ou timelock mutável. Siga cada caminho até os signatários finais e o atraso.
- Risco de código e armazenamento: Código não verificado, layouts incompatíveis, inicialização insegura ou dependência alterada podem corromper o estado ou conceder autoridade indevida. Valide o artefato exato implantado, não apenas uma branch ou o nome de uma auditoria.
- Risco de monitoramento: Um único RPC, indexador apenas de eventos, front-end ou explorador de blocos pode atrasar ou errar. Concilie eventos com armazenamento, bytecode, recibos de transação e estado do protocolo em fontes independentes.
- Risco de resposta: Um alerta sem responsável e procedimento testado pode chegar tarde demais. Defina quem revisa, pausa integrações, comunica ou sai durante o atraso e reconheça que aprovações apressadas e links não oficiais de recuperação acrescentam risco.
Procedimento mínimo:
- Inventarie cada proxy, beacon, implementação, administrador, papel e ponto de entrada de upgrade em cada cadeia.
- Salve uma referência válida de slots, hashes de código, estado de controle e resultados críticos somente para leitura.
- Alerte antes da execução quando o agendamento por governança ou timelock permitir e novamente na execução ou no cancelamento.
- Compare o alvo, calldata, implementação, bytecode, layout de armazenamento e estado pós-upgrade executados com a proposta revisada.
- Escale mudanças inesperadas, pós-condições com falha, ausência de verificação do código-fonte ou atraso reduzido ou contornado; não trate o endereço inalterado do proxy como prova de segurança.
Equívocos comuns
- Mito 1: “Monitorar
Upgradedé suficiente.” Mudanças na implementação do beacon e proxies fora do padrão podem exigir o monitoramento de outro contrato ou consultas de estado; concilie eventos com leituras diretas. - Mito 2: “O slot de administrador mostra quem controla todo upgrade.” O slot é opcional, e projetos Transparent, UUPS, beacon, de governança e personalizados colocam a autoridade em contratos e funções diferentes.
- Mito 3: “Código verificado ou auditoria anterior prova que o upgrade é seguro.” Verifique bytecode implantado, premissas do compilador e construtor, compatibilidade de armazenamento, inicialização, configuração e comportamento da versão exata.
Tópicos relacionados
- Risco de módulo multisig
- Contrato proxy
- Colisão de armazenamento do proxy
- Pausa emergencial do protocolo
- Contrato atualizável
Fontes
- ERC-1967: slots de armazenamento de proxy - Ethereum Improvement Proposals (acessado: 2026-08-21)
- Proxy - OpenZeppelin (acessado: 2026-08-21)
- Como escrever contratos atualizáveis - OpenZeppelin (acessado: 2026-08-21)
- Controle de acesso - OpenZeppelin (acessado: 2026-08-21)