I have 4 ideas for random-order minting of ERC721 collectibles

Hello, would gladly know your opinion on this.

  • ERC721 collectible, 10000 pcs
  • some have rare properties, clearly visible on images
  • minting should go from 1 - 10000 in order
  • all revealed after sell-out

I have couple of ideas how to pull this of:

  1. Effortless way seems to be provide randomized metadata, put it to ipfs and provide provenance hash. I don't like that operators would know sequence of rare items though. Or do you see any other problem with it? I have been told that lot of collectibles projects just go with it, but my inner alarm is going red.

  2. Using chainlink VRF for selecting rare items after sell-out, uploading fresh metadata and then reveal. Calling VRF one time, I presume, I like it, except that total replacement of ipfs CID. But it's cheaper than number 3.

  3. Using chainlink VRF with probability function to generate rare/non-rare item, and keep watch on count of these. Personally don't like this one because of gas money for calling VRF every time user mints.

  4. This I didn't go through yet, but it's existing contract and it is using VRF. I will se about that. LobsterDAO

What's your take on this, may I ask? Thanks.

Solved with VRF and expand() method described here: https://docs.chain.link/docs/chainlink-vrf-best-practices/ - multiple seeds for mersenne-twister.
more: https://math.stackexchange.com/questions/4366646/generating-distinct-random-numbers-from-uint256-in-range/

You can refer to the way Punks are implemented, where the contract has the hash of all collections. The function baseUri points to the default image until the box is opened.