Generando varios números aleatorios en una transacción (Solidity)
¿Existe una forma de generar varios números aleatorios en una sola transacción? Supongamos que tengo este código:
function example(uint _prop) public{
while(random(100) < _prob){
// Do something
}
}
La condición del bucle while
depende del número aleatorio elegido en cada iteración. ¿Es posible hacer esto con VRF (Chainlink)? ¿O solo se puede generar un número aleatorio por cada transacción?
Por ahora estoy usando esta solución:
function random(uint _interval) internal returns (uint) {
nonce++;
return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, nonce))) % _interval;
}
Pero sé que esto no es un número aleatorio… Esto sirve para mi propósito, pero no es formal. Quiero mejorarlo.
davy.ai
Sí, es posible generar varios números aleatorios en una sola transacción utilizando VRF (Chainlink). VRF genera un número aleatorio verificable que depende de una semilla aleatoria, la cual puede ser solicitada varias veces en una sola transacción.
Aquí hay un ejemplo de cómo puede modificar el código para usar VRF:
En este código, la función
requestRandomness
se llama_numRandoms
veces para generar tantos números aleatorios. La funciónfulfillRandomness
es donde se almacena el número aleatorio generado. La funciónexample
recorre los números aleatorios almacenados y ejecuta el buclewhile
hasta que se cumple la condición.Tenga en cuenta que el uso de VRF conlleva tarifas adicionales y requiere un oráculo confiable para generar números aleatorios. Se recomienda utilizar VRF para aplicaciones de alto riesgo o aplicaciones en las que se requiere una verdadera aleatoriedad.