Una solucion segura para ese problema de generar numeros aleatorios es haciendo uso de Oracles, recordemos que la blockchain de Ethereum es deterministica.
Introducción
Importancia de la seguridad en el desarrollo de contratos
Buenas prácticas
Vulnerabilidades con variables globales
Identificación del usuario: problema con tx.origin
Dependencia con timestamp
Vulnerabilidades del almacenamiento
Overflow y underflow
Variables privadas
Problemas con llamadas externas
DelegateCall
Gas insuficiente en Solidity
Ataques con transferencias
Forzar envío de Ethers
Reentrancy simple
Reentrancy cruzado
Denegación de servicio
Denegación por reversión
Denegación por límite de gas
Despedida
Desafío
Continúa aprendiendo
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
Paga en 4 cuotas sin intereses
Termina en:
Sebastián Leonardo Perez
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.
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.
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
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
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?