RHEA / DIARRHEA CAPITALliquid shitcoin infrastructure

RHEA / DIARRHEA CAPITAL

Liquid shitcoin infrastructure.

Technical paper · rev 4 · last updated

Launching is solved. Liquidity is next.

The long-form companion to the manifesto: how Rhea routes a pump.fun coin's creator fee back into its own market, what the code checks before anything can be signed, and what is still unproven.

$RHEA · contract addressAkLSvCawfqToAUTo4qSpSjPQcWXZXXa8CDJaWyCjpumpSolscan ↗pump.fun ↗
The technical paper
πάντα ῥεῖ — everything flows.
— Heraclitus, attributed

Diarrhoea, from the Greek diárrhoia: “a flowing through”. Rhea is the part of the word that does the work. This paper is about making memecoins flow through a market instead of out of it.

Abstract

pump.fun solved launching. What it leaves to others is depth: a graduated coin's pool starts at the migration seed and grows only when someone adds to it. Rhea points the one fee stream a launcher controls, the creator fee, at a per-coin vault and spends it on the coin's own market: curve buys before graduation, burned liquidity after, a capped buy-only dip reserve, and a 10% common pool.

This paper specifies that routing as the code implements it on 12 October 2026, the checks that bound every transaction before it can be signed, and the evidence behind them. That evidence is local: unit fixtures and a local validator running byte-identical copies of the mainnet pump.fun programs. Rhea is not launch-ready. Rhea's routing is not armed: no operator wallet exists and no creator fee has been routed.

Revision
rev 4 · supersedes rev 3, 7 Oct 2026
Code
backend/src at branch ui-memechan-2026-10-12, read 2026-10-12
Readiness
AUDIT checkpoint 2026-10-08, addenda through 2026-10-11
Labels
SOURCED · FROM CODE · LOCAL VALIDATOR · SIMULATED · COMPUTED
Part one · The blockage

Shallow water splashes

I. Depth is the ceiling

A memecoin's chart is drawn by its pool. For a constant-product pool holding R SOL, a buy of b SOL moves the price by roughly b / (R + b). A 5 SOL buy moves a 20 SOL pool by 20%. The same buy moves a 250 SOL pool by 2%.1

Thin pools turn ordinary flow into wicks. Every buyer pays for it in slippage, and the first real seller sets the top. Traders respond rationally: buy fast, sell faster, never hold. Depth is what lets a coin absorb its own exits.

Fig. 1 — The same 5 SOL buy, different plumbing

One 5 SOL order barely tilts a deep pool and detonates a shallow one. Price impact = b / (R + b), where R is the pool's SOL reserve.

Swipe or scroll sideways to compare all five pools →

WIF logo
$WIFRaydium
0.018%
move on a 5 SOL buy
Pool depth
$6.5M
SOL reserve
27,890
Market cap
$228.9M
POPCAT logo
$POPCATRaydium
0.030%
move on a 5 SOL buy
Pool depth
$3.9M
SOL reserve
16,592
Market cap
$47.3M
BONK logo
$BONKOrca
0.505%
move on a 5 SOL buy
Pool depth
$396K
SOL reserve
984
Market cap
$302.4M
A pool at 20 SOLreference depth
20.00%
move on a 5 SOL buy
Pool depth
20 SOL
Identity
none
Source
computed
A pool at 85 SOLreference depth
5.56%
move on a 5 SOL buy
Pool depth
85 SOL
Identity
none
Source
computed
Unit · price impact of a single buy · saved pool snapshotSource · DexScreener pool reserves · fetched 2026-10-07 · SOL ≈ $116.32

Single-sided constant-product estimate before fees and tick rounding. logo via DexScreener. Reference depths carry no coin identity.

Table 1 — Price impact by pool depth

The same formula as Fig. 1, on round numbers. Depth, not the size of the buy, decides whether a trade is a ripple or a wick.

Pool R1 SOL buy5 SOL buy20 SOL buy
20 SOL4.76%20.00%50.00%
85 SOL1.16%5.56%19.05%
250 SOL0.40%1.96%7.41%
1,000 SOL0.10%0.50%1.96%
Unit · price move of a single buy · R = pool SOL reserveSource · computed, b / (R + b)Evidence · COMPUTED · constant-product estimate

Before fees and rounding. Pools with virtual reserves (Section V) price against real + virtual.

The fees drain out, not back in

II. Launching is solved. Depth is not.

pump.fun made launching free, instant and fair. Anyone can create a coin. A bonding curve discovers the price, graduation to a PumpSwap pool is automatic, and fee sharing makes the creator's cut a programmable stream. Rhea is built entirely on top of it.2

Liquidity was never the launchpad's job. Before graduation there is no pool at all: the curve is a formula. After graduation, depth starts from the migration seed. On PumpSwap's lowest market-cap tier (0–420 SOL), 0.02% of each trade goes to the pool. Higher tiers send 0.20%.2

