CHAIN

Contracts

Verify it yourself.

One creature contract, three mint policies, two price sources, and an optional token layer. Addresses come from one config file and are empty until deployment. The ABIs below are the compiler's output for the source as it stands.

not audited by an external firm

No external firm has audited these contracts. An internal independent review found nothing above Low and its findings were fixed or documented. The creature holds no funds and has no withdraw function; the paid policy holds mint proceeds that only its immutable treasury can withdraw. Read the source before you trust it.

Addresses

The contracts.

ContractAddressFunctionsABI
MoodCreature (Eidolon)not deployed
mint (payable) poke feed mood stats observation latestPrice svg tokenURI careOf stageOf formOf maxSupply royaltyInfo setPriceSource setMintPolicy setRoyalty renounceOwnership
JSON
FreeMintPolicynot deployed
charge (refuses value)
JSON
PaidMintPolicynot deployed
price phase claimAllowlist proposePrice executePrice setPhase setPaused withdraw (treasury only) renounceOwnership
JSON
TokenBurnMintPolicynot deployed
charge (burns the token on mint and feed) adjust (once, capped) setPaused
JSON
MockPriceSourcenot deployed
read setPrice setFailing
JSON
PrecompilePriceSourcenot deployed
read spotIndex szDecimals
JSON

Source: not yet published. Chain: Elysium, id 99901 (0x1863d), RPC rpc.elysium.kinetiq.xyz. On-chain name is "Eidolon", symbol "EIDOLON", titles "Eidolon #id". Also in the source, with no decision taken: EidolonToken, VestingVault, FeeBuyback (adapter interface only) and ItemRegistry. planned

Selectors

What this site calls.

The mint page encodes calls by hand; these are the four-byte selectors it uses, so you can match them against the ABI.

Check the claims

Five things to run.

  1. 01Mood is shared. mood() takes no token id. Call it from any address and compare:
    cast call $CREATURE "mood()(uint8)" --rpc-url https://rpc.elysium.kinetiq.xyz
    0 calm, 1 happy, 2 nervous, 3 angry, 4 sleeping.
  2. 02The art is in the contract. svg(tokenId) returns the picture; tokenURI wraps it as a data URI. No URL appears anywhere in the output.
  3. 03The thresholds. ANGRY_DROP_BPS() is -300, NERVOUS_VOL_BPS() is 100, HAPPY_RISE_BPS() is 200, RING_SIZE() is 16. Stages: HATCH_AGE 1 day and HATCH_FEEDS 3; JUVENILE_AGE 7 days, JUVENILE_FEEDS 14, JUVENILE_STREAK 3; ADULT_AGE 21 days, ADULT_FEEDS 40, ADULT_STREAK 7. Streak gaps 20 to 48 hours, burst under 6 hours, ember at 8 storm feeds and 30%. All public constants; the owner may still change them before deployment.
  4. 04The owner's powers. The functions with onlyOwner on the creature are setPriceSource, setMintPolicy (instant, no timelock), setRoyalty (never above MAX_ROYALTY_BPS, 10%) and renounceOwnership. No pause on feeding, no withdraw, no mint for others, no way to move or burn a token. The paid policy's owner can set the phase, propose a price (waits delay, never above MAX_PRICE), pause new mints, and renounce; it can never withdraw: only the immutable treasury can. Grep the source.
  5. 05The site's port. assets/creature.js is a line-for-line port of MoodSvg.renderEvolved; the thirty variants (five moods by egg, hatchling, juvenile and the three adult forms) match the output of the contract's own render script byte for byte against the source with md5 3962fdf8. The port draws the gallery and the simulator; a live contract's own svg() replaces it on the mint page.

Stated plainly: a gift transfer can block a wallet's own mint, because a wallet that holds one cannot mint (HoldsOneAlready); the recipient can move the gift away and then mint. Until the creature's ownership is renounced, its owner can swap the mint policy instantly, and a policy that reverts would stop minting and feeding; the plan is to renounce with the final policy at launch. A supply cap, maxSupply, is fixed at deployment and can never exceed 10,000; the royalty is ERC-2981 and advisory. Every number is a placeholder until the owner decides.