Diretrizes para auditoria de protocolos de participação

Diretrizes para auditoria de protocolos de participação

Tempo de leitura: 6 minutos

Neste blog, descrevemos o conceito de protocolos de staking de liquidez e diretrizes de auditoria para protocolos de staking. As diretrizes abrangem uma variedade de pontos vulneráveis, como mecanismos de retirada, erros de arredondamento, chamadas externas, lógica de taxas, loops, estruturas, duração de staking etc. .

O que é Stake de Liquidez?

A aposta de liquidez permite que os usuários apostem em suas participações em criptomoedas e ganhem recompensas sem sacrificar a liquidez. Em vez de bloquear suas moedas por um período fixo, os usuários podem receber um token líquido que representa seus ativos apostados. Este token pode ser negociado ou usado como qualquer outra criptomoeda, permitindo que os usuários usem seus ativos como quiserem enquanto ainda ganham recompensas de apostas.

Diretrizes para auditoria de protocolos de piquetagem PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Por exemplo, você tem 100 ETH que deseja apostar na rede Ethereum. Em vez de bloquear seu ETH por um período fixo, você pode usar um serviço de liquidez como o Lido para apostar seu ETH e receber um token líquido chamado stETH em troca. Com stETH, você ainda pode negociar ou usar seu ETH apostado enquanto ganha recompensas de apostas.

Vamos começar com a auditoria de contratos de staking:

Examine todas as especificações de auditoria disponíveis antes de começar com o código do contrato. Pode ser na forma de um white paper, arquivos README ou qualquer outra coisa. Isso lhe dará uma ideia do que o código do contrato conterá.

Ao consultar o documento de especificação de auditoria para o contrato de estaqueamento, procure por estes pontos:

  • Tipos de Taxas baseadas e seus cálculos.
  • Mecanismo de recompensa para tokens apostados
  • Poderes do proprietário
  • O contrato conterá ETH?
  • Quais tokens o contrato conterá?
  • Contrato original do qual é bifurcado

Verifique se as especificações correspondem ao código. Comece com taxas e tokennomics, seguidos pela validação da autoridade do proprietário. Verifique se todas as recompensas e valores de taxas estão de acordo com a documentação.

Pontos vulneráveis ​​para procurar?

1. Mecanismo de Retirada de Recompensa:

Verifique se o mecanismo de recompensas de token apostado está implementado corretamente e se as recompensas são distribuídas de forma justa e proporcional a todos os apostadores. Os projetos podem distribuir recompensas de duas maneiras: automaticamente, periodicamente ou mediante solicitação dos próprios usuários. Uma função de retirada pode ser implementada e personalizada de acordo com a lógica de negócios do protocolo.
Abaixo estão alguns pontos de verificação:

  • Verifique se algum usuário pode sacar mais do que sua recompensa + valor apostado.
  • Verifique se há estouro/subfluxo no cálculo do valor
  • Verifique se determinados parâmetros podem ter um impacto negativo nas recompensas durante o cálculo.
  • Se block.timestamp ou block.number for usado nesta função. Verifique se ele pode ser explorado de alguma forma.

2. Lógica de taxas:

Se o depósito e a retirada estiverem sujeitos a alguma taxa, verifique se nenhum usuário pode ignorar a taxa. Além disso, fique atento a possíveis problemas de transbordamento ou subfluxo. Somente o administrador ou proprietário deve ser autorizado a alterar as configurações de taxas. Verifique também se foi estabelecido um limite para taxas máximas, evitando que o administrador estabeleça um valor excessivamente alto.

3. Mecanismo de Cunhagem/Queima do Token LP:

Verifique se os mecanismos de cunhagem e queima foram implementados corretamente. Uma função de gravação deve reverter todas as alterações de estado feitas por uma função mint. Além disso, é crucial verificar se os usuários recebem a quantidade adequada de tokens durante a primeira aposta, quando o pool está vazio.

A lógica das funções de cunhagem e gravação pode ser verificada matematicamente para descobrir qualquer vulnerabilidade oculta. Além disso, a oferta total de tokens LP cunhados não deve exceder os ativos apostados.

4. Erros de Arredondamento:

Mesmo que alguns pequenos erros de arredondamento sejam normalmente inevitáveis ​​e não sejam uma preocupação, eles podem crescer significativamente quando é possível multiplicá-los. Procure casos extremos em que se possa lucrar com os erros de arredondamento apostando e desfazendo repetidamente.

