Sorteios comprovadamente justos
Commit-and-reveal, ancoragem na blockchain EOS e como verificar.
Todo sorteio da Skincash é feito com um esquema que qualquer pessoa pode verificar de forma independente depois do fato. Ninguém na Skincash — nem a equipe — consegue prever ou manipular o resultado.
Antes do sorteio: commit
Quando criamos um sorteio, geramos um server seed aleatório de 256 bits. A gente não publica o seed em si — publica só o hash SHA-256 dele. Esse hash é o commit, e ele é congelado no banco de dados no momento em que o sorteio começa. Como o SHA-256 é unidirecional, saber o hash não permite que ninguém adivinhe o seed.
Entropia externa: bloco EOS
No momento do sorteio, nosso worker de cron consulta a blockchain EOS em busca do bloco irreversível mais recente e registra o hash dele. Blocos EOS são produzidos a cada meio segundo por uma rede independente, então o hash do bloco em qualquer instante futuro é imprevisível na hora do commit. Isso significa que nem a Skincash consegue influenciar o sorteio.
Reveal e sorteio
O ticket vencedor é calculado como: winningTicket = (BigInt(sha256(serverSeed + publicSeed + eosBlockId)) mod BigInt(totalTickets)) + 1. Depois do sorteio, publicamos o server seed junto com o block ID, o public seed e o total de tickets, pra qualquer um reproduzir o hash e confirmar o ticket vencedor.
const crypto = require('crypto');
// Published data (visible on the giveaway card)
const serverSeed = '<revealed after draw>';
const publicSeed = '<published at draw>';
const eosBlockId = '<EOS block hash at draw time>';
const totalTickets = <total sold>;
const hash = crypto
.createHash('sha256')
.update(serverSeed + publicSeed + eosBlockId)
.digest('hex');
const winning =
(BigInt('0x' + hash) % BigInt(totalTickets)) + 1n;
console.log('Winning ticket:', winning.toString());Como verificar
Em qualquer card de sorteio passado, clique em Verificar Justiça. O modal mostra as quatro entradas, roda um SHA-256 no lado do cliente para provar que o par commit-reveal é válido, e disponibiliza um snippet pra copiar e colar que você pode rodar no Node ou no console do navegador para reproduzir o ticket vencedor localmente.
Mais em Confiança e segurança
Ainda precisa de ajuda?
Nossa equipe de suporte ao vivo está online 24/7 e responde em menos de 5 minutos. Abra um chat direto da página, e nós cuidamos do resto.