
Colección de fragmentos de Solidity y scripts de Foundry para auditorías de seguridad de contratos inteligentes
evm-audit-helpers es una colección seleccionada de fragmentos de Solidity, scripts de Foundry y plantillas de pruebas diseñada para acelerar las auditorías de seguridad de contratos inteligentes en EVM. El repositorio agrupa bloques reutilizables para problemas de auditoría comunes como reentrancy, desajustes en el layout de almacenamiento y errores de optimización de gas, permitiendo que los auditores y desarrolladores se centren en la lógica en lugar del código repetitivo.
Objetivos clave:
| Categoría | Descripción | Archivos principales |
|---|---|---|
| Comprobadores de Reentrancy | Modificadores auxiliares, patrones nonReentrant y scripts de detección en tiempo de ejecución. | src/helpers/Reentrancy.sol, scripts/reentrancy_check.sol |
| Analizador de Layout de Almacenamiento | Utilidades para comparar slots de almacenamiento, generar diagramas de layout y detectar actualizaciones inseguras. | src/helpers/StorageLayout.sol, scripts/storage_analyzer.sol |
| Plantillas de Pruebas de Foundry | Suites de pruebas base que cubren vulnerabilidades comunes (control de acceso, aritmética, delegatecall, etc.). | test/templates/* |
| Auditorías de Gas y Opcodes | Scripts para perfilar el uso de gas y marcar opcodes costosos. | scripts/gas_profiler.sol |
| Ayudantes de Informes | Generadores de informes JSON/Markdown que pueden integrarse en paneles de CI. | scripts/report_generator.sol |
| Integración con CI | Ejemplo de flujo de trabajo de GitHub Actions para ejecuciones de auditoría automatizadas. | .github/workflows/ci.yml |
Todos los ayudantes están escritos para Solidity ^0.8.20 y son compatibles con Foundry (forge, cast).
# 1️⃣ Clonar el repositorio
git clone https://github.com/your-org/evm-audit-helpers.git
cd evm-audit-helpers
# 2️⃣ Instalar Foundry (si no está instalado)
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 3️⃣ Instalar dependencias
forge install
# 4️⃣ Ejecutar la suite de pruebas predeterminada (incluye comprobaciones de reentrancy, almacenamiento y gas)
forge test
Consejo: Añade
export FOUNDRY_PROFILE=cia tu shell para usar la configuración del compilador optimizada para CI.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "evm-audit-helpers/src/helpers/Reentrancy.sol";
contract MyVault is ReentrancyGuard {
mapping(address => uint256) private balances;
function deposit() external payable nonReentrant {
balances[msg.sender] += msg.value;
}
function withdraw(uint256 amount) external nonReentrant {
require(balances[msg.sender] >= amount, "Insufficient");
balances[msg.sender] -= amount;
(bool ok,) = msg.sender.call{value: amount}("");
require(ok, "Transfer failed");
}
}
Ejecuta el detector en tiempo de ejecución sobre un contrato compilado:
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url $RPC_URL --broadcast
# Generar una descripción JSON del layout de almacenamiento de un contrato compilado
cast abi-storage --contract MyUpgradeable.sol:MyUpgradeable > storage.json
# Comparar con un layout de referencia (por ejemplo, de una versión anterior)
forge script scripts/storage_analyzer.sol:StorageComparator \
--sig "compare(string memory, string memory)" storage.json reference.json
El script mostrará los slots desajustados, posibles shadowing y sugerencias para anotaciones @custom:oz-upgrades-unsafe-allow.
Copia una plantilla en tu repositorio de auditoría:
cp -r test/templates/reentrancy/ my-audit/tests/
Edita MyContract.t.sol para importar el contrato bajo auditoría y ejecuta:
forge test --match-contract MyContract
Añade el flujo de trabajo proporcionado a tu repositorio:
# .github/workflows/audit.yml
name: EVM Audit
on:
push:
branches: [main]
pull_request:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Foundry
run: curl -L https://foundry.paradigm.xyz | bash && foundryup
- name: Run Audit Suite
run: |
forge install
forge test -vv
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url ${{ secrets.RPC_URL }}
forge script scripts/storage_analyzer.sol:StorageComparator --sig "compare(string,string)" storage.json reference.json
El flujo de trabajo marcará automáticamente los fallos y publicará un informe en Markdown como comentario en la PR.
¡Agradecemos las contribuciones! Por favor, sigue estos pasos:
git checkout -b feat/<nombre>).forge coverage).npm run lint – usa solhint y prettier).pragma solidity ^0.8.20;snake_case para funciones internas y camelCase para públicas/externas.///).# Instalar herramientas de linting
npm install
# Ejecutar solhint
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# Auto‑formatear
npx prettier --write '**/*.sol'
evm-audit-helpers está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
¡Feliz auditoría!