Para determinar se os erros de arredondamento podem se acumular em um valor substancial durante um longo período de tempo, podemos calcular matematicamente o intervalo de possíveis erros de arredondamento.

5. Duração da aposta:

Certifique-se de que os cálculos de duração da aposta no contrato estejam alinhados com a lógica de negócios especificada. Verifique se os usuários não podem resgatar recompensas antes que a duração da aposta termine ignorando as verificações de duração. Além disso, verifique se a duração da aposta pode ser explorada por um invasor para obter mais recompensas.

6. Chamadas Externas e Manipulação de Tokens:

A maioria das chamadas externas será para os contratos de token. Portanto, devemos determinar com quais tipos de tokens o contrato de staking irá lidar. É essencial verificar se há erros e ataques de reentrância nas chamadas externas. Tokens deflacionários ou tokens com taxas de transferência, como Safemoon, podem representar um problema se sua lógica não for implementada corretamente.

7. Verificações de Manipulações de Preços:

A manipulação de preços por meio de um empréstimo instantâneo é um dos hacks mais frequentes em projetos DeFi. Pode haver situações em que agentes mal-intencionados possam usar empréstimos instantâneos para manipular preços durante a aposta ou retirada de grandes quantidades de tokens. Revise cuidadosamente as funções de staking e unstaking para evitar cenários extremos que possam resultar em ataques de manipulação de preços baseados em empréstimos instantâneos e perda de fundos de outros usuários.

8. Algumas verificações adicionais:

  • Rotações: Se a lógica do contrato envolver looping de matrizes, é importante garantir que o limite de gás do bloco não seja excedido. Isso pode ocorrer quando o tamanho do array é muito grande, portanto, você deve investigar quais funções podem aumentar o tamanho do array e se algum usuário pode explorá-lo para causar um ataque DoS. Veja isso Denunciar.
  • Estruturas: Contratos de piquetagem usam o tipo struct para armazenar dados de usuário ou pool. Ao declarar ou acessar um struct dentro de uma função, é importante especificar se deve usar “memória” ou “armazenamento”. Pode nos ajudar a economizar um pouco de gasolina. Para mais informações, consulte para este artigo.
  • Frente: procure cenários em que agentes mal-intencionados possam antecipar qualquer transação a seu favor.
  • Verificações de Visibilidade de Função/Controle de Acesso: Qualquer função declarada como externa ou pública pode ser acessada por qualquer pessoa. Portanto, é importante garantir que nenhuma função pública possa realizar ações delicadas. É crucial verificar se o protocolo de staking implementou controles apropriados para impedir o acesso não autorizado às moedas apostadas e à infraestrutura do sistema.
  • Riscos de Centralização: É importante não dar ao proprietário poderes excessivos. Se o endereço do administrador for comprometido, poderá causar danos significativos ao protocolo. Verifique se os privilégios de proprietário ou administrador são apropriados e certifique-se de que o protocolo tenha um plano para lidar com situações em que as chaves privadas de um administrador vazam.
  • Tratamento de ETH/WETH: Os contratos geralmente incluem lógica específica para lidar com ETH. Por exemplo, quando msg.value > 0, um contrato pode converter ETH em WETH enquanto ainda permite que WETH seja recebido diretamente. Quando um usuário especifica WETH como a moeda, mas envia ETH com a chamada, isso pode quebrar certas invariantes e levar a um comportamento incorreto.

Até agora, discutimos os protocolos de liquidez e as diretrizes de auditoria para tais protocolos. Resumindo, o Liquidity staking permite que os usuários ganhem recompensas de staking sem sacrificar a liquidez. Descrevemos os pontos vulneráveis ​​nos contratos de aposta aos quais os auditores devem prestar atenção, como mecanismos de retirada, lógica de taxas, mecanismo de cunhagem/queima de token LP, erros de arredondamento, duração da aposta, chamadas externas e verificações de manipulação de preços. 

Recomendamos que os auditores examinem os documentos de especificações de auditoria, comparem as especificações com o código e verifiquem as taxas e a validação de tokennomics. Também recomendamos verificações adicionais, como loop em arrays, especificação de memória ou armazenamento para dados do tipo struct e cenários de execução inicial. Essas diretrizes serão úteis para auditar os protocolos de estaqueamento e ajudar a identificar possíveis bugs.


11 Visualizações

Carimbo de hora:

Mais de Quilhash