Two ways for a block builder to earn from Propellerheads order flow, and the contracts and Rust crates that implement both.
Both modes give your builder a transaction to include in the block it is already building. Neither asks it to change how it builds blocks. What differs is where the flow comes from and what you do with it.
The current product. Fynd users send their swaps to FyndJITRouter instead of calling
TychoRouterV3 directly. Your builder watches for those orders, solves a better route against
pending block state, compresses it (a median of one 256-bit word), stores it in a slot keyed to
that exact order in that exact block, and places the store transaction immediately before the
user's swap.
When the user's swap executes, FyndJITRouter recomputes the order key, finds the stored
route, checks its fingerprint, and runs the improved route. On a mismatch, or any failure at
all, it forwards the user's original route untouched. minAmountOut is enforced identically on
both paths.
The improvement lands above the quote the user was shown, so the router's FeeCalculator captures it as positive slippage. That capture is what funds builder sponsorship.
Opting in costs the user nothing in calldata: the ABI is identical, so only the destination address changes, and on Base the L1 data fee is unchanged. The whole cost is L2 execution gas, about $0.0003 to $0.0005 per swap at August 2026 prices.
contracts/README.md is the detailed document: the mechanism, the compression format, break-even economics with live prices, the trust model, and how to run the tests. Start there.
The older mode. The engine acts as a 1inch Fusion resolver: it
prices live Fusion Dutch-auction orders against pending AMM state, finds fill routes with the
Fynd solver, and hands your builder a settlement
transaction when one is profitable after gas. Profit arrives as a block.coinbase transfer
inside that transaction.
Integrating means adding the crate as a dependency, spawning its run() alongside your builder
loop, and streaming it BuildEvents as each iteration progresses. BackrunCandidates come
back on a watch channel, built but unsigned, for your whitelisted EOA to sign.
crates/intent-backrunner/README.md covers the auction pricing, the Limit Order Protocol settlement path, the profitability gate, the full configuration reference, and the smoke test.
| path | what it is |
|---|---|
contracts/ |
Foundry project: FyndJITRouter, RouteDictionary, RouteDecompressor, and the BackrunResolver the intent mode settles through |
crates/route-compressor |
Rust mirror of the on-chain compression format, plus the builder's calldata encoders |
crates/intent-backrunner |
The Fusion intent engine |
crates/builder-types |
The types that cross the builder boundary: BuildEvent in, BackrunCandidate out |
crates/uniswap-v2-core, v3, v4 |
Log-driven pending-state indexers for those three protocols |
The JIT solver itself, crates/fynd-jit-solver, is under review in
PR #19 and is not yet on the
main line.
FyndJITRouter is not deployed yet. On Base it will front the live TychoRouterV3 at
0x9bA632d83e9eF57571256Cf4cc951b8aF1158e9C, with Permit2 at
0x000000000022D473030F116dDEE9F6B43aC78BA3.
cd contracts && forge test # 107 tests, ~2 min from a clean build
cargo test --workspace # 102 testsBoth READMEs document the fork suites, the cross-language fixtures, and the environment variables they need.