The AMMs pump.fun replaced made the opposite choice. Raydium's AMM v4 keeps 0.22% of its 0.25% swap fee in the pool, and in 2024, 92.8% of Raydium's fees went to liquidity providers. Every trade left those pools a little deeper. On today's rails that compounding no longer happens by default.34

Table 2 — pump.fun fee schedule

On the curve, 0% of each trade reaches liquidity. On PumpSwap's lowest market-cap tier, 0.02% does.

StageTotalProtocolCreatorPool (LPs)
Bonding curve1.25%0.95%0.30%0%
PumpSwap · 0–420 SOL1.25%0.93%0.30%0.02%
PumpSwap · 420–1,470 SOL1.20%0.05%0.95%0.20%
PumpSwap · 1,470–2,460 SOL1.15%0.05%0.90%0.20%
PumpSwap · 2,460–3,440 SOL1.10%0.05%0.85%0.20%
PumpSwap · … scales down ……………
PumpSwap · 98k+ SOL0.30%0.05%0.05%0.20%
Unit · % of trade volume · PumpSwap tiers by market cap in SOLSource · pump.fun help center, “Transaction Fees on Pump.fun” · read 2026-10-07, re-read 2026-10-12Evidence · SOURCED · rates change

Intermediate tiers between 3,440 and 98k SOL are not all published. The creator column is what fee sharing routes to a Rhea vault.

Fig. 2 — Where 1.25% drains

Of every $100K traded on the curve, 0 reaches the pool by design; on PumpSwap's lowest tier (under 420 SOL of market cap), $20 does.

Protocol feeCreator feeInto the pool
Bonding curve
$950
$300
$0
PumpSwap tier 1
$930
$300
$20
Raydium 2024
$30
$0
$220
Unit · USD per $100K volumeSource · pump.fun help center (2026-10-07) + Raydium AMM v4 docs

Derived from published fee schedules; illustrative split per $100K of trade volume, not live on-chain data.

Part two · The plumbing

The one pipe a launcher controls

III. The fee Rhea routes

The creator fee is the one stream a launcher controls: 0.30% of every curve trade, and 0.30% on PumpSwap's lowest tier. Above 420 SOL of market cap the creator rate is higher (0.95%), then steps down to 0.05% at the top tier (Table 2). The models in this paper use the lowest tier as the conservative default for graduated coins.25

Rhea uses pump.fun's own fee sharing. At launch the creator signs a configuration that makes the coin's Rhea vault the sole shareholder of its creator fees, at 10,000 basis points. There is no new venue, no transfer hook and no custom token program. A Rhea coin is an ordinary pump.fun token, tradable everywhere pump.fun tokens trade.6

On the current Pump Fees program that configuration is final. On a local validator running byte-identical copies of the mainnet programs, Rhea's configure transaction left the sharing config with adminRevoked = true, and Rhea's separate lock step reported ALREADY_IMMUTABLE. Once configured, nobody, neither the creator nor Rhea, can repoint the fee. A finalized mainnet readback of a real Rhea configure is still required before this is a launch fact.7

Table 3 — What the creator signs

Three launch transactions and one sign-in message. Nothing after launch asks for a signature from the creator.

StepWho signsWhat it doesStatus
Sign increatorOne message that states it does not authorize any transactionimplemented · not hosted
Createcreator first; Rhea co-signs only the new mintPump create_v2: a Token-2022 mint, mint and freeze authority nulldisabled
ConfigurecreatorFee sharing: the coin's Rhea vault becomes sole shareholder, 10,000 bpsdisabled
Lockcreator, only if still neededMakes the route immutable. On the current program it already is after Configuredisabled
Everything afternobody: the coin's vault paysClaims, curve and pool buys, LP deposit and burn, skims, payoutsdisabled · no operator signer
Unit · wallet requests per launchSource · backend/src/launch.mjs · rails.mjs · /app/docs · read 2026-10-12Evidence · FROM CODE · all disabled in this build

Today every launch route answers 503 PREPARATION_DISABLED or EXECUTION_INTEGRATION_INCOMPLETE. Rhea never asks for token approvals or batch signatures.

Metering the flow

IV. Claims and the split

Creator fees accrue in pump.fun's creator vaults: one for the bonding curve, one for PumpSwap after graduation. Rhea's claim worker moves them to the coin's vault with pump.fun's canonical claim instructions. On the local fork, a curve-stage claim credited 149,833 lamports of trader-generated fees and a PumpSwap-stage claim credited 853,537,844 lamports, each for a 5,000-lamport network fee.78

Only what the finalized claim actually moved counts as revenue: the exact SOL credited from those vaults, read from the transaction's own balances, minus the claim's own network fee. Seed balances and donations are not revenue. If a claim collects less than its fee, or fails, the shortfall is charged to separate operating SOL, which is funded from outside and never counted as revenue.8

