Backtest results
Before putting the idea on a chain we tested it on 735,161 real swaps. This page gives the result, including what it does not show. The point of an on-chain model is that you do not have to take our word for it, so we do not ask you to.
The short version
The network predicts the next minute of price movement better than a one-line rule (a test error of 0.79 against 1.03). The project’s own test for liquidity providers asks whether the network leaves them better off than that rule in a majority of pools. It passes: the network won in 4 of 4 pools, where the first version won 2 of 4 and did not pass. We do not read that as a go, and it is not evidence of better returns. The rule is computed on the same inputs, and the inputs got worse for it. Only one of the four margins is clear of zero. And against the rule of the first version, the fixed bar, the network is behind in ETH/USDG, the busiest pool: it left liquidity providers +1.86 bps of volume, that rule +2.94, the rule on the new inputs +1.11 and a static fee +1.10.
The data does not support a Treasury share of 10% either: the share of the fee that liquidity providers could give away and still match the better of a static fee and the rule is 9.0% at most, and none in one of the four pools. The share in this deployment is a choice, not a finding. Myelin shows a mechanism that works and can be checked; it does not show that the mechanism pays.
What was tested
Four pools of Uniswap v4 on Robinhood Chain mainnet, from 23 September 2026 to 21 October 2026: 28 days for ETH/USDG, NVDA/USDG and HOOKR/ETH, and 10.6 days for TORCH/ETH, a newer pool. The swaps were read from the chain with two independent providers and compared field by field. For each swap we replayed what the liquidity providers would have kept under four policies. Each one’s slope is solved, on the validation split, to give all four the same average fee, so that none can win simply by charging more; they differ in where they put it. On the test split the averages come out a little apart (ETH/USDG: static 10.3, rule 8.7, Myelin 9.8 bps), and the results below include that.
- Static: one fee.
- Rule: a fee that rises with the medium moving average of recent price moves. One line, no machine learning.
- Myelin: a fee that rises with the network’s prediction. This is the deployed policy, tuned on ETH/USDG.
- Oracle: a fee that rises with the movement that actually happened in the next minute. It cannot be built; it shows the headroom.
The inputs of the network and of the rule are what the hook’s memory would have held: a swap enters it only if it is an observation, that is, if the tick is at least 3 ticks from the last observed one and the block is later than the last observation’s (How the fee is set). The target is computed from all swaps. The first version of the memory counted every swap; its results are shown where they are needed to read the second.
The measure is what liquidity providers keep, in basis points of volume (“LP net”): the fees, minus what traders who knew the price was about to move took from them, valued one minute later (a markout). How much volume reacts to a change of fee is not known, so four elasticities are tried (0, 0.5, 1 and 2); the tables below use 1, where a fee 1% higher means 1% less volume. Each pool is split by time: the first 60% trains, the next 20% chooses the policy’s settings, and the last 20% is the test set, read once.
What liquidity providers kept

