Plataforma 100% descentralizada (Pure P2P) baseada em Blockchain, onde cada Pokémon é um ativo digital criptográfico único (NFT) com atributos variáveis (IVs).
Clique no botão Minerar na barra lateral. O sistema executa o algoritmo Proof of Work, sorteia um Pokémon deterministicamente a partir do hash do bloco e gera IVs únicos consultando os stats base na PokéAPI. O bloco é propagado para todos os nós da rede via Gossip Protocol.
- No Inventário, selecione o Pokémon que deseja oferecer
- Clique em Trocar Pokémon
- Selecione um treinador online na barra lateral
- Escolha o Pokémon dele que deseja receber
- Clique em Confirmar Troca, uma solicitação é enviada ao rival
- O rival verá uma notificação e poderá Aceitar ou Recusar
- Se aceita, duas transações são criadas e um bloco é minerado automaticamente para confirmá-las
| Tecnologia | Versão mínima | Para quê |
|---|---|---|
| Java JDK | 17 | Compilar e rodar o backend |
| Apache Maven | 3.8+ | Gerenciar dependências e empacotar o JAR |
| Node.js | 18+ | Rodar o frontend React |
| npm | 9+ | Instalar dependências do frontend |
winget install Microsoft.OpenJDK.17
winget install Apache.Maven
winget install OpenJS.NodeJS(IMPORTANTE) Nota sobre o Maven: Em algumas máquinas, o comando winget pode não conseguir instalar o Apache Maven. Caso o comando falhe, faça o download manual pelo site oficial (Binary zip archive), extraia o arquivo e adicione o caminho da pasta bin nas Variáveis de Ambiente do Windows (Path).
cd backend
mvn clean package -qCada nó precisa de um terminal separado. As portas seguem a convenção:
- Porta P2P:
808X(comunicação entre nós) - Porta REST:
900X(comunicação com o frontend) — calculada automaticamente como9000 + (portaP2P - 8000)
# Terminal 1 — Nó semente (sem vizinhos)
java -jar target\pokeeach-1.0-SNAPSHOT.jar 8081
# Terminal 2 — Segundo nó (aponta para o semente)
java -jar target\pokeeach-1.0-SNAPSHOT.jar 8082 127.0.0.1:8081
# Terminal 3 — Terceiro nó (conhece ambos)
java -jar target\pokeeach-1.0-SNAPSHOT.jar 8083 127.0.0.1:8081 127.0.0.1:8082Para cada jogador, abra um terminal apontando para o nó dele:
cd frontend
npm install # apenas na primeira vez
# Jogador 1 — controla o nó 8081
$env:VITE_API_URL="http://localhost:9081"; npm run dev -- --port 3000
# Jogador 2 — controla o nó 8082
$env:VITE_API_URL="http://localhost:9082"; npm run dev -- --port 3001(IMPORTANTE) Nota sobre o NPM: Se o comando de instalação falhar acusando erro de compatibilidade de versão (conflito de dependências), force a instalação ignorando a verificação com o comando: npm install --legacy-peer-deps
Acesse no navegador:
- Jogador 1:
http://localhost:3000 - Jogador 2:
http://localhost:3001
Para jogar entre máquinas diferentes na mesma rede Wi-Fi ou cabeada:
Em cada computador, abra o PowerShell e rode:
ipconfigProcure o campo Endereço IPv4 (ex: 192.168.1.10).
Máquina A (IP: 192.168.1.10) — nó semente:
java -jar target\pokeeach-1.0-SNAPSHOT.jar 8081Máquina B (IP: 192.168.1.20) — conecta na Máquina A:
java -jar target\pokeeach-1.0-SNAPSHOT.jar 8082 192.168.1.10:8081Máquina C (IP: 192.168.1.30) — conecta em ambas:
java -jar target\pokeeach-1.0-SNAPSHOT.jar 8083 192.168.1.10:8081 192.168.1.20:8082Cada jogador aponta o frontend para o nó local da sua própria máquina:
Máquina A:
$env:VITE_API_URL="http://localhost:9081"; npm run dev -- --port 3000 --hostMáquina B:
$env:VITE_API_URL="http://localhost:9082"; npm run dev -- --port 3000 --hostO
--hostexpõe o frontend na rede local, mas cada jogador acessahttp://localhost:3000no seu próprio computador.
Se os nós não conseguirem se conectar, é necessário liberar as portas no firewall de cada máquina. Execute como Administrador:
# Libera portas P2P
New-NetFirewallRule -DisplayName "PokeEach P2P 8081" -Direction Inbound -Protocol TCP -LocalPort 8081 -Action Allow
New-NetFirewallRule -DisplayName "PokeEach P2P 8082" -Direction Inbound -Protocol TCP -LocalPort 8082 -Action Allow
New-NetFirewallRule -DisplayName "PokeEach P2P 8083" -Direction Inbound -Protocol TCP -LocalPort 8083 -Action Allow
# Libera portas REST
New-NetFirewallRule -DisplayName "PokeEach REST 9081" -Direction Inbound -Protocol TCP -LocalPort 9081 -Action Allow
New-NetFirewallRule -DisplayName "PokeEach REST 9082" -Direction Inbound -Protocol TCP -LocalPort 9082 -Action Allow
New-NetFirewallRule -DisplayName "PokeEach REST 9083" -Direction Inbound -Protocol TCP -LocalPort 9083 -Action AllowClique no botão Minerar na barra lateral. O sistema executa o algoritmo Proof of Work, sorteia um Pokémon deterministicamente a partir do hash do bloco e gera IVs únicos consultando os stats base na PokéAPI. O bloco é propagado para todos os nós da rede via Gossip Protocol.
- No Inventário, selecione o Pokémon que deseja oferecer
- Clique em Trocar Pokémon
- Selecione um treinador online na barra lateral
- Escolha o Pokémon dele que deseja receber
- Clique em Confirmar Troca, uma solicitação é enviada ao rival
- O rival verá uma notificação e poderá Aceitar ou Recusar
- Se aceita, duas transações são criadas e um bloco é minerado automaticamente para confirmá-las
- André Portela
- Davi Oliveira
- Eduardo Almeida
- Júlio Arroio