The net receipt is split once, in integer lamports, by the coin's stage in a finalized snapshot taken at or after the claim's slot. A replay keeps its original split, and a later graduation cannot re-split old fees.9

Fig. 3 — Where one claimed SOL flows

Each finalized claim is split once, by the coin's stage at the claim's slot. Default policy: 0% creator share, a fixed 10% to the common pool, then 50/50.

Unit · SOL per 1 SOL of net claimed creator feesSource · backend/src/policy.mjs splitClaim · worker.mjs · dip.mjs · pool.mjs · read 2026-10-12Evidence · FROM CODE · not live

Exact integer lamports in code; rounding goes to the coin's own working capital. Creator share is an open parameter (default 0%). LP is burned because burn is the only LP disposal implemented; lock versus burn is an open owner decision. Burned LP is not a price floor.

The 10% common-pool share is fixed in code: the policy refuses to load any other value. The creator share is an open parameter, default 0%. The 50/50 splits are policy defaults. Integer division rounds down, and the remainder stays in the coin's own working capital.9

Table 4 — Split by stage, per 1 SOL claimed
StageCreatorPoolCurve buyGrad. SOLLPDip
curvebefore graduation00.1000.4500.45000
graduation-pendingcurve complete, not yet migrated00.10000.90000
pumpswapafter graduation00.100000.4500.450
Unit · SOL · output of splitClaim(1,000,000,000 lamports, stage)Source · backend/src/policy.mjs · run 2026-10-12Evidence · FROM CODE · default policy

Flushed, not withdrawable

V. Depth: graduation, deposit, burn

Graduation is pump.fun's, not Rhea's. When the curve completes, anyone can call migrate_v2 and the coin moves into its canonical PumpSwap pool. On the fork a trader-signed migrate_v2 did exactly that, and the new pool's coin creator was the sharing config, so PumpSwap-stage creator fees keep flowing along the same route.7

Before graduation, half of the working capital buys the coin on its own curve and the other half is held as SOL. At graduation any unspent curve-buy budget moves into that graduation SOL. Rhea then deposits the stockpiled tokens and the held SOL into the pool and burns the LP tokens it receives.10

After graduation, the LP half buys the missing token side from the pool (never more than half of the budget), deposits both sides and burns the LP. Burning is the only LP disposal the code implements, so nobody can withdraw that liquidity, Rhea included. Whether the product should lock instead of burn is an open owner decision; no lock rail is integrated.1011

Burned liquidity is permanent. It is not a price floor. It stays in the pool and moves with the price: when holders sell, the pool's SOL side shrinks as in any other pool. What changes is the accrual rate. On the lowest tier the pool keeps 0.02% of volume. Rhea's LP half of the 0.30% creator fee adds 0.30% × 0.90 × 0.50 = 0.135% of volume, about 6.75 times the native rate at that tier.29

Fig. 4 — A freshly migrated pool

Right after a real migrate_v2 on the fork, the pool held 67.41 SOL of real quote and 17.58 SOL of virtual quote. PumpSwap prices against both: 84.99 SOL.

084.99 SOL priced depth
  1. 287 B

    pool account at migration (pinned SDK layout 300 B)

  2. first trade

    pays to resize the pool; Rhea refuses to be this trade (INSTRUCTION_NOT_ALLOWLISTED)

  3. 301 B

    after any trader's first trade; Rhea's pool buys proceed

Unit · SOL on the quote side · pool account size in bytesSource · docs/evidence/local-validator-debit-proof.json · run 2026-10-12 UTCEvidence · LOCAL VALIDATOR · byte-identical mainnet programs · not a public-network pool

One pool from one run. Trader volume was synthetic and the seed reflects the current programs' migration, not a market. Rhea's impact check now counts virtual reserves (fe779f9).

Pools created by migrate_v2 carry virtual quote reserves, and PumpSwap prices against real plus virtual. Rhea's impact check first used real reserves only, so on a migrated pool even a 0.1 SOL buy read as more than 5% impact and was refused. It now uses both.7

One case is still refused. A pool fresh from migration is 287 bytes, and its first trade pays to resize it to 301. Rhea's debit proof does not model that payer-funded resize, so Rhea will not be the first trader after a migration. Once anyone else has traded, Rhea's buys proceed.7

The plunger, and who may use it

VI. The dip agent

The other half of a graduated coin's working capital arms a dip reserve. A model may propose when and how much to buy. Deterministic code, which the model cannot override, decides what is permissible, and the only transaction it can build is a buy of the coin on its own canonical pool.12

Each proposal starts from a finalized read of that pool: three to thirty recent reserve samples, the last one no older than the configured maximum age (the code allows at most 120 s). The model sees only that chart and a JSON contract. It must answer {act, lamports, reason} in at most 4,096 characters. Anything else, a timeout included, means no action.1213

The size is the smallest of four things: the model's request, the per-call cap, what is left of a rolling 24-hour cap counted on finalized execution time, and the reserve above its floor, less the transaction overhead. The transaction must then simulate cleanly and pass the debit proof (Section VIII). Bought tokens are held by the vault, separate from LP inventory.12

