Docs
Put stock tokens to work
Uptick turns a Robinhood Stock Token into a share of a Uniswap v3 pool against USDG. Each vault is one ERC-4626 contract, one managed position, and one published gate.
The product is deliberately narrow. Uptick does not pick stocks, lend them out, or take a directional position. It provides liquidity in one pair, holds the range it was given, and reports the result of a replay that anyone can inspect.
The three parts
A vault is the visible part of three systems. The evidence engine decides whether the pool is worth a vault and how large it can be. The contract holds the position and prices every entry and exit. The keeper moves the band and serves the evidence that the app and agents read.
| Part | What it does |
|---|---|
| Evidence engine | Replays 30 days of swaps for each eligible pool, sizes the vault to at most 20% of in-range liquidity, and assigns the gate state. |
| StockVault | Holds one Uniswap v3 position in a plus or minus 5% band around Chainlink. Fees accrue to the share price. |
| Keeper and evidence API | Recentres each vault at 02:00 UTC after each NYSE session, simulates every rebalance before sending it, and serves the JSON evidence and MCP tools. |
What a vault holds
Every vault holds the same three things: idle balances of the Stock Token and USDG, both legs of a Uniswap v3 position, and fees earned but uncollected. Shares are priced in the Stock Token, so the share price rises as fees accumulate and falls when the position loses to informed flow.
| Holding | How it is valued |
|---|---|
| Idle Stock Token and USDG | Face value, expressed in the Stock Token. |
| Both legs of the Uniswap v3 position | Pool TWAP over at least 10 minutes. |
| Fees earned but not collected | Chainlink for USDG at $1, then the Stock Token. |
How the gate decides
The gate is a replay measurement, not an opinion about the token. A 30-day window of swaps runs in two halves: the first 15 days select the pool, and the second 15 days are held out. The weaker half decides the state. A vault needs net fees at or above break-even in both halves to open.
| State | When the replay puts the vault there | What deposits can do |
|---|---|---|
| Open | Both halves keep at least break-even. | Full vault cap. |
| Reduced | The weaker half sits between -20% a year and break-even. | Up to $25,000 per transaction. |
| Closed | The weaker half is below -20% a year. | Deposits are refused. |
| State | Vaults today |
|---|---|
| Open | AAPL, NVDA |
| Reduced | SPY, QQQ, GOOGL, AMZN, PLTR |
| Closed | USO, MSTR, META, GME, TSLA, AMD, MU, SPCX, INTC, CRCL |
Where the numbers come from
The universe starts from 3,357,382 replayed swaps over 30 days. Each vault gets the largest position that stays at or below 20% of in-range liquidity, under a $100,000 ceiling. A pool whose depth would carry less than $10,000 is left out; a pool between that floor and the ceiling gets the largest size it can carry. The fee APR and kept APR you see on a vault page are the replay outputs for that size.
const base = "https://uptick-evidence.earn-shield-alerts.workers.dev";
const vaults = await (await fetch(`${base}/vaults`)).json();
for (const vault of vaults) {
console.log(vault.id, vault.open, vault.deposit_cap_usd);
}
const nvda = await (await fetch(`${base}/vaults/nvda`)).json();
console.log(nvda.open, nvda.kept_apr_pct, nvda.pools.length);The list carries each vault's open flag, deposit cap, fee APR and kept APR. The per-vault response adds the name, token, feed and the pool table the choice came from. The open flag is the gate's verdict; kept APR is the held-out half it was measured on.
All docs
Start here
The evidence
- The evidence gateThe 30-day replay, the held-out half, and the three states a vault can be in.
- Vault sizingWhy a thin pool carries a smaller vault instead of no vault, and how the cap is enforced.
- The recentre scheduleWhy the keeper recentres at 02:00 UTC after each NYSE session rather than at the open.
Using a vault
- Deposit USDG or a Stock TokenThe two ways in, what instantDeploy changes, and when a deposit waits for the next rebalance.
- Exit in kindredeemInKind pays both tokens with no oracle and no swap, including when the Stock Token is paused.
- The oracle and pricingChainlink freshness, the 10 minute TWAP, the deviation bounds and the prices each path trusts.
Build on Uptick
Sources
README.mdUptick repository. Vault universe, replay window and fee figures.
web/public/llms.txtCanonical gate states, caps and evidence API.
contracts/README.mdStockVault mechanics and the oracle gate.