Stocky is a USDG liquidity layer for supported tokenized stocks on Robinhood Chain. Each market has its own vault. Stocky reads those deployments; it does not replace them with one shared vault.
Deposit USDG into an individual vault and receive that vault’s shares. The router can convert the required portion into the stock token and supply both assets to the market. The vault manages the range. Trading fees come from that position. Claimed fees on these deployed vaults are split 70% back into the position, 20% to the vault’s buyback address, and 10% to the vault’s treasury. That is the existing contract. It is not a Stocky token.
Open a supported stock/USDG vault from the markets table.
Shares represent your portion of that vault only.
TVL, range, fees and your position are read from the chain.
Redeem both tokens in kind, or convert back to USDG when the vault’s price guard allows it.
Stocky lists one independent vault per supported stock. A deposit in the NVDA vault does not become a position in AAPL. An older allocator contract exists on Robinhood Chain and is not part of this product surface.
The trade page asks an aggregator for a route between USDG and a supported stock token. If the aggregator does not return a route, the page does not invent one. Limit and TWAP stay marked as not available.
Stocky shows the checks on the underlying vaults: Chainlink reference prices, range limits, caps, pauses and more than one exit. If a required price is missing, price-dependent actions wait.
Every vault operates within defined limits for price movement, trade size, and acceptable execution loss.
Day-to-day operation, emergency controls, and protocol treasury responsibilities use separate roles.
Important configuration changes follow a review window instead of taking effect immediately.
Vaults include multiple withdrawal and recovery paths so users are not dependent on a single trade route.
Tokenized-stock markets follow a 24/5 schedule. Stocky uses Chainlink as an independent reference before accepting a price-dependent action, rather than trusting a pool price by itself.
A deposit proceeds only when the Chainlink price is fresh and the pool remains within its permitted range.
When stock feeds stop updating, deposits and other price-dependent actions can pause until fresh pricing returns.
Users can withdraw their proportional underlying tokens without waiting for a stock sale. A one-click USDG conversion waits for a live protected price.
Rebalances compare current pool conditions with Chainlink before assets are repositioned.
These 18 addresses are deployed ManagedRoutedVault contracts on Robinhood Chain, one per stock. Stocky did not deploy them. Sourcify has a full match for each vault. Router, position and oracle addresses are stored beside the vault and are what the deposit button calls.
Stocky is published under the MIT license. Figures on the site are chain reads. The ManagedRoutedVault contracts are existing deployments verified on Sourcify. This repository is the application that reads them. The MIT copyright notice stays in LICENSE.
One read-only client with fallback endpoints, the vault state reader and the snapshot service that refreshes every 15 seconds. src/lib/managed-vault.ts ↗
How a USDG budget becomes a router deposit, and how a redemption is quoted before you sign. The vault page uses this path. src/components/vaults/ManagedVaultActions.tsx ↗
The script behind /verify: contract wiring, fee counters, simulated deposits and withdrawals through state overrides, site and API checks. scripts/verify.ts ↗
TVL, range and fee observations are computed from vault reads. Fee APR is a rolling observation, not a forecast. src/server/vault-snapshots.ts ↗
const [g0, g1, p0, p1, b0, b1] = await Promise.all([
read("grossFees", 0n), read("grossFees", 1n),
read("protocolFees", 0n), read("protocolFees", 1n),
read("buybackFees", 0n), read("buybackFees", 1n),
]);
const buyback = pct(b0, g0); // 20%
const treasury = pct(p0, g0); // 10%
const ok = Math.abs(buyback - CLAIM.buyback) <= 0.5
&& Math.abs(treasury - CLAIM.treasury) <= 0.5;const rangePosition = (price - lower) / (upper - lower); // 0 → lower bound, 1 → upper
if (inRange === false) flags.push("out of range");
else if (rangePosition < 0.15 || rangePosition > 0.85)
flags.push(rangePosition < 0.15 ? "near lower bound" : "near upper bound");
if (oracleAgeSeconds > 26 * 3600) flags.push("oracle stale");git clone https://github.com/pablooalonnso-web/claudemaxing5.git stocky cd stocky && npm install npm run dev # the site on http://localhost:3000 npm run verify # the same checks /verify publishes
A Next.js app with no database and no backend beyond the chain: server routes read Robinhood Chain and cache for seconds, pages render from those reads, and the wallet signs every transaction locally. Issues and pull requests are open.
Open the repositoryStock price exposure, smart-contract risk, oracle risk, range risk, routing risk and liquidity risk all apply. Shares are not principal-protected. Fee APR is not a forecast. Automated verification is not an independent security audit.
An onchain liquidity layer for supported tokenized-stock markets using USDG. Each market is its own vault.
That vault’s router takes the USDG budget, swaps the portion the position needs into the stock token, and supplies both assets to the range. You receive shares of that vault.
No. Stocky provides liquidity infrastructure for supported tokenized assets. The rights and backing of each tokenized stock depend on its issuer.
Yes. Vault shares carry exposure to the underlying Stock Token and are not principal-protected.
A historical annualized observation of recent trading fees, after the vault’s own fee split, not a prediction or a guaranteed return.
The vault’s Chainlink check refuses price-dependent deposits and USDG-only exits while the reference is stale. In-kind withdrawal of both tokens can remain available. Questions: @usestocky.