requestHash binds to those exact bytes.
What gets recognized
For every payload, the classifier decodes token amounts out of their raw decimals-scaled form, resolves chain ids to names, reads the slippage and integrator-fee settings, and checks whether the output is being redirected to a different wallet. Because a route object carries its own claimed economics next to opaque calldata, the harness never takes them on faith — it independently re-quotes the same trade against LI.FI’s live API. The judge reasons over:
LI.FI ROUTE via mayan: 2,500 USDC on Arbitrum → 2,497.2 USDC on Base (claimed min 2,489.4) ≈ $2,496.10, slippage 0.5% — Independent re-quote via LI.FI /v1/quote: fresh estimate 2,496.8 USDC (guaranteed min 2,494.3). Claimed toAmountMin is 0.19% below the fresh minimum.That re-quote step is what catches the classic aggregator failure: an agent presenting a stale or fabricated
toAmountMin — or a 50%-slippage escape hatch dressed up as a routine bridge — while the calldata quietly commits to much worse. If the trade can’t be re-quoted, the verdict leans ESCALATE rather than trusting the agent’s own numbers: fail closed, never allow on assumption.
Use it from your bot
Wrap the transfer you were already going to request:venue is optional — LI.FI payload shapes are auto-detected — and freeform action descriptions still work (mode: "semantic").
Use it from Claude or ChatGPT
Add the hosted connector (https://harness.chance.cc/api/mcp, see Connectors) and give your agent one standing instruction:
Before executing any LI.FI swap or bridge, callAgents with LI.FI execution tools then get gated automatically; agents without them still give you provable pre-trade checks in chat.verify_intentwith my rules as the intent and the exact quote request or route object as the action, withvenue: "lifi". Only proceed on ALLOW; on BLOCK or ESCALATE, stop and tell me why.
How the harness knows LI.FI
The judge works from a versioned snapshot of LI.FI’s own docs — the quote and advanced-routes APIs, core objects (Quote, Route, Step, Action, Estimate), data schemas and validation rules, status tracking and PARTIAL/REFUNDED semantics, error codes, rate limits, and the Composer mechanics that can turn a “swap” into a DeFi deposit — plus a curated brief of the venue’s footguns (decimals-scaled amounts, slippage-as-fraction,toAmountMin vs toAmount, recipient redirection, integrator-fee value leaks, non-atomic cross-chain legs). Static knowledge is never fetched at verdict time; the only live call is the independent re-quote against LI.FI’s public quote API, and what it resolves is recorded in the verdict’s hash-chained transcript. Every documentation page the judge consults is chained with its content hash — the receipt proves exactly which knowledge, at which version, informed the decision. See Architecture.
What the receipt adds for LI.FI
On top of the standard proof bundle (transcript root, judge signature, onchain anchor), venue-aware verdicts carryvenue: "lifi", the actionFamily, the venue actionType (quote request, routes request, or route object), mode: "structured", the knowledge-snapshot version — and the independent re-quote (fresh output estimate, guaranteed minimum, bridge or DEX selected, and the gap against the payload’s claimed numbers at verdict time), all inside the hash-chained transcript.
Roadmap: full simulation of the route’s attached transaction, and escrowed execution — the same contract, but an ALLOW triggers submission by a Chance-held signer and a BLOCK physically never reaches one. The payload-first contract above is forward-compatible with both.
