Solving Intents
LI.FI Intents separates order discovery, filling, proving, and settlement. Validate every order and every component address before committing inventory. The general flow is:- The user opens an escrow order on-chain or signs an EVM Compact order for submission to the LI.FI order server.
- The order server validates and broadcasts the order. Compact orders also require the allocator’s co-signature.
-
A solver submits the order’s output to the output settlement contract, starting the oracle system.
Output Settlement is denoted as the
output.settler. -
The proof is delivered to the input chain through the validation layer.
Oracle system is denoted as the
inputOracleandoutput.oraclein the order struct. - The solver submits the order to the input settlement contract, verifying the delivery and unlocking the associated input tokens.
Order Types
For EVM Compact orders, you will meet an order in three forms, listed from least to most verbose:BatchClaim: A signed intent that allows the input assets to be claimed.StandardOrder: An on-chain definition containing enough information to convey the intent.- Order server response: a hydrated order — the
StandardOrderplus the off-chain fields a solver needs, such asInputSolverandsignatures.
BatchClaim. On-chain interactions use a StandardOrder, while the order server hydrates it with the off-chain fields needed for a fill.
Solana also uses
StandardOrder, but its Borsh structure carries exactly one input and uses Solana-native types. See Solana vs EVM for the structural and execution differences.Collecting Orders
LI.FI Intents offers two ways to receive orders:- Recommended: Connect to the order server via WebSocket.
- Alternative: Monitor on-chain deposits through the deposit interface.
StandardOrder representation is:
uint256[2][] inputs === [uint256 tokenId, uint256 amount][] and MandateOutput is:
Filling Intents
To fill an intent, you must execute everyMandateOutput. Each one describes a single delivery completely on its own.
output.settlerdefines that delivery together with its context — call it on the settler’s interface. Currently, only one OutputSettler is implemented:OutputSettlerSimple.sol, which has two interfaces for filling:
fill (or native_fill for SOL) instruction — see the Solana program reference. For a multi output intent, please ensure all outputs can be filled, ideally atomically.
The output-settlement architecture and interfaces are documented in Settlement.
Validating Fills
After filling intents, the proof of fill has to be sent to the input chain.inputOracle and output.oracle must identify the two supported ends of the same oracle route, but they are not always the same address. On Solana, one field may hold a program ID while the other holds a state PDA. Proof validation is oracle-specific; see Oracle System Architecture.
Settling Orders
Lastly, intents have to be settled before they expire. Settle by callingfinalise[withSignature] on the designated InputSettler. The caller has to be the designated solver set on fill.

