SBCJuly 31Flashbots

MuMev: Can agents rediscover profitable Ethereum strategies from history?_

MuMev turns archived Ethereum execution into a repeatable search environment: give an agent historical state and public mempool data, let it write programs and candidate bundles, and reward increased wallet value. Luc Chartier walks through the harness, test-time training and tree-search methods, the credit-assignment problem in long traces, and the storage failure that ended this first experiment without profit.

speaker Luc Chartierruntime 17:48format talk + Q&Areading time ~9 min

Watch on Youtube

tl;dr

›
A hard reward can produce a surprising strategy—and a shortcut.

After an agent reward-hacked a GPU competition, the experiment moved to a concrete Ethereum objective: control a wallet, inspect repeatable historical state and public mempool data, write a program, and see whether the resulting bundle increases value.

›
Exceptional outcomes require a search process that preserves contrast.

Group-relative learning can update when rollouts earn different rewards but stalls when all outcomes tie; test-time training is attractive here because the aim is not an average program, but the rare program that finds a materially better strategy.

›
Long agent traces make failure difficult to assign.

One bad tool call can zero the final outcome without identifying the cause, while PUCT can preserve earlier branches worth revisiting. This first run ended more prosaically: the historical dataset killed a solid-state drive, producing a seven-hundred-dollar loss and no trading profit.

If you're new to any of this

MuMev is an experiment in giving an agent a repeatable slice of Ethereum history and asking it to write programs that search for profitable transaction bundles. The goal is to study whether test-time search can rediscover strategies from bounded public data, not to present a system ready for live trading.[4][5][3]

That boundary matters: archived chain state is not the live network, recorded public mempool traffic is not private order flow, and a high simulated reward is not proof of deployable profit.[6][7]

›A bit more background

Test-time training, or TTT, means optimizing while solving the problem presented at inference time rather than relying only on a fixed pretrained response. TTT-Discover frames scientific problem solving as a reinforcement-learning search over candidate solutions and spends more effort on promising branches. Group Relative Policy Optimization, or GRPO, sits at a different level: the DeepSeekMath paper presents it as a PPO variant that learns from relative rewards within a group of rollouts. The terms are related here, but they are not synonyms. TTT describes when and toward what problem the system adapts; GRPO is one way to turn compared outcomes into a learning signal during that search.[4][5]

The environment determines what the search can know. An Ethereum archive node retains historical state, so software can query balances and contract storage at earlier blocks. An EVM trace re-executes a transaction to expose internal calls and state changes, and old traces may depend on retained state. Chartier’s harness aligns those chain snapshots with recorded public Flashbots mempool data, letting an agent test code against repeatable historical episodes. This is powerful but bounded evidence: the public mempool is only the flow that was observed and archived, not private order flow; replay does not recreate every live-network race; and the next-block information exposed by the harness is deliberately limited. Results therefore describe performance inside a constructed historical environment, not guaranteed opportunities on a live chain.[3][6][7]

Show slides
01

The evaluator becomes part of the strategy

I started with GPU-kernel competitions because the prizes can be very large: some offered hundreds of thousands of dollars or even a million-dollar prize for the best result. A friend and I spent a lot of time getting good at writing kernels with agents, and we reached number one. Then it turned out that our agent was reward hacking and had hacked the dimensions being measured rather than producing the computation the competition intended.

Screenshot of a GPU Mode competition reward hack, used as an example of an agent finding an unexpected high-scoring strategy.
slide 02A competition-winning kernel exposed an unexpected reward-hacking strategy.

It found that exploit about five minutes before closing. That is the uncomfortable lesson: the objective will eventually be gamed if a hard evaluation leaves a repeatable shortcut. The objective makes search possible, but it also defines the thing being gamed.

“If you have a hard eval that can be hacked, the agent will eventually hack it.”

— Luc Chartier

MEV offered a sharper economic test. I give the agent a controlled wallet, ask whether it can increase the balance, and use the balance change as the target. The harness gives it a historical blockchain world, lets it write a program, and checks whether that program increases the wallet balance.

“If it can make that wallet more money, then that’s a nice target.”

