How Stockpool works
What Stockpool is
Robinhood Stock Tokens trade on Uniswap v4 on Robinhood Chain. Every swap pays a fee to the people supplying the pool. Stockpool turns that into a deposit: you put USDG into a stock’s Pool, and a keeper holds it as one concentrated range in that stock’s USDG pool, centred on Chainlink’s price. The fees it earns compound into your shares.
There are three ways in: a single Pool, the Basket (every Pool at once), and Borrow (loans against Pool shares, or lending).
Pools
Each Pool is an ERC-4626 vault for one stock. Your shares are valued with Chainlink’s price for the stock, through Chainlink’s USDG/USD feed, never with the pool’s own price. Deposits are refused while the pool is more than 2% away from Chainlink, so nobody can push the pool to buy shares cheaply or sell them dearly.
The keeper places the range about 12% either side of the price and moves it when the price walks toward an edge. Any swap it makes to rebalance is checked against Chainlink and refused if it loses more than 1%. Each Pool has a deposit cap.
You can withdraw an exact amount of USDG while the price is live (if the Pool has to sell stock to pay you, that cost is yours, at most 1%), or withdraw in kind at any time: your share of the stock and USDG, with no price and no swap.
The Basket
One deposit spread across every Pool. The keeper keeps about a fifth in USDG for withdrawals, tops up the Pools that hold the least, and the contract refuses any move that would put more than 40% into one Pool. Withdrawals in USDG come from that reserve. Like the Pools, the Basket takes deposits and pays USDG only while every Pool it holds has a fresh price and trades within 2% of Chainlink. Withdrawing in kind always works and hands you your slice of the reserve plus your slice of each Pool’s shares. The Basket charges no fee of its own.
Borrow and lend
Each credit line lends USDG against one Pool’s shares. Pledge shares (they keep earning) and borrow up to 40% of their value. The rate moves with how much of the line is borrowed. If a loan grows past 55% of the shares’ value, anyone can repay up to half of it and take shares worth 6% more than they repaid. A line can hold at most 30% of its Pool’s shares as collateral.
Lenders supply USDG and earn the interest, less a 10% reserve that goes to the fee router. Each line is isolated: bad debt in one never reaches another. Borrowing needs a fresh Chainlink price; repaying never does.
Fees and $SPOOL
Of every swap fee a Pool earns, 70% stays in the Pool for its depositors and 30% goes to StockpoolFeeRouter, along with the credit lines’ reserves. The router forwards everything to StockpoolBuyBurn.
StockpoolBuyBurn can only buy $SPOOL on its Pons pool and burn it. Runs are capped and at most hourly, and it has no withdraw function. $SPOOL launches on Pons; until its pool is registered after graduation, fees wait in StockpoolBuyBurn.
Who can change what
Every setting (caps, fee share, risk limits, price feeds, the Basket’s Pools) is changed through StockpoolTimelock, which makes each change public for 48 hours before it can run.
The guardian can pause new deposits and borrowing and lower caps, never raise them. Withdrawals, withdrawals in kind and repayments stay open while paused. The keeper can move a Pool’s range and the Basket’s money between its Pools, inside the Chainlink checks; it can never send funds anywhere else.
Risks
- A concentrated range earns more fees but sells into a falling stock and buys into a rising one, so a Pool can end up worth less than the USDG put in.
- When a Chainlink stock price goes stale (its feed stops updating, as it does over weekends), deposits, USDG withdrawals and borrowing wait; withdrawing in kind does not.
- Stock prices can jump when trading resumes. A loan past its limit can be liquidated at a discount.
- The contracts are tested against the real Uniswap v4 code but have not been independently audited.
- Nothing here is investment advice.
Contracts
Every Stockpool contract carries the Stockpool name and is verified on the Robinhood Chain explorer.
- StockpoolTimelock (48h)
- 0xD62D354723225f826B078d38337D3D1ecf456d01
- StockpoolBuyBurn
- 0x7A0527583a23BdCFE823a45e4F3D2927B60795A5
- StockpoolFeeRouter
- 0x505d3a6369A1D6C9c8C332289964a7e79d13c00e
- StockpoolOracle
- 0xB249e667Fa7641A2C51Cfb79F75cf2FF55b02140
- StockpoolRegistry
- 0x560FadBFc92b8Bd26134F4DA2fB01797890e3D11
- StockpoolSwapAdapter
- 0x747238eba29Cd3D4E42Ad931357E7e15B0BeD01c
- StockpoolBasket
- 0x278A10F25288eBa93D488CC127B7B40D3c01fBf1
- StockpoolVault NVDA
- 0x7B2063bA3148BA1AfF559B024Ec3e2A440DFf02D
- StockpoolPosition NVDA
- 0x435C525e4E7947ce933DddAB07a757AAdb4A2309
- StockpoolVault TSLA
- 0xaB14A2771a72c4D49A56b01829bf52149D376691
- StockpoolPosition TSLA
- 0xBdCbBC2815EE314b0E2a9d46bFd4c222FeB7f8a5
- StockpoolVault AAPL
- 0x1E3a0B5646f229B19970C42218058c4e6C004046
- StockpoolPosition AAPL
- 0x296953A07B902e78e3C8F969975778F6198C6a18
- StockpoolVault META
- 0x1575151595EECD532C83E21D82F22A397D73E4aC
- StockpoolPosition META
- 0x8443D4fc0288798785184fB05f8959072A35a43c
- StockpoolVault GOOGL
- 0xb400a2c003D290F78A3DB643e5866d45afF72836
- StockpoolPosition GOOGL
- 0x30973C02A7ebD2957baD46D6F30FBdE674BDE0C5
- StockpoolVault SPY
- 0x4535DaB199Db36aCBAA20cEEf32DA292054F71B1
- StockpoolPosition SPY
- 0x18367B4FF0910Fa852b3b0e743959D39bE22F618
- StockpoolCreditDesk META
- 0x3af262514fd045c64a5f7b19A3848227D9fD6758
- StockpoolCreditDesk NVDA
- 0x7b2B3004a5C729fd7DCC661A8E6dA18Acb1ED9E5