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.
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.
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.
- price move
- fee paid
- Myelin would charge
- Myelin’s floor and cap (dashed)
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
Swapevents 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.
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
Check it yourself
You need Foundry’s cast and, for the second command, Node 22 and this repository. Nothing here depends on this website.
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
npm run shadow -- eth_usdg