Docs
Playlist, explained
Overview
Playlist turns a basket of tokenized stocks into one token. A playlist holds 2 to 20 Robinhood Stock Tokens in a vault on Robinhood Chain and issues its own ERC-20 token. Owning 1% of the tokens means owning 1% of what the vault holds.
- Buy in one click with USDG or ETH, or deposit the stocks yourself (in-kind).
- Sell to USDG in one click, or redeem for the stocks themselves.
- Create your own playlist: pick the stocks and weights, set the fees, seed it and mint. You become its curator and earn 90% of its fees.
How it works
Each playlist is a clone of the Basket vault contract, deployed and seeded atomically by the BasketFactory. The vault is also the playlist token: one address to track.
- A curator picks 2–20 whitelisted stocks, their weights and the fees, and seeds the vault with the real stocks. The seed backs the first token, so its value is the starting price.
- Buying mints new tokens against deposited stocks. Selling burns tokens and releases the stocks pro rata.
- The vault is immutable: its stocks and fees never change, and no function can move another holder's assets.
Buy, sell & redeem
One-click with USDG
You pay USDG. We split it across the stocks in proportion to the value the vault holds, find the best Uniswap v4 route for each leg (direct, or through ETH), and build one transaction for the ZapRouter: it swaps into every stock, deposits them and mints your tokens. The minimum you accept is enforced on-chain; if the market moves past it, the transaction reverts instead of filling badly.
Pay with ETH
ETH is swapped to USDG first on the deepest pool, then the same one-click buy runs with the USDG you are guaranteed to receive. Wallets that support batching sign both at once.
Pay with SOL from Phantom
Connect Phantom and sign one message (free, no transaction). That signature deterministically derives your own account on Robinhood Chain: same Phantom, same account, on any device, and you can export its key from the wallet menu anytime. Pay in SOL or USDC: Phantom signs one Solana transaction, Relay delivers it as ETH to your account in seconds, and the buy then runs without another popup. Selling works the same way back: sell to USDG, then send it to Phantom as SOL or USDC.
Only sign the account message on stockplaylist.com: anyone who gets that exact signature controls the derived account.
From another EVM chain
ETH or USDC on Base, Arbitrum or Ethereum is bridged by Relay as ETH into the same wallet on Robinhood Chain, then you buy with it.
In-kind
Deposit each stock in the vault's current ratio with mintInKind, or burn tokens for your slice of every stock with redeemInKind. In-kind never touches a price feed and redemption can never be paused.
A playlist holding a stock without a usable pool is in-kind only: you can still buy and sell it by moving the stocks themselves.
Create a playlist
- Stocks: 2–20 whitelisted tokens and their weights, summing to 100%. A live backtest shows how the mix would have done on real prices.
- Fees: entry (≤ 3%), exit (≤ 1%), management (≤ 3% a year).
- Identity: name, ticker, thesis and tags. The thesis is signed by your wallet, no gas.
- Seed: the value of your first token. Buy the stocks you are missing with USDG, or deposit the ones you hold.
- Review: approvals and the
createBasketcall. Approvals already in place are skipped.
The seed is sized with the contract's exact formula, from the same Chainlink feeds the vault uses:
seedUnits = seedUsd × weightBps × 10^tokenDecimals × 10^feedDecimals
─────────────────────────────────────────────
10000 × feedAnswer
pulled = ceil(seedUnits × (1e18 + 1e15) / 1e18)You receive 1 playlist token; 0.001 is locked forever at a dead address to protect the vault's math.
Fees
| Fee | Cap | When |
|---|---|---|
| Entry | 3% | Every mint, one-click or in-kind |
| Exit | 1% | Every redeem, including one-click sells |
| Management | 3% / year | Continuously, by minting new tokens (dilution) |
Every fee is paid in playlist tokens and split 90% to the curator, 10% to the protocol treasury. Caps are enforced by the contract and a playlist's fees never change after it is minted.
Curator earnings
Entry and exit fees land in your wallet as playlist tokens the moment someone buys or sells. The management fee accrues every second; anyone can call accrueMgmtFee() to mint the pending share, and your dashboard does it in one click. You can hold the tokens or sell them to USDG like any holder.
Example: $100,000 in a playlist at 1% a year earns you about $900 a year in management fees, plus 90% of every entry fee.
Pricing & returns
A playlist's value (NAV) is the sum of each stock held times its Chainlink price. The price per token is NAV divided by the supply. Prices only serve display, quotes and fee accounting: they never gate a deposit or a withdrawal.
Because a vault is pro rata and never rebalances, its price history can be rebuilt exactly from the stocks' price history. We index every Chainlink round for every whitelisted stock, which is why returns, drawdown and volatility are available from day one instead of after 30 days.
Security & risk
- Redemption in-kind is permissionless and can never be paused.
- Mint and redeem are oracle-free: a stale feed cannot trap your funds.
- Creation is atomic (clone, seed and initialize in one transaction).
- The one-click router only calls allowlisted swap venues and holds nothing between transactions.
Risks you accept: issuer risk on the tokenized stocks, thin liquidity for some pools, market and smart-contract risk, and an evolving regulatory landscape. See Terms, risks & privacy.
Contracts
All on Robinhood Chain (chain id 4663).
| BasketFactory | 0x4F019423f7A58400046cb169F0153aEF2DDc81FB |
| Basket implementation | 0xb1e5dA4D757D41330fC2f97A9989D48295366A33 |
| Whitelist | 0x8e09388474549Ce515223Fa094B567c5d0286a99 |
| ZapRouter | 0xd44ab843ac2839e1F766E66a837F8edb537dE2fd |
| V4SwapAdapter | 0xbDAb8AF8467158fe3ec5595fd64A447Ec64ca29B |
| Karat router (ETH leg) | 0x5b03ca37137feb729a9e4427c5683998b4ab09e3 |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| Uniswap v4 Quoter | 0x8dc178efb8111bb0973dd9d722ebeff267c98f94 |
Public API
Everything the site shows is available as JSON. Numbers are plain JSON numbers in USD or token units, except transaction amounts, which are integer strings.
GET /api/v1/playlists every playlist, returns, sparkline
GET /api/v1/playlists/{address} one playlist + activity + holders
GET /api/v1/playlists/{address}/series?days=30 price per token history
GET /api/v1/stats TVL, playlists, curators, holders
GET /api/v1/tokens whitelisted stocks, live prices
GET /api/v1/activity latest buys and sells
POST /api/v1/backtest { tokens, weights, days }
POST /api/v1/trade { action: "buy_usdg" | "buy_eth" | "sell_usdg"
| "mint_inkind" | "seed" | "create", ... }/api/v1/trade returns ready-to-sign steps (to, data, value), so bots and agents can buy playlists without our interface.