This directory contains the core RFQ settlement contracts used by the Symbiotic instant redemption flow. The pair is intentionally small:
Reactor.solvalidates the signed order, pulls approved input from the swapper directly into factory-registered LiquidLane adapters, and enforces output delivery.Executor.solis an example role-gated execution surface that calls the Reactor, performs adapter swaps, runs any post-swap execution payload, and approves output transfers back to the Reactor.LiquidLaneUniswapXExecutor.solis a transparent-proxy, caller-gated UniswapX fill contract. It routes Reactor-supplied ERC-20 input through direct and discount LiquidLane adapters, grants the immutable Reactor output allowances, and forwards native output. The Reactor authoritatively resolves and settles orders; adapters enforce swap and discount terms. Direct and discount route arrays remain separate, and unspent input or output surplus remains on the executor. Because the Reactor has maximum ERC-20 allowances, retained balances can participate in subsequent Reactor settlement; there is no sweep entrypoint.
Note
Executor.sol is not a protocol requirement. It is an example filler-side executor contract that demonstrates one way to integrate with Reactor. Fillers can deploy their own executor implementation as long as it satisfies the expected Reactor callback flow.
- The user signs the typed
Requestand approvesReactorto spend the input token. - The authorized filler calls
Executor.fill(...). Executorforwards the request intoReactor.Reactorvalidates signatures, checks each adapter againstLIQUID_LANE_ADAPTER_FACTORY, consumes the request nonce, and transfers input token legs from the swapper to their adapters.Executor.execute(...)performs the per-leg adapter swaps and any opaque execution payload.Reactorenforces the requested outputs and emits the fill event used by the indexer.
Run commands from the repository root:
forge build
forge test --isolatesrc/Reactor.solsrc/Executor.solsrc/interfacestest/Reactor.t.sol
Executoris caller-gated through an owner-managed caller list.Reactoruses swapper ERC20 allowances, Reactor-managed request nonces, request deadlines, and factory-registered LiquidLane adapters as its execution primitives.
