The interface is a contract-call guide with buttons
The official instance does three things: it reads public chain state, calculates the next valid player step, and prepares the exact write transaction for the wallet to review.
Reads
Read calls do not cost gas and do not require signing. They show epoch, phase, ownership, token metadata, and gameplay state.
Writes
Write calls change contract state. They require wallet confirmation and gas. Mint, Claim, Transfer, Hunt, Devour, and Fusion are writes.
Irreversible actions
Devour permanently locks external NFTs. Fusion burns the sacrifice Being. Transfers move NFTs. These actions must be checked slowly.
Before any button is enabled, the page reads the contract
| Read function | Purpose | Used for |
|---|---|---|
currentEpoch(), epochStart(epoch) | Find the current epoch and the epoch start block. | Commit / Reveal / Claim timing. |
EPOCH_BLOCKS(), COMMIT_BLOCKS(), MINTS_PER_EPOCH(), MAX_BEINGS() | Read production constants from the deployed contract. | Countdown, release cap, and fairness display. |
releasedMintCap(epoch), revealedCount(epoch), epochClaimLimit(epoch), epochClaimedCount(epoch) | Show how many slots are released, revealed, selectable, and claimed. | Live epoch status and draw history. |
commitments(epoch,wallet), revealed(epoch,wallet), claimedEpoch(epoch,wallet), hasMintedBeing(wallet) | Check a wallet's Mint path state. | Enable the correct Mint button. |
balanceOf(wallet), ownerOf(tokenId), getBeing(tokenId), tokenURI(tokenId) | Find owned Beings and render their current on-chain state. | Player dashboard, selected Being card, and transfer panel. |
hunts(tokenId), cooldownUntil(tokenId) | Check whether a Being is hunting or cooling down. | Hunt, Devour, Fusion, and Transfer safety checks. |
Fair Mint uses Commit → Reveal → Claim
The official page asks the connected wallet for a free deterministic signature scoped to the network, Game, wallet, and epoch. It hashes that signature into the Secret, calculates the Commitment, and asks the wallet to call:
The Secret is not sent during Commit. The Commitment is bound to the exact caller and epoch.
Steps
- Read
currentEpoch()and the block-based phase. - Confirm the wallet has not already Minted.
- Sign the scoped off-chain message.
- Derive and locally cache the Secret.
- Submit
commitMint(commitment).
During Reveal, the same wallet reconstructs or loads the exact Secret and sends it to the contract:
The page recomputes the Commitment and refuses to submit if it differs from the on-chain value.
Steps
- Check
commitments(epoch,wallet)exists. - Check
revealed(epoch,wallet)is false. - Reconstruct and verify the exact Secret.
- Submit
revealMint(epoch, secret). - Wait until the epoch is complete.
After an epoch closes, an eligible revealer can ask the contract to check selection and mint the Being:
If the epoch was oversubscribed and the wallet was not selected, no Being is minted for that epoch.
Steps
- Check the completed epoch.
- Read
revealed(epoch,wallet). - Read
claimedEpoch(epoch,wallet). - Simulate and submit
claimMint(epoch). - Verify
BeingMintedandTransferevents.
After Claim, the page displays owned Beings
The dashboard lists every Being owned by the connected wallet, then lets the player select one to inspect. The page verifies ownership through ownerOf(tokenId) before showing actions.
| Function | What it shows |
|---|---|
balanceOf(wallet) | How many Beings the wallet owns. |
ownerOf(tokenId) | Current owner of a specific Being. |
getBeing(tokenId) | Stage, power, skill, mass, complexity, scars, devours, fusions, premium devours, mark luck, and genome state. |
tokenURI(tokenId) | On-chain metadata and image projection for the selected Being. |
hunts(tokenId) | Whether the Being is currently locked in a Hunt. |
Send a selected Being to another wallet
The transfer box prepares the ERC-721 transfer call:
The website checks that the connected wallet owns the selected Being before preparing the transaction.
Steps
- Select a Being from the owned list.
- Enter the recipient address.
- Check
ownerOf(tokenId)equals the connected wallet. - Check the Being is not in an active Hunt.
- Confirm the transfer in the wallet.
- Refresh ownership after receipt.
Hunt is a repeatable gameplay loop
Starts a Hunt for a selected Being:
The Being is held by the game during the Hunt and cannot be transferred or used in other incompatible actions until resolved.
Before entering
- Verify connected wallet owns the Being.
- Check
hunts(tokenId)is empty. - Check cooldown through
cooldownUntil(tokenId). - Confirm gas and call
enterHunt.
Finishes an active Hunt:
Resolution may update ORE, Power, Skill, scars, cooldown, or other Being state according to the contract rules.
Before resolving
- Read
hunts(tokenId). - Confirm the Hunt has reached its minimum resolution block.
- Estimate gas.
- Submit
resolveHunt. - Refresh
getBeing,tokenURI, and ORE state.
Devour permanently locks an external NFT
For eligible ERC-721 collections outside the curated Top-100 list:
The observation step records collection code and supply conditions before the final lock.
Steps
- Own the Being and the external NFT.
- Call
observeExternal. - Wait
UNKNOWN_HOLD_BLOCKS. - Approve the exact NFT to the game contract.
- Call
devourExternal. - Verify the NFT is locked and the Being state updated.
For collections in the curated Top-100 list:
The tier proof decides the nutrition and complexity gain. The NFT is still permanently locked.
Steps
- Find the collection in Devour Tiers.
- Obtain the tier and Merkle proof.
- Verify the proof against the deployed root.
- Approve the exact NFT.
- Call
devourTieredExternal. - Refresh the selected Being.
Native CryptoPunks use a separate path
Native CryptoPunks are not standard ERC-721 approvals, so the contract uses dedicated functions:
The Punk must be transferred to the game contract after observation and before the observation expires.
Steps
- Own the Punk and the target Being.
- Verify the Punk collection proof.
- Call
observeCryptoPunk. - Transfer the Punk to the game contract using the Punk contract.
- Call
devourCryptoPunk. - Verify permanent lock and Being evolution.
Fusion burns one Being to strengthen another
Fusion combines two owned Beings:
The parent remains. The sacrifice is burned forever. The parent absorbs state and may mutate according to the contract rules.
Steps
- Own both parent and sacrifice Beings.
- Check neither Being is hunting.
- Check cooldown and eligibility.
- Choose the parent carefully.
- Confirm the permanent burn of the sacrifice.
- Call
fuseBeingand refresh the parent.
ORE is the resource token emitted by gameplay
ORE state is read to show economy status and gameplay results. It is not custody by the website.
| Function | Purpose |
|---|---|
ore() | Find the ORE token contract associated with the game. |
totalEmitted() | Show total ORE emitted by gameplay. |
emittedCap() | Show the emission cap. |
availableEmission() | Show remaining emission available under the cap. |
nutritionForTier(tier) | Preview nutrition and complexity gain for curated Devour tiers. |
What must be checked before signing
Network
- Chain ID matches the official manifest.
- Contract address matches the official instance.
- Explorer source and bytecode are verified.
Ownership
- Wallet owns the selected Being.
- Wallet owns any external NFT being devoured.
- Recipient address is correct before transfer.
Irreversible effects
- Devour locks external NFT forever.
- Fusion burns sacrifice Being forever.
- Transfer moves the NFT to another wallet.