Repositorio del curso "Introducción a Hacking y Seguridad en Smart Contracts", dictado el 17 y 20 de Agosto del 2021.
En este curso introductorio voy a asumir que ya tenés conocimientos básicos en Ethereum, y de programación y testing de smart contracts en Solidity.
Si ese no es tu caso, entonces te recomiendo primero empezar por acá.
Primero que nada, debés tener instalado NodeJS. Luego:
- Descargá este repositorio.
- En el directorio raíz, ejecutá el comando
npm install
oyarn
para instalar las dependencias.
Una vez instaladas las dependencias, podés ejecutar cada archivo de test (en la carpeta test
) con el comando
$ yarn hardhat test test/path/al/archivo.js
o
$ npx hardhat test test/path/al/archivo.js
El repositorio está dividido por ejercicios. Cada ejercicio consta de un conjunto de archivos Solidity (ubicados en las respectivas carpeta contracts/ejercicio-x
) y JavaScript (ubicados en las respectivas carpetas test/ejercicio-x
).
Los archivos Solidity son contratos con alguna vulnerabilidad a ser explotada. Los archivos JavaScript son los tests que se encargan de explotar esas vulnerabilidades.
Al resolver todos los ejercicios, vas a haber aprendido sobre cómo identificar, atacar y solucionar algunos tipos de vulnerabilidades como:
- Fallas en controles de acceso
- Operaciones matemáticas inseguras
- Denegación de Servicio
- Reentrancy
Además, en el proceso, vas a aprender sobre:
- Cómo hacer revisión de código Solidity.
- Cómo interactuar con contratos desde tus tests.
- Cómo hacer debugging.
- Patrones comunes como Ownable, Safe Math y Check-Effects-interactions.
- Peculiaridades de funciones de Solidity.
- La importancia del gas y su correcto uso.
- EOAs vs. Contratos.
- Llamadas entre contratos, tanto a funciones como para enviar ETH.
- Primitivas de DeFi, como los flash loans.
Para más información, links y material educacional visitá mi sitio web.
Todo el código en este repositorio se incluye con fines educacionales. Muchos (sino todos) los contratos incluidos aquí tienen vulnerabilidades de seguridad.
NO USAR EN PRODUCCIÓN.