A v3 pool is not a discounted AMM. It is a per-token Distribution Vault that turns a whale's position into a capped, scheduled, vested supply drip. Holders exit near spot over weeks. Buyers earn a discount for taking vested supply. The project's treasury gets first refusal. Arbitrage bots get nothing, and the chart absorbs a known drip instead of an unknown cliff.
Large holders of small-cap tokens have three exits today: sell into the AMM and eat 10 to 40% of impact, OTC through Telegram with counterparty risk and a leaked price, or hold and hope. Every one of these hurts the chart or the holder, usually both.
Anyone can buy at 97% and sell into the main pool at 100%. Bots repeat until the main pool sits 3% lower. The whale still moves the price, one hop removed, and the discount is paid to bots. The pool's existence also announces "a whale wants out".
Not the existence of supply, but two beliefs: a big holder wants out now, and the size is unknown. Remove the "now" with pace caps and vesting; remove the "unknown" by publishing the cap; remove the "who" as far as a public chain allows.
Holds pooled seller balances, runs epochs, mints tranches, tracks each seller's pro-rata share of proceeds. No per-seller balance is readable externally; only the vault total and the epoch cap.
Batches deposits from several sellers into one transfer per block window and forwards to the vault. Removes the one-to-one link between a seller's transfer and the vault deposit.
Gradual Dutch auction per tranche: price starts at the reference price and decays toward a floor over the epoch until filled. Fills settle in the quote asset (USDC or WETH).
Optional per token. Gives the project treasury a right of first refusal on every tranche at a fixed discount during the first part of the epoch.
Public buyers receive a non-transferable vesting position that unlocks linearly. Claimable any time for the unlocked part. Cannot be sold, lent or used as collateral.
Takes the exit fee on settlement, routes it to Gage and to $GAGE buybacks per governance. Publishes fee totals per token.
Created by the listing itself. Parameters set from token defaults, adjustable by the project within bounds.
Tokens go through the router into the vault. Seller receives an internal share and picks a floor no lower than the vault floor.
Each epoch the vault mints tranches up to the pace cap. Sellers are served pro rata to their shares.
For the first quarter of the epoch the treasury may take any tranche at the fixed ROFR discount.
Price decays from reference toward floor. Buyers fill any amount; they receive a vesting position, not liquid tokens.
Quote asset, minus fee, is credited to sellers pro rata. Unfilled tranche size rolls to the next epoch. Sellers withdraw proceeds or remaining tokens at will.
Each tranche is a gradual Dutch auction over the epoch length T. With reference price R and maximum discount dmax, the ask at time t since the tranche opened is
ask(t) = R × (1 − d_max × t / T) for 0 ≤ t ≤ T floor = R × (1 − d_max) ROFR = R × (1 − d_rofr) available for t ≤ T/4 to the treasury only
A seller may set a personal floor above the vault floor. Their tranches simply stop decaying there and roll over unfilled. This is how a whale says "I will wait" without anyone seeing them wait.
If the reference price has fallen more than 15% over the trailing 24 hours, dmax is clamped to 3% and the pace cap halves for that epoch. The vault refuses to be the thing that turns a dip into a collapse.
Public fills settle into the VestingEscrow, not the buyer's wallet. Tokens unlock linearly over the vesting period from the fill time. The position is bound to the buyer's address.
| Parameter | Default | Bounds | Set by | Purpose |
|---|---|---|---|---|
Epoch length T | 24 h | 6 h to 72 h | Gage governance | Tranche lifetime and decay horizon |
| Pace cap | 0.30% of supply / epoch | 0.05% to 1.0% | Project, within bounds | The published overhang |
Max discount dmax | 8% | 3% to 15% | Project, within bounds | Vault-wide floor |
ROFR discount drofr | 3% | 1% to 5% | Project | Treasury's fixed price |
| ROFR window | first 25% of T | 0 to 50% | Gage governance | How long the treasury has priority |
| Vesting period | 7 days | 3 to 30 days | Project, within bounds | Buyer lock |
| Storm trigger | −15% / 24 h TWAP | −10% to −30% | Gage governance | When to stop selling weakness |
| Storm clamp | dmax 3%, cap ÷ 2 | fixed | Gage governance | Behaviour under stress |
| Exit fee | 1.0% of proceeds | 0.5% to 2% | Gage governance | Protocol revenue |
| Router batch window | 20 blocks | 1 to 200 | Gage governance | Deposit unlinkability |
| Min deposit | 0.05% of supply | per token | Project | Keeps the vault for size, not retail |
Robinhood Chain is a transparent EVM chain. The specification is precise about what it hides so nobody sells it as more than it is.
| Fact | Visible on-chain? | Mitigation |
|---|---|---|
| A vault exists for token X | yes | Every listed token has one from day one, so it says nothing. |
| Total tokens in the vault | yes | Pooled across all sellers. Changes daily. Paired with a published cap, it reads as a schedule, not a threat. |
| Per-seller position | no | Stored as internal shares; no public getter. Off-chain indexers cannot reconstruct it from events, which emit totals only. |
| Which wallet deposited | partly | Router batches several sellers into one transfer per window and emits no per-sender event. A tagged whale wallet sending to the router is still a public transaction; determined analysts will link it. Casual observers will not. |
| Seller's personal floor | no | Held privately; only the resulting unfilled rollover is observable in aggregate. |
| How much sold this epoch | yes | Deliberately. The drip rate is the one number the market should read. |
| Who bought | yes | Vesting positions are per address. Acceptable: buyers are the party taking risk, and public fills build confidence. |
Deposit over several days from more than one address, through the router, and never in one lump. The protocol cannot enforce this; the app should make it the default path and explain why.
If Robinhood Chain ships a native privacy primitive or a trusted bridge from a shielded pool, the router accepts deposits from it. Until then the spec claims unlinkability against casual observers only.
Exits at roughly spot to −5% over weeks with zero direct market impact, instead of −10% to −40% in one AMM trade. Pays a 1% fee on proceeds.
Earns 3% to 8% below reference for holding through a 7-day unlock. Deeper tiers for longer locks. Buys from a known, capped source instead of chasing the chart.
First refusal at −3% on every tranche. Accumulates its own token below market with no slippage, funded by buyback revenue it already spends on the AMM at worse prices.
1% of every exit across every listed token, plus listing demand from projects that want their whales handled. Fee split between operations and $GAGE buybacks per governance.
A published drip of at most 0.3% of supply per day, sold to locked hands and the treasury, replaces unlabelled wallets that can dump 4% in a block.
Nothing. No liquid discount exists anywhere in the system.
Distribution Vaults are only valuable to a project if the market can see them working. So the vault system publishes one number per token, the way perp venues publish a long/short ratio.
whale supply = balances above 0.5% of supply, excluding the AMM pool, team locks and burns Vest Ratio = whale supply held in the token's Distribution Vault ÷ whale supply biggest cliff = largest single liquid whale balance, as a share of supply
Tokens ranked by Vest Ratio, by 24-hour movers, and by biggest cliff. The board is the acquisition channel: a project at the top gets a screenshot on X that says its whales chose the schedule. A project at the bottom gets a reason to call Gage.
One line of HTML the project puts on its site. Live ratio, live badge, links to the vault. It turns red under 15%. Marketing that can go wrong is marketing that gets trusted.
Token with 1B supply, reference price $0.020, market cap $20M, deepest pool $600K liquidity. A fund holds 40M tokens (4% of supply, $800K at spot). Selling that into the AMM would cost well over 30% of impact.
| Path | Days to exit | Average price | Proceeds | Chart impact |
|---|---|---|---|---|
| AMM dump, one trade | 0 | ≈ $0.0125 | ≈ $500K | −37% spot, panic |
| AMM, 10 daily clips | 10 | ≈ $0.0170 | ≈ $680K | visible sell wall, −15% drift |
| Fixed 3%-under pool | 1 to 2 | $0.0194 | $776K | bots push spot −3% and repeat |
| v3 Distribution Vault, defaults | 14 | ≈ $0.0192 | ≈ $760K after fee | 0.3%/day drip to locked hands and treasury |
At a 0.30% pace cap the vault clears 3M tokens per day, so the 40M position takes about 14 epochs if the fund is the only seller. Assume the treasury takes 40% at −3% and the public takes 60% at an average −5%: blended −4.2%, minus the 1% fee. AMM and clip figures are illustrative for a $600K pool and will differ per token; the vault figures follow from the parameters.
interface IDistributionVault {
// seller side (through DepositRouter in practice)
function deposit(uint256 amount, uint256 floorBps) external returns (uint256 shareId);
function setFloor(uint256 shareId, uint256 floorBps) external;
function withdrawTokens(uint256 shareId, uint256 amount) external; // unsold remainder, any time
function claimProceeds(uint256 shareId) external returns (uint256 quote);
// buyer side
function fill(uint256 trancheId, uint256 quoteAmount, uint8 vestTier) external returns (uint256 positionId);
function fillAsTreasury(uint256 trancheId, uint256 quoteAmount) external; // TreasuryHook only, t <= T/4
// views: totals only, never per seller
function vaultBalance() external view returns (uint256);
function epochCap() external view returns (uint256);
function currentAsk(uint256 trancheId) external view returns (uint256);
function stormMode() external view returns (bool);
}
interface IVestingEscrow {
function claim(uint256 positionId) external returns (uint256 unlocked);
function unlocked(uint256 positionId) external view returns (uint256);
// no transfer, no approve
}
event TrancheOpened(uint256 indexed trancheId, uint256 size, uint256 reference);
event TrancheFilled(uint256 indexed trancheId, address buyer, uint256 amount, uint256 price, uint8 tier);
event EpochSettled(uint256 indexed epoch, uint256 sold, uint256 rolled, uint256 fees);
// no Deposit event with a sender: the router emits Batched(uint256 total) only
Deploy the vault for $GAGE with the treasury hook wired to the existing buyback wallet. Prove the drip, the storm mode and the vesting escrow on one token whose treasury Gage controls.
Three to five Robinhood Chain tokens with known large holders and a cooperative treasury. Vault deployed at listing; parameters within bounds; public dashboard showing cap, sold per epoch and vault balance.
Any token meeting a minimum pool depth. Deeper vesting tiers, shielded deposit path if the chain offers one, and governance over global bounds.