PIXELPETS DOCS
PixelPets capture orb

PIXELPETS DOCUMENTATION

One flat mint. One random roll. Your tier decides everything.

PixelPets is a collection of 1,200 pixel creatures on Robinhood Chain. Every creature costs the same to adopt. What you get is decided at random after you pay, and that result decides how much of every payout you earn — and how often you miss one entirely.

What PixelPets is

Three things happen, forever, in a loop:

1 · ADOPTPay 0.0115 ETH. You get a creature. You do not yet know what it is.
2 · REVEALYour tier and creature are drawn from a committed random seed and written on chain.
3 · EARNAdoption money pools into one pot. Rounds pay it out, weighted by tier.

Adopting and payouts run alongside each other. You never wait for a sellout. People adopt, they get revealed, a round pays them, more people adopt, and it repeats.

Higher tier means a bigger slice of every pot, and a bigger chance of fainting and skipping that pot completely. That trade is the whole game.

The five tiers

TierSupplyShare Payout weightFaint chance
Common54045.0%1×0%
Uncommon32427.0%2×5%
Rare19216.0%4×12%
Epic1089.0%8×20%
Mythic363.0%16×30%

Those counts are exact, not approximate. The contract shuffles a fixed list of 1,200 entries, so at a full mint there are precisely 36 Mythic — not "about 36". Total payout weight is 3,396.

Common never faints. That is precisely why it earns the least. Mythic earns sixteen times as much per round but sits out roughly three rounds in ten.

The nine creatures

Nine original hand-drawn creatures fill the five tiers. Your creature is decided by the same seed as your tier.

FennikFENNIKCommon
DuskbillDUSKBILLCommon
PiplingPIPLINGCommon
TidewispTIDEWISPUncommon
MosskinMOSSKINUncommon
EmberlingEMBERLINGRare
VoltbitVOLTBITEpic
SkywyrmSKYWYRMEpic
NullwyrmNULLWYRMMythic
Win a tier battle and move up a tier, and your creature becomes a creature of that new tier. The tier is the stat; the species is how it looks. A Pipling that beats a Tidewisp becomes a Tidewisp or a Mosskin.

Adopting

WhatAmountWhere it goes
Price0.01 ETHStraight into the shared pot
Fee0.0015 ETHProtocol revenue — never paid back out
Total0.0115 ETHOne transaction

Both legs are ETH, so there is nothing to approve — one signature and you are done. The cap is 10 per wallet. A full 1,200 mint puts 12 ETH into the pot.

Every creature costs the same whatever it turns out to be. You cannot pay more for a better roll, and you cannot see your roll before you pay.

The shared pot

There is one pot, in ETH. It is fed by adoption proceeds and any resale royalties. It is not a yield, a dividend, or a return on investment — it is a redistribution of money that adopters put in. If nothing new goes in, payouts shrink each round.

Payout rounds

A round opens once the pot holds at least the minimum (0.05 ETH — five adoptions). Opening a round takes a snapshot: how much is in the pot, the total weight of everyone revealed, and who is eligible.

your payout = pot × your weight ÷ 3,396

Rounded down, always, so a round can never pay out more than it holds.

A worked example

Pot of 1 ETH at a full mint (total weight 3,396):

TierWeightShare of a 1 ETH potvs 0.01 ETH cost
Common10.00029 ETH0.03×
Uncommon20.00059 ETH0.06×
Rare40.00118 ETH0.12×
Epic80.00236 ETH0.24×
Mythic160.00471 ETH0.47×

Across the whole 12 ETH a full mint puts in, a Common's cumulative share is roughly 35% of what it cost, and a Mythic's about 5.6×. Most holders receive back less than they paid. That is arithmetic, not pessimism — payouts are weighted, so the top of the table is funded by the bottom.

Tokens revealed after a round opens are not in that round's snapshot. They join the next one. This is what lets adopting and payouts run at the same time without a late adopter draining a round they were never counted in.

The faint roll

Each round, every creature rolls once against its tier's faint chance.

roll = keccak256(round seed, token id) mod 10000
faint if roll < your tier's faint chance in basis points

Faint and you earn nothing that round. Your share stays in the pot and rolls into the next one — no freezing, no permanent penalty, nothing to track between rounds. Common's chance is exactly zero, so a Common can never faint.

Expected steady-state payout is about 86% of each pot; the other ~14% is fainted share rolling forward.

Claiming

The contract never pushes money to thousands of wallets — that gets expensive and fragile. You pull your own:

Tier battles

You can challenge a creature exactly one tier above yours.

  1. Post a deposit (minimum 0.001 ETH).
  2. The holder has 48 hours to match it.
  3. They match: tiers stay put and your deposit goes to the pot.
  4. They ignore you: the two tiers swap, and your deposit comes back.
No notification is sent. If someone challenges your creature you have to be watching, or you lose the tier by default. Check the battle page.

Nothing is burned and nobody loses a creature — only the tier moves. Resolution is lazy: the swap lands the next time anyone touches either token.

