---
# System prepended metadata

title: Trabalho Final - Módulo 3

---

# 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.