BellasCannas

Selo de segurança

Palpites à prova de trapaça

Depois que um jogo começa, nenhum palpite daquele jogo pode ser criado ou alterado — e qualquer pessoa pode conferir isso.

18
jogos selados
18
confirmados no bitcoin

Verificado: corrente íntegra e ancorada

O servidor recalculou a corrente inteira e confirmou que o último lacre corresponde ao carimbo de tempo independente (freetsa) — mexer num palpite mudaria o hash e quebraria essa verificação. Para conferência independente, baixe os dados em /api/seals/export e os carimbos abaixo.

🔒

Travado na hora certa

Quando o jogo começa, o site tira uma “foto” de todos os palpites daquele jogo. A partir daí ninguém — nem o organizador — consegue criar ou mudar um palpite para aquele jogo.

🔗

Lacre que não se quebra

Cada foto vira um código único, como uma impressão digital. Os códigos ficam ligados em corrente: mexer num palpite antigo mudaria todos os códigos seguintes — e a fraude apareceria na hora.

🌍

Carimbo duplo de tempo

Cada lacre recebe um carimbo de hora preciso de uma autoridade independente (freetsa.org) e também é ancorado na rede do Bitcoin. Prova quando os palpites foram congelados, sem depender da nossa palavra.

Jogos já selados (18)

Detalhes técnicos (para quem quiser conferir por conta própria)
Hash atual da corrente
8590ed7c1f189fffcd4a0bebe7adffd961ee0e5f1e56923c2afd0b0c2eddaa14

Cada jogo é selado no início, congelando os palpites num encadeamento de hashes SHA-256 — e tudo o que você precisa para conferir por conta própria está aberto:

Links para conferência
  • /api/seals/export — todos os lacres (snapshot, hashes e carimbos) em JSON, para recomputar a corrente do zero.
  • cacert.pem — a CA da autoridade de tempo (freetsa) para conferir os carimbos .tsr.
  • Em cada jogo acima: baixar .tsr (carimbo TSA) e baixar .ots (prova Bitcoin/OpenTimestamps).
Snapshot canônico
  • guesses ordenados por userId com comparação de codepoint (não localeCompare), cada um vira a tupla [userId, homeGuess, awayGuess].
  • JSON compacto (sem espaços), na ordem de chaves {matchId, phase, phaseOrder, deadline, guesses}, com deadline em ISO-8601 UTC, codificado em UTF-8.
  • matchHash = sha256(snapshot canônico)
  • chainHead = sha256(prevHead + ":" + matchHash)
  • gênese = sha256("bolao-copa-2026") = 8397a329…ab6f0b
Exemplo verificável
snapshot = {"matchId":1,"phase":"FASE1","phaseOrder":1,"deadline":"2026-06-11T19:00:00.000Z","guesses":[["u1",2,0],["u2",1,1]]}
sha256(snapshot)            = 670f762fbe9292130eda38ae33bfea60ca92c8d5d950f1ce713dfc9b462b5942
sha256(genesis + ":" + ^)  = 135540fc10bf535a6e44d1995110dec3fb4b45d10732009fe42d3482ddd21381
Conferir os carimbos de tempo

Carimbo TSA (RFC 3161) — baixe o .tsr do lacre e a CA (cacert.pem) que nós servimos (exatamente a que os carimbos se encadeiam), e rode:

openssl ts -verify -digest <chainHead> -in seal-<seq>.tsr -CAfile cacert.pem

Fonte original da CA: freetsa.org/files/cacert.pem.

Âncora Bitcoin (OpenTimestamps) — baixe o .ots e use o cliente ots verify. O horário do bloco é um limite superior (existia até aquele bloco), não o instante exato do lacre.