Torne um jogo personalizado capaz de proteger
Um jogo auto-hospedado roda e verifica assim que você aponta o game-src para ele. Mas para usá-lo como um portão de jogo, onde um visitante precisa resolvê-lo para passar, a Caputchin tem de conseguir rederivar o resultado ela mesma, não confiar no navegador. É para isso que serve o artefato de replay. Ao final deste tutorial seu jogo personalizado será elegível para proteger.
Esta é a recompensa do determinismo: como seu jogo registra um trace e deriva tudo da semente, o servidor pode rodar uma cópia headless da sua lógica contra a mesma semente e o mesmo trace e chegar ao mesmo veredito de forma independente.
O que é o artefato de replay
O artefato é um bundle JavaScript pequeno e autossuficiente só da sua lógica de jogo, sem renderização, sem DOM, e sem rede. O servidor o carrega em uma sandbox isolada e o roda para produzir um veredito a partir de (seed, trace). Ele não é o seu jogo jogável; é o juiz headless do seu jogo jogável.
Duas propriedades são exigidas:
- Autossuficiente. Ele não pode importar nada que o isolate não consiga resolver; empacote tudo. O upload tem teto de 2 MB, que está bem acima de um bundle de lógica típico.
- Determinístico e em concordância com o jogo ativo. Dada a mesma semente e o trace que seu jogo ativo emitiu, ele precisa chegar ao mesmo veredito que o jogo ativo alegou. Se eles discordam, jogadores reais recebem rejeições falsas.
1. Registre o jogo personalizado
Se você ainda não fez, registre o jogo no painel para que ele tenha um id e um lugar para guardar o artefato. Na página Jogos de uma chave de site (ou da equipe), use a entrada Jogo personalizado no painel Adicionar um jogo: insira seu id e clique em Definir. Veja jogos personalizados para este passo e o esquema que você define.
2. Envie o artefato
Na aba Configurações do jogo registrado, envie o bundle de replay. Ele é enviado como um único arquivo; a Caputchin gera um hash de conteúdo dele (reenviar os mesmos bytes é um no-op) e imediatamente roda uma autoverificação.
3. A autoverificação
A autoverificação roda seu artefato enviado no isolate de replay contra uma semente sintética (e sua amostra de trace comprometida, se você fornecer uma) e registra se ele produziu um veredito limpo:
- Passa → a instalação fica elegível para proteger. O selo Não reproduzível some, e você pode agora ligar exigir um jogo com este jogo no pool.
- Falha → o artefato ainda fica armazenado (para que você possa inspecionar o erro), mas a instalação continua não elegível para proteger. Corrija a lógica e reenvie.
Uma autoverificação falha é o sistema te dizendo que o juiz headless não concorda consigo mesmo ou não conseguiu rodar; é exatamente a discordância que teria causado rejeições falsas em produção, pega antes de qualquer visitante esbarrar nela.
4. Ligue o portão
Uma vez que a autoverificação passa, o jogo está no pool de portão da chave. Ligue Exigir um jogo na página Segurança da chave (ou o teto de forçar jogo da equipe), e a Caputchin vai servir seu jogo personalizado, pegar o trace do jogador, e reexecutar seu artefato no servidor para decidir cada verificação.
Mantendo os dois em sincronia
O jogo ativo (carregado via game-src) e o artefato de replay são duas builds da mesma lógica. Quando você muda qualquer coisa que afeta o resultado, reconstrua e reenvie o artefato para que os dois ainda concordem. Se eles divergirem, a autoverificação ou o replay de produção vai começar a rejeitar vitórias reais. Construir os dois a partir de um módulo de lógica compartilhado é a forma confiável de mantê-los idênticos.
Veja também
- Construa um jogo auto-hospedado: produzir o trace que este artefato reexecuta.
- Jogos e o portão de jogo: ligar o portão e o requisito de reprodutibilidade.
- Jogos personalizados: registrar e o selo Não-reproduzível.
- Referência de esquema do painel: os campos que o jogo lê do contexto da sua fábrica.