# Trabalho Final: Criação de uma Exchange Descentralizada Simples com Pools de Liquidez
## Descrição do Projeto:
Os estudantes devem implantar contratos inteligentes na rede Scroll Sepolia (verificados e publicados) para implementar uma exchange descentralizada simples que permita a troca de dois tokens ERC-20.
A solução deve permitir:
- **Adicionar liquidez**: O owner pode depositar pares de tokens no pool para fornecer liquidez.
- **Trocar tokens**: Os usuários podem trocar um dos tokens pelo outro utilizando o pool de liquidez.
- **Retirar liquidez**: O owner pode retirar sua participação no pool.
## Requisitos:
1. Criar dois tokens ERC-20 simples: Os contratos dos tokens devem obrigatoriamente ter os nomes **TokenA** e **TokenB**.
2. Implementar um contrato de exchange (obrigatoriamente chamado **SimpleDEX**) que:
- Mantenha um pool de liquidez para TokenA e TokenB.
- Utilize a fórmula do produto constante `(x + dx)(y - dy) = xy` para calcular os preços de troca.
- Permita adicionar e retirar liquidez.
- Permita a troca de TokenA por TokenB e vice-versa.
3. O contrato **SimpleDEX** deve conter obrigatoriamente, sem alteração na interface, as seguintes funções:
- `constructor(address _tokenA, address _tokenB)`
- `addLiquidity(uint256 amountA, uint256 amountB)`
- `swapAforB(uint256 amountAIn)`
- `swapBforA(uint256 amountBIn)`
- `removeLiquidity(uint256 amountA, uint256 amountB)`
- `getPrice(address _token)`
4. Incluir os eventos que considerarem convenientes.
## Objetivos de Aprendizagem:
- Compreender como funcionam as exchanges descentralizadas e os pools de liquidez.
- Praticar a criação de tokens ERC-20 em Solidity.
- Aprender a implementar mecanismos de mercado automatizados simples.
- Chamar outros contratos inteligentes.