myelin
Robinhood Chain
03 Myelin on the real market

Shadow

Myelin’s own mainnet pool is new and starts empty. This takes the real swaps of real mainnet pools and replays them through Myelin’s model and policy: for every swap, the fee Myelin would have charged, next to the fee that was really paid. Read only: nothing is deployed, sent or signed.

A fee is not a return. This shows what a fee would have been. A different fee would have changed who traded and how much, so it says nothing about what liquidity providers would have earned. The backtest asks that question, and its answer does not support a claim that they would have earned more. Read how to read this before drawing anything from it.

Pool

ETH / USDG

A pool of Uniswap v4 on Robinhood Chain mainnet. Its fee: dynamic, set by a hook that is not Myelin.

This is the pool Myelin’s policy was tuned on, on four weeks of its swaps.

Catching up with mainnet: up to block 95,211,292, 2026-10-22 15:21 UTC. New swaps come in by themselves.

Fee paid
0.217%on average
weighted by size · 150 swaps, 426,513 USDG traded
Myelin would charge
0.149%on average
−31% against what was paid
Myelin would charge more in
32 of 150swaps
less in 118, the same in 0
Myelin at its floor or cap
0 · 0swaps
floor 0.0516%, cap 0.4127%
Fig. 7 · Fee per swap

The fee paid, and the fee Myelin would have charged

The last 150 swaps of ETH / USDG, 2026-10-22 15:11 UTC to 2026-10-22 15:20 UTC. Bars: how far each swap moved the price. Lines: the fee, one value per swap.

Snapshot
  • price move
  • fee paid
  • Myelin would charge
  • Myelin’s floor and cap (dashed)
ticks0510fee0%0.2%0.4%0.6%0.33%0.14%15:1115:20
Times in UTC. One slot per swap, oldest on the left.
Method

How to read this

What it does
For each swap, the model reads the eight numbers the pool would have remembered about its price moves before it, and the policy turns its output into a fee, the way the hook does it on-chain: same integer code, same weights, same policy (0.0516% to 0.4127%). A swap enters the memory only if it leaves the tick 3 or more ticks from the last record, in a later second, so in a deep pool most swaps do not. The first 512 swaps only warm the memory up; the150 after them are shown. In the deepest pool that is not enough for the slowest average to settle, as in the research.
What it does not say
It is not what liquidity providers would have earned: a different fee changes who trades and how much, and the research does not show a gain for liquidity providers against a plain rule (results). It is a window of minutes or hours, not a trend. And a Myelin pool on mainnet would be a new pool beside this one, with its own liquidity and its own routing.
The fee paid
The fee in the swap’s event: what the swapper paid, the pool’s own fee and, where the pool has one, Uniswap’s protocol fee. This pool’s fee is set by a hook that is not Myelin, and moves from swap to swap.
Where it comes from
The Swap events of Uniswap’s PoolManager on mainnet, read in your browser through the public RPC (rpc.mainnet.chain.robinhood.com), and the time of each block. The replay is the hook’s own integer code in TypeScript, tested bit for bit against the same vectors as the contracts. Nothing is sent anywhere. See the docs.
Facts

ETH / USDG on mainnet

Pool id
0xbac3aa3b…34bde551
Tokens
ETH (native) · USDG
Fee
dynamic, set by a hook that is not Myelin
Hook
0x06a889…9b6080 not Myelin
Tick spacing
10
Size is counted in
USDG: what the swapper paid, valued at the pool’s price after the swap
Terminal

Check it yourself

You need Foundry’s cast and, for the second command, Node 22 and this repository. Nothing here depends on this website.

1. The raw swaps of this pool, from the chain (a thousand blocks)
cast logs --rpc-url https://rpc.mainnet.chain.robinhood.com --address 0x8366a39CC670B4001A1121B8F6A443A643e40951 --from-block <block> --to-block <block + 1000> "Swap(bytes32 indexed id,address indexed sender,int128 amount0,int128 amount1,uint160 sqrtPriceX96,uint128 liquidity,int24 tick,uint24 fee)" 0xbac3aa3b91584a53a579b3c999a56756e954e59247e497bad1d25a4334bde551
2. The same replay, in a terminal (from the app folder of the repository)
npm run shadow -- eth_usdg