Docs
Three numbers per stock, every weekend.
Robinhood's Chainlink stock feeds on Robinhood Chain stop printing after Friday's last round and start again at the Sunday-evening reopen, about 56 hours later. The stock-token pools on Uniswap keep trading in between. Dusktape writes down three numbers and asks whether the weekend pool price was a signal or noise.
How it works
- 1
Friday close
The feed's last round before the silence. The feeds print on a 0.5 % deviation / 24 h heartbeat, so this last print can land hours before the 16:00 ET bell.
- 2
Sunday pool mark
A 30-minute TWAP of the stock/USDG Uniswap pool times USDG/USD, taken around Sunday 22:30 UTC, just before the reopen.
- 3
Monday open
The feed's first round after that Friday round, at the Sunday 20:00 ET reopen (Mon 00:00–01:00 UTC).
The grade: did the pool call Monday's direction (up or down vs Friday close), and was it closer to Monday's open than Friday close was? The live board shows the gap while it is open; the backtester replays every past weekend; the LullLedger contract records the grades on-chain.
Stocks: NVDA, TSLA, SPY, AAPL, SPCX, MSTR.
The backtest
Runs in your browser on weekends.json. Nothing is sent anywhere.
- Signal
- Sunday pool vs Friday close moved at least X % (up, down or either).
- Action
- Follow: long if the pool is up, short if it is down. Fade: the opposite.
- Entry
- The Sunday pool mark, moved against you by the estimated slippage.
- Exit
- Monday open (feed price). No exit slippage is modelled.
- Depth filter
- Weekends where buying ±1 % of the pool costs less than the chosen amount (default $5,000) are skipped: thin pools print wild prices on tiny trades.
- Bad data guard
- Weekends where the pool sat more than 20 % from Friday close are skipped, the same guard the contract uses.
move = (sunPool − friClose) / friClose
slip % = 0.5 × size / depth(+1 %) // linear impact, half on average
entry = sunPool × (1 ± slip) // + when long, − when short
return = side × (monOpen − entry) / entry
hold = (monOpen − friClose) / friClose // the "hold over the weekend" line
Every trade row links to its proof on Blockscout: the feed contract (Friday and Monday rounds), the block of the Sunday mark, and the pool.
The contract: LullLedger
No owner, no admin, no upgrade, no withdraw. The stock list is fixed at deploy. ETH sent to it only ever leaves as bounties.
// Sun 22:00 – Mon 03:00 UTC, once per stock per weekend
mark(i)
// any time after the reopen; normally monRound = friRound + 1
close(i, friRound, monRound)
// reads
statsOf(i) entry(i, friRound) weeksOf(i) markWindowOpen() bountiesLeft()
- Bounty: 0.00002 ETH per successful
markorclose, while the contract holds enough ETH. One mark and one close per stock per weekend, so at most 12 per weekend. Funded from $LULL creator fees. - Refused marks: the contract will not record a weekend where the pool is more than 20 % from Friday's last print, or where the pool spot sits more than about 1 % off its 30-minute TWAP at mark time (anti-manipulation). So the on-chain record skips extreme weekends.
- Report card: the site shows medians computed from the per-weekend entries. The contract's own error sums cap each weekend at 15 %, so its averages are labelled "capped".
- First record: the first marks can land Sun 15 Nov 2026, 22:00 UTC.
- Unaudited: internal review only. Informational: never use these numbers as a lending or settlement oracle.
Data files
An indexer reads the feeds and pools on Robinhood Chain and writes three static JSON files, refreshed every 5 minutes:
- /data/weekends.json every past weekend per stock: Friday close, Sunday pool and depth, Monday open, the hourly pool path, proof ids.
- /data/live.json the current gap: last print, pool now, change, depth, whether the feed is silent.
- /data/ledger.json the LullLedger report card.
All prices are USD. All times are unix seconds, shown in UTC.
Limits
- Short history. Robinhood Chain's stock feeds go back to mid-2026: about 20 weekends. Some early stock-weekends have no pool data at all (the pool did not exist yet or had less than 30 minutes of history); they are left out and counted on the page.
- Informational, not advice. What happened on past weekends says little about the next one.
- Stock tokens are not shares. They track a price; they are not the stock.
- Slippage is an estimate from the pool's depth at that block, with a linear model. Real fills can be worse, especially on thin weekend pools. The 2 % $LULL creator tax is not part of the backtest.
- "Friday close" is the feed's last print, not the official 16:00 ET close. With a 0.5 % deviation / 24 h heartbeat it can be hours earlier.
- The on-chain record skips extreme weekends (pool more than 20 % from Friday close, or spot more than ~1 % off its TWAP at mark time).
- Unaudited contract. Internal review only.
Links
- llms.txt: a plain-text summary for language models.
- $LULL: the token page.
- X @dusktape
- GitHub