diff --git a/README.md b/README.md index a26b9ca..898a578 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/config/rfq.example.yaml b/config/rfq.example.yaml index 6aadf27..963f2b2 100644 --- a/config/rfq.example.yaml +++ b/config/rfq.example.yaml @@ -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 diff --git a/docs/RFQ-PLAN.md b/docs/RFQ-PLAN.md index d7c7f8a..0cf45bc 100644 --- a/docs/RFQ-PLAN.md +++ b/docs/RFQ-PLAN.md @@ -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.