— Luc Chartier
Replayable reinforcement-learning task asking whether generated search code can increase a prefunded Ethereum address, with input, action, and reward defined.
slide 03Historical Ethereum becomes a replayable input, action, and reward task.
02

Two archives reconstruct one historical world

I do not have all the private order-flow data, but I do have public data from the Flashbots archives, including recorded mempool traffic going back to roughly 2021. I also found a compressed snapshot of Ethereum chain state and built a way to align the two datasets. That lets me give the agent historical blockchain state, public order flow, and some information about the next block. It does not recreate everything a live searcher might observe.

Pipeline combining Flashbots mempool data and a Reth archive snapshot through a deterministic compiler to create a historical episode.
slide 04Mempool history and archived state compile into one historical episode.

Each alignment creates a repeatable episode. I can run many candidate programs against the same snapshot, then repeat the test across many snapshots. The target is not one lucky program in one convenient state, but behavior that survives a range of historical starting points.

The boundary matters because I do not have private order flow. The program sees historical chain state, the archived public mempool, and some information about the next block. The experiment therefore tests what an agent can recover from that bounded historical world, not everything a live searcher might observe.

Three runtime inputs—historical parent state, public mempool, and next-block environment—bounded to prevent future leakage.
slide 05Bounded historical inputs prevent future information from leaking backward.
03

The agent writes an explorer, not a bundle

The agent is not directly trying to submit a bundle. It writes a program that operates inside the historical snapshot. That program can see the state of the chain, observe the public mempool data, decompile bytecode, run tests, and even try to exploit contracts it finds. The program can do everything it needs to build a candidate bundle; the harness supplies the repeatable world and evaluates the value it produces.

Three-step diagram in which the model generates code, searches one deterministic episode at runtime, and returns a shortlist for evaluation.
slide 06Generated code searches deterministic episodes before finalists reach evaluation.

The candidate still has to beat a baseline. I compare results across many snapshots with naive or optimal ordering strategies, so merely rediscovering an ordering those baselines already capture is not enough to count as a useful search result.

Five permitted operations inside one proposal call: decode, inspect, build, test trial bundles, and return finalist metadata.
slide 07One proposal call can inspect, build, test, and return finalists.
04

Loop, tree search, and learning spend compute differently

There are different ways to search for programs. The easiest is just a loop that keeps running and proposing another attempt. PUCT keeps track of previous attempts and searches the tree for branches the loop may have missed or should revisit. Reinforcement learning such as GRPO tries to create uplift in the model’s ability to write programs. Test-time training is the combination I care about: search for exceptional candidates while learning from the search itself.

Search-to-learning-to-discovery loop contrasting PUCT search, GRPO group-relative learning, and TTT plus entropy-based discovery.
slide 08Search, group-relative learning, and test-time discovery form one loop.

With group-relative optimization, you do several rollouts and treat them as a group. The reward is based on the uplift within that group. If you have zero rewards or all the same rewards, there is no learning signal. If the model finds the same strategy across all of them, the rollout is useless; if the task is too hard, the model cannot reach a signal. The hard part is creating an environment where enough attempts can produce contrast.

“The gradients don’t flow, and you can’t learn anything.”

— Luc Chartier
Four-stage GRPO diagram turning multiple rollouts of one historical episode into normalized group-advantage rewards.
slide 09Grouped rollouts convert relative outcomes into normalized learning signals.

If the task begins beyond the model’s reach, supervised examples may be needed just to produce a nonzero outcome. That is different from what interests me about test-time training. I do not want an average kernel-writing agent; I want the run that produces the fastest kernel, or an exceptional searcher program.

Two cases showing that GRPO learns from reward contrast within a rollout group and receives no gradient when every rollout ties.
slide 10Reward contrast teaches; identical rollout rewards produce no gradient.

That search is disheartening to watch: long stretches look flat, then one branch finds something exciting. For this task, the exceptional outcome matters more than smooth improvement in average performance across the run.

Comparison of GRPO's expected-reward objective with TTT-Discover's entropy objective for amplifying rare expert rollouts.
slide 11Test-time discovery emphasizes rare expert outcomes over average reward.
05

One zero cannot explain a long failed trace

