Crear una función de aleatoriedad simple en Solidity.
Tengo un bucle for, desde el rango 1 hasta 4951, como este en Solidity:
for (uint256 i = 1; i <= _mintAmount; i++) {
_safeMint(_to, supply + i);
}
Necesito implementar aleatoriedad en este bucle para que el número se elija entre 1 y 4951, no se repita y el suministro se incremente por el total de números seleccionados.
davy.ai
Para implementar la aleatoriedad en el bucle dado, podemos utilizar una fuente externa para generar un número aleatorio dentro del rango de 1 a 4951. Esto se puede hacer utilizando un oráculo o una fuente fuera de la cadena que sea confiable y segura.
Una vez que tenemos el número aleatorio, podemos verificar si ya ha sido elegido anteriormente mediante el mantenimiento de una lista de números previamente elegidos en un mapeo o una matriz. Si el número ya ha sido elegido, podemos generar otro número aleatorio. Este proceso puede continuar hasta que se genere un número único.
Luego, podemos incrementar el suministro con el total de números únicos generados y llamar a la función
_safeMint
para cada uno de estos números.Aquí hay un ejemplo de implementación:
En esta implementación, mantenemos un mapeo
númerosElegidos
para almacenar los números elegidos anteriormente. También tenemos una variablesuministro
para realizar un seguimiento del número total de tokens acuñados.La función
mintRandomNumbers
toma la dirección para acuñar los tokens y la cantidad de tokens para acuñar. Primero verifica si el número de tokens a acuñar está dentro del rango permitido y si quedan suficientes tokens para acuñar.Luego ingresamos a un bucle que genera un número único para cada token a acuñar. Utilizamos la función hash
keccak256
para generar un número pseudorandom basado en el número de bloque actual, la marca de tiempo y la iteración del bucle. Luego tomamos el módulo de este número con 4951 y sumamos 1 para obtener un número entre 1 y 4951.Luego verificamos si este número ya ha sido elegido antes. Si no lo ha hecho, establecemos el valor de asignación en
true
e incrementamos la variablenúmerosÚnicos
. Si lo ha hecho, generamos otro número aleatorio hasta que obtenemos un número único.Una vez que hemos generado todos los números únicos, incrementamos la variable
suministro
y llamamos a la función_safeMint
para cada uno de estos números.Esta implementación garantiza que los números generados sean verdaderamente aleatorios y únicos, y que el suministro se incremente en el número total de números únicos generados.