Sistema de Gambling
O ProCases oferece múltiplas modalidades de jogos, todas implementadas com o sistema Provably Fair para garantir transparência e justiça.
Modalidades Disponíveis
Visão Geral das Modalidades
| Modalidade | Descrição | Jogadores | Provably Fair |
|---|---|---|---|
| Cases | Abertura de caixas com roleta | 1 | ✅ HMAC-SHA256 |
| FLIP | Roleta dupla com itens raros | 1 | ✅ HMAC-SHA256 (roll único) |
| Battles | Batalhas PvP (1v1 a 4v4) | 2-8 | ✅ HMAC-SHA256 |
| Upgrades | Melhorar valor do item | 1 | ✅ HMAC-SHA256 |
| Swaps | Troca de itens | 2 | - |
| Raffles | Sorteios com tickets | N | ✅ HMAC-SHA256 |
Fluxo Geral de um Jogo
Arquitetura dos Jogos
Camadas
src/
├── domain/
│ └── repositories/ # Interfaces (contratos)
│ ├── case.repository.interface.ts
│ ├── case-opening.repository.interface.ts
│ ├── battle.repository.interface.ts
│ ├── battle-settlement.repository.interface.ts
│ ├── upgrade.repository.interface.ts
│ ├── swap.repository.interface.ts
│ └── raffle.repository.interface.ts
│
├── application/
│ ├── services/
│ │ └── provably-fair.service.ts # Geração de resultados
│ └── use-cases/
│ ├── case-opening/
│ │ ├── open-case.use-case.ts
│ │ └── get-case-opening-history.use-case.ts
│ ├── battle/
│ │ ├── create-battle.use-case.ts
│ │ ├── join-battle.use-case.ts
│ │ └── execute-battle.use-case.ts
│ ├── upgrade/
│ │ └── perform-upgrade.use-case.ts
│ ├── swap/
│ │ └── perform-site-swap.use-case.ts
│ └── raffle/
│ ├── create-raffle.use-case.ts
│ └── draw-raffle.use-case.ts
│
└── infrastructure/
└── database/repositories/ # Implementações (Prisma)O domínio é modelado via Prisma + interfaces de repositório (não há classes de entidade). Os serviços de negócio (incluindo
provably-fair.service.ts) vivem emapplication/services/.
Serviços Compartilhados
typescript
// Todos os jogos usam estes serviços
interface GamblingServices {
provablyFairService: ProvablyFairService; // Geração de resultados
transactionService: TransactionService; // Débito/crédito
inventoryService: InventoryService; // Gestão de itens
webSocketGateway: WebSocketGateway; // Notificações
auditService: AuditService; // Logs
}Probabilidades e Odds
House Edge
Cada modalidade tem uma margem da casa configurável:
| Modalidade | House Edge | Notas |
|---|---|---|
| Cases | 5-15% | Depende da caixa |
| Battles | 5% | Taxa sobre o pot total |
| Upgrades | 8% | Ajustado na probabilidade (UPGRADE_HOUSE_EDGE) |
| Raffles | 5% | Taxa sobre tickets |
Cálculo de Probabilidade
typescript
// Probabilidade real: baseada no peso (weight) de cada item da caixa
// src/application/services/probability.service.ts
function calculateDropChance(caseItem: CaseItem, allItems: CaseItem[]): number {
const totalWeight = allItems.reduce((sum, ci) => sum + ci.weight, 0);
// dropChance em porcentagem; a soma de todos os itens da caixa = 100%
return (caseItem.weight / totalWeight) * 100;
}A probabilidade NÃO depende de raridade nem do valor do item — é puramente proporcional ao
weight. O valor (valueCentsBrl) só entra no cálculo de RTP/lucro, não na chance de drop.
Validações Comuns
Antes de Jogar
- Saldo suficiente - Verificado via TransactionRepository
- Conta ativa - Usuário não banido
- Limites de aposta - Mínimo e máximo respeitados
- Rate limiting - Proteção contra spam
- Cooldown - Tempo entre jogadas (se aplicável)
Durante o Jogo
- Locks distribuídos - Prevenir race conditions
- Transações atômicas - Tudo ou nada
- Validação de estado - Jogo não pode ser alterado
Após o Jogo
- Registro de auditoria - Toda jogada é logada
- Verificação Provably Fair - Resultado pode ser verificado
- Atualização de estatísticas - XP, leaderboards
