Gap-aware pools · Robinhood Chain

Markets close. Onchain stocks don't.

Vayle is a Uniswap v4 hook for tokenized stocks. When a pool's price drifts away from the official price, it raises the swap fee, and it pauses swaps when something looks wrong. Liquidity providers stop getting picked off while the feed sleeps.

Live on Robinhood Chain mainnet. TSLA/USDG, small pool.
Illustration, not live data
Gap
0 bps
Swap fee
0.15%
Pool
Normal

Live now

Deployed on Robinhood Chain.

The hook is on mainnet with a TSLA/USDG pool and a small amount of seed liquidity. The code is verified on Sourcify, so you can read exactly what is running.

Pool ID0xa270cba3eca539c6e28e787688312e7d6c3a58fe7ba48a6c9ce84ee59758a18e
Base fee0.15%
Free zone25 bps
Max fee1%
Pause at150 bps

The problem

The feed sleeps. The pool keeps quoting.

Robinhood's stock tokens are priced from Chainlink feeds that follow the US trading week. At the close the feed holds its last price. The token still trades onchain, so the pool's price drifts away from it. Anyone who knows the stock has moved can buy from liquidity providers at the stale price.

52hourswith no Chainlink update, from Friday Oct 2 to Monday Oct 5
785swaps in the TSLA/USDG pool over that window
58bpslargest gap between the pool and Chainlink (0.58%)

Source: Robinhood Chain onchain data for the 0.3% TSLA/USDG pool with no hook. 1 bp is 0.01%.


Real data

Last weekend, replayed.

Every swap from Oct 2 to 5, against Chainlink's price. Press play, or drag across the chart. The fee shown is what Vayle would have charged with its current test settings.

Time (UTC)
-
Chainlink
-
Pool
-
Gap
-
Vayle fee
-
0Chainlink updates during the 52 hour freeze
-swaps during the freeze
-would have paid more than the base fee
-highest fee Vayle would have charged
That was a quiet weekend: the biggest gap was 58 bps, so the highest fee would have been 0.48%. The fee exists for the weekend that isn't quiet, when news lands on a Sunday and the gap runs to hundreds of basis points.

Simulator

Move the gap. Watch the fee.

These are the current test settings. Drag the slider, then switch on the things that can go wrong.

Gap between pool and Chainlink
20bps
Swap fee
0.15%
Fee by gap

How it works

Three checks inside every swap.

The hook runs before each swap on the pool. No bot posts prices to it and nobody has to trust one. It reads both prices itself.

1 / read

Read both prices.

The hook reads Chainlink's price for the stock token and the pool's own price, and works out the gap in basis points. The pool price is a snapshot from the start of each short window (about 12 seconds), so one big trade can't game the fee for the swaps right after it.

2 / price

Set the fee.

Inside the free zone the pool charges its base fee. Past it, the fee climbs by one basis point for every basis point of gap, up to a cap. The more stale the price, the less a trade against it is worth.

3 / guard

Guard the pool.

If the gap is extreme, swaps pause. If the feed has gone dead, the fee goes to the maximum. If the stock token's multiplier changes, swaps hold until the owner confirms the new one.


Preview

What the dashboard could look like.

A concept for the pool page: live gap, current fee, a swap panel and a feed of what the hook is doing. Turn the sound on.

Concept preview. The interface isn't built yet and the numbers are illustrative.

Protections

What happens when things go wrong.

Extreme gap

When the gap reaches 150 bps on a live feed, swaps revert instead of trading at a price nobody can vouch for.

halt at 150 bps

Dead feed

If Chainlink reverts, returns a zero or negative answer, or has not updated in 96 hours, the pool charges the maximum fee. The normal 52 hour weekend silence never counts as dead.

max fee 1.00%

Corporate actions

Stock tokens carry a multiplier that changes on splits and similar events. If it changes, is scheduled to change, or the token's own oracle is paused, swaps stop until the owner confirms.

swaps revert

Owner modes

The owner can force the maximum fee on every swap, or pause the pool entirely, if something looks wrong that the checks can't see.

kill switch

Questions

Straight answers.

Is Vayle live?

Yes, in a small way. The hook is deployed on Robinhood Chain mainnet with a TSLA/USDG pool seeded with a small amount of liquidity, and the source is verified. The dashboard on this page is still a concept.

Is it audited?

Not yet. That is why the pool is small. An outside audit is planned before any serious money goes near it.

Does it need a bot to post prices?

No. The hook reads Chainlink and the pool price itself on every swap, and the weekend replay shows it charges the same fee as a modelled bot-fed version on all 785 swaps. A separate script that logs gap data exists for research only.

What is the gap?

The difference between a pool's price and Chainlink's official price for the stock, in basis points. One basis point is 0.01%. A 25 bp gap is 0.25%.

Why a 25 bps free zone and a 0.15% base fee?

Chainlink itself only updates when the price moves 0.5%, so small gaps are mostly noise. We launched with a 0.05% base fee and a 40 bps free zone, then replayed last weekend's swaps and found it was too cheap: arbitrageurs would have kept about 35 bps on every trade and liquidity providers would have lost money against Monday's price. On Oct 9 we changed it to 0.15% and 25 bps. That is a first estimate from one weekend of data, and it will keep changing as more data comes in.

Which stocks will it cover?

TSLA is the first, and so far the only, live pool. Robinhood lists 194 stock tokens, and 43 pools on the chain currently have the open liquidity and trading volume that make them worth supporting, covering 19 different stocks.

What are the risks?

Robinhood can pause, block or upgrade its stock tokens, and Vayle trusts Chainlink's price. Stock tokens may not be available in every country. The contracts are new and unaudited. Anything built on them should be treated that way.

Is there a token?

No. Nothing has been announced or launched. Anyone offering you a Vayle token is not us.