Every decision is recorded in the operator journal with its reason and a hash of the raw model answer. There is no public decision feed yet; today's public feed carries finalized receipts only. No model has been called. The reasons on the example desk come from the engine's deterministic stub.1214

Table 5 — Dip-agent guardrails

The model proposes; this list disposes. ‘Code’ rules are hard-wired. ‘Limits file’ values are operator settings that do not exist yet; the engine's simulation values are shown in brackets.

RuleBoundSet inOtherwise
Directionbuy own mint on its canonical pool onlycodeno sell builder exists
Stagegraduated (PumpSwap), verified routingcoderefused
Livenessproven alive: ≥ 0.05 SOL claimed fees / 72 hcode defaultunknown = refused
Observationfinalized, 3–30 samples, age ≤ configured max (≤ 120 s)coderefused
Model answerstrict JSON, ≤ 4,096 chars, reason ≤ 500codeno action
Model input / output≤ 8,192 bytes in · ≤ 256 tokens outcoderefused
Timeoutconfigured, ≤ 30 s (8 s in the engine)code · engineno action, call stays charged
One call per windowwindow pinned to chain block timecodeearlier decision returned
Model budgetper-day call-cost budgetlimits filerefused
Cooldownconfigured (30 min in the engine)limits file · enginerefused
Per callconfigured (0.5 SOL in the engine)limits file · engineclipped
Per 24 h, rollingconfigured (2 SOL in the engine); unresolved work countslimits file · engineclipped or refused
Reserve floorconfigured (0.1 SOL in the engine) never spentlimits file · engineclipped or refused
Minimum buyconfigured (0.01 SOL in the engine)limits file · enginerefused
Overhead≥ 12,164,120 lamports (proven floor)codestartup refused
Execution boundsslippage ≤ 3% · price impact ≤ 5%code ceilingpolicy refused
Simulation + debit proofexact transaction simulates; worst case fits reservationcoderolled back
Unit · bounds per coin unless statedSource · backend/src/dip.mjs · market.mjs · policy.mjs · cap-floors.mjs · engine/config/defaults.json · read 2026-10-12Evidence · FROM CODE · engine values SIMULATED

No model provider has been called or priced. Production limits are refused at startup if the overhead is below the proven floor.

The shared main

VII. The common pool

10% of every claim moves, intact, from the coin's vault to one dedicated pool vault. Each epoch (24 hours in the engine), the pool is frozen against a complete activity window: 20% goes to $RHEA's own loop, and 80% is weighted across eligible coins by the creator fees each claimed in that window.5915

A coin is eligible only on positive evidence: verified routing, proven alive, and fees claimed in the window. The market reader proves a coin alive from at least 0.05 SOL of finalized claimed fees over 72 hours. Low fees cannot prove a coin dead without complete trade indexing, so a coin whose liveness is unknown draws nothing. Ineligible coins keep their custody; nothing is swept.13

Shares are computed by a deterministic largest-remainder method in lamports and frozen as obligations. Payouts go out in bounded, receipt-checked chunks, and a failed payout goes back to unpaid. A coin's share arrives as LP or graduation capital, never as fresh creator fees, so it is not skimmed twice. If no coin is eligible, the 80% stays unallocated inside that epoch rather than rolling into the next.15

Table 6 — One common-pool epoch

A 10 SOL pool. $RHEA takes its fixed 20%; the other 8 SOL follows claimed fees among coins proven alive.

RecipientEvidenceClaimed in windowShare
$RHEA loopfixed 20% of the epoch—2.000
Coin Aalive, verified3.0006.000
Coin Balive, verified1.0002.000
Coin Cliveness not proven0.2000
Coin Dalive, nothing claimed00
Unit · SOL · output of allocateEpoch(10 SOL, four coins)Source · backend/src/policy.mjs · run 2026-10-12Evidence · FROM CODE · illustrative inputs

Coins and amounts are invented to exercise the code; no coin exists. If no coin were eligible, the 8 SOL would stay unallocated inside the epoch.

Part three · Backflow prevention

Nothing drains past its reservation

VIII. Proving every debit before signing

Every transaction a Rhea vault would pay for is proven before it can be signed. The prover decodes the exact unsigned message, not the builder's description of it, and computes the largest possible debit to every operator account: signature and priority fees, rent for every account the transaction may create, transfers, pump.fun maximum-input amounts and Token-2022 transfer fees.16

That worst case must fit the durable reservation made for the work, inside the same database transaction. If it does not, both the operation and its reservation roll back and the refusal is logged. Broadcast, signed-byte ingestion and signing admission all demand the stored proof for that exact message digest.16

The prover fails closed. An unknown program or instruction, an extra signer, an operator account in an unexpected role, an unresolved address lookup table or a changed program layout each refuse the proof.16