How reveal works

Reveal happens in batches, as often as needed, while adopting continues.

COMMITWe publish the hash of a secret, before anything is requested.
REQUESTEveryone adopted since the last batch is locked into this one.
REVEALThe secret is published and mixed with the request block's hash.
ASSIGNTiers are dealt from the fixed pool by Fisher–Yates shuffle.

Each batch draws from the same fixed 1,200-entry pool without replacement, so the published counts hold exactly at a full mint no matter how the batches were sliced. Adopt early or late — the odds are identical.

The randomness

Chainlink VRF is not deployed on Robinhood Chain, and the cross-chain workaround needs LINK that cannot currently be acquired there. So PixelPets uses commit-reveal:

seed = keccak256(secret, blockhash of the request block)

Neither side controls it alone. We are bound by a hash published before we could see anything, and we cannot predict a future block hash at the moment we commit.

What this does prevent

The failure that actually matters and that you can check: a project owner watching who adopted what, and then picking a seed that suits them. The published commitment makes that impossible to hide.

What it does not prevent — stated plainly

If LINK ever becomes obtainable on Robinhood Chain, the contracts can be pointed at a VRF source without redeploying anything else.

Verify it yourself

Do not take our word for any of it.

  1. Take the commitment hash we published before the mint opened.
  2. Take the secret we published after the reveal.
  3. Check that keccak256(secret) equals that hash.
  4. Read revealSeed off the contract and confirm it equals keccak256(secret, blockhash).
  5. Re-run the Fisher–Yates shuffle from that seed offline and confirm every tier assignment matches the chain.

The same seed determines every faint roll and which creature each token shows, so all of it is reproducible. If our published numbers ever disagree with the chain, the chain is right.

First published commitment:

0x7060805bac9d33d08f7b27f24b07216b444c0f9906c16b57ea4b79e9badb68be
A secret is used once and never reused. A reused secret is a public secret, which would reduce the seed to the block hash alone.

Contracts

Robinhood Chain mainnet, chain id 4663.

ContractAddress
NFT (Roster)0xB3092468e8C3c43c13F1864210F8EE21cf91dB28
Pot0xa5F68b0A4386d29bCf912614801C3CDdfc79E69d
Battle0x471766659800b4FfCaA1fe9808DBCc3207EE8523
Randomness0x362dF79790973c9c403CdF2b72270c3D137CbDdb

Art and metadata are pinned to IPFS — nine creature images plus the pre-reveal orb, at 1024×1024.

images:   bafybeidufrcge3dyjed3adfxz4vtnk6rjg2vpdj46i6w5auwrzioy76mye
metadata: bafybeiawcnj3g5g4piatbsv4ckmivhursq6vuvqcynuq7to6ryoasgxj5y
The contracts are not audited and not yet source-verified on the block explorer. Until they are verified you cannot read the deployed code yourself — you are trusting that what is published matches what is running.

Numbers at a glance

Supply1,200
Adoption price0.01 ETH
Fee0.0015 ETH
Total per creature0.0115 ETH
Wallet cap10
Total payout weight3,396
Minimum pot to open a round0.05 ETH
Claim window7 days
Battle minimum deposit0.001 ETH
Battle defend window48 hours
Expected payout per round~86% of pot
Pot at a full mint12 ETH

Roadmap

None of this is built yet, and none of it is needed for the game to work. Each bolts on as its own contract, reading tier and ownership off the creature you already own.

FeatureWhat it adds
Gym takeoversLimited slots that pay out on volume routed through them. Outbid the holder to take one.
Squad raidsFour creatures, four roles, four wallets, all staked. Higher tiers roll better odds.
Per-creature walletsERC-6551, so the creature itself holds what it earns.
Training / vestingLeave a payout inside the creature to vest, or pull it early and pay a tax to the pot.
Fusion labBurn three lower-tier creatures to fuse a higher-tier one.
CursesSpend to raise a rival's faint chance for a single round.

Risks

The full version lives on the risks page. The short version, because it matters:

FAQ

Do I have to wait for a sellout to get paid?

No. That is the whole point of batched reveal. If five people adopt, they can be revealed and paid while the other 1,195 creatures are still unadopted.

Is adopting later worse than adopting early?

No. Every batch draws from the same fixed pool without replacement, so your odds are identical whenever you adopt.

What if I adopt right after a round opens?

You join the next round. You are not in the current one because you were not counted in its snapshot — which is also what stops anyone diluting a round that is already running.

Can I lose my creature?

No. Battles move the tier, never the creature. Nothing is burned.

Why does my creature look different after a battle?

Because species follows tier. Move up a tier and you become a creature of that tier. Your token id never changes.

What happens if a reveal fails?

Nothing is lost. The reveal has to land within about a minute of being requested; if it misses that window it reverts and is simply re-run. Until it succeeds those creatures stay unrevealed.

Is there a token?

Not yet. Everything today is ETH, and the contracts have no way to accept a token. $PXP, if it launches, would be a separate contract listed in the footer.