defi-amm-security
Faz seu agente verificar a segurança de códigos de finanças (AMM, pools). Ele analisa riscos como ataques e manipulação. Essencial para quem escreve ou audita contratos financeiros.
O que ela faz
Este guia ajuda a tornar seguros contratos inteligentes de finanças (DeFi) que lidam com trocas de criptomoedas (AMM) e pools de liquidez. Ele verifica problemas comuns que podem levar a perdas de dinheiro.
Quando usar
- ✓Ao criar um novo contrato para troca de criptomoedas.
- ✓Ao revisar um contrato existente para encontrar falhas de segurança.
- ✓Ao adicionar novas funções de controle a um protocolo DeFi.
Exemplo do que pedir para a IA
“Verifique este contrato de pool de liquidez para garantir que ele não seja vulnerável a ataques de reentrância ou manipulação de preços.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Funciona como uma lista de verificação detalhada. Você compara seu código com exemplos seguros e padrões recomendados para evitar vulnerabilidades conhecidas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill defi-amm-securityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/skills/defi-amm-security/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Segurança de AMMs em DeFi
Padrões de vulnerabilidade críticos e implementações reforçadas para contratos AMM em Solidity, cofres de LP e funções de swap.
Quando Usar
- Ao escrever ou auditar um contrato AMM ou de pool de liquidez em Solidity
- Ao implementar fluxos de swap, depósito, saque, mint ou burn que gerenciam saldos de tokens
- Ao revisar qualquer contrato que use
token.balanceOf(address(this))em cálculos de participação ou reserva - Ao adicionar definidores de taxas, pausadores, atualizações de oráculo ou outras funções administrativas a um protocolo DeFi
Como Funciona
Use isto como uma lista de verificação mais uma biblioteca de padrões. Revise cada ponto de entrada do usuário em relação às categorias abaixo e prefira os exemplos reforçados em vez de variantes criadas manualmente.
Segurança de Execução
Os comandos shell nesta habilidade são exemplos de auditoria local. Execute-os apenas em um checkout confiável ou sandbox descartável, e não insira nomes de contrato não confiáveis, caminhos, URLs RPC, chaves privadas ou flags fornecidas pelo usuário em comandos shell. Pergunte antes de instalar ferramentas ou executar trabalhos longos de fuzzing/análise estática que possam consumir recursos locais ou pagos significativos.
Nunca inclua segredos, chaves privadas, frases de semente, tokens de API ou credenciais de assinatura da mainnet em exemplos de comandos, logs ou relatórios.
Exemplos
Reentrância: impor ordem CEI
Vulnerável:
function withdraw(uint256 amount) external {
require(balances[msg.sender] >= amount);
token.transfer(msg.sender, amount);
balances[msg.sender] -= amount;
}
Seguro:
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
using SafeERC20 for IERC20;
function withdraw(uint256 amount) external nonReentrant {
require(balances[msg.sender] >= amount, "Insufficient");
balances[msg.sender] -= amount;
token.safeTransfer(msg.sender, amount);
}
Não escreva sua própria guarda quando uma biblioteca reforçada existir.
Ataques de doação ou inflação
Usar token.balanceOf(address(this)) diretamente para cálculos de participação permite que atacantes manipulem o denominador enviando tokens para o contrato fora do caminho pretendido.
// Vulnerable
function deposit(uint256 assets) external returns (uint256 shares) {
shares = (assets * totalShares) / token.balanceOf(address(this));
}
// Safe
uint256 private _totalAssets;
function deposit(uint256 assets) external nonReentrant returns (uint256 shares) {
uint256 balBefore = token.balanceOf(address(this));
token.safeTransferFrom(msg.sender, address(this), assets);
uint256 received = token.balanceOf(address(this)) - balBefore;
shares = totalShares == 0 ? received : (received * totalShares) / _totalAssets;
_totalAssets += received;
totalShares += shares;
}
Acompanhe a contabilidade interna e meça os tokens realmente recebidos.
Manipulação de oráculo
Preços pontuais são manipuláveis por flash loans. Prefira TWAP.
uint32[] memory secondsAgos = new uint32[](2);
secondsAgos[0] = 1800;
secondsAgos[1] = 0;
(int56[] memory tickCumulatives,) = IUniswapV3Pool(pool).observe(secondsAgos);
int24 twapTick = int24(
(tickCumulatives[1] - tickCumulatives[0]) / int56(uint56(30 minutes))
);
uint160 sqrtPriceX96 = TickMath.getSqrtRatioAtTick(twapTick);
Proteção contra slippage
Todo caminho de swap precisa de slippage fornecido pelo chamador e um prazo.
function swap(
uint256 amountIn,
uint256 amountOutMin,
uint256 deadline
) external returns (uint256 amountOut) {
require(block.timestamp <= deadline, "Expired");
amountOut = _calculateOut(amountIn);
require(amountOut >= amountOutMin, "Slippage exceeded");
_executeSwap(amountIn, amountOut);
}
Cálculos de reserva seguros
import {FullMath} from "@uniswap/v3-core/contracts/libraries/FullMath.sol";
uint256 result = FullMath.mulDiv(a, b, c);
Para cálculos de reserva grandes, evite a * b / c ingênuos quando houver risco de overflow.
Controles administrativos
import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
contract MyAMM is Ownable2Step {
function setFee(uint256 fee) external onlyOwner { ... }
function pause() external onlyOwner { ... }
}
Prefira aceitação explícita para transferência de propriedade e restrinja cada caminho privilegiado.
Lista de Verificação de Segurança
- Pontos de entrada expostos à reentrância usam
nonReentrant - A ordem CEI é respeitada
- Cálculos de participação não dependem de
balanceOf(address(this))brutos - Transferências ERC-20 usam
SafeERC20
…
Perguntas frequentes
O que é 'reentrância'?
É um tipo de ataque onde um contrato chama outro contrato, que por sua vez chama o primeiro de volta antes que a primeira chamada seja concluída, podendo roubar fundos.
O que é 'manipulação de slippage'?
É quando o preço de uma negociação muda inesperadamente entre o momento em que você inicia a negociação e o momento em que ela é concluída, resultando em um valor recebido menor do que o esperado.
O que são 'contratos inteligentes de AMM'?
São programas em blockchain que permitem a troca automática de criptomoedas, como Uniswap ou PancakeSwap, sem a necessidade de um intermediário.
Detalhes
Descrição original do autor
Security checklist for Solidity AMM contracts, liquidity pools, and swap flows. Covers reentrancy, CEI ordering, donation or inflation attacks, oracle manipulation, slippage, admin controls, and integer math. Use when auditing or writing Solidity AMM, liquidity pool, or swap code.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #174
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
security-and-hardening
Protege seu código contra ataques e falhas de segurança. Garante que dados sensíveis estejam seguros e que o sistema seja confiável.
addyosmani/agent-skills
luna
Faz seu agente verificar se o código está seguro e funcionando corretamente. Ele procura por erros e falhas que possam causar problemas.
sickn33/agentic-awesome-skills
anti-reversing-techniques
Ajuda seu agente a analisar técnicas de segurança em programas. Permite entender como softwares se protegem contra cópias ou alterações.
sickn33/agentic-awesome-skills