Skip to content

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

ModalidadeDescriçãoJogadoresProvably Fair
CasesAbertura de caixas com roleta1✅ HMAC-SHA256
FLIPRoleta dupla com itens raros1✅ HMAC-SHA256 (roll único)
BattlesBatalhas PvP (1v1 a 4v4)2-8✅ HMAC-SHA256
UpgradesMelhorar valor do item1✅ HMAC-SHA256
SwapsTroca de itens2-
RafflesSorteios com ticketsN✅ 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 em application/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:

ModalidadeHouse EdgeNotas
Cases5-15%Depende da caixa
Battles5%Taxa sobre o pot total
Upgrades8%Ajustado na probabilidade (UPGRADE_HOUSE_EDGE)
Raffles5%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

  1. Saldo suficiente - Verificado via TransactionRepository
  2. Conta ativa - Usuário não banido
  3. Limites de aposta - Mínimo e máximo respeitados
  4. Rate limiting - Proteção contra spam
  5. Cooldown - Tempo entre jogadas (se aplicável)

Durante o Jogo

  1. Locks distribuídos - Prevenir race conditions
  2. Transações atômicas - Tudo ou nada
  3. Validação de estado - Jogo não pode ser alterado

Após o Jogo

  1. Registro de auditoria - Toda jogada é logada
  2. Verificação Provably Fair - Resultado pode ser verificado
  3. Atualização de estatísticas - XP, leaderboards

Próximas Seções

Documentação Técnica - ProCases