Contracts · Robinhood Chain · 4663

Three contracts. Read every line.

The Hatchery launches flies and keeps their genomes. A FlyPurse pays each fly's maker. A Swarm shares a team's pot. All three sit on top of Pons v2, the same launch protocol that runs hundreds of coins a day on this chain.

NetworkRobinhood Chain · 4663
Unit tests63 passing
Fork tests on live Pons9 passing
Auditscheduled · 30 Sep 2026
01 · Addresses

Where they live.

explorer · robinhoodchain.blockscout.com
Hatcheryfruitfly.family

Launches every fly, stores genomes, runs swarms.

0x3799Ba1E7b46F3221091b1DAB574DB4CE3460Ab70x3799Ba460Ab7
FlyPursefruitfly.family · implementation

One clone per fly. Collects and splits its fees.

0xa4FD6338a2e3eBC117b5Cc46d3D6DbCCCa8E8Ce80xa4FD638E8Ce8
Swarmfruitfly.family · implementation

One clone per swarm. Shares the team's pot equally.

0x7Fd3A5D712A7bD28c38A4DE9bc1Ce00f82f1497B0x7Fd3A5f1497B
Pons launch factoryPons v2

Deploys each token and its bonding curve.

0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e0x7eD59801EC7e
Pons fee escrowPons v2

Holds swept fees until the purse claims them.

0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e0xd3AFEB16Ac9e
Pons v4 hookPons v2

Takes fees after graduation and sends them to the same escrow.

0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be0440xE5e7026Be044
02 · What each one does

Every function, and who may call it.

Hatcherydeployed once

Every fly goes through it. One call launches the Pons token with the Hatchery as fee recipient, makes the opening buy, clones a purse, hands the fee stream to it, writes the genome and records the fly.

01
All or nothingToken, purse, genome and record land in one transaction or not at all.
02
TaggedEvery launch salt starts with bytes8(keccak256("fruitfly.world")), so our coins are provable.
03
SnapshotsThe house and swarm cut are copied into each purse at hatch and can never be changed for that fly.
solc 0.8.24 · via-IR · EIP-1167 clones · SSTORE2 genomes
functionwhowhat it does
hatch(params, genome, minOut)anyoneLaunch a fly paired with ETH or an approved stock. value = Pons launch fee (+ the opening buy on ETH pairs).
createSwarm(name)anyoneStart a swarm and its pot. You are its captain.
joinSwarm(token, id)makerSend your fly to a swarm, once.
genomeOf(token)viewThe raw genome bytes, readable by any contract.
page(start, n)viewFlies in hatch order, for sites and indexers.
setHouseBps(bps)ownerHouse cut for future flies. Hard cap 30%.
setPaused(bool)ownerStop new hatches. Existing flies are untouched.
setTreasury(addr)ownerWhere the house share of new flies goes.
eventsHatchedSwarmCreatedSwarmJoined
03 · Permissions

Who can do what, in one table.

actionanyonethe makerour owner keyPons owner
Hatch a flyyesyescan pausecan halt
Change a fly's genomenononono
Push a fly's fees to its makeryesyesyesno
Move future income to a new walletnoyesnono
Change an existing fly's splitnononono
Change the split for future fliesnonowithin capsno
Pause new hatchesnonoyesno
Take money out of a purse or potnononono
Redirect a coin's fee streamnononoafter notice

"after notice" means Pons can redirect any Pons coin's fee stream after a public three day waiting period, and "can halt" means Pons can switch its launches off. Those powers belong to Pons, apply to every coin on it, and we cannot remove them. The indexer watches for a redirect on every fruitfly coin and the fly's page will show a warning if one is ever proposed.

04 · Tests

Proven against the live chain, not just mocks.

The fork tests run against the real Pons contracts on a copy of Robinhood Chain. Nothing is broadcast, but every call hits the deployed code, so what passes here is what happens on mainnet.

cd contracts
forge test                        # unit, mocked Pons
forge test --match-contract ForkTest \
  --fork-url https://rpc.mainnet.chain.robinhood.com
A fly hatches through the live Pons factory in one transactiontest_fork_hatch_wires_everything
The purse ends up as the token's fee recipient, and the genome reads back byte for bytecurve.deployer() == purse · genomeOf(token) == genome
The maker's opening buy is not hit by the snipe taxtest_fork_dev_buy_is_not_snipe_taxed
A stranger's 1 ETH buy puts exactly 0.017 ETH in the purse, split 70/10/20 to the weitest_fork_fees_split_exactly
collect() keeps working after the token graduatestest_fork_graduation_does_not_brick_collect
Fees earned before a fly joins a swarm stay with its makertest_fork_join_swarm_after_hatch
A Google-paired fly hatches with an opening buy in GOOGL, untaxedtest_fork_googl_hatch_with_opening_buy_untaxed
A stranger's 2 GOOGL buy puts exactly 0.034 GOOGL in the purse, split 70/10/20, and the swarm pot pays out in GOOGLtest_fork_googl_fees_split_exactly
A Google-paired fly graduates at 24.2 GOOGL and collect() still claims its GOOGLtest_fork_googl_graduation_does_not_brick_collect
Hatch your flyHow it works

Connect a wallet

No wallet found in this browser. Install one, then reload this page.

fruitfly.family runs on Robinhood Chain (4663). Your wallet will be asked to add it if it has not already.