Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ use one candidate route. Other scopes keep the existing multi-route behavior.
`minAmountsIn` adds an optional per-input-token floor on request size (base units, decimal strings):
a request below its token's minimum is not quoted (HTTP 204), while an amount equal to the minimum
still quotes; unlisted tokens have no floor.
Pareto's mainnet `AA_FalconXUSDC` tranche (`0xC26A…f99C`) uses this existing generic path and needs no
token-specific solver code. On an instance already running `tokensToQuote: permissioned` — which is
what admits by `permissionedTokens` at all, since the default `all` scope admits every token
regardless — onboarding it is the same two config edits as any other permissioned token: add it to
`permissionedTokens`, and give it a base-unit floor in `minAmountsIn`. Quoting it also requires a
LiquidLane adapter holding the token in `adapters`.
When an exact-input request exceeds the advertised adapter capacity, the default strategy caps the
quoted output at the available `maxAssets` instead of declining in every token scope; the excess input
is reflected as worse execution price and price impact. Awarded orders are planned again from current
Expand Down
2 changes: 2 additions & 0 deletions config/rfq.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,14 @@ solvers:
# tokensToQuote: all
# permissionedTokens: # with tokensToQuote: permissioned, inputs must use one candidate route
# - "0x..."
# - "0xC26A6Fa2C37b38E549a4a1807543801Db684f99C" # Pareto AA_FalconXUSDC (mainnet)

# minAmountsIn sets a per-input-token floor on request size, in that token's BASE UNITS (decimal
# string). A request below its token's minimum gets no quote (HTTP 204); an amount equal to the
# minimum still quotes. Tokens not listed have no minimum.
# minAmountsIn:
# "0x238a700eD6165261Cf8b2e544ba797BC11e466Ba": "1000000000000000000" # 1 token (18 decimals)
# "0xC26A6Fa2C37b38E549a4a1807543801Db684f99C": "1000000000000000000" # 1 AA_FalconXUSDC

# LiquidLane adapter instances this filler serves — the concrete per-token adapters (not the
# factory). Each adapter's vault + asset are resolved on-chain at startup. In `external` mode
Expand Down
20 changes: 20 additions & 0 deletions docs/RFQ-PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,26 @@ refresh uses (`paused`, `getMaxAssets`, `getMaxRate`) — each adapter's `vault`

## 5. Open items / prerequisites

- **Pareto AA_FalconXUSDC readiness** — the RFQ implementation is already token-agnostic and supports
the 18-decimal mainnet tranche `0xC26A6Fa2C37b38E549a4a1807543801Db684f99C` through the existing
permissioned, single-route path. Deployed and verified on mainnet as of 2026-08-06: the bounded
Symbiotic `ParetoOracle` (`0xba833D6288aC591BFffbeD16909B8B824e7fA9F2`, block 25697403, already
wired into the rfq-backend and rfq-frontend token entries) and the Pareto account
factory/implementation (`0xa47cE86c304e251198F1a318c569e5217b694e1F` /
`0xE54219880a1296D028CcD7B3d5a34c65fb0B7CAB`). Still outstanding, because each is an instance
someone must create rather than an address to configure: the Keyring-onboarded account proxy, the
LiquidLane adapter, the RFQ Executor's authorized caller, and backend token enablement. At
activation, on an instance already scoped `tokensToQuote: permissioned` (the default `all` scope
admits every token, so `permissionedTokens` governs nothing there), configure the token in
`permissionedTokens`, set its 1-token floor (`1000000000000000000`) in `minAmountsIn`, and point
the instance at the LiquidLane adapter holding it via `adapters`. No dedicated per-token process
exists: separate solver instances differ only by executor and settlement adapter, not by asset.
The checked-in RFQ example carries the exact token/floor snippet; no protocol branch belongs in
solver code.

Deployment status for this item lives here rather than in the README, which `AGENTS.md` reserves
for the external operator-facing runtime and configuration surface.

- **Authorized caller of the `Executor`** — the bot EOA must be added to the Executor's `callers`
allowlist (owner-only `setCallers`) before fills land (onboarding
prereq, analogous to 3F's offer-signer). Document; do not grant from the bot.
Expand Down