Communitygithub.com

Segurança de AMM DeFi

Checklist de segurança para contratos Solidity de AMM, pools de liquidez e fluxos de swap. Aborda reentrância, ordenação CEI, ataques de doação ou inflação, manipulação de oráculo, slippage, controles administrativos e matemática de inteiros. Use ao auditar ou escrever código Solidity de AMM, pool de liquidez ou swap.

O que é Segurança de AMM DeFi?

Esta skill fornece um checklist de segurança e exemplos de implementação robusta para contratos Solidity de Automated Market Makers (AMMs), vaults de liquidez e funções de swap. Ela cobre padrões críticos de vulnerabilidade, como reentrância, ataques de doação/inflação (manipulação de saldo), manipulação de oráculo (preço spot), slippage, controle de acesso administrativo e estouro de inteiro. A skill recomenda o uso de bibliotecas auditadas (OpenZeppelin, SafeERC20, FullMath) e padrões como CEI (Checks-Effects-Interactions), TWAP (preço médio ponderado no tempo) e mecanismos de proteção como ReentrancyGuard. É útil para desenvolvedores e auditores que trabalham com protocolos DeFi em Solidity, oferecendo código vulnerável vs. seguro, e um checklist final para revisão. As ferramentas de auditoria mencionadas incluem Slither, Echidna e Forge para testes de fuzzing. A skill enfatiza a não utilização de saldos brutos de token em matemática de shares e a medição de tokens efetivamente recebidos em depósitos.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/defi-amm-security

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Segurança de AMM DeFi faz?

Padrões críticos de vulnerabilidade e implementações robustas para contratos Solidity de AMM, vaults de LP e funções de swap.

Quando Usar

  • Escrevendo ou auditando um contrato Solidity de AMM ou pool de liquidez
  • Implementando fluxos de swap, depósito, retirada, mint ou burn que mantêm saldos de tokens
  • Revisando qualquer contrato que use token.balanceOf(address(this)) em matemática de shares ou reservas
  • Adicionando setters de taxa, pausers, atualizações de oráculo ou outras funções administrativas a um protocolo DeFi

Como Funciona

Use isto como um checklist combinado com uma biblioteca de padrões. Revise cada ponto de entrada do usuário em relação às categorias abaixo e prefira os exemplos robustos em vez de variantes feitas manualmente.

Segurança de Execução

Os comandos de shell nesta skill são exemplos locais de auditoria. Execute-os apenas em um checkout confiável ou sandbox descartável, e não insira nomes de contrato, caminhos, URLs de RPC, chaves privadas ou flags fornecidas pelo usuário não confiáveis em comandos de 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, seed phrases, tokens de API ou credenciais de assinatura da mainnet em exemplos de comando, logs ou relatórios.

Exemplos

Reentrância: aplicar ordenação 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, "Insuficiente");
    balances[msg.sender] -= amount;
    token.safeTransfer(msg.sender, amount);
}

Não escreva seu próprio guard quando uma biblioteca auditada existir.

Ataques de doação ou inflação

Usar token.balanceOf(address(this)) diretamente para matemática de shares permite que atacantes manipulem o denominador enviando tokens para o contrato fora do caminho pretendido.

// Vulnerável
function deposit(uint256 assets) external returns (uint256 shares) {
    shares = (assets * totalShares) / token.balanceOf(address(this));
}
// Seguro
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;
}

Mantenha uma contabilidade interna e meça os tokens efetivamente recebidos.

Manipulação de oráculo

Preços spot são manipuláveis por empréstimos relâmpago. 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 deadline.

function swap(
    uint256 amountIn,
    uint256 amountOutMin,
    uint256 deadline
) external returns (uint256 amountOut) {
    require(block.timestamp <= deadline, "Expirado");
    amountOut = _calculateOut(amountIn);
    require(amountOut >= amountOutMin, "Slippage excedido");
    _executeSwap(amountIn, amountOut);
}

Matemática segura de reservas

import {FullMath} from "@uniswap/v3-core/contracts/libraries/FullMath.sol";

uint256 result = FullMath.mulDiv(a, b, c);

Para grandes operações com reservas, evite a * b / c ingênuo quando houver risco de estouro.

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 bloqueie todo caminho privilegiado.

Checklist de Segurança

  • Pontos de entrada expostos a reentrância usam nonReentrant
  • A ordenação CEI é respeitada
  • A matemática de shares não depende de balanceOf(address(this)) bruto
  • Transferências ERC-20 usam SafeERC20
  • Depósitos medem tokens efetivamente recebidos
  • Leituras de oráculo usam TWAP ou outra fonte resistente a manipulação
  • Swaps exigem amountOutMin e deadline
  • Matemática de reservas suscetível a estouro usa primitivas seguras como mulDiv
  • Funções administrativas são controladas por acesso
  • Existe pausa de emergência e ela é testada
  • Análise estática e fuzzing são executados antes da produção

Ferramentas de Auditoria

pip install slither-analyzer
slither . --exclude-dependencies

echidna-test . --contract YourAMM --config echidna.yaml

forge test --fuzz-runs 10000

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Habilidades Relacionadas