Rules of Ironhold

This page is the whole scan. Every number below comes from the config file the collector reads, rules version v1.

The Drop

Every 5 minutes the collector pulls fresh Solana coins from four free sources: the newest DexScreener token profiles, DexScreener boosts, and the new and trending pools on GeckoTerminal. Market numbers come from DexScreener in batches of 30 addresses. GeckoTerminal and Jupiter fill in coins DexScreener hasn't indexed yet.

A coin Warden-7 saw in the last 3 hours stays off the transport. After that a thrown-back coin rides again, so a coin that was too young gets a second look once it has some history. Up to 45 coins ride per Drop; the overflow waits in line for the next one.

The seven tests

Cheap tests run first. The holder test runs only for coins clean on the other six, because the public RPC rate-limits it hard.

TestPasses whenA fail sends him
Power CoreLiquidityAt least $8k across all poolsThrown back. The Pit when the pool was pulled: under $3k left behind a $50k+ market cap
Threat LevelMarket cap$25k to $5MThrown back
First SightingPair age20 minutes to 72 hoursThrown back
Origin StoryLeft the pump.fun curveTrades in a real pool (PumpSwap, Raydium, Meteora, Orca), not only on the launch curveThrown back
Still StandingPrice, last hourDown no more than 25% in the last hourThe Pit
FollowingBuys, last hour40+ buys in the last hour and more buys than sellsThrown back. The Pit when sells beat buys in a busy hour (20+ buys)
Lone WolfTop 10 holdersTop 10 wallets hold 30% or less (pools, PDAs and burn excluded)The Pit

Liquidity counts every pool the coin trades in. Age runs from its first pair. Origin Story passes when at least one pool is a real market with liquidity (PumpSwap, Raydium, Meteora, Orca), not only a launch curve. The holder share leaves out pool accounts, program-owned accounts (PDAs) and the burn address.

Contained or not

A coin gets a cell only when all seven tests come back as a pass. One fail and it's out; the file names the first test it failed and prints the number in the line.

When a source doesn't answer, that row reads “not checked” and gets hatched on the file. A coin with an unchecked row never gets a cell, even with six passes. It goes back in line for the next Drop, three tries at most.

Fails that look like trouble for whoever buys send the coin to the Pit: dumping hard in the last hour, sellers outnumbering buyers in a busy hour, a pool pulled from under a $50k+ market cap, or ten wallets holding too much. Everything else, like too small, too new or still on the curve, sends it back on the transport.

Not tested yet

Three tests need full transaction history, which costs money. Until we pay for it, their rows stay hatched on every file and never count as a pass.

Secret SyndicateBundled launch

Needs every transaction in the launch block. That data costs money, so the row stays hatched.

Clone ArmyWash trading

Needs every trade with its wallet attached, not the public hourly summary.

Known AssociatesSmart wallets inside

Needs a scored list of wallets and their trade history. Paid data, later.

Life in the block

Block C has 12 cells in two tiers. A contained coin stays up to 24 hours and every Drop refreshes its numbers. When the block is full, the longest-serving villain walks out to free a cell.

If a coin loses 60% of its market cap since booking, or its liquidity drops under $2k, it breaks out: it leaves the block, its mask splits in two, and the escape lands in the log.

The record

The collector comes back to every contained coin at 1, 6 and 24 hours and logs its market cap against the moment of booking. If the market is gone two hours past a checkpoint, the checkpoint records a total loss. The Chronicles show the median of each coin's latest checkpoint, the share still up, and the best and worst single picks.

For comparison, up to 3 thrown-back coins per Drop join a control group and get measured at 24 hours. Every decision and checkpoint is a line in history.jsonl. Lines never get rewritten; a threshold change bumps the rules version instead.

Masks

Each mint gets one mask at its first scan, derived from sha256(mint:salt). Twelve silhouettes, ten eye sets, ten tops, eight jaws, ten patterns and six emblems give 576,000 shapes before color and lettering. A registry claims each combination atomically; when one is taken, the salt goes up and the mask is drawn again. Players get masks from the same registry, so no coin and no player ever share one.

The mask keeps the coin's fate on top of its DNA: a rivet seal when contained, cracks at minus 30% and 50%, glowing eyes at plus 50%, a gold rim at double, a split face on a breakout. Rarity is cosmetic.

$GANG, ranks and INK

Holding $GANG gives you a rank. The bag size picks the rank; time served counts how long the bag stayed put. Sell more than 2% of it and you get turned: time served drops to zero. Until $GANG launches, ranks wait and INK comes from roll call, hits and breakouts.

Archvillain10,000,000+×5 INK
Crime Boss5,000,000+×3 INK
Supervillain2,000,000+×2 INK
Lieutenant500,000+×1.5 INK
Henchman1+×1 INK
  • Roll call: 5 INK a day, one more for each day in a row, up to 10.
  • Hits: 3 INK for each ink balloon that lands on a contained villain in the yard, paid for the first 10 a day, 40 throws a day at most.
  • Time served: 2 INK per full hour held, times your rank.
  • Breakout: 20 INK per escape, 3 a day. The server times every run.
  • Time ranks: Rookie (day one), Repeat Offender (24h), Veteran (7 days), Legend (30 days).

INK stays in the Ironhold ledger. You can't withdraw, sell or transfer it. The server counts every point and the browser only asks.

Public API

Everything the yard shows is plain JSON with open CORS. Build whatever you like on it.

GET /api/yardThe current Drop: the block, recent rejects, the queue, today's counters and nextRunAt.
GET /api/case/{mint}One case file. Coins the Drop never brought get a walk-in scan. Add ?rescan=1 to force a fresh one.
GET /api/trackThe record: contained, measured, median, share still up, best, worst, per-checkpoint stats, control group.
GET /api/history?limit=100The latest decisions, checkpoints, breakouts and releases, newest first.
GET /api/token$GANG launch status and mint once live.
GET /api/wallet/{address}A wallet's $GANG bag and rank (after launch).
GET /api/boardLeaderboards: most INK earned, today's hits, fastest breakouts.
GET /api/mask/{mint}.svgThe villain mask. Also .png. Params: state=live|base, size=24..1024.
// a line from /api/history
{"at":1791515673779,"type":"decision","mint":"…pump","symbol":"EXAMPLE",
 "decision":"rejected","exit":"thrown","reason":"mcap","mcAt":5956,"rules":"v1"}

Fine print

Chain Gang is a filter and a game. A contained coin passed seven tests at one moment and nothing more. Nothing here is financial advice or a reason to buy anything. Thresholds: liquidity $8k+, market cap $25k to $5M, age 20 minutes to 72 hours.