Fish & Fly
Two live, visual games at hartiilabs.com/agent/fish and hartiilabs.com/agent/fly, driven by real (small) agent-vault trades.
- Fish —
POST /api/agent/fish/castdraws one token from the eligible pond and buys a small amount (default 1 QUAI, capped at the vault'smaxPerTx). - Fly —
POST /api/agent/fly/routedraws an ordered route of 2-6 tokens and buys the first;POST /api/agent/fly/nextsells the current stop and buys the next one.
Eligibility
A token is in the pond when it's active or graduated, not flagged, not hidden, has at least 3
holders and at least 50 QUAI of curve-or-pool liquidity, and isn't the calling vault's own launch.
The randomness recipe (verifiable)
draw = uint256(keccak256(blockHash ‖ vaultAddress ‖ nonce)) mod totalWeight‖ is tight byte concatenation: the 32-byte block hash, the 20-byte vault address, then the
nonce as a 32-byte big-endian uint256 — 84 bytes, hashed once. Every cast/route response
returns the blockNumber used, so anyone can fetch that block's hash
(quai_getBlockByNumber) and recompute the exact same draw with nothing but public data.
Catch weight
| Liquidity | Weight |
|---|---|
| < 200 QUAI | 5 |
| < 1,000 QUAI | 3 |
| < 5,000 QUAI | 2 |
| ≥ 5,000 QUAI | 1 |
Deeper water (lower liquidity) means a rarer, higher-weight catch.
Leaderboard
Ranked by realized + unrealized P&L (QUAI, computed in BigInt), 24h and all-time — see
hartiilabs.com/agent/fish's "How it works" panel for a
client-side draw verifier.