O Ethereum é uma rede blockchain, e, como todas as blockchains, é composto por uma sequência de blocos. Cada bloco contém um conjunto de transações e informações associadas. No caso do Ethereum, um novo bloco é adicionado à cadeia aproximadamente a cada 16 segundos. Isso significa que, a cada intervalo de 16 segundos, todas as transações que ocorreram nesse período são verificadas, validadas e adicionadas à rede na forma de um novo bloco.
Cada bloco do Ethereum tem um timestamp associado, que marca a hora exata em que foi criado. Em um sorteio, é escolhido um momento específico, o timestamp do sorteio. Para gerar os prêmios, usamos informações dos blocos do Ethereum que estão imediatamente antes e depois desse timestamp do sorteio.
A função utiliza os hashes destes dois blocos. Combinando essas duas sequências de hashes, e através de processos matemáticos, a função calcula os prêmios.
A escolha de usar os blocos imediatamente antes e depois do timestamp do sorteio garante que o processo de geração dos prêmios é baseado em dados que não podem ser previstos ou manipulados, garantindo a integridade e imparcialidade do sorteio.
A função que extraem os números premiados é como um algoritmo matemático que usa esses hashes para gerar uma série de prêmios. Ele faz isso da seguinte maneira:
[0, 1, 2, 3, 4].reduce((acum, index) => { const draw_hash = generateHash(hash, prev_hash); const stripped: string = draw_hash.substr(13 * index, 13); const val: number = parseInt(stripped, 16) / Math.pow(2, 52); const num: number = Math.floor(val * 10000); return [...acum, num.toString().padStart(4, '0')]; }, []);
Estos cinco números são usados como prêmios.
Desta forma, usando a matemática e os hashes dos blocos do Ethereum, a função garante que os prêmios são gerados de maneira justa e imprevisível.