Configured caps are refused at startup if they sit below what the proof needs. The floors are composed in code from finalized rent and the prover's own constants (Table 7). A priority fee raises every floor by exactly the prover's charge.17

Table 7 — Proven cap floors

The smallest overhead each action can need in the worst case. A configured cap below its floor never starts.

ActionSPL baseWidest layoutCap it binds
Curve buy4,779,5604,897,880spend overhead
Pool / dip buy12,045,80012,164,120spend overhead · dip overhead
LP deposit4,083,5604,201,880spend overhead
LP burn5,0005,000spend overhead
Claim4,083,5604,083,560claim fee cap
Native transfer5,0005,000claim fee cap (pool worker)
Unit · lamports · finalized rent (128 + space) × 6,960 · no priority feeSource · backend/src/cap-floors.mjs operatorCapFloors() · run 2026-10-12 · matches AUDIT.mdEvidence · FROM CODE

‘Widest’ is the 182-byte Token-2022 token account the prover admits. Legacy-curve resize rent is charged per coin by the proof, not in the floor. 1 SOL = 1,000,000,000 lamports.

The bounds were then checked against real program execution on a local validator running clones of mainnet's Pump, Pump Fees, PumpSwap and Mayhem programs, including a real Rhea create → graduation → migrate_v2 lifecycle. All 28 operator-paid cases stayed within their bound, and the 3 expected refusals refused. The first run caught two real gaps: the live programs allocate a 137-byte volume accumulator where the pinned SDK says 90, and legacy curves are resized at the buyer's expense. The model was fixed. This is local evidence, not a public-network receipt.7

Fig. 5 — Observed debit against the proven bound

28 of 28 operator-paid transactions debited no more than the bound proven before signing. A full bar is a bound with zero slack. ✕ marks cases where the pre-fork model would have been exceeded (4).

