Eggheist Batching Information
Eggheist uses a novel two-step process for minting and unstaking. With Chainlinks VRF service we are able to get secure, trustworthy, and verifiable random data to use for the game.
The two-step process ensures that no one can predict the outcome of minting or staking, so there is no chance for someone to gain an unfair advantage in the game.
When minting we compile a list of all newly minted noodles and then request randomness from Chainlink.
This happens every 500 mints or 1 hour, whichever comes first.
After we receive the randomness from Chainlink, which can take up to 15 minutes, it is then used to assign traits to the noodles one at a time as the NEXT batch of noodles are minted.
This means that when you mint a noodle, you are doing a few things:
1. Creating a new noodle token in your wallet
2. Adding your new noodle to the list of noodles that need to be assigned traits
3. Assigning traits to a noodle that has already received its randomness from Chainlink in the last batch
This ensures that no one can know what traits their minted noodles will have until after Chainlink assigns randomness to them.
Example of the batching process:
Player A mints, their unrevealed Noodle (#0) is minted.
— Noodle #0 is added to a batch that is waiting to get randomness from chainlink VRF.
— Since this is the first Noodle, there are no other Noodles that have received randomness and can be given traits.
— Nothing else happens until another player mints now.
— If someone else mints Noodle #1 in the same hour, they get added to the same batch.
— If it is more than an hour since the last batch started, then the previous batch is closed out, and Noodle #1 goes in the next batch.
Player B mints Noodle #1, the unrevealed Noodle #1 is minted (So it is in their wallet but with no traits).
— Noodle #1 is added to a new batch, and the previous batch is closed. Randomness from Chainlink VRF is requested.
— Since the randomness was just requested, it hasn’t returned yet, so we cant assign traits.
— Nothing else can be done until another mint happens
Player C mints Noodle #2 it could be another hour later for a new batch, or it could be Player B minting a second noodle. Either way:
— Noodle #2 is minted and shows up in their wallet
— Let’s assume chainlink has returned the randomness we requested for the first batch (can take a few minutes).
— Noodle #0 is ready for traits and was just waiting on randomness. we have that now, so we will randomly assign traits to noodle #0
— Noodle #0 is now fully minted and revealed, with all traits, and can be staked.
— If Noodle #2 was minted soon after noodle #1, then they are both added to the same batch and are waiting for their turn to request randomness an hour after the batch started which was when noodle #1 was added to it.
We use this same process to handle unstaking events where Danger Noodles have a 50% chance to steal all the unstaked Chicken Noodle’s $EGGs.
When you unstake a Chicken Noodle it is first transferred back to your wallet. The $EGG tokens generated are not sent immediately, however. We need to request randomness from Chainlink and do a roll to see if the $EGGs are stolen or not.
These are also batched together and processed later on when more unstake requests come through. Randomness is requested every 12 hours or for every 50 unstake requests.