Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

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 鈥渟imular鈥 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?

o inicia sesi贸n.

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