| Pool | Mean fee (bps) | Static | Rule | Myelin | Oracle |
|---|---|---|---|---|---|
| ETH / USDG | 10.32 | +1.10 | +1.11 | +1.86 | +4.30 |
| NVDA / USDG | 1.25 | −0.24 | −0.21 | −0.10 | −0.21 |
| TORCH / ETH | 34.99 | −59.71 | −74.15 | −59.27 | −31.40 |
| HOOKR / ETH | 28.99 | −11.07 | −16.18 | −15.51 | −10.63 |
Test split, elasticity 1. Basis points of volume; higher is better. Rule and Myelin are those of the second version of the memory.
- In ETH/USDG the rule is level with a static fee (0.00 bps, 95% interval [−1.46, +1.89]) and the network is ahead of the rule by +0.76 bps, interval [−0.06, +1.47], which includes zero. Against a static fee the network is ahead by +0.76 ([−0.33, +2.15], which includes zero).
- In NVDA/USDG the pool earns almost nothing at a 0.01% fee, whatever the policy. The network is ahead of the rule by +0.11 bps ([−0.02, +0.23], which includes zero).
- In TORCH/ETH and HOOKR/ETH, small-cap pools, liquidity providers lose money under every policy: adverse selection is larger than any fee in the band. The network loses less than the rule in both, which is why they count as wins, but only in TORCH/ETH is the margin clear of zero (+14.20, [+1.87, +28.70]). In HOOKR/ETH a static fee loses least of the three (−11.07 against −15.51 for the network). No policy makes these pools pay.
- The oracle, a perfect forecast of the next minute, is worth +3.20 bps over the rule in ETH/USDG. The network closes +0.76 of that gap, about 24%.
The test is passed, and why that is not a go
The project set itself one test before building anything on top of the idea: the fee policy driven by the network earns the liquidity providers more than a one-line rule, in a majority of pools, on data the model never saw. The first version won 2 of 4 and did not pass it. The second wins 4 of 4 and passes. By its own definition that is a pass. These are the reasons the research does not read it as better returns.
| Pool | Rule v1 | Network v1 | Rule v2 | Network v2 | Network v2 − rule v1 |
|---|---|---|---|---|---|
| ETH / USDG | +2.94 | +2.24 | +1.11 | +1.86 | −1.08 |
| NVDA / USDG | +0.09 | −0.16 | −0.21 | −0.10 | −0.19 |
| TORCH / ETH | −68.25 | −58.82 | −74.15 | −59.27 | +8.98 |
| HOOKR / ETH | −17.94 | −15.40 | −16.18 | −15.51 | +2.42 |
Test split, elasticity 1, bps of volume. v1 and v2 are the first and the second version of the memory; the same swaps and the same fee band in both.
- The comparison got easier because the rule got weaker. The rule reads the medium average of the memory, and on the second version’s inputs that average carries almost nothing (in ETH/USDG 92% of observations are exactly 3 ticks). In ETH/USDG its result fell from +2.94 to +1.11 bps, to the level of a static fee, while the network’s moved from +2.24 to +1.86; in NVDA/USDG the rule fell from +0.09 to −0.21 and the network moved from −0.16 to −0.10.
- Only one of the four margins is clear of zero. The 95% intervals of the network minus the rule, from a block bootstrap over whole hours of the test split, include zero in every pool except TORCH / ETH, one of the pools where liquidity providers lose money under every policy.
- Against the fixed bar, the network is behind. Set against the rule of the first version, the network is behind in ETH / USDG and NVDA / USDG and ahead only in TORCH / ETH and HOOKR / ETH, small-cap pools where liquidity providers lose money under every policy: 2 of 4, not a majority.
- The share is not supported either. The break-even share (below) is 9.0% at most, and the deployment takes 10%.
So the literal verdict changes; what the backtest says about the product does not: a network that predicts the next minute well, and a fee that follows it about as well as a one-line rule would, in one period of four pools. Nothing here is a claim about returns.
Prediction is good, profit is another matter

On the test set the network’s mean absolute error is 0.79 against 1.03 for the rule, and 0.79 for a gradient-boosting model that could not run on-chain. The first version’s network had 0.77 on its own inputs: this one is 2.6% higher, inside the 5% the project allowed for what the new memory costs (ETH / USDG +5.2%, NVDA / USDG +2.4%, TORCH / ETH −3.5%, HOOKR / ETH −1.3%). Predicting how far the price will move is not the same as knowing which trades arrive against a stale price.
What the network reads has changed. On the second version’s inputs it leans on when the price moved (shuffling the average time between observations raises its validation error by 0.25) and hardly at all on how far (shuffling the medium average, which the rule reads alone: 0.003). In a deep pool 93% of the swaps are below the minimum move, the observed moves are nearly all 3 ticks, and what is left to read is timing. We have not tested whether a fee needs the timing of adverse trades more than the size of moves.
Is there room for a Treasury share?
If liquidity providers are to be no worse off than with the better of the static fee and the rule, the share has to come out of the network’s gain over them. That gain divided by the fee revenue, floored at zero, is the break-even share:

