How it works
Three AI strategies trade in public
Each strategy decides on a fixed schedule from live market data. Every call, fill and blocked order is recorded with its inputs and cost.
Each strategy has its own vault
A vault is a program account that holds only that strategy's assets. The strategy can swap inside its vault policy and nothing else.
You pick a vault by its record
Deposits and redemptions are requests that settle at the vault's next epoch close, at that epoch's NAV.
The platform earns only on new gains
A performance fee is taken above each vault's high-water mark. The platform share funds staker rewards, the weekly dev buy and the team.
Record sources
Every performance figure, fill and decision carries one of two labels. Standings and totals are computed per label.
- LIVE
- Fills of approved capital, each with its transaction on Solscan.
- PAPER
- Live market data, real model calls and real Jupiter quotes. The fill is simulated against the quote, so it has no transaction; the quote time is its evidence.
Allocate to a strategy
Read the record
Each strategy page shows return after costs, drawdown, the benchmark, every version and the full decision log.
Request a deposit
Your USDC moves to the vault's deposit escrow and a ticket records the epoch. You can cancel the request until the epoch settles.
Claim your shares
When the epoch settles, the deposit converts to vault shares at that epoch's NAV. Claiming moves the shares to your wallet.
Redeem when you want out
A redemption request moves shares to the redemption escrow. At the next epoch close they convert to USDC at that epoch's NAV, ready to claim.
Every action asks your wallet to sign one transaction; it is sent once you approve it there.
Settlement rules
| Cycle | Length | What happens at the close |
|---|---|---|
| Vault epoch | 15 minutes or more | Pending deposits and redemptions settle at the epoch's NAV. The performance fee is crystallized on gains above the high-water mark. |
| Revenue period | 1 week, Mon 00:00 UTC | The platform share received for the week, minus costs, then minus a 10% reserve on what remains, splits 40% to stakers, 30% to the dev buy budget and 30% to the team. |
| Dev buy | Weekly | The week's budget buys the token in orders of at most 25% of it, 100 bps slippage and 2% of 24h volume. Unspent budget carries over. |
| Staking | Per revenue period | Staker rewards are shared by amount x time staked in the period. Unstaking stops new accrual; rewards already earned stay claimable. |
| Rebate | 90+ days in a vault | At each settlement 10% of the platform half of the fee is set aside as vault shares for depositors who stay 90+ days, before the platform receives its share. |
What the AI can do
Each strategy signs with a session key the vault program knows. The program checks every instruction against the vault policy, so the key can only swap: it has no transfer authority over the vault.
Allowed
- Swap between allowlisted assets through allowlisted programs, within the order and weight limits
Refused by the program
- Transfer funds
- Withdraw
- Change the policy
- Call programs outside the allowlist
| Assets | USDC up to 100% · SOL up to 80% · JUP up to 40% |
|---|---|
| One order | up to 25% of NAV |
| Slippage | up to 100 bps against the oracle |
| Oracle price age | up to 2 min on-chain; the pre-trade check stops at 90 s |
| Oracle confidence | up to 200 bps on-chain; the pre-trade check stops at 100 bps |
| Between swaps | at least 5 min |
| Policy and session key changes | wait 1 h 15 min after they are proposed |
| Program config changes | wait 2 days after they are proposed; fee and split changes at least 7 days |
| Programs | Jupiter Aggregator v6 |
Costs
| Cost | Paid by | Where you see it |
|---|---|---|
| Swap fees, slippage, network fees of trades | The vault | Already inside every return figure; per fill on its receipt |
| Performance fee: 20% of new gains above the high-water mark | The vault, in shares | Only on gains past the previous peak; half to the strategy developer, half to the platform |
| Model calls and RPC | The platform | Model cost column per strategy and per receipt; deducted before the revenue split |
| Network fee of your deposit, claim or redemption | Your wallet | Your wallet's confirmation screen |
Risks
- Strategies lose money. A vault's NAV moves with SOL and JUP; past returns, PAPER returns included, do not predict the next epoch.
- Your capital waits for the epoch. Deposits and redemptions settle only at an epoch close, at that epoch's NAV, which can differ from the NAV when you asked.
- Prices come from oracles and quotes. A stale oracle, a price outlier or a missing quote stops orders; a strategy may then hold a position longer than it planned.
- Models fail. A failed call places no order and is listed under call errors. The strategy keeps its last position until the next call.
- Smart contract risk. The vault program enforces the policy, and any program can have bugs. Program, upgrade authority and vault accounts are listed on the Proof page.
Public API
Read-only JSON over HTTPS. Every response is { ok, data } or { ok: false, error: { code, message } }. GET requests under /api/v1 allow any origin, without credentials. The limit is 120 requests per minute per IP; a 429 carries retry-after.
curl -s https://app.scrimm.live/api/v1/scoreboard | jq '.data.standings[] | {rank, name, return}'let cursor: string | null = null;
do {
const url = new URL("https://app.scrimm.live/api/v1/receipts");
url.searchParams.set("kind", "fill");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const { ok, data } = await (await fetch(url)).json();
if (!ok) break;
for (const r of data.receipts) console.log(r.id, r.sourceLabel, r.side, r.in.uiAmount, r.in.symbol, r.explorerUrl);
cursor = data.nextCursor;
} while (cursor);Money values are decimal strings, returns and weights are ratios (0.0123 = 1.23%), times are ISO 8601 UTC. source defaults to the league's current source.
| GET | Query | Returns |
|---|---|---|
| /api/v1/scoreboard | range, points, source | Standings, return series, last fill and last blocked order |
| /api/v1/league/series | range, points, strategy, source | Return series per strategy and benchmark |
| /api/v1/league/events | type, since, limit, cursor, source | Lead changes, fills, blocked orders, new versions |
Transactions
Deposits, redemptions, claims and staking are built in the app: each button prepares the instruction, shows a review with amounts and fees, and your wallet signs and sends it. The instruction builders behind those buttons ship with the app's source and are not published to a package registry, so an integration today reads with the HTTP API above and sends people to the app for actions.
| Instruction | What it does | Where in the app |
|---|---|---|
| request_deposit | Moves USDC to the vault's deposit escrow for the open epoch | Strategy page |
| cancel_deposit | Returns a pending deposit before the epoch settles | My allocation |
| claim_deposit | Moves the shares of a settled deposit to your wallet | My allocation |
| request_redeem | Moves shares to the redemption escrow for the open epoch | My allocation |
| cancel_redeem | Returns pending shares before the epoch settles | My allocation |
| claim_redeem | Pays the USDC of a settled redemption | My allocation |
| claim_fee_rebate | Claims the rebate shares of a 90+ day deposit | My allocation |
| stake / unstake | Adds or removes tokens from the stake pool | Platform revenue |
| claim_rewards | Claims holder rewards earned in closed reward periods | Platform revenue |
Claims pay to your associated token accounts; the app creates them in the same transaction when they are missing. The program id and every vault account are on the Proof page.