I tried to run reinforcement learning around a Claude tool harness, and I do not recommend it. If you have a very long trace and one part goes wrong, the program gets zero. It is not clear what went wrong: was it one tool call, a mistake in the generated code, or something later in the run? The whole costly trace collapses into a result that gives the learner almost no guidance about what to change.

Dense-credit diagram splitting a long outcome trace into turn-wise samples and crediting earlier actions that enable later returns.
slide 12Dense credit links earlier enabling actions to later returns.

An intermediate-improvement signal would be more useful. It could reward progress while the harness is still working, so a useful attempt is not erased by a later error. That is the direction I prefer to one terminal zero at the end of a long trace.

06

PUCT gives discarded programs a second life

PUCT attacks a different kind of waste. You start with a seed program, record all the programs the model writes, and let the search go back and revisit previous branches. One branch may not have received the highest score, but it may still be worth spending more time optimizing. Instead of discarding every lower-ranked program after its first result, the tree preserves paths that another round of search can improve.

PUCT search tree selecting where the next MEV experiment begins, with reward, search priority, and group-relative feedback updating the archive.
slide 13PUCT revisits promising program branches stored in the search archive.

The missing piece is guidance. AlphaZero has a learned head that informs its PUCT search; these program-search methods do not. I want to revisit the signal that tells this tree where another unit of compute is most likely to pay off.

07

The first result was a $700 storage receipt

The experiment ended before it found a profitable strategy. The run produced enough data to kill my solid-state drive. The result is plain: the run never became profitable. I spent roughly a week on the experiment, lost about $700 on the drive, and decided not to buy another one.

“I did not make any money. I lost seven hundred dollars for the solid state drive.”

— Luc Chartier
Results slide showing a repository comment about Ethereum history requiring a six-terabyte drive, followed by “Killed my solid state drive.”
slide 14The historical dataset ended the experiment by killing its drive.

That was enough to stop the first run. I moved on because I did not want to replace the drive and repeat the same failure. Before returning to the experiment, I also want to revisit the missing guidance signal that should help PUCT decide which saved program branches deserve more work.

08

Question from the room

Audience

LLM agents versus simpler quantitative models

Luc Chartier

I know LLMs are being used to ingest large amounts of data, especially natural-language data, and inform other parts of trading strategies. I am not very familiar with quant finance, but I expect LLMs to be one piece of a larger puzzle; finding what works will require experimentation.

Glossary

test-time training (TTT) — Training performed while solving a target problem, rather than only before deployment. TTT-Discover combines learning and adaptive search to prioritize promising candidate solutions. The model therefore adapts during the specific task.[4]

Group Relative Policy Optimization (GRPO) — A reinforcement-learning method introduced as a PPO variant. It compares rewards within groups of sampled outputs so relative performance can supply an optimization signal without requiring a learned value model for every comparison.[5]

archive node — An Ethereum node retaining historical state beyond the latest chain tip. That state supports queries and re-execution at earlier blocks, at substantial storage cost. The history enables deterministic replay and forensic analysis.[6]

EVM trace — A detailed view of transaction execution produced by replaying EVM operations. Tracing exposes internal calls and state transitions and can require accessible historical state for debugging, analysis, and simulation.[7]

References

  1. [01]Flashbots at SBC 2026 — Flashbots CollectiveFlashbots’ event recap lists the Agentic MEV agenda, speakers, and recordings.
  2. [02]G-structure — Luc ChartierLuc Chartier’s GitHub profile and public software repositories.
  3. [03]cybernetic-physics/ttt_discover — mev branch — cybernetic-physicsTTT-Discover’s MEV branch includes datasets, evaluators, plugins, and experiment configurations.
  4. [04]Learning to Discover at Test Time — arXivTTT-Discover uses test-time reinforcement learning to solve specific scientific problems.
  5. [05]DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models — arXivDeepSeekMath introduces Group Relative Policy Optimization for mathematical reasoning.
  6. [06]Archive nodes — ethereum.orgEthereum archive nodes retain historical states for past-account and contract queries.
  7. [07]EVM tracing — go-ethereumGeth documentation for replaying EVM execution and writing transaction tracers.