| Pool | Elasticity 0 | Elasticity 0.5 | Elasticity 1 | Elasticity 2 |
|---|---|---|---|---|
| ETH / USDG | 0.0% | 0.0% | 6.9% | 0.0% |
| NVDA / USDG | 1.1% | 5.0% | 9.0% | 8.8% |
| TORCH / ETH | 0.0% | 1.3% | 1.3% | 0.0% |
| HOOKR / ETH | 0.2% | 0.0% | 0.0% | 0.0% |
At elasticity 1 it is 6.9% in ETH / USDG, 9.0% in NVDA / USDG, 1.3% in TORCH / ETH and 0.0% in HOOKR / ETH, and it is 9.0% at most anywhere. The deployment’s share is 10%, above every one of them: chosen so that the Treasury, the buyback and the burn can be exercised end to end, not because the data supports it. What liquidity providers keep when Myelin gives away a share of its fee:
| Pool | Share 0% | Share 5% | Share 10% | Share 20% | Static | Rule |
|---|---|---|---|---|---|---|
| ETH / USDG | +1.86 | +1.31 | +0.77 | −0.32 | +1.10 | +1.11 |
| NVDA / USDG | −0.10 | −0.16 | −0.22 | −0.35 | −0.24 | −0.21 |
| TORCH / ETH | −59.27 | −61.02 | −62.77 | −66.27 | −59.71 | −74.15 |
| HOOKR / ETH | −15.51 | −16.96 | −18.41 | −21.31 | −11.07 | −16.18 |
In ETH/USDG a 10% share costs liquidity providers 1.09 bps and puts the same amount in the Treasury. That leaves them at +0.77, below both a static fee and the rule.
Does the verdict depend on the settings?
The same test with other markout horizons and fee bands, everything tuned again on the validation split each time. Myelin minus the rule, in bps at elasticity 1 (positive means Myelin is ahead):
| Variant | ETH / USDG | NVDA / USDG | TORCH / ETH | HOOKR / ETH |
|---|---|---|---|---|
| Markout 30 s | +0.52 | +0.10 | +12.54 | +0.06 |
| Markout 60 s (the headline setting) | +0.76 | +0.11 | +14.88 | +0.67 |
| Markout 120 s | +0.79 | +0.11 | +18.04 | +0.92 |
| Fee band 0.25 to 4 | +3.50 | +0.24 | +30.58 | +0.26 |
| Fee band 0.5 to 2 | +0.29 | +0.12 | +14.87 | +0.18 |
| Fee band 0.75 to 3 | +0.32 | +0.05 | +5.78 | +0.43 |
No. In every variant the network is ahead of the rule in all four pools, so the sign of the result does not depend on the setting. The size does, and in the three pools other than TORCH/ETH it is small next to its uncertainty.
What this cannot tell you
- It is not a simulation of a market. The swaps are the ones that happened, at the fees that were charged; a different fee would have attracted different flow, and the elasticity is the only model of that. Routers and aggregators, which choose pools by price, are not modelled.
- One period: four weeks of one chain (10.6 days for TORCH/ETH). Another market regime may behave differently.
- A 60-second markout is a proxy for what liquidity providers lose, not a measurement of anyone’s profit. It ignores impermanent loss over longer horizons, gas and rebalancing.
- The deployed policy is tuned on ETH/USDG alone; on the other pools it is shown only to illustrate it.
- The baseline moved with the memory. The rule reads the medium average, which means something different in each version, so “the network against the rule” is not the same comparison in the two. The table that sets the second version against the rule of the first is the like-for-like one.
- Observations are sparse in deep pools: in ETH/USDG 4.6% of the swaps are observations, so the model sees the pool through a handful of events an hour, and what it can predict is correspondingly coarser.
- The ETH/USDG pool already runs a third-party dynamic-fee hook, so the fees in the data are its fees, and nothing here says what the same pool would have done with Myelin.
Reproduce it
The data collection, the training, the quantisation, the backtest and the figures on this page are scripts in the repository’s research/ folder. The report, with the method in full, is docs/BACKTEST_REPORT.md, and the model is described in docs/MODEL_CARD.md. The specification of the second version of the memory, the choice of its minimum move and the analysis of what it costs to steer the fee are in research/V2_SPEC.md. The numbers on this page are read from the same result files the report is read from, except those of the first version, which are marked. See also The model and Risks.