Docs · v0.1

How $JUSTICE works.

A plain-English explainer of the platform, the bot, and the blacklist.

01 · The thing

What is $JUSTICE?

$JUSTICE is a launchpad on top of pump.fun. You use it the same way you'd use any pump.fun launcher — connect a wallet, fill in a name and ticker, sign one transaction, and your coin goes live with the standard bonding curve.

The thing that's different is what gets attached to your coin in the background. Every launch ships with a public blacklist of around 500 wallets that have a documented track record of getting private allocations, shilling the chart to their audience, then dumping ninety minutes later. A bot watches those wallets on a low-latency mempool feed. The instant one of them broadcasts a buy or a sell on your coin, the bot lands a counter-trade one slot ahead.

Their buy fills further up the curve than they expected. Their sell exits into a lower price than they expected. Either direction, the spread they were trying to take from your holders gets routed back to your launch's buyback-and-burn instead.

!
The thesis is deterrence. The bot doesn't need to win every trade. It needs to make the KOL playbook negative-EV often enough that some of them stop running it. Make it expensive to show up, and most of them won't.
02 · Skim it

The 30-second version

01
You launch a coin

Standard pump.fun mint. One signature, your wallet pays, your coin.

02
The blacklist gets attached

Around 500 wallets from kolscan, plus anyone you add manually in the wizard.

03
The bot starts watching

Helius Yellowstone gRPC stream, sub-50ms TX notification on the pump.fun program.

04
They trade. We land first.

Jito bundle one slot ahead. Frontrun their buy, sandwich their sell.

05
Every hit is on-chain

Public dashboard, public TX signatures, paste them into Solscan yourself.

06
Spread routes to buyback

What we pull from them goes into your coin's buyback-and-burn, logged per-launch.

03 · Why this exists

The problem we're solving

If you've been on Solana for more than a week you've watched this happen in real time, probably to a coin you bought. The mechanic is so consistent you can set a timer to it.

  1. A KOL gets pinged about a launch. They get a private allocation through a throwaway wallet — sometimes a few SOL, sometimes a percent of supply, always before the chart is public.
  2. The chart goes live. They post about it. Their followers buy.
  3. At some point in the next two hours, the throwaway wallet sells. The chart breaks. The followers are holding.
  4. The KOL deletes the tweet, or doesn't. Either way they're up. Their followers are down. Their followers don't make the connection because they're looking at the wrong wallet.

The wallets are knowable. kolscan.io already catalogs them — who's connected to whom, which throwaway wallets fund which "personality" addresses, which addresses have a P&L pattern that only makes sense if you got the buy 30 minutes before the chart went public. None of this is private information. The only thing missing is consequences.

04 · How it works

What happens when you launch

Here is the entire pipeline, end to end, from the moment you click "launch" to the moment a flagged wallet eats slippage on your curve. No hand-waving.

T+0s
You sign the mint tx in your own wallet. Standard pump.fun create instruction. We don't custody anything.
T+~2s
Mint confirms. Your launch row in our DB flips to status=live.
T+~4s
Bot's blacklist cache refreshes (every 2s by default), picks up your mint, and adds your blacklist to its Helius Yellowstone subscription filter.
T+later
A flagged wallet broadcasts a tx involving the pump.fun program and your mint. Bot sees it before it lands.
+~50ms
Decoder parses the trade: buy or sell, which mint, which wallet, how much SOL.
+~5ms
Bot builds a counter-instruction (frontrun-buy or sandwich-sell), wraps it with ComputeBudget + Jito tip, signs.
+~30ms
Bundle goes to Jito Block Engine. If our tip wins the priority race, our tx lands one slot ahead of theirs.
+1 slot
Their tx fills behind ours, against the curve we just moved. Spread captured.
+~4s
A row appears on your launch dashboard with both signatures, the size, and the realized profit in SOL.
05 · The mechanic

What the bot actually does

The bot is one long-running process. It doesn't run per-launch — it runs once, watching every live launch's combined blacklist at the same time. When a flagged wallet trades on any of those mints, it spawns a counter-bundle for that specific launch.

The watch

Public RPC websockets are too slow for this — by the time a websocket tells you a tx happened, the tx has already landed and the price has moved. The bot uses a Helius Yellowstone gRPC stream, which is a paid mempool feed that gives you sub-50ms notification of transactions while they're still in banking-stage. The subscription filter is the union of every live launch's blacklist plus the pump.fun program ID. Anything matching gets streamed to the decoder.

The decode