caseshare of boundobserved / bound
seeded coin stateCurve buy, first time (creates its accounts) ✕100%54,779,560 / 54,779,560
seeded coin stateCurve buy, accounts already exist91.5%20,005,000 / 21,849,400
seeded coin stateClaim on the curve100%5,000 / 5,000
seeded coin stateCurve buy on an older, smaller curve (resized at the buyer's cost) ✕100%55,134,520 / 55,134,520
seeded coin statePool buy, first time (creates its accounts)94.4%200,102,716 / 212,045,799
seeded coin statePool buy, accounts already exist88.3%97,092,377 / 110,006,519
seeded coin stateClaim on PumpSwap0.1%5,000 / 4,083,560
token with a transfer feePool buy, first time, on a transfer-fee token94.4%200,221,036 / 212,164,119
token with a transfer feeLP deposit of a transfer-fee token95.2%94,452,021 / 99,262,489
real create → graduationFirst buy on a coin Rhea just created ✕100%54,814,360 / 54,814,360
real create → graduationClaim on the curve, trader fees paid out100%5,000 / 5,000
real create → graduationCurve buy, accounts already exist91.5%20,005,000 / 21,849,400
with a priority feeCurve buy, accounts already exist91.6%20,030,000 / 21,874,400
with a priority feeClaim on the curve17.4%25,300 / 145,000
real create → graduationFirst buy on the coin that will graduate ✕100%54,814,360 / 54,814,360
real create → graduationPool buy, first time, on the migrated pool89.9%98,936,777 / 110,006,519
real create → graduationPool buy, accounts already exist80.9%48,548,688 / 60,006,519
with a priority feePool buy, no compute limit set (charged at the maximum)80.8%48,629,288 / 60,146,519
real create → graduationClaim on PumpSwap, trader pool fees paid out0.1%5,000 / 4,083,560
with a priority feeClaim on PumpSwap1.1%45,300 / 4,223,560
real create → graduationLP deposit into the migrated pool91.1%29,387,100 / 32,245,620
with a priority feeLP deposit87.5%18,556,073 / 21,208,867
real create → graduationLP burn (half of the LP held)100%5,000 / 5,000
with a priority feeLP burn17.4%25,300 / 145,000
SOL transfersSkim: coin vault → common-pool vault100%1,000,005,000 / 1,000,005,000
SOL transfersCreator payment: coin vault → creator wallet100%100,005,000 / 100,005,000
SOL transfersCommon-pool payout: pool vault → a coin's recipient100%200,005,000 / 200,005,000
with a priority feeCommon-pool payout99.9%200,005,600 / 200,145,000
Unit · operator gross debit ÷ proof bound · lamportsSource · docs/evidence/local-validator-debit-proof.json · 2026-10-12 00:51–01:03 UTC · 0 public-network transactionsEvidence · LOCAL VALIDATOR · not a funded receipt

Programs hash-matched to mainnet: Pump a4b32d32…, Pump Fees 73c679c8…, PumpSwap a8d05e69…, Mayhem a87fa9f8…. Expected refusals: UNSUPPORTED_MINT_EXTENSION, kit refusal, INSTRUCTION_NOT_ALLOWLISTED (3/3). A program upgrade invalidates this evidence. Row labels are plain language; hover a row for the harness label.

Checking for leaks

IX. Ledger, recovery, reconciliation

Rhea's journal is a single-host SQLite database. Every unit of work has an immutable ID. The exact signed bytes are stored before sending, a retry rebroadcasts the same signature rather than signing again, and each coin can have only one unresolved operation at a time.18

Reconciliation is read-only. It reads each vault's finalized SOL and token balances and compares them with what the journal implies. Each line comes out MATCH, EXPLAINED (by a named, signed but unsettled reservation) or UNEXPLAINED. Unexplained drift, a surplus as much as a shortfall, adds a readiness blocker, halts preparation and blocks signing admission. The ledger is never credited to make the numbers agree.19

What does not exist yet: a scheduled reconciliation run, remote alerting, a ledger rebuild from chain, and any evidence against a live RPC provider.11

Who holds the valve key

X. Custody and the operator

Each coin gets its own vault and its own mint key, both derived from one sealed operator seed at a coin-specific index. The vault is the sole fee shareholder and the payer of every Rhea transaction for that coin. The common pool has a separate, dedicated vault. The creator's wallet signs only the launch steps in Table 3.615

This is a trust surface, and it should be read as one. Whoever holds the operator seed controls every coin's vault. The caps, proofs and reconciliation above bound what Rhea's workers will do. They do not bound a key holder acting outside them. Isolated custody, off-host recovery and published vault addresses are prerequisites to launch, and none of them exist today.11

Until then the backend refuses to arm. An execution flag stops it at startup, signing admission throws even with a valid proof, and the code contains no operator signer.1620

Part four · Status

XI. Status and limits

Rhea is NOT launch-ready. Of 16 safety gates, 12 pass locally, 2 are open (custody and teardown) and 2 do not apply. None has launch evidence. A local pass is narrower than a launch pass: it proves code against fixtures and a local fork, not money moving on a public network.11

Table 8 — Evidence so far

12 of 16 gates pass locally, 2 are open, 2 do not apply, 0 have launch evidence.

WhatResultKind
Backend unit and fixture suite61 / 61fixtures
HTTP transport over loopback13 / 13loopback; zero sends
Local-validator debit bound28 / 28 within bound · 3 / 3 refusalslocal fork
Engine simulation39 / 39simulation
Funded public-network canary0 runnone
  1. 01Durable idempotent work unitspass · local
  2. 02Mint-derived token programpass · local
  3. 03Chain / constants / identitypass · local
  4. 04Worker exclusion / supervisionpass · local
  5. 05Ambiguous confirmationpass · local
  6. 06Final capspass · local
  7. 07Fail closedpass · local
  8. 08Chain ↔ ledger both directionspass · local
  9. 09Custody and backupopen
  10. 10Config read-sitespass · local
  11. 11Unproven legs stay darkpass · local
  12. 12Canonical fee claimspass · local
  13. 13Teardownopen
  14. 14Price-based outcome payoutsn/a
  15. 15Settlement → payout handoffn/a
  16. 16Enumerable allocation recipientspass · local
Unit · test counts · gate states at the dated checkpointSource · AUDIT.md · lib/app-data/readiness.ts · checkpoint 2026-10-11Evidence · AUDIT · local only

Fixtures, a loopback transport and a local fork. None of it is a funded lifecycle.

Table 9 — What is still missing

In plain language, from AUDIT.md's remaining gaps. Each one blocks launch.

Operator custodyNo production keys exist. No isolated custody, off-host recovery or published vault addresses.
Public-network receiptsNo funded transaction on any public network. Every money path still needs a separately authorized, funded canary; the local fork is not a receipt.
First trade after migrationRhea refuses to be the first trade on a freshly migrated pool, because the payer-funded pool resize is not modelled.
Reconciliation in productionNo scheduled run, no remote alert, no ledger rebuild from chain, no live-RPC evidence.
TeardownOpen. No final-claim and sweep contract, no bound sweep destination, no dust-tested teardown.
Activity indexingNot built. The common pool cannot freeze an epoch yet, and low-fee coins cannot be proven dead. What happens to an empty epoch is undecided.
Fee-route readbackMainnet readback that a real Rhea configure leaves the route immutable.
LP policyLock versus burn is undecided. Burn is the only LP path in code.
Dip agentNo model has been called or priced. Dip limits, spend and claim caps are unconfigured.
Transaction coverageLookup-table (v0) messages are refused, compute-unit pricing is not wired to runtime, and transfer-fee base mints are unsupported.
Launch surfaceNo hosted backend, monitoring, wallet-extension signing or independent review.
Unit · open itemsSource · AUDIT.md “Remaining gaps” · checkpoint 2026-10-11Evidence · AUDIT

Beyond the code, the market limits stay. Fees scale with volume, so a coin nobody trades funds nothing. A capped, buy-only reserve can slow a drawdown but cannot reverse one, and determined selling will clear it. Burned liquidity is not a floor. Agent errors are capped, not eliminated.

Memecoins are high-risk, speculative and legally uncertain in many jurisdictions. Nothing here is investment advice, and nothing here is live.

Downstream

Liquidity that compounds, built where coins already launch.

The manifesto makes the case in six short beats. The app docs show what you would sign, what is stored and what is capped. The example desk replays the engine on invented coins.

Glossary · the plumbing, translated

Every pun on this site sits on a mechanism. Here is the mechanism.

Liquid
A pool deep enough that ordinary flow moves the price a little. A 5 SOL buy into a 250 SOL pool: about 2%. §I · Table 1
Solid / constipated
A thin pool. The same 5 SOL buy into a 20 SOL pool moves the price about 20%. Wicks, not ranges. §I · Table 1
Flow
Trading volume. Creator fees scale with it, so a coin nobody trades funds nothing. §III · §XI
Drain
Fees that leave the market: on the curve 0% of each trade reaches liquidity; on PumpSwap's lowest tier 0.02% does. §II · Table 2
Sediment
The curve-buy stockpile: before graduation half the working capital buys the coin and the vault holds it. §V · Table 4
Flush
Deposit then burn: tokens and SOL go into the PumpSwap pool and the LP tokens Rhea receives are burned. §V
Flushed LP
Burned LP. Nobody can withdraw it, Rhea included. It is not a floor: its SOL side shrinks when holders sell. §V · §XI
Plunger
The dip reserve: capped, buy-only, own canonical pool only. A model proposes; deterministic code decides what is permissible. §VI · Table 5
The runs
A sell cascade. A capped reserve can slow a drawdown but cannot reverse one; determined selling clears it. §XI
Regularity
A range instead of a wick: depth absorbs a big day. Not a forecast for any coin. §I
The main
The common pool: 10% of every claim. Each epoch $RHEA takes a fixed 20%; 80% goes to coins proven alive, by fees claimed. §VII · Table 6
Dry
A coin that can't be proven alive (under 0.05 SOL of finalized claimed fees in 72 h). It draws nothing from the main. §VII
Backflow
A debit larger than what was reserved for the work. The debit proof refuses to sign it; reconciliation flags any drift. §VIII · §IX
Leak
UNEXPLAINED drift between a vault's finalized balances and the journal. It blocks signing; the ledger is never credited to hide it. §IX
Valve key
The sealed operator seed. Whoever holds it controls every coin's vault. A trust surface, stated as one. §X

Figures & tables

  1. Fig. 1The same 5 SOL buy, different plumbingSOURCED
  2. Table 1Price impact by pool depthCOMPUTED
  3. Table 2pump.fun fee scheduleSOURCED
  4. Fig. 2Where 1.25% drainsSOURCED
  5. Table 3What the creator signsFROM CODE
  6. Fig. 3Where one claimed SOL flowsFROM CODE
  7. Table 4Split by stage, per 1 SOL claimedFROM CODE
  8. Fig. 4A freshly migrated poolLOCAL VALIDATOR
  9. Table 5Dip-agent guardrailsFROM CODE
  10. Table 6One common-pool epochFROM CODE
  11. Table 7Proven cap floorsFROM CODE
  12. Fig. 5Observed debit against the proven boundLOCAL VALIDATOR
  13. Table 8Evidence so farAUDIT
  14. Table 9What is still missingAUDIT

Notes & sources

1COMPUTED Constant-product market maker, x · y = k. For a pool holding SOL reserve R, a buy of b SOL raises the SOL side to R + b, so the trade's share of the move is ≈ b / (R + b). Single-sided estimate before fees and rounding. Table 1 is computed from this formula. ↩
2SOURCED pump.fun help center, “Transaction Fees on Pump.fun”, read 2026-10-07 and re-read 2026-10-12 (unchanged). pump.fun/docs/fees is JavaScript-gated. Intermediate tiers between 3,440 and 98k SOL are not all listed. Rates change; re-verify before any money use. source ↗ ↩
3SOURCED Raydium AMM v4 documentation: 0.25% swap fee = 0.22% retained by the pool (LPs) + 0.03% protocol. As cited 2026-10-07. ↩
4SOURCED DefiLlama Fees & Revenue (raydium-amm, pump.fun, pumpswap), fetched 2026-10-07. Raydium 2024: fees $664.8M vs protocol revenue $48.2M, so 92.8% went to LPs. DefiLlama models PumpSwap with one flat split, which understates protocol take on low-cap coins. source ↗ ↩
5SIMULATED engine/config/defaults.json, read 2026-10-12: the dry-run engine's envelope. Fee tiers as Table 2; dip agent 0.5 SOL per call, 2 SOL per day, 1,800 s cooldown, 300 bps slippage, 0.1 SOL floor, 0.01 SOL minimum, 8,000 ms timeout; 24 h epochs; 20% $RHEA loop. Production dip limits come from an operator limits file that does not exist yet. ↩
6FROM CODE backend/src/launch.mjs, rails.mjs (create, configure, lock; wallet-first co-signing of the mint only) and journal.mjs allocateCoin (per-coin mint and vault keys from one sealed seed). Read 2026-10-12, branch ui-memechan-2026-10-12. ↩
7LOCAL VALIDATOR docs/evidence/local-validator-debit-proof.json (summarised in lib/paper-evidence.json), run 2026-10-12 00:51–01:03 UTC. solana-test-validator on 127.0.0.1 with Pump, Pump Fees, PumpSwap and Mayhem cloned from mainnet, program-data SHA-256 equal to mainnet at slot ≈ 455,855,086; throwaway keys funded by local genesis; trader volume synthetic; 0 public-network transactions. A program upgrade invalidates it. ↩
8FROM CODE backend/src/claims.mjs, claim-worker.mjs, operating.mjs: finalized native-credit receipt from the curve and PumpSwap creator vaults only; net = gross credited − the claim's fee; a fee deficit or failed claim is charged to separate, outside-funded operating SOL; one allocation per receipt. Read 2026-10-12. ↩
9FROM CODE backend/src/policy.mjs: DEFAULT_POLICY {creatorShareBps 0, poolBps 1000, preBondBuyBps 5000, postBondLpBps 5000, selfLoopBps 2000, slippageBps 300, maximumPriceImpactBps 500}; policy() refuses poolBps ≠ 1000 and execution bounds above the envelope; splitClaim and allocateEpoch in exact bigint lamports. Tables 4 and 6 were produced by running these functions on 2026-10-12. ↩
10FROM CODE backend/src/worker.mjs, spending.mjs: curve buy, LP-side buy (≤ half the budget), deposit from attributed inventory, LP burn from a settled deposit only; at graduation the curve-buy budget moves into graduation SOL. A separate fee allowance is kept for disposing of LP after a deposit. Read 2026-10-12. ↩
11AUDIT AUDIT.md, checkpoint 2026-10-08 with addenda through 2026-10-11 (verdict NOT LAUNCH-READY), transcribed in lib/app-data/readiness.ts. Gate counts and test results in Section XI come from it. ↩
12FROM CODE backend/src/dip.mjs: integer caps inclusive of overhead, rolling 24 h cap on finalized execution time, reserve floor, cooldown, chain-time window deduplication, durable model-call cost, strict JSON contract, simulation, debit proof; held tokens kept apart from LP inventory. The provider adapter sends ≤ 8,192 bytes and asks for ≤ 256 tokens. Read 2026-10-12. ↩
13FROM CODE backend/src/market.mjs: finalized same-context reads of the canonical PumpSwap pool and its vaults; alive only on ≥ 50,000,000 lamports of finalized claimed fees in 259,200 s; otherwise liveness is unknown. Read 2026-10-12. ↩
14SIMULATED Engine dry-run (lib/simData.json, exported 2026-10-07) with a deterministic stub policy. Example-desk coins, prices and dip reasons are SIMULATED, not market data. ↩
15FROM CODE backend/src/pool.mjs, transfers.mjs: dedicated pool vault and platform mint bound immutably; exact native transfers with separate gas; frozen epoch weights and obligations UNPAID → RESERVED → PAID; bounded chunks; recipient credits become LP or graduation SOL; empty-cohort remainder isolated in its epoch. Read 2026-10-12. ↩
16FROM CODE backend/src/debit-proof.mjs and journal.mjs: decoded worst-case debit bound persisted with the reservation; acceptSigned, broadcast and admitOperatorSigning require the exact proof; admitOperatorSigning then throws OPERATOR_SIGNING_DISABLED. Read 2026-10-12. ↩
17FROM CODE backend/src/cap-floors.mjs: operatorCapFloors() at rent (128 + space) × 6,960 lamports and compute price 0, run 2026-10-12. ‘Widest’ is the 182-byte Token-2022 token-account layout the prover admits. loadRuntime refuses any lower cap with CAP_BELOW_PROVEN_MINIMUM. ↩
18FROM CODE backend/src/journal.mjs: SQLite WAL with full sync; immutable work-unit envelopes; signed bytes durable before send; replay keeps the signature; one unresolved operation per coin. Read 2026-10-12. ↩
19FROM CODE backend/src/reconcile.mjs, supervisor.mjs, scripts/recover.mjs: read-only finalized SOL and token reconciliation; MATCH / EXPLAINED_DRIFT / UNEXPLAINED_DRIFT; readiness blocker, preparation halt, signing refusal; never credits. Tested against a loopback RPC stub only. ↩
20FROM CODE backend/src/runtime.mjs: RHEA_EXECUTION_ENABLED=true throws at startup (“no environment flag can arm it”); runtime storage inside a repository is refused. Read 2026-10-12. ↩