Xellies

Jellyfish that breed on Xahau.

Every Xellie is a 32-byte genome minted as a URIToken by a hook. Hatch a polyp, raise it into a medusa, spawn it with another. The ledger rolls each offspring one ledger after you ask, so nobody can pick the outcome, including us.

Sign in with Xaman to hatch and spawn on Xahau.

Your reef

Sign in with Xaman to hatch polyps and spawn your medusae. Each action is a transaction you approve in Xaman, sent to the Reef at rXELLiESgJYepe35dbkpPByi3uas6jLAW.

    A life in four stages

    The rules come from real jellyfish biology, including the one species that can age backwards.

    i

    Polyp

    Every Xellie begins anchored to the reef. A polyp can't spawn. It matures after 4,096 ledgers, roughly four hours.

    ii

    Medusa

    A free-swimming adult that can spawn with another medusa you own. Each spawn is followed by a longer rest: 1,800 ledgers after the first, doubling each time.

    iii

    Spent

    Vitality is written in the genome: three to seven spawns. When it runs out the medusa stops spawning, but it stays yours and still counts toward collections.

    iv

    Rebirth

    Immortal Xellies carry the Turritopsis flag, about 1.6% of genesis. A spent immortal can revert to a polyp with the same genes and full vitality.

    Planned for v2

    Spawning lab

    This runs the hook's genetics byte for byte, with the seed built the same way: the intent id, the last ledger hash and a ledger nonce (random here), plus a running tide that carries every earlier spawn in this session.

    Parent A

    Press Spawn. The offspring appears here with every allele traced to its parent.

    Offspring

    Parent B

    TraitParent AOffspringParent BOffspring shows
    CommonTidalAbyssalMythicBloom First chip is expressed; the three smaller ones are dormant. from Afrom Bresonancewilddrift

    Plate I. Genesis specimens

    Nine freshly rolled genesis polyps, drawn as adults. Names are derived from the genome: bell shape gives the genus, glow colour the species. Pick one to send it to the lab as parent A.

    Rendered live from each genome. Nothing here is a stored image.

    What's in 32 bytes

    The whole creature lives in its URIToken's URI as xellies:1: plus 64 hex characters. Any wallet or explorer can decode it without asking our servers.

    12 traits, 4 alleles each (bytes 0–23)genvitlumflagsalt

    Twelve traits, four alleles

    Bell shape, bell hue, glow hue, glow pattern, tentacle count, tentacle length, tentacle style, oral arms, pulse rhythm, clarity, rim and aura. Each has one expressed allele and three dormant ones, like CryptoKitties. All four are public in the token; they just don't show in the artwork.

    When two medusae spawn, each parent's dormant alleles can surface a slot (an even chance at each step), then each slot takes the allele from one parent or the other. Two jellies that look ordinary can carry something rare.

    Lumen, the glow intensity, blends instead: the offspring gets the parents' average, give or take 40.

    Resonance mutations

    When the two alleles meeting in a slot are partners, there's a one-in-four chance (one-in-two during a Bloom) they fuse into the next tier.

    Partners meetingCan become
    0+1, 2+3, 4+5, 6+7 (common)8, 9, 10, 11 (tidal)
    8+9, 10+11 (tidal)12, 13 (abyssal)
    12+13 (abyssal)14 (mythic)
    14+14, only during a Bloom15 (bloom)

    Drift

    After inheritance, every one of the 48 allele slots gets its own roll. About one in 43 becomes a wild allele, freshly rolled as if at genesis. Another one in 43 drifts to a neighbouring allele of the same tier.

    How hard is it to guess?

    Every rule is public and every allele is on the ledger, so nothing here is secret. The outcome is still hard to call. Each spawn makes over 200 independent random decisions from a seed that doesn't exist until the ledger closes. Even knowing both parents' full genomes, the best possible guess at any single trait of the offspring is right about 33% of the time, and the whole look almost never.

    How it runs on Xahau

    Two hooks on one Reef account share a hook namespace. No servers decide anything: the website only reads the ledger and builds transactions for your wallet to sign.

    1. You pay the Reef

      A Payment with hook parameter OP=H hatches a genesis polyp. OP=S with token ids A and B spawns two of your medusae.

    2. reef_pay records the intent

      It checks price, ownership, maturity, rest and vitality, writes an intent keyed by your transaction id, then emits an Invoke to itself.

    3. Next ledger, reef_roll rolls

      The seed hashes your intent id, the last ledger hash, a ledger nonce and the Reef's tide, a running hash of every roll before yours. None of it can be known when you sign.

    4. A Remit mints your jelly

      The hook emits a Remit with MintURIToken to your account. The callback marks the intent granted, or failed so the operator can refund it.

    Verify, don't trust

    Each hook's bytecode is referenced on ledger by its HookHash, the SHA-256 of the wasm. Build the source in a pinned container, hash it, compare. If the digests match, the published code is the running code.

    Both hooks pass Xahau's guard checker: about 47,000 and 53,000 worst-case instructions of the 65,535 allowed. That ceiling is why the design uses two hooks rather than one.

    $ HOOKAPI=./hookapi ./build.sh
    genetics: C vs JS parity
    2000 genomes compared, 0 mismatches
    Hook validation successful!   # reef_pay
    Hook validation successful!   # reef_roll
    <sha256>  build/reef_pay.wasm
    <sha256>  build/reef_roll.wasm
    
    # compare with the HookHash entries on the Reef account

    Proposed numbers

    All of these are keeper-settable state, not constants, except the rest schedule and vitality range, which are in the hook.

    Genesis polyps, first season4,096
    Hatch price20 XAH
    Spawn fee5 XAH
    Maturity4,096 ledgers
    Rest after spawn n900 × 2n ledgers
    Vitality3–7 spawns, genetic
    BloomsAnnounced windows

    Rarity that holds

    We simulated 3,000 jellies mating at random for eight generations with one Bloom. Tidal alleles rose from 15% to 26% of expressed traits, abyssal from 4.7% to 7.0%, mythic held near 2%, and bloom alleles appeared at about one per 10,000 traits. The extra randomness makes offspring harder to call without cheapening rarity.

    Immortality fades fast under random mating, to under half a percent in one generation and under 0.1% by the fourth. Keeping it alive takes pairing immortals deliberately, which is exactly the kind of breeding project that gives a collection a story.

    Supply stays bounded because every medusa has finite vitality and each rest doubles. A genesis jelly with vitality 7 needs over 200,000 ledgers of rest to use it all.

    What we borrowed

    Two predecessors shaped the rules: the game that made breeding collectibles famous, and the card game proving Hooks can run this kind of thing cleanly.

    From CryptoKitties

    Dormant alleles
    Kept, and published openly. Four alleles per trait plus per-slot drift make breeding a puzzle with real surprises.
    Cooldowns that grow
    Kept, and paired with a hard vitality cap, because cooldowns alone slowed supply without ever stopping it.
    Gas-heavy breeding
    Avoided. Hooks run inside the ledger at Xahau's fees, so spawning stays cheap as the game grows.
    Siring market
    Planned for v2 as on-ledger sire offers, paid out by an emitted Payment.

    From XahauCards

    Pay, then roll a ledger later
    Adopted. Randomness from a hash that didn't exist at signing time.
    Record before you emit
    Adopted. Every purchase is written down first; a failed mint is marked on ledger, visible and refundable.
    Reproducible builds and published hashes
    Adopted, with a build script that also proves the website and the hook share one genetics engine.
    Self-describing tokens
    Taken further: the genome is the URI, so a Xellie can be rendered from the ledger alone.