pump.fun transactions have a known instruction layout. The bot parses the inner instruction, identifies whether it's a buy or a sell, pulls out the mint, the trader, and the SOL amount, and confirms the trader is on the blacklist for that specific mint. If the same wallet is on five live launches' blacklists, this fans out into five concurrent counter-trades (capped by BOT_MAX_CONCURRENT).

The counter

The counter-instruction depends on the trade's direction and the launch's punishment mode. The bot constructs a VersionedTransaction with a ComputeBudget instruction (so we can pay extra to compute), the actual pump.fun buy or sell, and a Jito tip instruction (paying validators to include us in the next slot). Then it signs and submits as a Jito bundle.

The tip is the cost of doing business. Every bundle costs the configured tip whether it lands or not. The bot tunes position size and tip per-launch so the expected spread is bigger than the tip. On a tiny KOL buy at a fresh curve the math sometimes doesn't work — the bot will skip rather than chase a losing trade.
06 · The two moves

Frontrun vs. sandwich, plainly

These are the two things the bot does. They're not the same thing. If you already know the difference, skip ahead.

Frontrun (their buy)

A flagged wallet broadcasts a buy. The bot sees it before it lands and sends its own buy with a Jito tip high enough to land in the slot before theirs. The bot's buy fills first, which moves the bonding curve up. Their buy fills second, against the curve we just moved. They get worse fills than they expected. Their slippage is our spread.

Sandwich (their sell)

A flagged wallet broadcasts a sell. The bot sells first, dumping its position into the curve at the current price. Their sell fills second, into the curve we just dumped on, so they exit at a worse price than they expected. This only works if the bot is already holding tokens of that mint, which means either it accumulated from a prior frontrun-buy, or someone seeded its address on launch.

i
Cold-start matters. A brand-new launch starts in buy-only mode because the bot's wallet has no inventory yet. After the first few successful frontrun-buys, the bot has tokens, so sandwich-side becomes available. You can also enable sandwich-side from minute zero by transferring a small amount of supply to the bot's address right after the wizard mints.
07 · The list

Where the blacklist comes from

There are two layers, and you choose how much of each goes onto your launch.

The global list

Around 500 wallets sourced from kolscan.io's leaderboard data — addresses with documented patterns of pre-launch accumulation, audience-shilling, and exit timing inconsistent with public information. The list is editorial. Addresses can be removed by the community via review. It's not a court ruling, it's a working hypothesis that gets refined as more data comes in.

Your launch's list

