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:
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.
The five tiers
| Tier | Supply | Share | Payout weight | Faint chance |
|---|---|---|---|---|
| Common | 540 | 45.0% | 1× | 0% |
| Uncommon | 324 | 27.0% | 2× | 5% |
| Rare | 192 | 16.0% | 4× | 12% |
| Epic | 108 | 9.0% | 8× | 20% |
| Mythic | 36 | 3.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.
FENNIKCommon
DUSKBILLCommon
PIPLINGCommon
TIDEWISPUncommon
MOSSKINUncommon
EMBERLINGRare
VOLTBITEpic
SKYWYRMEpic
NULLWYRMMythicAdopting
| What | Amount | Where it goes |
|---|---|---|
| Price | 0.01 ETH | Straight into the shared pot |
| Fee | 0.0015 ETH | Protocol revenue — never paid back out |
| Total | 0.0115 ETH | One 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.
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):
| Tier | Weight | Share of a 1 ETH pot | vs 0.01 ETH cost |
|---|---|---|---|
| Common | 1 | 0.00029 ETH | 0.03× |
| Uncommon | 2 | 0.00059 ETH | 0.06× |
| Rare | 4 | 0.00118 ETH | 0.12× |
| Epic | 8 | 0.00236 ETH | 0.24× |
| Mythic | 16 | 0.00471 ETH | 0.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:
- Go to the claim page and connect.
- One transaction pays every creature you own that stayed on its feet.
- You have 7 days. Miss it and that share rolls into the next round — it is not held for you.
Tier battles
You can challenge a creature exactly one tier above yours.
- Post a deposit (minimum 0.001 ETH).
- The holder has 48 hours to match it.
- They match: tiers stay put and your deposit goes to the pot.
- They ignore you: the two tiers swap, and your deposit comes back.
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.
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
- There is no cryptographic proof of fairness the way VRF has one.
- A colluding block sequencer and project owner could influence the outcome.
- We see the result the moment the block lands, before revealing, and could stall a round by not revealing. That is visible on chain, and a stalled round can be superseded after its claim window — but it is possible.
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.
- Take the commitment hash we published before the mint opened.
- Take the secret we published after the reveal.
- Check that
keccak256(secret)equals that hash. - Read
revealSeedoff the contract and confirm it equalskeccak256(secret, blockhash). - 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
Contracts
Robinhood Chain mainnet, chain id 4663.
| Contract | Address |
|---|---|
| NFT (Roster) | 0xB3092468e8C3c43c13F1864210F8EE21cf91dB28 |
| Pot | 0xa5F68b0A4386d29bCf912614801C3CDdfc79E69d |
| Battle | 0x471766659800b4FfCaA1fe9808DBCc3207EE8523 |
| Randomness | 0x362dF79790973c9c403CdF2b72270c3D137CbDdb |
Art and metadata are pinned to IPFS — nine creature images plus the pre-reveal orb, at 1024×1024.
images: bafybeidufrcge3dyjed3adfxz4vtnk6rjg2vpdj46i6w5auwrzioy76mye metadata: bafybeiawcnj3g5g4piatbsv4ckmivhursq6vuvqcynuq7to6ryoasgxj5y
Numbers at a glance
| Supply | 1,200 |
| Adoption price | 0.01 ETH |
| Fee | 0.0015 ETH |
| Total per creature | 0.0115 ETH |
| Wallet cap | 10 |
| Total payout weight | 3,396 |
| Minimum pot to open a round | 0.05 ETH |
| Claim window | 7 days |
| Battle minimum deposit | 0.001 ETH |
| Battle defend window | 48 hours |
| Expected payout per round | ~86% of pot |
| Pot at a full mint | 12 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.
| Feature | What it adds |
|---|---|
| Gym takeovers | Limited slots that pay out on volume routed through them. Outbid the holder to take one. |
| Squad raids | Four creatures, four roles, four wallets, all staked. Higher tiers roll better odds. |
| Per-creature wallets | ERC-6551, so the creature itself holds what it earns. |
| Training / vesting | Leave a payout inside the creature to vest, or pull it early and pay a tax to the pot. |
| Fusion lab | Burn three lower-tier creatures to fuse a higher-tier one. |
| Curses | Spend 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:
- The owner can withdraw the entire pot, instantly, with no delay and no notice. Holding a creature gives you no claim on those funds.
- Most holders receive back less than they paid. Payouts are weighted; the top is funded by the bottom.
- The 0.0015 ETH fee is never paid back out.
- Randomness is commit-reveal, which is weaker than VRF.
- Claims expire after 7 days.
- Your tier can be taken in a battle if you do not defend within 48 hours.
- Not audited. Not source-verified.
- A PixelPet confers no equity, ownership or shareholder rights in anything.
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.