@continuumdao/ctm-mpc-defi 0.2.61 → 0.2.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/agent/catalog.cjs +328 -78
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +217 -27
  4. package/dist/agent/catalog.js +324 -79
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/aerodrome/SKILL.md +8 -8
  7. package/dist/agent/skills/railgun/SKILL.md +10 -4
  8. package/dist/agent/skills/yield-compare/SKILL.md +5 -5
  9. package/dist/index.cjs +5 -4
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.js +5 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/protocols/evm/aerodrome/index.cjs +476 -282
  14. package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
  15. package/dist/protocols/evm/aerodrome/index.d.ts +38 -13
  16. package/dist/protocols/evm/aerodrome/index.js +473 -284
  17. package/dist/protocols/evm/aerodrome/index.js.map +1 -1
  18. package/dist/protocols/evm/curve-dao/index.cjs +54 -6
  19. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  20. package/dist/protocols/evm/curve-dao/index.js +54 -6
  21. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  22. package/dist/protocols/evm/euler-v2/index.cjs +45 -10
  23. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  24. package/dist/protocols/evm/euler-v2/index.d.ts +10 -2
  25. package/dist/protocols/evm/euler-v2/index.js +44 -11
  26. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  27. package/dist/protocols/evm/railgun/index.cjs +26 -9
  28. package/dist/protocols/evm/railgun/index.cjs.map +1 -1
  29. package/dist/protocols/evm/railgun/index.d.ts +1 -0
  30. package/dist/protocols/evm/railgun/index.js +26 -9
  31. package/dist/protocols/evm/railgun/index.js.map +1 -1
  32. package/package.json +1 -1
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: aerodrome
3
- description: Aerodrome AMM on Base — Sugar discovery, swaps, basic LP, Slipstream CL, gauges, and MPC multisign.
3
+ description: Aero (formerly Aerodrome) AMM — Metarouter swaps, LP, Slipstream CL, gauges, and MPC multisign. Protocol id stays aerodrome.
4
4
  ---
5
5
 
6
- # Aerodrome (MCP)
6
+ # Aero (MCP)
7
7
 
8
- Aerodrome is **Base-only (`chainId` 8453)**. Reads use the on-chain **LpSugar** aggregator. Writes build unsigned EVM batches (optional ERC-20 approve + Router / NFPM / gauge) for Continuum MPC.
8
+ Protocol id stays **`aerodrome`**. Tool names stay **`ctm_aerodrome_*`**. Launch chains: **Base `8453` (default)**, Ethereum `1`, OP Mainnet `10`, Arbitrum `42161`, Robinhood Chain `4663`, Arc `5042`, Ink `57073`. Coinbase stock LP is **Base only**. LpSugar pool index is the legacy Base deployment; other chains use factory `getPool` via `ctm_aerodrome_discover_pools`. V2 swaps go through the shared Metarouter.
9
9
 
10
- Native ETH in the app and MCP is **`0x0000000000000000000000000000000000000000`**. Map to WETH (`0x4200000000000000000000000000000000000006`) at the Sugar/router boundary. Do not pass Curve’s `0xeeee…` placeholder.
10
+ Native ETH in the app and MCP is **`0x0000000000000000000000000000000000000000`**. Map to that chain’s WETH at the router boundary (Base/OP/Ink `0x4200…0006`). Do not pass Curve’s `0xeeee…` placeholder. Arc wrapped native is not wired yet.
11
11
 
12
12
  ## Quote first (Coinbase B20 / AAPLc)
13
13
 
14
- **Do not** dump LpSugar or paginate factories. `ctm_aerodrome_fetch_pools` and `ctm_aerodrome_fetch_lp_yields` return **at most ~100 important pairs**. Optional `query` only shrinks that set. B20 stock LP yields are `ctm_aerodrome_fetch_stock_lp_yields` only. Tickers resolve inside quote / discover.
14
+ **Do not** dump LpSugar or paginate factories. `ctm_aerodrome_fetch_pools` and `ctm_aerodrome_fetch_lp_yields` return **at most ~100 important pairs** from the Base Sugar index (empty on other chains). Optional `query` only shrinks that set. B20 stock LP yields are `ctm_aerodrome_fetch_stock_lp_yields` on Base only. Tickers resolve inside quote / discover.
15
15
 
16
16
  For a price, **call `ctm_aerodrome_quote` immediately**:
17
17
 