In the launch wizard you can opt in or out of the global list with a single toggle, and you can paste in additional wallet addresses (someone who burned you on a different launch, a wallet you've been tracking yourself, etc.) to add them just for your coin. Per-launch additions are isolated to that launch and don't affect anyone else.

You don't have to use the global list. If you'd rather curate your own from scratch, untoggle useGlobalBlacklist in the wizard and the bot will only watch wallets you specifically add.
08 · Step by step

Launching a coin, in order

The whole flow takes about ninety seconds. You'll need a Solana wallet (Phantom or Solflare) with enough SOL for the pump.fun mint fee and a little gas. That's it.

  1. Open the launcher. Go to /app/new from the nav. If your wallet isn't connected the page will prompt you.
  2. Fill in the basics. Name, ticker, description, image URL. These pass straight through to pump.fun's metadata — what you put here is what shows up on Solscan and on the pump.fun page.
  3. Configure the bot. Toggle useGlobalBlacklist on or off. Pick a punishment mode (see below). Optionally paste in any custom wallets you want watched.
  4. Sign in. First time only — you'll sign a SIWS (Sign-In With Solana) message. No tx, no fee, just a signature so we know the launch belongs to you and you can manage its blacklist later.
  5. Sign the mint. Your wallet pops the standard pump.fun create transaction. You pay the mint fee, the coin goes live.
  6. Done. Within a few seconds the bot picks up your mint and starts watching. The dashboard shows up empty until something happens.
The mint is permissionless. Once it's live, the coin is yours. We can't pause it, freeze it, or rug it. If we shut the bot off tomorrow, your coin still exists exactly as it did before — same curve, same supply, same metadata. The bot is an addition, not a dependency.
09 · Watching

The launch dashboard

Each of your launches has a page at /app/launches/[id] with a live execution feed. The feed polls for new bot activity every four seconds and lists every counter-trade attempt the bot has made on your mint, in chronological order.

Each row tells you:

  • Which wallet triggered it — the flagged address that broadcasted the underlying trade.
  • What direction — was the bot frontrunning a buy or sandwiching a sell.
  • Status — pending, submitted, landed, or failed. Most attempts land. Some lose the priority race; those show as failed and you can see what the tip was.
  • Bundle signature — clickable link to the on-chain tx. You can paste this into Solscan and see exactly what happened, with no help from us.
  • Profit (lamports) — realized SOL captured on that bundle, after the Jito tip.
10 · Choices

Punishment modes

When you launch a coin, you pick how aggressive the bot is on it. There are three options. You can change this later from the launch settings.

frontrun_buy
Bot only acts when a flagged wallet buys. Cheaper, quieter, accumulates inventory the bot can use later. Recommended default for new launches.
frontrun_sell
Bot only acts when a flagged wallet sells. Requires existing inventory. Useful if you've seeded the bot's address with supply and want to deny KOLs an exit.
frontrun_buy_and_sell
Both directions. Maximum coverage, maximum tip cost. Recommended once the launch has volume and the bot has accumulated some inventory.
11 · Receipts

The stack

We're showing you the components on purpose. None of this is custom middleware you have to trust. It's the same infrastructure every serious MEV operator on Solana is already using.

Mempool feed
@triton-one/yellowstone-grpc against a paid Helius Yellowstone endpoint. Sub-50ms tx notification.
Bundle submission
Jito Block Engine — paid priority bundles, regional endpoints (Frankfurt, Amsterdam, NY, Tokyo).
pump.fun client
Hand-rolled. Discriminators are sha256 of global:<name>. We're encoding the same instructions pump.fun's own UI does.
Bot runtime
Long-running tsx process, hosted geographically near a Jito leader region for latency.
Web app
Next.js 16 + React 19 + Prisma 7 over SQLite (Postgres in production). SIWS auth via tweetnacl signature verification.
Wallet
@solana/wallet-adapter — Phantom and Solflare. We never touch your private key.
12 · Trust nothing

How to verify any of this

You don't need our dashboard to confirm the bot is real. Every claim on this site lands on-chain and you can check it yourself.

  1. Pick any execution row. Either on a public launch dashboard or on the marketing landing page's live feed.
  2. Copy the bundle signature. Every row has one. It's a real Solana tx hash.
  3. Paste it into Solscan (or your block explorer of choice). You'll see two transactions in the same slot — the bot's, and the flagged wallet's. The bot's lands first.
  4. Look at the program calls. Both touch the pump.fun program. The one that lands first moves the curve; the one behind it fills against the new curve.
  5. Look at the bot's wallet. Sum the realized SOL across executions. Compare to what we say on the dashboard. The numbers will match because they have to — they're the same data, just one source is signed by the chain and the other is rendered by us.
If you ever find a discrepancy between what we say happened and what the chain says happened, the chain is right. Tell us. We'll fix it.
13 · The token

$JUSTICE tokenomics

$JUSTICE itself launches the same way every coin on the platform launches — fair, on pump.fun, no presale, no insider allocation, no team unlock cliffs. Whatever happens to it on the curve happens publicly, in front of everyone, and the same blacklist that protects every other launch on the platform protects $JUSTICE too.

Supply
1,000,000,000 — fixed
Distribution
100% to the pump.fun bonding curve. Zero pre-mint, zero team allocation.
Tax
None on transfers. The pump.fun curve fee is the only fee until graduation.
Blacklist coverage
Maximum. Both sides — frontrun_buy_and_sell.
Bot revenue split
SOL captured on $JUSTICE bundles routes back to platform maintenance fees. Logged on the dashboard.
14 · Common questions

FAQ

Is this legal?

Frontrunning public on-chain transactions on a permissionless DEX is not illegal in any jurisdiction we operate in. It's the same activity every Solana MEV operator engages in. The novel part is who we choose to target: wallets that themselves run a documented playbook of pre-launch accumulation and audience-shilling, which is itself in a legal gray zone in most places. We're not making a legal argument. We're making an economic one.

What if I'm on the blacklist by mistake?

The list is editorial and the criteria are public. If you can show that an address tagged to you doesn't fit the pattern — e.g., you can demonstrate the wallet's P&L is consistent with public information — it gets removed in the next review cycle. We'd rather have an under-broad list that's accurate than an over-broad one that catches honest people.

What stops a KOL from just using a fresh wallet?

Their entire operation is tied to one wallet. The copy-traders mirroring them in real time, the leaderboard rank that gets them into rooms, the Birdeye / Bullx audience that watches their address live, the screenshots they use to prove a call hit — all of it keys to that single pubkey. That wallet is the asset.

A fresh wallet has none of that flow. Nobody copy-trades an unknown address. A shill post about a coin doesn't move price unless the audience can see the poster's wallet behind it. They can't even publicly credit themselves for the trade without doxxing the new address — at which point it joins the list. Switching wallets isn't a workaround. It's abandoning the thing that made them a KOL in the first place.

Does the bot frontrun retail buyers?

No. The bot's filter is exclusively the blacklist. A wallet that isn't on the list — yours, a normal trader's, anybody's — is invisible to the bot. It will not see your tx, it cannot frontrun your tx, it doesn't run on you. The whole subscription filter is the blacklist plus the pump.fun program ID; if you're not in that set, you don't enter the pipeline at all.

What does the bot need to keep running?

A funded hot wallet (we keep it small — it's the bot's float, not a treasury), a paid Helius Yellowstone gRPC endpoint, a paid Solana RPC, and a Jito Block Engine connection. The bot wallet's address is public and so are its inflows and outflows. If it ever runs dry, the dashboard will say so, and bundles will start failing visibly until it's refilled.

What happens to the SOL the bot captures?

Per launch: SOL captured on bundles for that mint routes to that launch's buyback-and-burn address. Per platform: a fixed cut covers Helius Yellowstone and Jito infra (which is most of the cost of running this). The bot itself is a thin pipe — it doesn't accumulate. Numbers are on the dashboard, and the addresses are public so you can audit them yourself.

Can I run this myself, against my own coin only?

Yes — that's the simplest version of the whole product. Launch your coin, leave the global list off, paste in only the wallets you care about, pick your punishment mode, done. You don't need to interact with the rest of the platform. The bot watches your private list the same way it watches everyone else's.

What if I want my coin off the platform?

The mint is yours. Pump.fun doesn't care that we exist; your coin's bonding curve, supply, metadata, and ownership all live on pump.fun and are unaffected if you stop using us. You can mark your launch inactive in our dashboard, which makes the bot stop watching its blacklist. The coin keeps trading exactly as it would have.

Why pump.fun specifically?

Two reasons. One, pump.fun is where the KOL playbook actually runs right now — that's where the wallets live, that's where the volume is, that's where the deterrence has to happen. Two, pump.fun's bonding curve is mechanically simple enough that the bot's counter-trade math is tractable. On a more complex AMM the spread the bot can capture becomes harder to size, the latency budget gets tighter, and the tip economics stop working.

How do I know the dashboard isn't fake?

Every execution row links to a real bundle signature. Click one, paste it into Solscan, you'll see the two real transactions on the chain. We can't fake that. If we tried, anyone who clicked through would catch it within a second. The whole project's pitch only works if the receipts hold up, so the receipts are the entire UI.

15 · Definitions

Glossary, for normies

Bonding curve
A pricing formula. The more tokens have been bought from the curve, the more expensive the next token is. pump.fun coins live on a bonding curve until they "graduate" to a real DEX.
Slot
Solana's unit of time. About 400 milliseconds. Transactions get included in slots; landing one slot ahead of someone means yours executes ~400ms before theirs.
Mempool
The pool of transactions that have been broadcast but not yet included in a block. If you can read the mempool fast enough you can see what's about to happen and act on it.
Jito bundle
A group of transactions submitted together with a tip to validators, in exchange for being included atomically and in a specific order. The mechanic that makes frontrunning on Solana actually work.
Frontrun
Submitting your transaction with priority so it lands before someone else's, on purpose, knowing what theirs is going to do.
Sandwich
Submitting two transactions, one before someone else's and one after, to capture the price movement they cause. Works in either direction.
SIWS
Sign-In With Solana. You prove you own a wallet by signing a plaintext message — no transaction, no fee, no on-chain footprint.
Throwaway wallet
A fresh wallet created to do a single sketchy thing — usually pre-buying a launch — without tying it to a public identity. The blacklist exists because most of these aren't actually that hard to identify.
16 · Honesty

What this is, and isn't

$JUSTICE is a piece of software and a piece of performance art. The software is real — the bot runs, the bundles land, the executions are on-chain and verifiable. The performance is the framing: the wanted-poster aesthetic, the courtroom language, the sword on the landing page. Take the aesthetic with a grain of salt. Take the executions seriously.

The blacklist is editorial, not judicial. It's holder-nominated and reviewed weekly. We are not a regulator and we are not making criminal allegations against anyone listed. We are making an economic argument that certain patterns of trading hurt other traders, and providing infrastructure to make those patterns more expensive to run.

$JUSTICE is a memecoin. It is not a security. It is not an investment vehicle. It is a coordination token for a community of people who think the KOL playbook should cost more to run than it does. If you can't afford to lose the SOL you put into it, don't put SOL into it.

Everything here is permissionless and reversible. We don't custody your coin, your wallet, or your funds. If we disappear tomorrow your coin keeps trading and your wallet keeps working. The bot is an addition, not a dependency.

Ready to launch?

The whole flow takes less than two minutes. You sign one transaction in your own wallet. The bot does the rest.