¿Cuál es el mejor enfoque para generar NFT aleatorios?

Estoy pensando en desarrollar una DApp pequeña donde el usuario recolectaría tarjetas (NFT). Cada tarjeta tendría alguna imagen y valor asociado a ella. El usuario recolecta tarjetas comprando Pack of Five Cardsqué usuario puede abrir y obtener 5 tarjetas aleatorias de diferente valor. Algunas tarjetas serían más raras que otras... Esto crearía un mercado donde los usuarios pueden comprar/vender tarjetas...

El problema que tengo es cómo generar estas cartas aleatorias. Leí mucho sobre la aleatoriedad en blockchain y cómo se puede explotar, así que tengo pocas opciones.

Opción A:

Use el VRF de Chainlink que me da un número como este:

60 281 005 833 581 254 158 276 701 724 503 448 998 474 868 621 179 906 924 992 243 038 007 226 057 672

Que tiene 77 dígitos (no estoy seguro de si este es siempre el caso, pero al probar en la red kovan parece que siempre tiene 77 dígitos). Puedo usar este grupo de 3 dígitos que me dará una tarjeta aleatoria... Pero de esta manera el usuario está limitado a comprar un máximo de 5 (o menos) x Packs of Five Cards... Necesito usar un grupo de tres dígitos o más dependiendo de cuántas tarjetas hay en un conjunto y las diferentes cartas tendrían diferentes pesos, por lo que usaría esos pesos para elegir una carta al azar del conjunto.

Opción B:

El usuario aprueba algunas monedas estables para contratar la dirección a través de MetaMask, y llama a mi backend, que a su vez tiene claves privadas para contratar y el backend selecciona todas las tarjetas al azar y simplemente envía instrucciones para contratar para acuñar nuevos NFT y asignarlos al usuario que lo compró...

Pero en este enfoque, necesito pagar las tarifas de gas, y también supongo que las tarifas de gas serían altas para crear como 100 tokens a la vez (si el usuario compró 20 Packs of Five Cards)

Opción C:

No sé si esto es posible, pero ¿hay alguna manera de crear un contrato en el nodo Chainlink, que generaría tantos números aleatorios como sea necesario? Todavía limitaría a los usuarios a comprar un máximo de 10 paquetes, y el contrato Chainlink estaría en volver generar un máximo de 50 números aleatorios en el rango 1 y 1000 (o un poco más dependiendo de la suma de todos los pesos de las tarjetas en el conjunto) y devolverlos a mi contrato que luego acuñaría estos NFT...

¿Hay alguna otra forma de implementar esto? Y también supongo que la Opción B crearía algunos comentarios negativos ya que estaría fuera de la cadena de bloques y no sería transparente...

No existe la mejor herramienta para todo. Ethereum es un entorno en constante cambio. Pruebe los diferentes enfoques y decida con pruebas.

Respuestas (1)

Estamos tratando de encontrar lo que estás tratando de desarrollar...

Teniendo en cuenta que las NFT tienen ediciones finitas, lo que significa que acuñaría 10000 ediciones de 5 tarjetas en cada una, tendría que programar previamente la cantidad de tarjetas de mayor valor (de un total de 50000), la cantidad de la segunda más valiosa (de un total de 50000) y pronto. Al igual que las tarjetas de rascar de lotería, lo ideal sería que solo hubiera un 1.er premio, impreso en una tarjeta al principio.

Si deja que blockchain lo haga al momento de la compra, es posible que nunca genere la tarjeta con el valor más alto.

No es útil, pero si lo haces funcionar o encuentras alguna aplicación o DAPP que lo haga, avísame.