@@ -20,11 +20,11 @@ ctm_aerodrome_quote({ chainId: 8453, tokenIn: "USDC", tokenOut: "AAPLc", amountH
20
20
  ```
21
21
 
22
22
  - `tokenIn` / `tokenOut` accept **tickers** (`AAPLc`, `USDC`, `ETH`, `WETH`, `AERO`) or 0x addresses. Do **not** ask the user for a B20 contract address.
23
- - B20 stocks are **8 decimals**. Omit `tokenInDecimals`.
23
+ - B20 stocks are **8 decimals** and **Base only**. Omit `tokenInDecimals`.
24
24
  - Quote output includes `amountOutHuman` and `priceImpactPercent` (0–100, vs a tiny same-route probe; `null` if the probe failed). State both before building a swap.
25
- - To see **which pools exist** for a token (not a price): `ctm_aerodrome_discover_pools({ token: "AAPLc" })` — factory `getPool` vs USDC/WETH/AERO (optional `tokenOut`). Then quote.
25
+ - To see **which pools exist** for a token (not a price): `ctm_aerodrome_discover_pools({ token: "AAPLc", chainId: 8453 })` — factory `getPool` vs USDC/WETH/AERO (optional `tokenOut`). Then quote.
26
26
 
27
- Use `get_defi_protocol_supported_tokens` only as a slim ticker list (ETH, USDC, AERO, B20). `issued` for a stock is `totalSupply > 0` on quote/discover (unissued throws).
27
+ Use `get_defi_protocol_supported_tokens` only as a slim ticker list (ETH, USDC, AERO, and B20 on Base). `issued` for a stock is `totalSupply > 0` on quote/discover (unissued throws).
28
28
 
29
29
  ## Before writes
30
30
 
@@ -19,16 +19,21 @@ The 0zk address and its balances are stored on the KeyGen record. Each node hold
19
19
  | Public tokens that show the Railgun icon | `ctm_railgun_fetch_popular_assets` |
20
20
  | This KeyGen's shielded balances | `ctm_railgun_fetch_private_balances` |
21
21
  | Shield a public ERC-20 into the 0zk address | `ctm_railgun_build_shield_multisign` |
22
+ | Shield the chain’s native gas by wrapping it first | `ctm_railgun_build_shield_multisign` with `wrapNative` and the wrapped token address |
23
+ | Unwrap the wrapped gas token back to native gas | `ctm_railgun_build_unwrap_multisign` |
22
24
  | Quote the shield, transfer, or unshield fee | `ctm_railgun_fee_quote` |
25
+ | List broadcasters before a private transfer or unshield is executed | `ctm_railgun_list_broadcasters` |
23
26
  | Start a private transfer | `ctm_railgun_private_transfer` |
24
27
  | Start an unshield to a public address | `ctm_railgun_unshield` |
25
28
  | Agree or reject a pending spend from Join, node chat, or Telegram | `list_sign_requests_awaiting_join`, then `sign_request_agree` |
26
- | Execute a private transfer after the other nodes have accepted | `list_sign_requests_ready`, then `broadcast_sign_result` with the `RailgunSpend:` id. No Get Sig |
29
+ | Choose a broadcaster and execute a private transfer or unshield | `ctm_railgun_list_broadcasters`, then `broadcast_sign_result` with the `RailgunSpend:` id. No Get Sig |
30
+ | Shelve a private transfer or unshield that is ready or failed | `shelve_sign_request` with the `RailgunSpend:` id |
31
+ | History of private transfers and unshields | `ctm_railgun_list_spends` |
27
32
  | Agree this node's share when the spend id is already known | `ctm_railgun_agree_spend` |
28
33
 
29
34
  Call `ctm_railgun_fee_quote` before a shield, private transfer, or unshield, and tell the user the fee. Shield and unshield take a Railgun percentage from the amount. A private transfer has no protocol fee. Unshield and private transfer also take a broadcaster fee from the private balance. `purpose` on a private transfer or unshield, and `purposeText` on a shield, is the Purpose shown on Join. `thoughts` on `sign_request_agree` or `ctm_railgun_agree_spend` is stored on the Railgun spend the same way as on a normal sign request.
30
35
 
31
- Call `ctm_railgun_ensure_wallet` first. Use the returned `railgunAddress` as the shield recipient. Call `ctm_railgun_fetch_private_balances` before an unshield or private transfer. Pass `refresh: true` when the stored scan may be stale. If `walletConfigured` is false, call `ctm_railgun_ensure_wallet` and then fetch again.
36
+ Omit `keyGenId` to use the node preferred KeyGen. Call `ctm_railgun_ensure_wallet` first. Use the returned `railgunAddress` as the shield recipient. `ctm_railgun_fetch_popular_assets` does not take a KeyGen. Call `ctm_railgun_fetch_private_balances` before an unshield or private transfer. Pass `refresh: true` when the stored scan may be stale. If `walletConfigured` is false, call `ctm_railgun_ensure_wallet` and then fetch again.
32
37
 
33
38
  `ctm_railgun_fetch_popular_assets` is the public icon list, not the shielded holdings.
34
39
 
@@ -36,13 +41,14 @@ Call `ctm_railgun_ensure_wallet` first. Use the returned `railgunAddress` as the
36
41
 
37
42
  `ctm_railgun_ensure_wallet` returns `shieldSignature` when this KeyGen already has one. Do not pass `shieldSignature` into `ctm_railgun_build_shield_multisign`. The server reads it from the KeyGen.
38
43
 
39
- 1. Call `ctm_railgun_build_shield_multisign` with the amount and the 0zk address from `ctm_railgun_ensure_wallet`. If a shield key is stored, this submits the approve-and-shield transaction.
44
+ 1. Call `ctm_railgun_build_shield_multisign` with the amount and the 0zk address from `ctm_railgun_ensure_wallet`. If a shield key is stored, this submits the approve-and-shield transaction. To shield the chain’s native gas, set `wrapNative` and pass the wrapped gas token as `tokenAddress`. That deposits native gas into the wrapped token, then shields it.
40
45
  2. If no shield key is stored, the call returns a personal_sign. Submit it with `sign_request_agree`, then `trigger_sign_result`. The signature is stored on the KeyGen. Call `ctm_railgun_build_shield_multisign` again with the same amount and 0zk address. Do not pass `shieldSignature`.
46
+ 3. `ctm_railgun_build_unwrap_multisign` withdraws that wrapped token back to native gas. It is a normal sign request: `sign_request_agree`, `trigger_sign_result`, then `broadcast_sign_result`. It does not spend the 0zk wallet.
41
47
 
42
48
  The personal_sign is only of the text `RAILGUN_SHIELD`. It does not contain the amount. If allowance is short, the shield call includes an approve, and a zero-approve reset when a non-zero allowance is still too small. Shielding spends the KeyGen threshold key, not the 0zk spending key.
43
49
 
44
50
  ## Private transfer and unshield
45
51
 
46
- A private transfer is signed with this node's management key before the spend is stored. An unshield is signed with this node's management key the same way. These start a pending spend and agree this node's share. The response is `pending` until `approvals` reaches `quorum`. The same spend appears on the other KeyGen nodes in `list_sign_requests_awaiting_join` with `agreementKind: railgun_spend`. When an operator asks whether any sign requests are pending, in node chat or Telegram, include those rows. Show the asset, `amountWei` in base units, the destination address, the memo, the proposal time, and the deadline. Agree or reject with `sign_request_agree` and the row's `requestId` (`RailgunSpend:<keyGenId>:<spendId>`). `accept: false` rejects it. Do not call `trigger_sign_result`. `ctm_railgun_agree_spend` is the same agree when the keyGen id and spend id are already known. When the quorum is reached, the spend leaves Join and appears on the originator's Execute tab, and in `list_sign_requests_ready` on that node. The originator executes it with `broadcast_sign_result` and that same requestId. That builds the proof and submits it to the Railgun broadcaster. There is no Get Sig step. Automated jobs must skip `agreementKind: railgun_spend`. A later balance scan shows the result. Unshield defaults the recipient to the KeyGen Ethereum address.
52
+ A private transfer is signed with this node's management key before the spend is stored. An unshield is signed with this node's management key the same way. These start a pending spend and agree this node's share. The response is `pending` until `approvals` reaches `quorum`. The same spend appears on the other KeyGen nodes in `list_sign_requests_awaiting_join` with `agreementKind: railgun_spend`. When an operator asks whether any sign requests are pending, in node chat or Telegram, include those rows. Show the asset, `amountWei` in base units, the destination address, the memo, the proposal time, and the deadline. Agree or reject with `sign_request_agree` and the row's `requestId` (`RailgunSpend:<keyGenId>:<spendId>`). `accept: false` rejects it. Do not call `trigger_sign_result`. `ctm_railgun_agree_spend` is the same agree when the keyGen id and spend id are already known. When the quorum is reached, the spend leaves Join and appears on the originator's Execute tab, and in `list_sign_requests_ready` on that node. The originator executes it with `broadcast_sign_result` and that same requestId. Immediately before that, call `ctm_railgun_list_broadcasters` with the row's chain, token, and kind (`unshield` or `transfer`). Tell the user the ratios. Pass the chosen `feesId` as `broadcasterFeesId` and `railgunAddress` as `broadcasterAddress`. The `recommended` row is the cheapest fee ratio that is at least 1:1. Omit both fields to use that row. A cheaper ratio is a discount the broadcaster may refuse; do not pick one unless the user asks for it. There is no Get Sig step. Shelve a ready or failed spend with `shelve_sign_request` and the same requestId. `ctm_railgun_list_spends` is the History list: executed, failed, rejected, shelved, and expired, plus anything still pending. Automated jobs must skip `agreementKind: railgun_spend`. A later balance scan shows the result. Unshield defaults the recipient to the KeyGen Ethereum address.
47
53
 
48
54
  A private transfer to a contact uses `toContactName` on `ctm_railgun_private_transfer`. That reads `railgunAddress` from the address book, not the contact’s Ethereum `address`. If the contact has no 0zk address, say so and do not invent one. Save one with `add_to_address_book_registry` on an Ethereum contact that is not a contract. Pass `railgunAddress` as an empty string to clear it. `remove_from_address_book_registry` removes the contact, including its 0zk address.
@@ -17,7 +17,7 @@ For **USDC / USDT**, the authored plan notes **must** mention Morpho stock-backe
17
17
 
18
18
  For **USDC / USDT**, plan notes **must** also mention Hyperliquid Core lend as an **optional extra**: supply USDC/USDT0 on HyperCore to earn utilization **APR** (`ctm_hyperliquid_fetch_lend_markets`); HYPE/UBTC collateral earns nothing. Do **not** add a Hyperliquid Execute workstream or call `ctm_hyperliquid_fetch_lend_markets` unless the operator says yes or already asked about Hyperliquid / HL lend / Core lending. That leaf is research-only (`toolGroups: ["defi_discovery", "defi:hyperliquid:lend", "keygen", "keygen_messaging"]`) — report quote-token `supplyYearlyRate` as **APR** plus `borrowYearlyRate` as context; skip collateral rows; category `idle`. Do not treat Core lend as vault APR or perp funding.
19
19
 
20
- Each Execute protocol leaf must list `toolGroups: ["defi_discovery", "defi:<protocol>:market-data", "keygen", "keygen_messaging"]` (canonical ids: `aave-v4`, `compound-v3`, `euler-v2`, `morpho`, `maple-syrup`, `curve-dao`, `aerodrome`, `pendle`) and `budget: { maxRounds: 16, maxWallClockMs: 240000 }`. Slim leaves cannot search/activate packs — without `defi_discovery` they never see `load_defi_protocol` or official `ctm_*` fetch tools. Do **not** use `agent_bash` / `agent_read_file` / `agent_grep` on a yield leaf — call the official fetch (`ctm_aave_v4_fetch_markets`, `ctm_compound_v3_fetch_markets`, `ctm_morpho_fetch_earn_vaults`, `ctm_morpho_fetch_blue_markets` with `loan: "USDC"` / `"USDT"`, `ctm_aerodrome_fetch_lp_yields` on Base `8453`, `ctm_pendle_fetch_markets` / `ctm_pendle_search_assets`, …) then post `mpc-task-result`. Ticker filters (`underlying: "USDT"`, Morpho `loan: "USDC"`) are valid on Aave/Maple/Morpho fetches — do not invent ERC-20 addresses. Morpho leaf: report vault `netApy` and Blue `netSupplyApyLabel`; footnote `rewards[]` as variable extras — do not add them on top of net APY a second time. Skip empty Blue books (no supply TVL). `ctm_morpho_fetch_stock_markets` only after the operator says yes. Aave v4 is Ethereum-first (`1`; also 10 / 43114). Maple is Ethereum (`1`). Aerodrome is Base (`8453`) only. Pendle is any Core `chainId` ∩ node registry — research-only fetch, no build.
20
+ Each Execute protocol leaf must list `toolGroups: ["defi_discovery", "defi:<protocol>:market-data", "keygen", "keygen_messaging"]` (canonical ids: `aave-v4`, `compound-v3`, `euler-v2`, `morpho`, `maple-syrup`, `curve-dao`, `aerodrome`, `pendle`) and `budget: { maxRounds: 16, maxWallClockMs: 240000 }`. Slim leaves cannot search/activate packs — without `defi_discovery` they never see `load_defi_protocol` or official `ctm_*` fetch tools. Do **not** use `agent_bash` / `agent_read_file` / `agent_grep` on a yield leaf — call the official fetch (`ctm_aave_v4_fetch_markets`, `ctm_compound_v3_fetch_markets`, `ctm_morpho_fetch_earn_vaults`, `ctm_morpho_fetch_blue_markets` with `loan: "USDC"` / `"USDT"`, `ctm_aerodrome_fetch_lp_yields` on an Aero launch chain (protocol id `aerodrome`; Base `8453` default, also `1`, `10`, `42161`, `4663`, `5042`, `57073`; Sugar APR is the Base index), `ctm_pendle_fetch_markets` / `ctm_pendle_search_assets`, …) then post `mpc-task-result`. Ticker filters (`underlying: "USDT"`, Morpho `loan: "USDC"`, Euler `underlyingAddress: "USDC"`) are valid on Aave/Maple/Morpho/Euler fetches — do not invent ERC-20 addresses. Euler resolves the ticker from that chain's vault catalog. Morpho leaf: report vault `netApy` and Blue `netSupplyApyLabel`; footnote `rewards[]` as variable extras — do not add them on top of net APY a second time. Skip empty Blue books (no supply TVL). `ctm_morpho_fetch_stock_markets` only after the operator says yes. Aave v4 is Ethereum-first (`1`; also 10 / 43114). Maple is Ethereum (`1`). Aerodrome is Base (`8453`) only. Pendle is any Core `chainId` ∩ node registry — research-only fetch, no build.
21
21
 
22
22
  ## Units and caveats
23
23
 
@@ -43,14 +43,14 @@ Call `get_defi_protocol_skill({ protocolId: "yield-compare" })` for this map, th
43
43
  2. `ctm_aave_v4_fetch_markets` / `ctm_compound_v3_fetch_markets` / `ctm_euler_v2_fetch_lend_vaults` / `ctm_morpho_fetch_earn_vaults` (WETH)
44
44
  3. `ctm_gmx_fetch_gm_apy` — GM ETH-sided (Arbitrum) **only if they asked about GMX / GM / LP**
45
45
  4. `ctm_curve_dao_fetch_lp_yields` — ETH/stETH-style pools in the ~100 catalog
46
- 5. `ctm_aerodrome_fetch_lp_yields` — WETH pairs on **Base**
46
+ 5. `ctm_aerodrome_fetch_lp_yields` — Aero LP (protocol id `aerodrome`) on Base `8453` by default, and on Ethereum `1`, OP Mainnet `10`, Arbitrum `42161`, Robinhood `4663`, Arc `5042`, Ink `57073`. Sugar emissions APR is the Base index; other chains may return an empty list, then use `ctm_aerodrome_discover_pools`.
47
47
  6. `ctm_pendle_fetch_markets` / `ctm_pendle_search_assets` — optional PT / YT / LP implied APY (research-only; no build)
48
48
  7. Perp funding / HL vaults — **only if they asked** (see Perp funding)
49
49
 
50
50
  ### USDC / USDT
51
51
 
52
52
  1. Aave / Compound / Euler lend / Morpho earn (`ctm_morpho_fetch_earn_vaults`) / Morpho Blue loan markets (`ctm_morpho_fetch_blue_markets({ loan: "USDC" })`) / Maple (`ctm_maple_fetch_markets`). Morpho: rank on `netApy` / `netSupplyApyLabel`; footnote `rewards[]` as variable extras.
53
- 2. `ctm_aerodrome_fetch_lp_yields` (Base) and `ctm_curve_dao_fetch_lp_yields` if they want DEX LP
53
+ 2. `ctm_aerodrome_fetch_lp_yields` (Aero launch chains, Base default) and `ctm_curve_dao_fetch_lp_yields` if they want DEX LP
54
54
  3. `ctm_pendle_fetch_markets` — optional PT / YT / LP implied APY if they asked about Pendle (research-only)
55
55
  4. `ctm_gmx_fetch_gm_apy` / `ctm_hyperliquid_fetch_vault_apys` / perp funding — **only if they asked** about GMX, HL vaults, or funding
56
56
  5. Morpho stock-backed USDC loans — **optional extra in plan notes only**. Call `ctm_morpho_fetch_stock_markets` only if they say yes.
@@ -77,8 +77,8 @@ Aave / Morpho / Euler / `ctm_curve_dao_fetch_lp_yields`
77
77
 
78
78
  ## DEX / stocks
79
79
 
80
- - Main-pair LP only: Aerodrome `fetch_lp_yields`, Curve `fetch_lp_yields` (~100 each). Optional Pendle LP implied APY via `ctm_pendle_fetch_markets` (research-only).
81
- - Stock LP: `ctm_aerodrome_fetch_stock_lp_yields` (B20) **only if the user asked about stocks**.
80
+ - Main-pair LP only: Aero `ctm_aerodrome_fetch_lp_yields` (protocol id `aerodrome`; launch chains above, Base default), Curve `fetch_lp_yields` (~100 each). Optional Pendle LP implied APY via `ctm_pendle_fetch_markets` (research-only).
81
+ - Stock LP: `ctm_aerodrome_fetch_stock_lp_yields` (B20, Base `8453` only) **only if the user asked about stocks**.
82
82
  - Morpho stock-backed loans: `ctm_morpho_fetch_stock_markets` **only after they say yes** (or already asked about stocks / stock-backed loans). Isolated equity credit, not idle stables. Always mention as an optional extra in USDC/USDT Best Yield plan notes.
83
83
  - Hyperliquid HIP-3: `ctm_hyperliquid_fetch_stock_markets` is **trading**, not idle savings. Include HIP-3 **funding** only if they asked about stocks.
84
84
 
package/dist/index.cjs CHANGED
@@ -171,13 +171,14 @@ var init_coinbaseB20 = __esm({
171
171
  });
172
172
  function isAerodromeChainSupported(chainId) {
173
173
  const n = typeof chainId === "number" ? chainId : Number.parseInt(String(chainId), 10);
174
- return n === AERODROME_CHAIN_ID;
174
+ return AERO_CHAIN_IDS.includes(n);
175
175
  }
176
- var AERODROME_PROTOCOL_ID, AERODROME_CHAIN_ID, AERODROME_WETH_BASE, AERODROME_USDC_BASE;
176
+ var AERODROME_PROTOCOL_ID, AERODROME_CHAIN_ID, AERO_CHAIN_IDS, AERODROME_WETH_BASE, AERODROME_USDC_BASE;
177
177
  var init_support = __esm({
178
178
  "src/protocols/evm/aerodrome/support.ts"() {
179
179
  AERODROME_PROTOCOL_ID = "aerodrome";
180
180
  AERODROME_CHAIN_ID = 8453;
181
+ AERO_CHAIN_IDS = [8453, 1, 10, 42161, 4663, 5042, 57073];
181
182
  AERODROME_WETH_BASE = "0x4200000000000000000000000000000000000006";
182
183
  AERODROME_USDC_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
183
184
  }
@@ -3767,10 +3768,10 @@ var aerodromeProtocolModule = {
3767
3768
  id: "aerodrome.quote",
3768
3769
  protocolId: AERODROME_PROTOCOL_ID,
3769
3770
  chainCategory: "evm",
3770
- description: "Quote an Aerodrome swap on Base via factory discovery + MixedRouteQuoterV3 / Router. Tickers (AAPLc, USDC, ETH) accepted.",
3771
+ description: "Quote an Aero swap (protocol id aerodrome) via factory discovery and pool getAmountOut / Metaquoter. Base 8453 by default; also Ethereum, OP Mainnet, Arbitrum, Robinhood, Arc, and Ink. Tickers (AAPLc, USDC, ETH) accepted. Stock tickers are Base only.",
3771
3772
  commonParams: [],
3772
3773
  params: {
3773
- chainId: { type: "number", required: true, description: `Must be ${AERODROME_CHAIN_ID}` },
3774
+ chainId: { type: "number", required: true, description: "Aero chain: 8453 (Base, default), 1, 10, 42161, 4663, 5042, or 57073." },
3774
3775
  tokenIn: { type: "address", required: true, description: "Ticker (AAPLc, USDC, ETH, WETH, AERO) or 0x / 0x0 native" },
3775
3776
  tokenOut: { type: "address", required: true, description: "Ticker (AAPLc, USDC, ETH, WETH, AERO) or 0x / 0x0 native" },
3776
3777
  amountHuman: { type: "string", required: true, description: "Human-readable input amount (B20 stocks are 8 decimals)" }