Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

18 Días
19 Hrs
34 Min
20 Seg

Dependencia con timestamp

4/15
Recursos

Dependiendo de la regla de negocio de nuestro proyecto, podemos tener la necesidad de generar números de forma totalmente aleatoria para determinar al ganador de un sorteo o lotería.

Números aleatorios en Blockchain

En pocas palabras, en Blockchain no existen los números aleatorios. No es posible hacer un Math.random() como en Javascript para obtener un número aleatorio y poder utilizarlo.

Todo en Blockchain es determinista, o sea, toda operación debe tener un resultado predecible. Dado un estado inicial y una acción, siempre se genera el mismo resultado. Esto garantiza que los nodos puedan ponerse de acuerdo a la hora de minar bloques o transacciones y es una de las características principales de cualquier Blockchain.

Problemas frecuentes con la aleatoriedad en Blockchain

Es frecuente el uso de algunas variables globales de Solidity para “simular” un número aleatorio como block.timestamp que nos devuelve una etiqueta de tiempo o block.number que devuelve el número del bloque actual.

Ninguna de las dos opciones es para nada aconsejable, ambas pueden ser manipuladas y predichas por los atacantes.

Si una acción crítica de nuestro contrato depende de un valor aleatorio, debemos buscar alternativas off-chain como Chainlink. Este tipo de servicio se los conoce con el nombre de Oráculos para realizar procesamientos no deterministas fuera de la blockchain y reinsertar ese valor en el contrato cobrando una comisión.

La aleatoriedad en Blockchain es compleja y requiere de desafíos técnicos avanzados para proponer soluciones viables y seguras.


Contribución creada por: Kevin Fiorentino (Platzi Contributor).

Aportes 3

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Una solucion segura para ese problema de generar numeros aleatorios es haciendo uso de Oracles, recordemos que la blockchain de Ethereum es deterministica.

Muchas veces se utiliza el timestamp del bloque actual como entrada de una operacion critica como determinar el ganador de un sorteo. No es lo correcto.
Para generar valores aleatorios NO debemos usar

  • block.timestamp
  • block.number
    Ya que pueden ser manipulados por el minero.

DEPENDENCIAS CON TIMESTAMP

  • Flujos críticos con timestamp: se lo utiliza como valor de entrada de una operación critica como determinar el ganador de un sorteo.

  • No utilizar el timestamp cuando hacemos un sorteo, una selección de una cuenta por ser vulnerable y el número de bloques que es predecible.

🚫Evitar

  • block.timestamp
  • block.number