Ethereum es una red de blockchain, y como todas las blockchains, está compuesta por una secuencia de bloques. Cada bloque contiene un conjunto de transacciones e información asociada. En el caso de Ethereum, se agrega un nuevo bloque a la cadena aproximadamente cada 16 segundos. Esto significa que cada intervalo de 16 segundos, todas las transacciones que ocurrieron durante este período son verificadas, validadas y agregadas a la red en forma de un nuevo bloque.
Cada bloque de Ethereum tiene una marca de tiempo asociada, que marca el momento exacto en que se creó. En un sorteo, se elige un momento específico, la marca de tiempo del sorteo. Para generar los premios, utilizamos información de los bloques de Ethereum que están inmediatamente antes y después de esta marca de tiempo del sorteo.
La función utiliza los hashes de estos dos bloques. Al combinar estas dos secuencias de hash, y a través de procesos matemáticos, la función calcula los premios.
La elección de usar los bloques inmediatamente antes y después de la marca de tiempo del sorteo asegura que el proceso de generación de premios se basa en datos que no se pueden predecir o manipular, garantizando la integridad y la justicia del sorteo.
La función que extrae los números ganadores es como un algoritmo matemático que utiliza estos hashes para generar una serie de premios. Lo hace de la siguiente manera:
[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 se utilizan como premios.
De esta manera, utilizando matemáticas y los hashes de los bloques de Ethereum, la función asegura que los premios se generan de manera justa e impredecible.