@continuumdao/ctm-mpc-defi 0.2.62 → 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.
- package/dist/agent/catalog.cjs +328 -78
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +217 -27
- package/dist/agent/catalog.js +324 -79
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/aerodrome/SKILL.md +8 -8
- package/dist/agent/skills/railgun/SKILL.md +10 -4
- package/dist/agent/skills/yield-compare/SKILL.md +5 -5
- package/dist/index.cjs +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +476 -282
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +38 -13
- package/dist/protocols/evm/aerodrome/index.js +473 -284
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +54 -6
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.js +54 -6
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +45 -10
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.d.ts +10 -2
- package/dist/protocols/evm/euler-v2/index.js +44 -11
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/expiry.ts","../../../../src/protocols/evm/aerodrome/support.ts","../../../../src/protocols/evm/aerodrome/addresses.ts","../../../../src/protocols/evm/shared/coinbaseB20.ts","../../../../src/protocols/evm/aerodrome/abi.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/aerodrome/client.ts","../../../../src/protocols/evm/aerodrome/stockTokens.ts","../../../../src/protocols/evm/aerodrome/discover.ts","../../../../src/protocols/evm/aerodrome/yields.ts","../../../../src/core/registry.ts","../../../../src/protocols/evm/aerodrome/index.ts","../../../../src/protocols/evm/aerodrome/sugar.ts","../../../../src/protocols/evm/aerodrome/priceImpact.ts","../../../../src/protocols/evm/aerodrome/sdkSession.ts","../../../../src/protocols/evm/aerodrome/quote.ts","../../../../src/protocols/evm/aerodrome/swapMultisign.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/protocols/evm/aerodrome/batch.ts","../../../../src/protocols/evm/aerodrome/liquidityBasic.ts","../../../../src/protocols/evm/aerodrome/liquidityBasicMultisign.ts","../../../../src/protocols/evm/aerodrome/liquidityCl.ts","../../../../src/protocols/evm/aerodrome/liquidityClMultisign.ts","../../../../src/protocols/evm/aerodrome/gaugeMultisign.ts","../../../../src/protocols/evm/aerodrome/reads.ts","../../../../src/protocols/evm/aerodrome/purpose.ts"],"names":["getAddress","zeroAddress","poolKind","defineChain","createPublicClient","gasLimitFromEstimateAndChainConfig","encodeFunctionData","formatUnits","parseUnits","minAfterSlippage","aerodromeFetchImportantPoolsSummary"],"mappings":"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","file":"index.js","sourcesContent":["/** Default MPC sign-request agreement window for fast-moving DeFi protocols (30 minutes). */\nexport const DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS = 30 * 60\n\n/** Protocol ids that default to 30-minute expiry when `expiryDate` is omitted on multisign MCP tools. */\nexport const DEFI_PROTOCOLS_WITH_30MIN_EXPIRY = new Set([\n 'uniswap-v4',\n 'gmx',\n 'hyperliquid',\n 'arcus',\n 'curve-dao',\n 'aerodrome',\n 'pendle',\n 'derive',\n 'trueo',\n 'hyperliquidOutcome',\n])\n\nexport function defiMultisignExpiryUnixSeconds(\n protocolId: string | undefined,\n explicitExpiryDate?: number | null,\n): number | undefined {\n if (typeof explicitExpiryDate === 'number' && Number.isFinite(explicitExpiryDate) && explicitExpiryDate > 0) {\n return Math.floor(explicitExpiryDate)\n }\n if (protocolId && DEFI_PROTOCOLS_WITH_30MIN_EXPIRY.has(protocolId)) {\n return Math.floor(Date.now() / 1000) + DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS\n }\n return undefined\n}\n","import { getAddress, zeroAddress } from 'viem'\nimport { DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS } from '../../../core/expiry.js'\n\nexport const AERODROME_PROTOCOL_ID = 'aerodrome' as const\n\n/**\n * Live Aerodrome deployment. Aero (the rename) is scheduled for 2026-10-22T00:00:00Z\n * on Base, Ethereum, OP Mainnet, Arc, Ink, Robinhood Chain, and Arbitrum, but those\n * contract addresses are not published yet. Do not add chains until the official\n * sugar/security docs list them. Coinbase tokenized stocks stay on Base.\n */\nexport const AERODROME_CHAIN_ID = 8453 as const\n\n/** Native ETH placeholder used by the app and MCP (Uniswap-style). */\nexport const AERODROME_NATIVE_PLACEHOLDER = zeroAddress\n\n/** WETH on Base. */\nexport const AERODROME_WETH_BASE = '0x4200000000000000000000000000000000000006' as const\n\n/** USDC on Base — official connector used by Sugar / sdk.js routing. */\nexport const AERODROME_USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' as const\n\nexport function isAerodromeChainSupported(chainId: number | string): boolean {\n const n = typeof chainId === 'number' ? chainId : Number.parseInt(String(chainId), 10)\n return n === AERODROME_CHAIN_ID\n}\n\n/** Router / NFPM deadline: same unix seconds as the multiSignRequest expiry (default 30 minutes). */\nexport function aerodromeOnChainDeadlineUnix(expiryDate?: number): bigint {\n if (typeof expiryDate === 'number' && Number.isFinite(expiryDate) && expiryDate > 0) {\n return BigInt(Math.floor(expiryDate))\n }\n return BigInt(Math.floor(Date.now() / 1000) + DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS)\n}\n\nexport function requireAerodromeRpcUrl(rpcUrl: string | undefined | null): string {\n const url = (rpcUrl ?? '').trim()\n if (!url) {\n throw new Error(\n 'rpcUrl is required. The MCP server injects it from get_chain_registry rpcGateway — pass chainId 8453 only, do not pass a public RPC URL.',\n )\n }\n return url\n}\n\nexport function isAerodromeNativeToken(address: string): boolean {\n const t = (address ?? '').trim().toLowerCase()\n if (!t) return false\n if (t === 'eth' || t === 'native' || t === 'native_eth') return true\n if (t === '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee') return true\n try {\n return getAddress(address as `0x${string}`) === zeroAddress\n } catch {\n return false\n }\n}\n","import { getAddress, type Address } from 'viem'\nimport { AERODROME_CHAIN_ID, AERODROME_WETH_BASE } from './support.js'\n\n/**\n * Last-known Base addresses copied from official sources (2026-08):\n * - https://raw.githubusercontent.com/aerodrome-finance/docs/main/content/security.mdx\n * - https://raw.githubusercontent.com/velodrome-finance/sugar/main/deployments/base.env\n */\nexport const AERODROME_BASE_ADDRESSES_FALLBACK = {\n chainId: AERODROME_CHAIN_ID,\n aero: '0x940181a94A35A4569E4529A3CDfB74e38FD98631',\n router: '0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43',\n poolFactory: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da',\n factoryRegistry: '0x5C3F18F06CC09CA1910767A34a20F771039E37C0',\n voter: '0x16613524e02ad97eDfeF371bC883F2F5d6C480A5',\n votingEscrow: '0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4',\n rewardsDistributor: '0x227f65131A261548b057215bB1D5Ab2997964C7d',\n mixedQuoter: '0x0A5aA5D3a4d28014f967Bf0f29EAA3FF9807D5c6',\n /** MixedRouteQuoterV3 — v2 + all three CL factories (bitmask path encoding). */\n mixedQuoterV3: '0xCd2A7D98e82D6107eac1828ce8DeAA6acB65b555',\n nfpm: '0x827922686190790b37229fd06084350E74485b72',\n /** Oldest Slipstream CL factory (Gauges V1). Path bit 1<<20. */\n clFactory: '0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A',\n /** Slipstream CL factory 2 (gauge caps). Raw tickSpacing in MixedQuoterV3. */\n clFactory2: '0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a',\n /** Newest Slipstream CL factory (Gauges V3) — Coinbase B20 stock pools. Path bit 1<<19. */\n clFactory3: '0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef',\n universalRouter: '0x6Cb442acF35158D5eDa88fe602221b67B400Be3E',\n swapRouter: '0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5',\n swapRouter2: '0xcbBb8035cAc7D4B3Ca7aBb74cF7BdF900215Ce0D',\n swapRouter3: '0x698Cb2b6dd822994581fEa6eA4Fc755d1363A92F',\n pricesOracle: '0xee717411f6E44F9feE011835C8E6FAaC5dEfF166',\n slipstreamHelper: '0x0AD09A66af0154a84e86F761313d02d0abB6edd5',\n lpSugar: '0x69dD9db6d8f8E7d83887A704f447b1a584b599A1',\n sugarSlipstreamHelper: '0x9c62ab10577fB3C20A22E231b7703Ed6D456CC7a',\n swapper: '0x91616a7B9CF6D23f8C17845581051EBdC4BcB916',\n weth: AERODROME_WETH_BASE,\n} as const\n\nexport type AerodromeAddresses = {\n [K in keyof typeof AERODROME_BASE_ADDRESSES_FALLBACK]: K extends 'chainId' ? number : Address\n}\n\nconst SUGAR_ENV_URL =\n 'https://raw.githubusercontent.com/velodrome-finance/sugar/main/deployments/base.env'\nconst SECURITY_MDX_URL =\n 'https://raw.githubusercontent.com/aerodrome-finance/docs/main/content/security.mdx'\n\nfunction asAddr(raw: string | undefined | null): Address | null {\n const s = (raw ?? '').trim()\n if (!s) return null\n try {\n return getAddress((s.startsWith('0x') ? s : `0x${s}`) as `0x${string}`)\n } catch {\n return null\n }\n}\n\n/** Parse `KEY=0xabc` / `KEY_8453=0xabc,0xdef` Sugar deployment env. Exported for tests. */\nexport function parseSugarBaseEnv(text: string): Partial<Record<string, string>> {\n const out: Record<string, string> = {}\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n const eq = trimmed.indexOf('=')\n if (eq <= 0) continue\n const key = trimmed.slice(0, eq).trim()\n const val = trimmed.slice(eq + 1).trim().replace(/^['\"]|['\"]$/g, '')\n if (key && val) out[key] = val\n }\n return out\n}\n\n/** Pull `Name` + `0x…` pairs from Aerodrome security.mdx tables. Exported for tests. */\nexport function parseSecurityMdxAddresses(text: string): Record<string, string> {\n const out: Record<string, string> = {}\n const re = /([A-Za-z][A-Za-z0-9 /_-]{1,80})\\s+((?:0x)[a-fA-F0-9]{40})/g\n let m: RegExpExecArray | null\n while ((m = re.exec(text))) {\n const name = (m[1] ?? '').trim().toLowerCase().replace(/\\s+/g, '')\n const addr = m[2]\n if (name && addr && !out[name]) out[name] = addr\n }\n return out\n}\n\nfunction nthAddr(csv: string | undefined, n: number): Address | null {\n if (!csv) return null\n const part = csv.split(',')[n]\n return part ? asAddr(part.trim()) : null\n}\n\nfunction firstAddr(csv: string | undefined): Address | null {\n return nthAddr(csv, 0)\n}\n\nfunction mergeLoaded(\n sugar: Partial<Record<string, string>>,\n docs: Record<string, string>,\n): AerodromeAddresses {\n const fb = AERODROME_BASE_ADDRESSES_FALLBACK\n const pick = (loaded: Address | null, fallback: string): Address =>\n loaded ?? (getAddress(fallback as `0x${string}`))\n\n return {\n chainId: AERODROME_CHAIN_ID,\n aero: pick(asAddr(docs.aero), fb.aero),\n router: pick(asAddr(docs.router), fb.router),\n poolFactory: pick(firstAddr(sugar.V2_FACTORIES_8453) ?? asAddr(docs.poolfactory), fb.poolFactory),\n factoryRegistry: pick(asAddr(sugar.REGISTRY_8453) ?? asAddr(docs.factoryregistry), fb.factoryRegistry),\n voter: pick(asAddr(sugar.VOTER_8453) ?? asAddr(docs.voter), fb.voter),\n votingEscrow: pick(asAddr(docs.votingescrow), fb.votingEscrow),\n rewardsDistributor: pick(asAddr(sugar.DIST_8453) ?? asAddr(docs.rewardsdistributor), fb.rewardsDistributor),\n mixedQuoter: pick(asAddr(docs.mixedquoter), fb.mixedQuoter),\n mixedQuoterV3: pick(asAddr(docs.mixedquoterv3), fb.mixedQuoterV3),\n nfpm: pick(asAddr(docs.nonfungiblepositionmanager), fb.nfpm),\n clFactory: pick(firstAddr(sugar.CL_FACTORIES_8453) ?? asAddr(docs.poolfactory), fb.clFactory),\n clFactory2: pick(nthAddr(sugar.CL_FACTORIES_8453, 1), fb.clFactory2),\n clFactory3: pick(nthAddr(sugar.CL_FACTORIES_8453, 2), fb.clFactory3),\n universalRouter: pick(asAddr(docs.universalrouter), fb.universalRouter),\n swapRouter: pick(asAddr(docs.swaprouter), fb.swapRouter),\n swapRouter2: pick(asAddr(docs.swaprouter2), fb.swapRouter2),\n swapRouter3: pick(asAddr(docs.swaprouter3), fb.swapRouter3),\n pricesOracle: pick(asAddr(docs.pricesoracle), fb.pricesOracle),\n slipstreamHelper: pick(asAddr(docs.slipstreamhelper), fb.slipstreamHelper),\n lpSugar: pick(asAddr(sugar.LP_SUGAR_ADDRESS_8453), fb.lpSugar),\n sugarSlipstreamHelper: pick(asAddr(sugar.SLIPSTREAM_HELPER_8453), fb.sugarSlipstreamHelper),\n swapper: pick(asAddr(sugar.SWAPPER_8453), fb.swapper),\n weth: pick(asAddr(AERODROME_WETH_BASE), fb.weth),\n }\n}\n\nlet cache: Promise<AerodromeAddresses> | null = null\n\nasync function fetchText(url: string): Promise<string | null> {\n try {\n const res = await fetch(url, { cache: 'force-cache' })\n if (!res.ok) return null\n return await res.text()\n } catch {\n return null\n }\n}\n\nexport async function loadAerodromeAddresses(): Promise<AerodromeAddresses> {\n if (!cache) {\n cache = (async () => {\n const [sugarText, docsText] = await Promise.all([fetchText(SUGAR_ENV_URL), fetchText(SECURITY_MDX_URL)])\n const sugar = sugarText ? parseSugarBaseEnv(sugarText) : {}\n const docs = docsText ? parseSecurityMdxAddresses(docsText) : {}\n return mergeLoaded(sugar, docs)\n })()\n }\n return cache\n}\n\n/** Test helper — reset GitHub cache. */\nexport function resetAerodromeAddressCache(): void {\n cache = null\n}\n\nexport function aerodromeFallbackAddresses(): AerodromeAddresses {\n return mergeLoaded({}, {})\n}\n\nexport function aerodromeClFactoryList(addrs: AerodromeAddresses): Address[] {\n return [addrs.clFactory, addrs.clFactory2, addrs.clFactory3]\n}\n\nexport function aerodromeClSwapRouterForFactory(addrs: AerodromeAddresses, factory: Address): Address {\n const f = getAddress(factory).toLowerCase()\n if (f === addrs.clFactory3.toLowerCase()) return addrs.swapRouter3\n if (f === addrs.clFactory2.toLowerCase()) return addrs.swapRouter2\n return addrs.swapRouter\n}\n","import { getAddress, isAddress, type Address } from 'viem'\n\n/**\n * Coinbase B20 tokenized stocks on Base. Addresses come from\n * https://api.coinbase.com/v1/tokenized-stocks — there is no baked-in token list.\n */\nexport const COINBASE_B20_STOCK_DECIMALS = 8 as const\n\n/** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */\nexport const COINBASE_B20_ASSET_PREFIX = '0xb200000000000000000000'\n\nexport type CoinbaseB20KnownToken = {\n address: Address\n symbol: string\n decimals: number\n name?: string\n iconUrl?: string\n}\n\nexport type CoinbaseB20StockToken = CoinbaseB20KnownToken\n\nexport function isCoinbaseB20AssetToken(address: string): boolean {\n try {\n return getAddress(address as `0x${string}`).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX)\n } catch {\n return false\n }\n}\n\n/** Tickers such as AAPLc and BRK.Bc. Rejects WETH, USDC, and AERO. */\nexport function looksLikeCoinbaseStockSymbol(symbol: string): boolean {\n return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? '').trim())\n}\n\nexport function coinbaseB20StockAddresses(): Address[] {\n return coinbaseB20CatalogTokens().map((t) => t.address)\n}\n\nexport const COINBASE_TOKENIZED_STOCKS_API_URL = 'https://api.coinbase.com/v1/tokenized-stocks'\n\nexport type CoinbaseB20CatalogToken = CoinbaseB20KnownToken & { name: string }\n\nconst CATALOG_TTL_MS = 15 * 60 * 1000\nconst CATALOG_MAX = 500\n\nlet catalogRows: CoinbaseB20CatalogToken[] | null = null\nlet catalogAt = 0\nlet catalogInflight: Promise<CoinbaseB20CatalogToken[]> | null = null\nconst catalogBySymbol = new Map<string, CoinbaseB20CatalogToken>()\nconst catalogByAddress = new Map<string, CoinbaseB20CatalogToken>()\n\nfunction indexCatalog(rows: CoinbaseB20CatalogToken[]) {\n catalogRows = rows\n catalogAt = Date.now()\n catalogBySymbol.clear()\n catalogByAddress.clear()\n for (const row of rows) {\n catalogBySymbol.set(row.symbol.toLowerCase(), row)\n catalogByAddress.set(row.address.toLowerCase(), row)\n }\n}\n\n/** Test hook. Production loads this from the Coinbase tokenized-stocks API. */\nexport function applyCoinbaseB20StockCatalog(rows: CoinbaseB20CatalogToken[]): void {\n indexCatalog(rows)\n}\n\nexport function clearCoinbaseB20StockCatalog(): void {\n catalogRows = null\n catalogAt = 0\n catalogBySymbol.clear()\n catalogByAddress.clear()\n}\n\nexport function coinbaseB20CatalogTokens(): readonly CoinbaseB20CatalogToken[] {\n return catalogRows ?? []\n}\n\nexport function parseCoinbaseTokenizedStocksPayload(payload: unknown): CoinbaseB20CatalogToken[] {\n const tokens = Array.isArray(payload)\n ? payload\n : payload && typeof payload === 'object' && Array.isArray((payload as { tokens?: unknown }).tokens)\n ? (payload as { tokens: unknown[] }).tokens\n : []\n const out: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n for (const row of tokens) {\n if (!row || typeof row !== 'object') continue\n const rec = row as Record<string, unknown>\n const symbol = typeof rec.symbol === 'string' ? rec.symbol.trim() : ''\n const addressRaw = typeof rec.contract_address === 'string' ? rec.contract_address.trim() : ''\n if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue\n const address = getAddress(addressRaw as `0x${string}`)\n const key = address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n const name = typeof rec.name === 'string' && rec.name.trim() ? rec.name.trim() : symbol\n const iconUrl = typeof rec.icon_url === 'string' && rec.icon_url.trim() ? rec.icon_url.trim() : undefined\n const decimals =\n typeof rec.decimals === 'number' && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18\n ? rec.decimals\n : COINBASE_B20_STOCK_DECIMALS\n out.push({ address, symbol, name, decimals, iconUrl })\n if (out.length >= CATALOG_MAX) break\n }\n return out\n}\n\nasync function fetchCoinbaseB20StockCatalog(): Promise<CoinbaseB20CatalogToken[]> {\n const merged: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n let pageToken = ''\n for (let page = 0; page < 4; page++) {\n const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL)\n url.searchParams.set('page_size', '500')\n if (pageToken) url.searchParams.set('page_token', pageToken)\n const res = await fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(8_000) })\n if (!res.ok) break\n const json = (await res.json()) as { next_page_token?: unknown }\n for (const row of parseCoinbaseTokenizedStocksPayload(json)) {\n const key = row.address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(row)\n if (merged.length >= CATALOG_MAX) break\n }\n pageToken = typeof json.next_page_token === 'string' ? json.next_page_token.trim() : ''\n if (!pageToken || merged.length >= CATALOG_MAX) break\n }\n if (merged.length > 0) indexCatalog(merged)\n return catalogRows ?? []\n}\n\n/** Live Coinbase list (PYPLc, AMDc, ORCLc, …). Falls back to the seed when the API is down. */\nexport async function ensureCoinbaseB20StockCatalog(): Promise<readonly CoinbaseB20CatalogToken[]> {\n if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows\n if (!catalogInflight) {\n catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {\n catalogInflight = null\n })\n }\n try {\n return await catalogInflight\n } catch {\n return catalogRows ?? []\n }\n}\n\n/** Resolve a Coinbase B20 ticker or 0x address from the fetched catalog. */\nexport function lookupCoinbaseB20StockToken(token: string): CoinbaseB20KnownToken | null {\n const key = (token ?? '').trim()\n if (!key) return null\n const fromCatalog = catalogBySymbol.get(key.toLowerCase())\n if (fromCatalog) return fromCatalog\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase()) ?? null\n } catch {\n return null\n }\n}\n\nexport function coinbaseB20CatalogName(addressOrSymbol: string): string | undefined {\n const key = (addressOrSymbol ?? '').trim()\n if (!key) return undefined\n const bySymbol = catalogBySymbol.get(key.toLowerCase())\n if (bySymbol?.name) return bySymbol.name\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase())?.name\n } catch {\n return undefined\n }\n}\n\nexport function coinbaseB20SymbolForAddress(address: string): string | null {\n return lookupCoinbaseB20StockToken(address)?.symbol ?? null\n}\n\n/**\n * Addresses pass through. A Coinbase stock ticker (`AAPLc`, `BRK.Bc`) becomes the\n * address from the live tokenized-stocks catalog — the same contract Aave and Aerodrome use.\n */\nexport async function canonicalizeEvmTokenInput(token: string): Promise<string> {\n const raw = (token ?? '').trim()\n if (!raw || isAddress(raw)) return raw\n if (!looksLikeCoinbaseStockSymbol(raw)) return raw\n await ensureCoinbaseB20StockCatalog().catch(() => [])\n const hit = lookupCoinbaseB20StockToken(raw)\n if (!hit) {\n throw new Error(\n `Unknown Coinbase stock ticker \"${raw}\". It is not in the live tokenized-stocks catalog.`,\n )\n }\n return hit.address\n}\n","export const lpSugarAbi = [\n {\n type: 'function',\n name: 'tokens',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n { name: '_account', type: 'address' },\n { name: '_addresses', type: 'address[]' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'token_address', type: 'address' },\n { name: 'symbol', type: 'string' },\n { name: 'decimals', type: 'uint8' },\n { name: 'account_balance', type: 'uint256' },\n { name: 'listed', type: 'bool' },\n { name: 'emerging', type: 'bool' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'forSwaps',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'lp', type: 'address' },\n { name: 'type', type: 'int24' },\n { name: 'token0', type: 'address' },\n { name: 'token1', type: 'address' },\n { name: 'factory', type: 'address' },\n { name: 'pool_fee', type: 'uint256' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'all',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n { name: '_filter', type: 'uint256' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'lp', type: 'address' },\n { name: 'symbol', type: 'string' },\n { name: 'decimals', type: 'uint8' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'type', type: 'int24' },\n { name: 'tick', type: 'int24' },\n { name: 'sqrt_ratio', type: 'uint160' },\n { name: 'token0', type: 'address' },\n { name: 'reserve0', type: 'uint256' },\n { name: 'staked0', type: 'uint256' },\n { name: 'token1', type: 'address' },\n { name: 'reserve1', type: 'uint256' },\n { name: 'staked1', type: 'uint256' },\n { name: 'gauge', type: 'address' },\n { name: 'gauge_liquidity', type: 'uint256' },\n { name: 'gauge_alive', type: 'bool' },\n { name: 'fee', type: 'address' },\n { name: 'bribe', type: 'address' },\n { name: 'factory', type: 'address' },\n { name: 'emissions', type: 'uint256' },\n { name: 'emissions_token', type: 'address' },\n { name: 'emissions_cap', type: 'uint256' },\n { name: 'pool_fee', type: 'uint256' },\n { name: 'unstaked_fee', type: 'uint256' },\n { name: 'token0_fees', type: 'uint256' },\n { name: 'token1_fees', type: 'uint256' },\n { name: 'locked', type: 'uint256' },\n { name: 'emerging', type: 'uint256' },\n { name: 'created_at', type: 'uint32' },\n { name: 'nfpm', type: 'address' },\n { name: 'alm', type: 'address' },\n { name: 'root', type: 'address' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'byAddress',\n stateMutability: 'view',\n inputs: [{ name: '_address', type: 'address' }],\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n { name: 'lp', type: 'address' },\n { name: 'symbol', type: 'string' },\n { name: 'decimals', type: 'uint8' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'type', type: 'int24' },\n { name: 'tick', type: 'int24' },\n { name: 'sqrt_ratio', type: 'uint160' },\n { name: 'token0', type: 'address' },\n { name: 'reserve0', type: 'uint256' },\n { name: 'staked0', type: 'uint256' },\n { name: 'token1', type: 'address' },\n { name: 'reserve1', type: 'uint256' },\n { name: 'staked1', type: 'uint256' },\n { name: 'gauge', type: 'address' },\n { name: 'gauge_liquidity', type: 'uint256' },\n { name: 'gauge_alive', type: 'bool' },\n { name: 'fee', type: 'address' },\n { name: 'bribe', type: 'address' },\n { name: 'factory', type: 'address' },\n { name: 'emissions', type: 'uint256' },\n { name: 'emissions_token', type: 'address' },\n { name: 'emissions_cap', type: 'uint256' },\n { name: 'pool_fee', type: 'uint256' },\n { name: 'unstaked_fee', type: 'uint256' },\n { name: 'token0_fees', type: 'uint256' },\n { name: 'token1_fees', type: 'uint256' },\n { name: 'locked', type: 'uint256' },\n { name: 'emerging', type: 'uint256' },\n { name: 'created_at', type: 'uint32' },\n { name: 'nfpm', type: 'address' },\n { name: 'alm', type: 'address' },\n { name: 'root', type: 'address' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'count',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n type: 'function',\n name: 'positions',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n { name: '_account', type: 'address' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'id', type: 'uint256' },\n { name: 'lp', type: 'address' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'staked', type: 'uint256' },\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n { name: 'staked0', type: 'uint256' },\n { name: 'staked1', type: 'uint256' },\n { name: 'unstaked_earned0', type: 'uint256' },\n { name: 'unstaked_earned1', type: 'uint256' },\n { name: 'emissions_earned', type: 'uint256' },\n { name: 'tick_lower', type: 'int24' },\n { name: 'tick_upper', type: 'int24' },\n { name: 'sqrt_ratio_lower', type: 'uint160' },\n { name: 'sqrt_ratio_upper', type: 'uint160' },\n { name: 'locker', type: 'address' },\n { name: 'unlocks_at', type: 'uint32' },\n { name: 'alm', type: 'address' },\n ],\n },\n ],\n },\n] as const\n\nexport const routerAbi = [\n {\n type: 'function',\n name: 'weth',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n type: 'function',\n name: 'defaultFactory',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n type: 'function',\n name: 'poolFor',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: '_factory', type: 'address' },\n ],\n outputs: [{ name: 'pool', type: 'address' }],\n },\n {\n type: 'function',\n name: 'getAmountsOut',\n stateMutability: 'view',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n {\n type: 'function',\n name: 'quoteAddLiquidity',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: '_factory', type: 'address' },\n { name: 'amountADesired', type: 'uint256' },\n { name: 'amountBDesired', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountA', type: 'uint256' },\n { name: 'amountB', type: 'uint256' },\n { name: 'liquidity', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'addLiquidity',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'amountADesired', type: 'uint256' },\n { name: 'amountBDesired', type: 'uint256' },\n { name: 'amountAMin', type: 'uint256' },\n { name: 'amountBMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountA', type: 'uint256' },\n { name: 'amountB', type: 'uint256' },\n { name: 'liquidity', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'addLiquidityETH',\n stateMutability: 'payable',\n inputs: [\n { name: 'token', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'amountTokenDesired', type: 'uint256' },\n { name: 'amountTokenMin', type: 'uint256' },\n { name: 'amountETHMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountToken', type: 'uint256' },\n { name: 'amountETH', type: 'uint256' },\n { name: 'liquidity', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'removeLiquidity',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'amountAMin', type: 'uint256' },\n { name: 'amountBMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountA', type: 'uint256' },\n { name: 'amountB', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'removeLiquidityETH',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'token', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'amountTokenMin', type: 'uint256' },\n { name: 'amountETHMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountToken', type: 'uint256' },\n { name: 'amountETH', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'swapExactTokensForTokens',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMin', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n {\n type: 'function',\n name: 'swapExactETHForTokens',\n stateMutability: 'payable',\n inputs: [\n { name: 'amountOutMin', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n {\n type: 'function',\n name: 'swapExactTokensForETH',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMin', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n] as const\n\nexport const mixedQuoterAbi = [\n {\n type: 'function',\n name: 'quoteExactInput',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'path', type: 'bytes' },\n { name: 'amountIn', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountOut', type: 'uint256' },\n { name: 'v3RouteStartTickSpacing', type: 'uint160[]' },\n { name: 'v3RouteStartSqrtPriceX96AfterList', type: 'uint160[]' },\n { name: 'v3RouteInitializedTicksCrossedList', type: 'uint32[]' },\n { name: 'v3SwapGasEstimate', type: 'uint256' },\n ],\n },\n] as const\n\n/** MixedRouteQuoterV3 — four return values; CL factory selected via path bitmasks. */\nexport const mixedQuoterV3Abi = [\n {\n type: 'function',\n name: 'quoteExactInput',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'path', type: 'bytes' },\n { name: 'amountIn', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountOut', type: 'uint256' },\n { name: 'v3SqrtPriceX96AfterList', type: 'uint160[]' },\n { name: 'v3InitializedTicksCrossedList', type: 'uint32[]' },\n { name: 'v3SwapGasEstimate', type: 'uint256' },\n ],\n },\n] as const\n\nexport const v2PoolFactoryAbi = [\n {\n type: 'function',\n name: 'getPool',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n ],\n outputs: [{ name: '', type: 'address' }],\n },\n] as const\n\nexport const clPoolFactoryAbi = [\n {\n type: 'function',\n name: 'getPool',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'tickSpacing', type: 'int24' },\n ],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n type: 'function',\n name: 'tickSpacings',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'int24[]' }],\n },\n] as const\n\nexport const clPoolAbi = [\n {\n type: 'function',\n name: 'slot0',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n { name: 'sqrtPriceX96', type: 'uint160' },\n { name: 'tick', type: 'int24' },\n { name: 'observationIndex', type: 'uint16' },\n { name: 'observationCardinality', type: 'uint16' },\n { name: 'observationCardinalityNext', type: 'uint16' },\n { name: 'unlocked', type: 'bool' },\n ],\n },\n {\n type: 'function',\n name: 'liquidity',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint128' }],\n },\n] as const\n\nexport const sugarHelperAbi = [\n {\n type: 'function',\n name: 'estimateAmount0',\n stateMutability: 'view',\n inputs: [\n { name: 'amount1', type: 'uint256' },\n { name: 'sqrtRatioX96', type: 'uint160' },\n { name: 'sqrtRatioAX96', type: 'uint160' },\n { name: 'sqrtRatioBX96', type: 'uint160' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n type: 'function',\n name: 'estimateAmount1',\n stateMutability: 'view',\n inputs: [\n { name: 'amount0', type: 'uint256' },\n { name: 'sqrtRatioX96', type: 'uint160' },\n { name: 'sqrtRatioAX96', type: 'uint160' },\n { name: 'sqrtRatioBX96', type: 'uint160' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n] as const\n\nexport const nfpmAbi = [\n {\n type: 'function',\n name: 'mint',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'token0', type: 'address' },\n { name: 'token1', type: 'address' },\n { name: 'tickSpacing', type: 'int24' },\n { name: 'tickLower', type: 'int24' },\n { name: 'tickUpper', type: 'int24' },\n { name: 'amount0Desired', type: 'uint256' },\n { name: 'amount1Desired', type: 'uint256' },\n { name: 'amount0Min', type: 'uint256' },\n { name: 'amount1Min', type: 'uint256' },\n { name: 'recipient', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n { name: 'sqrtPriceX96', type: 'uint160' },\n ],\n },\n ],\n outputs: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'liquidity', type: 'uint128' },\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'increaseLiquidity',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'amount0Desired', type: 'uint256' },\n { name: 'amount1Desired', type: 'uint256' },\n { name: 'amount0Min', type: 'uint256' },\n { name: 'amount1Min', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n ],\n outputs: [\n { name: 'liquidity', type: 'uint128' },\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'decreaseLiquidity',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'liquidity', type: 'uint128' },\n { name: 'amount0Min', type: 'uint256' },\n { name: 'amount1Min', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n ],\n outputs: [\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'collect',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'recipient', type: 'address' },\n { name: 'amount0Max', type: 'uint128' },\n { name: 'amount1Max', type: 'uint128' },\n ],\n },\n ],\n outputs: [\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'burn',\n stateMutability: 'payable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'to', type: 'address' },\n { name: 'tokenId', type: 'uint256' },\n ],\n outputs: [],\n },\n] as const\n\nexport const clSwapRouterAbi = [\n {\n type: 'function',\n name: 'exactInputSingle',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenIn', type: 'address' },\n { name: 'tokenOut', type: 'address' },\n { name: 'tickSpacing', type: 'int24' },\n { name: 'recipient', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMinimum', type: 'uint256' },\n { name: 'sqrtPriceLimitX96', type: 'uint160' },\n ],\n },\n ],\n outputs: [{ name: 'amountOut', type: 'uint256' }],\n },\n] as const\n\nexport const poolClaimFeesAbi = [\n {\n type: 'function',\n name: 'claimFees',\n stateMutability: 'nonpayable',\n inputs: [],\n outputs: [\n { name: 'claimed0', type: 'uint256' },\n { name: 'claimed1', type: 'uint256' },\n ],\n },\n] as const\n\nexport const gaugeAbi = [\n {\n type: 'function',\n name: 'deposit',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_amount', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'withdraw',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_amount', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'getReward',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_account', type: 'address' }],\n outputs: [],\n },\n] as const\n\nexport const clGaugeAbi = [\n {\n type: 'function',\n name: 'deposit',\n stateMutability: 'nonpayable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'withdraw',\n stateMutability: 'nonpayable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'getReward',\n stateMutability: 'nonpayable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n] as const\n\nexport const aerodromePoolMetaAbi = [\n { type: 'function', name: 'symbol', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'token0', stateMutability: 'view', inputs: [], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'token1', stateMutability: 'view', inputs: [], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'stable', stateMutability: 'view', inputs: [], outputs: [{ type: 'bool' }] },\n {\n type: 'function',\n name: 'getReserves',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n { name: '_reserve0', type: 'uint256' },\n { name: '_reserve1', type: 'uint256' },\n { name: '_blockTimestampLast', type: 'uint256' },\n ],\n },\n] as const\n\nexport const aerodromeVoterAbi = [\n {\n type: 'function',\n name: 'gauges',\n stateMutability: 'view',\n inputs: [{ name: 'pool', type: 'address' }],\n outputs: [{ type: 'address' }],\n },\n] as const\n\nexport const erc20Abi = [\n { type: 'function', name: 'name', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'decimals', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint8' }] },\n { type: 'function', name: 'totalSupply', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ type: 'uint256' }],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ type: 'bool' }],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ type: 'string' }],\n },\n] as const\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","import { createPublicClient, defineChain, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { AERODROME_CHAIN_ID, requireAerodromeRpcUrl } from './support.js'\n\nexport function aerodromePublicClient(rpcUrl: string | undefined | null): PublicClient {\n const url = requireAerodromeRpcUrl(rpcUrl)\n const chain = defineChain({\n id: AERODROME_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [url] } },\n contracts: {\n multicall3: {\n address: '0xcA11bde05977b3631167028862bE2a173976CA11',\n blockCreated: 5022,\n },\n },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(url) })\n}\n","import { getAddress, type Address } from 'viem'\nimport {\n COINBASE_B20_STOCK_DECIMALS,\n coinbaseB20CatalogName,\n coinbaseB20StockAddresses,\n ensureCoinbaseB20StockCatalog,\n isCoinbaseB20AssetToken,\n looksLikeCoinbaseStockSymbol,\n lookupCoinbaseB20StockToken,\n} from '../shared/coinbaseB20.js'\nimport { AERODROME_BASE_ADDRESSES_FALLBACK } from './addresses.js'\nimport { erc20Abi } from './abi.js'\nimport { aerodromePublicClient } from './client.js'\nimport { AERODROME_USDC_BASE, AERODROME_WETH_BASE, isAerodromeNativeToken } from './support.js'\n\nexport {\n COINBASE_B20_STOCK_DECIMALS as AERODROME_COINBASE_STOCK_DECIMALS,\n COINBASE_B20_ASSET_PREFIX as AERODROME_B20_ASSET_PREFIX,\n isCoinbaseB20AssetToken as isAerodromeB20AssetToken,\n looksLikeCoinbaseStockSymbol,\n coinbaseB20CatalogTokens as aerodromeCoinbaseStockCatalog,\n} from '../shared/coinbaseB20.js'\n\nexport function isAerodromeCoinbaseStockToken(address: string): boolean {\n return isCoinbaseB20AssetToken(address)\n}\n\nconst BASE_STOCKS_DOCS_URLS = [\n 'https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base.md',\n 'https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base',\n] as const\n\nexport type AerodromeStockTokenRow = {\n address: Address\n symbol: string\n name: string\n decimals: number\n issued: boolean\n iconUrl?: string\n}\n\nexport type AerodromeKnownToken = {\n address: Address\n symbol: string\n decimals: number\n}\n\n/** Tickers the MCP quote/swap tools accept without a 0x address. */\nexport function lookupAerodromeKnownToken(token: string): AerodromeKnownToken | null {\n const key = (token ?? '').trim()\n if (!key) return null\n const lower = key.toLowerCase()\n if (lower === 'weth') {\n return { address: getAddress(AERODROME_WETH_BASE), symbol: 'WETH', decimals: 18 }\n }\n if (lower === 'usdc') {\n return { address: getAddress(AERODROME_USDC_BASE), symbol: 'USDC', decimals: 6 }\n }\n if (lower === 'aero') {\n return { address: getAddress(AERODROME_BASE_ADDRESSES_FALLBACK.aero), symbol: 'AERO', decimals: 18 }\n }\n const stock = lookupCoinbaseB20StockToken(key)\n if (stock) return stock\n try {\n const address = getAddress(key as `0x${string}`)\n const want = address.toLowerCase()\n if (want === getAddress(AERODROME_WETH_BASE).toLowerCase()) {\n return { address, symbol: 'WETH', decimals: 18 }\n }\n if (want === getAddress(AERODROME_USDC_BASE).toLowerCase()) {\n return { address, symbol: 'USDC', decimals: 6 }\n }\n if (want === getAddress(AERODROME_BASE_ADDRESSES_FALLBACK.aero).toLowerCase()) {\n return { address, symbol: 'AERO', decimals: 18 }\n }\n } catch {\n /* not an address */\n }\n return null\n}\n\n/** Load the Coinbase catalog when a ticker is not already in the seed (PYPLc, AMDc, …). */\nexport async function ensureAerodromeStockTickers(tokens: string[]): Promise<void> {\n const needsCatalog = tokens.some((token) => {\n const raw = (token ?? '').trim()\n if (!raw || isAerodromeNativeToken(raw)) return false\n if (lookupAerodromeKnownToken(raw)) return false\n if (/^0x[a-fA-F0-9]{40}$/.test(raw)) return false\n return looksLikeCoinbaseStockSymbol(raw)\n })\n if (needsCatalog) await ensureCoinbaseB20StockCatalog()\n}\n\nexport function resolveAerodromeErc20OrWeth(token: string, weth: Address): Address {\n const raw = (token ?? '').trim()\n if (!raw) throw new Error('Token is required.')\n if (isAerodromeNativeToken(raw)) return getAddress(weth)\n const known = lookupAerodromeKnownToken(raw)\n if (known) return known.address\n try {\n return getAddress(raw as `0x${string}`)\n } catch {\n throw new Error(\n `Unknown Aerodrome token \"${raw}\". Pass a 0x address or a ticker (ETH, WETH, USDC, AERO, AAPLc, …). Coinbase B20 tickers come from the live tokenized-stocks catalog.`,\n )\n }\n}\n\nexport function aerodromeUnissuedStockMessage(symbolOrAddress: string): string {\n const label = (symbolOrAddress ?? '').trim() || 'This token'\n return `${label} is listed but not issued yet (zero supply). There is no Aerodrome liquidity to quote.`\n}\n\n/** Same gate the Multi-Sign dialog uses: skip quote RPC when totalSupply is 0. */\nexport async function assertAerodromeStockIssued(args: {\n rpcUrl: string\n token: Address\n isNative?: boolean\n label: string\n}): Promise<void> {\n if (args.isNative || !isAerodromeCoinbaseStockToken(args.token)) return\n try {\n const client = aerodromePublicClient(args.rpcUrl)\n const supply = await client.readContract({\n address: args.token,\n abi: erc20Abi,\n functionName: 'totalSupply',\n })\n if (supply === 0n) throw new Error(aerodromeUnissuedStockMessage(args.label))\n } catch (e) {\n if (e instanceof Error && e.message.includes('not issued yet')) throw e\n }\n}\n\nexport function aerodromeCoinbaseStockAddresses(): Address[] {\n return coinbaseB20StockAddresses()\n}\n\nconst MAX_DOCS_CHARS = 400_000\nconst MAX_OFFICIAL_STOCKS = 40\n\n/** Parse the official Base docs contract table. Corrupt / unrelated pages return []. */\nexport function parseBaseTokenizedStockDocs(text: string): Array<{ symbol: string; address: Address }> {\n try {\n if (typeof text !== 'string' || text.length < 20) return []\n const clipped = text.length > MAX_DOCS_CHARS ? text.slice(0, MAX_DOCS_CHARS) : text\n const out: Array<{ symbol: string; address: Address }> = []\n const seen = new Set<string>()\n const patterns = [\n /\\|\\s*`?([A-Za-z][A-Za-z0-9]{0,10}c)`?\\s*\\|\\s*`?(0x[bB]200[a-fA-F0-9]{36})`?/g,\n /([A-Za-z][A-Za-z0-9]{0,10}c)[^0]{0,40}(0x[bB]200[a-fA-F0-9]{36})/g,\n ]\n for (const re of patterns) {\n let m: RegExpExecArray | null\n while ((m = re.exec(clipped))) {\n const symbol = (m[1] ?? '').trim()\n if (!looksLikeCoinbaseStockSymbol(symbol)) continue\n let address: Address\n try {\n address = getAddress((m[2] ?? '') as `0x${string}`)\n } catch {\n continue\n }\n if (!isCoinbaseB20AssetToken(address)) continue\n const key = address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n out.push({ symbol, address })\n if (out.length > MAX_OFFICIAL_STOCKS) return []\n }\n }\n return out\n } catch {\n return []\n }\n}\n\n/** Optional enrichment only. Never throws — empty list if the API and docs are unusable. */\nexport async function fetchOfficialBaseTokenizedStocks(): Promise<Array<{ symbol: string; address: Address }>> {\n try {\n const live = await ensureCoinbaseB20StockCatalog()\n if (live.length > 0) return live.map((t) => ({ symbol: t.symbol, address: t.address }))\n } catch {\n /* docs fallback */\n }\n for (const url of BASE_STOCKS_DOCS_URLS) {\n try {\n const res = await fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(8_000) })\n if (!res.ok) continue\n const parsed = parseBaseTokenizedStockDocs(await res.text())\n if (parsed.length > 0) return parsed\n } catch {\n /* try next */\n }\n }\n return []\n}\n\nfunction catalogName(address: Address): string | undefined {\n return coinbaseB20CatalogName(address)\n}\n\nfunction catalogSymbol(address: Address): string | undefined {\n return lookupCoinbaseB20StockToken(address)?.symbol\n}\n\n/**\n * Live Coinbase catalog + Sugar B20 ASSET tokens that look like Coinbase stocks (`*c`).\n * `issued` is `totalSupply() > 0`.\n */\n\nexport async function aerodromeResolveStockTokens(args: {\n rpcUrl: string\n official?: Array<{ symbol: string; address: Address }>\n knownTokens?: Array<{ address: string; symbol?: string; decimals?: number }>\n}): Promise<AerodromeStockTokenRow[]> {\n let official: Array<{ symbol: string; address: Address }> = []\n try {\n official = args.official ?? (await fetchOfficialBaseTokenizedStocks())\n } catch {\n official = []\n }\n const candidates = new Map<string, { address: Address; symbol?: string; name?: string; decimals?: number }>()\n const add = (addressRaw: string, meta?: { symbol?: string; name?: string; decimals?: number }) => {\n if (!isCoinbaseB20AssetToken(addressRaw)) return\n const address = getAddress(addressRaw as `0x${string}`)\n const key = address.toLowerCase()\n const prev = candidates.get(key)\n candidates.set(key, {\n address,\n symbol: meta?.symbol || prev?.symbol,\n name: meta?.name || prev?.name,\n decimals: meta?.decimals ?? prev?.decimals,\n })\n }\n for (const t of official) {\n add(t.address, { symbol: t.symbol, decimals: COINBASE_B20_STOCK_DECIMALS })\n }\n for (const t of args.knownTokens ?? []) {\n if (!isCoinbaseB20AssetToken(t.address)) continue\n const symbol = (t.symbol ?? '').trim()\n const known = Boolean(catalogSymbol(getAddress(t.address as `0x${string}`)))\n if (!known && symbol && !looksLikeCoinbaseStockSymbol(symbol)) continue\n add(t.address, { symbol, decimals: t.decimals })\n }\n\n const rows = [...candidates.values()]\n if (rows.length === 0) return []\n try {\n const client = aerodromePublicClient(args.rpcUrl)\n const meta = await client.multicall({\n allowFailure: true,\n contracts: rows.flatMap((row) => [\n { address: row.address, abi: erc20Abi, functionName: 'symbol' as const },\n { address: row.address, abi: erc20Abi, functionName: 'name' as const },\n { address: row.address, abi: erc20Abi, functionName: 'decimals' as const },\n { address: row.address, abi: erc20Abi, functionName: 'totalSupply' as const },\n ]),\n })\n\n return rows.map((row, i) => {\n const base = i * 4\n const onchainSymbol = meta[base]?.status === 'success' ? String(meta[base].result) : ''\n const onchainName = meta[base + 1]?.status === 'success' ? String(meta[base + 1].result) : ''\n const onchainDecimals = meta[base + 2]?.status === 'success' ? Number(meta[base + 2].result) : NaN\n const supply = meta[base + 3]?.status === 'success' ? (meta[base + 3].result as bigint) : 0n\n return {\n address: row.address,\n symbol: onchainSymbol || row.symbol || catalogSymbol(row.address) || row.address.slice(0, 8),\n name: catalogName(row.address) || onchainName || onchainSymbol || row.symbol || '',\n decimals: Number.isFinite(onchainDecimals) ? onchainDecimals : (row.decimals ?? COINBASE_B20_STOCK_DECIMALS),\n issued: supply > 0n,\n iconUrl: lookupCoinbaseB20StockToken(row.address)?.iconUrl,\n }\n })\n } catch {\n return rows.map((row) => ({\n address: row.address,\n symbol: row.symbol || catalogSymbol(row.address) || row.address.slice(0, 8),\n name: row.name || catalogName(row.address) || row.symbol || '',\n decimals: row.decimals ?? COINBASE_B20_STOCK_DECIMALS,\n issued: false,\n iconUrl: lookupCoinbaseB20StockToken(row.address)?.iconUrl,\n }))\n }\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { clPoolFactoryAbi, v2PoolFactoryAbi } from './abi.js'\nimport {\n aerodromeClFactoryList,\n loadAerodromeAddresses,\n type AerodromeAddresses,\n} from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport {\n assertAerodromeStockIssued,\n ensureAerodromeStockTickers,\n lookupAerodromeKnownToken,\n resolveAerodromeErc20OrWeth,\n} from './stockTokens.js'\nimport {\n AERODROME_CHAIN_ID,\n AERODROME_USDC_BASE,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n requireAerodromeRpcUrl,\n} from './support.js'\nimport type { AerodromeSwapPool } from './sugar.js'\n\n/** Official Slipstream tick spacings; used if `tickSpacings()` is unavailable. */\nconst FALLBACK_TICK_SPACINGS = [1, 10, 50, 100, 200, 500, 2000] as const\n\nfunction checksum(addr: Address): Address {\n return getAddress(addr)\n}\n\nfunction pairKey(a: Address, b: Address): string {\n const [x, y] = [a.toLowerCase(), b.toLowerCase()].sort()\n return `${x}-${y}`\n}\n\nfunction connectorPairs(tokenIn: Address, tokenOut: Address, connectors: Address[]): [Address, Address][] {\n const pairs: [Address, Address][] = []\n const seen = new Set<string>()\n const add = (a: Address, b: Address) => {\n if (a.toLowerCase() === b.toLowerCase()) return\n const key = pairKey(a, b)\n if (seen.has(key)) return\n seen.add(key)\n pairs.push([a, b])\n }\n add(tokenIn, tokenOut)\n for (const c of connectors) {\n add(tokenIn, c)\n add(tokenOut, c)\n }\n const weth = connectors[0]\n const usdc = connectors[1]\n if (weth && usdc) add(weth, usdc)\n return pairs\n}\n\nasync function tickSpacingsForFactory(\n rpcUrl: string,\n factory: Address,\n): Promise<number[]> {\n const client = aerodromePublicClient(rpcUrl)\n try {\n const rows = await client.readContract({\n address: factory,\n abi: clPoolFactoryAbi,\n functionName: 'tickSpacings',\n })\n const nums = rows.map((n) => Number(n)).filter((n) => Number.isFinite(n) && n > 0)\n return nums.length > 0 ? nums : [...FALLBACK_TICK_SPACINGS]\n } catch {\n return [...FALLBACK_TICK_SPACINGS]\n }\n}\n\n/**\n * Probe v2 + all three CL factories for pools that touch tokenIn / tokenOut / WETH / USDC / AERO.\n * Needed because Sugar `forSwaps` paginates oldest factories first and never reaches Slipstream 3\n * (where Coinbase B20 stock / USDC pools live).\n */\nexport async function aerodromeDiscoverConnectorPools(args: {\n rpcUrl: string\n tokenIn: Address\n tokenOut: Address\n addrs: AerodromeAddresses\n}): Promise<AerodromeSwapPool[]> {\n const client = aerodromePublicClient(args.rpcUrl)\n const connectors = [args.addrs.weth, getAddress(AERODROME_USDC_BASE), args.addrs.aero]\n const pairs = connectorPairs(args.tokenIn, args.tokenOut, connectors)\n const clFactories = aerodromeClFactoryList(args.addrs)\n const spacingsByFactory = await Promise.all(\n clFactories.map(async (factory) => ({ factory, spacings: await tickSpacingsForFactory(args.rpcUrl, factory) })),\n )\n\n type Job =\n | { kind: 'v2'; tokenA: Address; tokenB: Address; stable: boolean }\n | { kind: 'cl'; factory: Address; tokenA: Address; tokenB: Address; spacing: number }\n\n const jobs: Job[] = []\n for (const [tokenA, tokenB] of pairs) {\n jobs.push({ kind: 'v2', tokenA, tokenB, stable: false })\n jobs.push({ kind: 'v2', tokenA, tokenB, stable: true })\n for (const { factory, spacings } of spacingsByFactory) {\n for (const spacing of spacings) {\n jobs.push({ kind: 'cl', factory, tokenA, tokenB, spacing })\n }\n }\n }\n\n const results = await client.multicall({\n allowFailure: true,\n contracts: jobs.map((job) =>\n job.kind === 'v2'\n ? {\n address: args.addrs.poolFactory,\n abi: v2PoolFactoryAbi,\n functionName: 'getPool' as const,\n args: [job.tokenA, job.tokenB, job.stable] as const,\n }\n : {\n address: job.factory,\n abi: clPoolFactoryAbi,\n functionName: 'getPool' as const,\n args: [job.tokenA, job.tokenB, job.spacing] as const,\n },\n ),\n })\n\n const seen = new Set<string>()\n const pools: AerodromeSwapPool[] = []\n for (let i = 0; i < jobs.length; i++) {\n const job = jobs[i]!\n const row = results[i]\n if (!row || row.status !== 'success') continue\n const lp = row.result as Address\n if (!lp || lp === zeroAddress) continue\n const key = lp.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n const token0 = job.tokenA.toLowerCase() < job.tokenB.toLowerCase() ? job.tokenA : job.tokenB\n const token1 = token0.toLowerCase() === job.tokenA.toLowerCase() ? job.tokenB : job.tokenA\n if (job.kind === 'v2') {\n pools.push({\n lp: checksum(lp),\n type: job.stable ? 0 : -1,\n token0: checksum(token0),\n token1: checksum(token1),\n factory: args.addrs.poolFactory,\n poolFee: '0',\n kind: job.stable ? 'stable' : 'volatile',\n })\n } else {\n pools.push({\n lp: checksum(lp),\n type: job.spacing,\n token0: checksum(token0),\n token1: checksum(token1),\n factory: checksum(job.factory),\n poolFee: '0',\n kind: 'cl',\n })\n }\n }\n return pools\n}\n\nexport async function aerodromeDiscoverConnectorPoolsLoaded(args: {\n rpcUrl: string\n tokenIn: Address\n tokenOut: Address\n}): Promise<AerodromeSwapPool[]> {\n const addrs = await loadAerodromeAddresses()\n return aerodromeDiscoverConnectorPools({ ...args, addrs })\n}\n\n/** v2 + Slipstream pools for one pair only (no WETH/USDC connector hops). */\nexport async function aerodromeDiscoverDirectPools(args: {\n rpcUrl: string\n tokenA: Address\n tokenB: Address\n}): Promise<AerodromeSwapPool[]> {\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const tokenA = checksum(args.tokenA)\n const tokenB = checksum(args.tokenB)\n const clFactories = aerodromeClFactoryList(addrs)\n const spacingsByFactory = await Promise.all(\n clFactories.map(async (factory) => ({ factory, spacings: await tickSpacingsForFactory(args.rpcUrl, factory) })),\n )\n type Job =\n | { kind: 'v2'; stable: boolean }\n | { kind: 'cl'; factory: Address; spacing: number }\n const jobs: Job[] = [\n { kind: 'v2', stable: false },\n { kind: 'v2', stable: true },\n ]\n for (const { factory, spacings } of spacingsByFactory) {\n for (const spacing of spacings) jobs.push({ kind: 'cl', factory, spacing })\n }\n const results = await client.multicall({\n allowFailure: true,\n contracts: jobs.map((job) =>\n job.kind === 'v2'\n ? {\n address: addrs.poolFactory,\n abi: v2PoolFactoryAbi,\n functionName: 'getPool' as const,\n args: [tokenA, tokenB, job.stable] as const,\n }\n : {\n address: job.factory,\n abi: clPoolFactoryAbi,\n functionName: 'getPool' as const,\n args: [tokenA, tokenB, job.spacing] as const,\n },\n ),\n })\n const token0 = tokenA.toLowerCase() < tokenB.toLowerCase() ? tokenA : tokenB\n const token1 = token0.toLowerCase() === tokenA.toLowerCase() ? tokenB : tokenA\n const seen = new Set<string>()\n const pools: AerodromeSwapPool[] = []\n for (let i = 0; i < jobs.length; i++) {\n const job = jobs[i]!\n const row = results[i]\n if (!row || row.status !== 'success') continue\n const lp = row.result as Address\n if (!lp || lp === zeroAddress) continue\n const key = lp.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n if (job.kind === 'v2') {\n pools.push({\n lp: checksum(lp),\n type: job.stable ? 0 : -1,\n token0,\n token1,\n factory: addrs.poolFactory,\n poolFee: '0',\n kind: job.stable ? 'stable' : 'volatile',\n })\n } else {\n pools.push({\n lp: checksum(lp),\n type: job.spacing,\n token0,\n token1,\n factory: checksum(job.factory),\n poolFee: '0',\n kind: 'cl',\n })\n }\n }\n return pools\n}\n\nfunction tokenLabel(raw: string, resolved: Address, isNative: boolean): string {\n if (isNative) return 'ETH'\n return lookupAerodromeKnownToken(raw)?.symbol || lookupAerodromeKnownToken(resolved)?.symbol || resolved.slice(0, 8)\n}\n\nexport async function aerodromeDiscoverPoolsSummary(args: {\n chainId: number\n rpcUrl: string\n token: string\n tokenOut?: string\n}) {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const rpcUrl = requireAerodromeRpcUrl(args.rpcUrl)\n const addrs = await loadAerodromeAddresses()\n await ensureAerodromeStockTickers([args.token, args.tokenOut ?? ''])\n const isNative = isAerodromeNativeToken(args.token)\n const token = resolveAerodromeErc20OrWeth(args.token, addrs.weth)\n await assertAerodromeStockIssued({ rpcUrl, token, isNative, label: args.token })\n const counterpartRaw = (args.tokenOut ?? '').trim() || 'USDC'\n const isNativeOut = isAerodromeNativeToken(counterpartRaw)\n const tokenOut = resolveAerodromeErc20OrWeth(counterpartRaw, addrs.weth)\n await assertAerodromeStockIssued({ rpcUrl, token: tokenOut, isNative: isNativeOut, label: counterpartRaw })\n if (token.toLowerCase() === tokenOut.toLowerCase()) {\n throw new Error('token and tokenOut must differ (default tokenOut is USDC).')\n }\n const pools = await aerodromeDiscoverConnectorPools({ rpcUrl, tokenIn: token, tokenOut, addrs })\n const inLabel = tokenLabel(args.token, token, isNative)\n const outLabel = tokenLabel(counterpartRaw, tokenOut, isNativeOut)\n return {\n chainId: AERODROME_CHAIN_ID,\n token: {\n address: isNative ? zeroAddress : token,\n symbol: inLabel,\n decimals: lookupAerodromeKnownToken(args.token)?.decimals ?? lookupAerodromeKnownToken(token)?.decimals ?? null,\n },\n tokenOut: {\n address: isNativeOut ? zeroAddress : tokenOut,\n symbol: outLabel,\n decimals:\n lookupAerodromeKnownToken(counterpartRaw)?.decimals ?? lookupAerodromeKnownToken(tokenOut)?.decimals ?? null,\n },\n pools: pools.map((p) => ({\n lp: p.lp,\n kind: p.kind,\n tickSpacing: p.kind === 'cl' ? p.type : undefined,\n token0: p.token0,\n token1: p.token1,\n factory: p.factory,\n })),\n notes:\n pools.length === 0\n ? `No factory pool on the ${inLabel}/${outLabel} connector graph (direct + WETH/USDC/AERO hops). B20 stocks LP vs USDC; ETH→stock quotes hop WETH→USDC→stock. Call ctm_aerodrome_quote with tickers for a price.`\n : `Factory-discovered pools on the ${inLabel}/${outLabel} connector graph (v2 + Slipstream 1/2/3). Not a Sugar dump. Call ctm_aerodrome_quote({ tokenIn: \"${inLabel}\", tokenOut: \"${outLabel}\", amountHuman }) for a price.`,\n }\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { lpSugarAbi } from './abi.js'\nimport { AERODROME_BASE_ADDRESSES_FALLBACK, loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeDiscoverDirectPools } from './discover.js'\nimport { isAerodromeB20AssetToken } from './stockTokens.js'\nimport {\n AERODROME_CHAIN_ID,\n AERODROME_USDC_BASE,\n AERODROME_WETH_BASE,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n} from './support.js'\n\nexport const AERODROME_IMPORTANT_POOL_CAP = 100\nconst SUGAR_PAGE = 50\nconst SUGAR_SCAN_PAGES = 4\nconst SECONDS_PER_YEAR = 365.25 * 24 * 60 * 60\n\nconst BASE_MAIN_TOKEN_ADDRESSES = new Set(\n [\n AERODROME_WETH_BASE,\n AERODROME_USDC_BASE,\n AERODROME_BASE_ADDRESSES_FALLBACK.aero,\n '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb',\n '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2',\n '0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34',\n '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',\n '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',\n ].map((a) => a.toLowerCase()),\n)\n\nexport type AerodromeLpYieldRow = {\n lp: string\n symbol: string\n kind: 'stable' | 'volatile' | 'cl'\n token0: string\n token1: string\n gauge: string\n gaugeAlive: boolean\n reserve0: string\n reserve1: string\n feeBps: number | null\n feeApr: string | null\n emissionsApr: string | null\n totalApr: string | null\n tvlUsd: number | null\n}\n\nfunction poolKind(type: number): 'stable' | 'volatile' | 'cl' {\n if (type === 0) return 'stable'\n if (type === -1) return 'volatile'\n return 'cl'\n}\n\nfunction formatApr(pct: number | null): string | null {\n if (pct == null || !Number.isFinite(pct) || pct < 0) return null\n return `${pct.toFixed(2)}%`\n}\n\nexport function formatAerodromeLpYieldLabel(row: AerodromeLpYieldRow): string {\n const kind = row.kind === 'stable' ? 'sAMM' : row.kind === 'volatile' ? 'vAMM' : 'Slipstream'\n if (row.emissionsApr) {\n return `${row.emissionsApr} emissions APR (${kind})`\n }\n return `Emissions APR not priced (${kind})`\n}\n\nfunction isMainPair(token0: Address, token1: Address, aero: string): boolean {\n const mains = new Set(BASE_MAIN_TOKEN_ADDRESSES)\n mains.add(aero.toLowerCase())\n return mains.has(token0.toLowerCase()) && mains.has(token1.toLowerCase())\n}\n\ntype SugarYieldRaw = {\n lp: Address\n symbol: string\n type: number | bigint\n token0: Address\n token1: Address\n gauge: Address\n gauge_alive: boolean\n reserve0: bigint\n reserve1: bigint\n liquidity: bigint\n emissions: bigint\n pool_fee: bigint\n}\n\nasync function fetchSugarYieldPage(args: {\n rpcUrl: string\n limit: number\n offset: number\n}): Promise<SugarYieldRaw[]> {\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const rows = await client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'all',\n args: [BigInt(args.limit), BigInt(args.offset), 0n],\n })\n return (rows as readonly SugarYieldRaw[]).map((p) => ({\n lp: getAddress(p.lp),\n symbol: p.symbol,\n type: p.type,\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n gauge: getAddress(p.gauge),\n gauge_alive: Boolean(p.gauge_alive),\n reserve0: p.reserve0,\n reserve1: p.reserve1,\n liquidity: p.liquidity,\n emissions: p.emissions,\n pool_fee: p.pool_fee,\n }))\n}\n\nfunction aeroUsdPriceFromRows(rows: SugarYieldRaw[], aero: string): number | null {\n const aeroLo = aero.toLowerCase()\n const usdcLo = AERODROME_USDC_BASE.toLowerCase()\n for (const r of rows) {\n const t0 = r.token0.toLowerCase()\n const t1 = r.token1.toLowerCase()\n if ((t0 === aeroLo && t1 === usdcLo) || (t0 === usdcLo && t1 === aeroLo)) {\n const aeroRes = t0 === aeroLo ? Number(r.reserve0) / 1e18 : Number(r.reserve1) / 1e18\n const usdcRes = t0 === usdcLo ? Number(r.reserve0) / 1e6 : Number(r.reserve1) / 1e6\n if (aeroRes > 0 && usdcRes > 0) return usdcRes / aeroRes\n }\n }\n return null\n}\n\nfunction rowTvlUsd(r: SugarYieldRaw): number | null {\n const fromLiq = Number(r.liquidity) / 1e18\n if (Number.isFinite(fromLiq) && fromLiq > 1) return fromLiq\n const t0 = r.token0.toLowerCase()\n const t1 = r.token1.toLowerCase()\n const usdc = AERODROME_USDC_BASE.toLowerCase()\n if (t0 === usdc) {\n const usd = Number(r.reserve0) / 1e6\n return Number.isFinite(usd) && usd > 0 ? usd * 2 : null\n }\n if (t1 === usdc) {\n const usd = Number(r.reserve1) / 1e6\n return Number.isFinite(usd) && usd > 0 ? usd * 2 : null\n }\n return null\n}\n\nfunction toYieldRow(r: SugarYieldRaw, aeroUsd: number | null): AerodromeLpYieldRow {\n const tvlUsd = rowTvlUsd(r)\n const emissionsPerSec = Number(r.emissions) / 1e18\n let emissionsApr: number | null = null\n if (aeroUsd != null && tvlUsd != null && tvlUsd > 0 && Number.isFinite(emissionsPerSec) && emissionsPerSec > 0) {\n emissionsApr = ((emissionsPerSec * SECONDS_PER_YEAR * aeroUsd) / tvlUsd) * 100\n }\n const feeBpsRaw = Number(r.pool_fee)\n const feeBps = Number.isFinite(feeBpsRaw) && feeBpsRaw > 0 ? feeBpsRaw : null\n return {\n lp: r.lp,\n symbol: r.symbol,\n kind: poolKind(Number(r.type)),\n token0: r.token0,\n token1: r.token1,\n gauge: r.gauge === zeroAddress ? '' : r.gauge,\n gaugeAlive: Boolean(r.gauge_alive),\n reserve0: r.reserve0.toString(),\n reserve1: r.reserve1.toString(),\n feeBps,\n feeApr: null,\n emissionsApr: formatApr(emissionsApr),\n totalApr: formatApr(emissionsApr),\n tvlUsd,\n }\n}\n\nfunction rankAndCap(rows: AerodromeLpYieldRow[], query?: string): AerodromeLpYieldRow[] {\n const q = (query ?? '').trim().toLowerCase()\n let filtered = rows.filter((r) => (r.tvlUsd ?? 0) > 0)\n if (q) {\n filtered = filtered.filter((r) =>\n [r.symbol, r.lp, r.token0, r.token1, r.kind].join(' ').toLowerCase().includes(q),\n )\n }\n filtered.sort((a, b) => (b.tvlUsd ?? 0) - (a.tvlUsd ?? 0))\n return filtered.slice(0, AERODROME_IMPORTANT_POOL_CAP)\n}\n\nasync function scanSugarTop(rpcUrl: string): Promise<SugarYieldRaw[]> {\n const pages: SugarYieldRaw[][] = []\n for (let i = 0; i < SUGAR_SCAN_PAGES; i++) {\n const page = await fetchSugarYieldPage({ rpcUrl, limit: SUGAR_PAGE, offset: i * SUGAR_PAGE })\n pages.push(page)\n if (page.length < SUGAR_PAGE) break\n }\n return pages.flat()\n}\n\nexport async function aerodromeFetchImportantPoolsSummary(args: {\n chainId: number\n rpcUrl: string\n query?: string\n}) {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const scanned = await scanSugarTop(args.rpcUrl)\n const aeroUsd = aeroUsdPriceFromRows(scanned, addrs.aero)\n const main = scanned.filter((r) => isMainPair(r.token0, r.token1, addrs.aero))\n const pools = rankAndCap(main.map((r) => toYieldRow(r, aeroUsd)), args.query)\n return {\n chainId: AERODROME_CHAIN_ID,\n pools,\n notes:\n `At most ${AERODROME_IMPORTANT_POOL_CAP} important Base pairs (ETH/WETH, USDC, AERO, major stables), TVL-ranked. Not an LpSugar.all dump. feeApr is omitted (Sugar exposes fee tier, not volume). emissionsApr uses on-chain AERO/USDC when priced.`,\n }\n}\n\nexport async function aerodromeFetchLpYieldsSummary(args: {\n chainId: number\n rpcUrl: string\n query?: string\n}) {\n return aerodromeFetchImportantPoolsSummary(args)\n}\n\nasync function fetchSugarByAddress(rpcUrl: string, lp: Address): Promise<SugarYieldRaw | null> {\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(rpcUrl)\n try {\n const p = (await client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'byAddress',\n args: [lp],\n })) as SugarYieldRaw\n if (!p?.lp || p.lp === zeroAddress) return null\n return {\n lp: getAddress(p.lp),\n symbol: p.symbol,\n type: p.type,\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n gauge: getAddress(p.gauge),\n gauge_alive: Boolean(p.gauge_alive),\n reserve0: p.reserve0,\n reserve1: p.reserve1,\n liquidity: p.liquidity,\n emissions: p.emissions,\n pool_fee: p.pool_fee,\n }\n } catch {\n return null\n }\n}\n\nfunction resolveYieldToken(addr: string, weth: string): Address {\n if (isAerodromeNativeToken(addr)) return getAddress(weth)\n return getAddress(addr as `0x${string}`)\n}\n\nasync function aeroUsdFromUsdcPool(rpcUrl: string, aero: string): Promise<number | null> {\n const aeroUsdc = await aerodromeDiscoverDirectPools({\n rpcUrl,\n tokenA: getAddress(aero as `0x${string}`),\n tokenB: getAddress(AERODROME_USDC_BASE),\n })\n const prefer = aeroUsdc.find((p) => p.kind === 'volatile') ?? aeroUsdc[0]\n if (!prefer) return null\n const raw = await fetchSugarByAddress(rpcUrl, prefer.lp)\n return raw ? aeroUsdPriceFromRows([raw], aero) : null\n}\n\nexport async function aerodromeFetchLpYieldsForPools(args: {\n chainId: number\n rpcUrl: string\n lps: string[]\n}): Promise<{ chainId: number; pools: AerodromeLpYieldRow[]; notes: string }> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const aeroUsd = await aeroUsdFromUsdcPool(args.rpcUrl, addrs.aero)\n const seen = new Set<string>()\n const pools: AerodromeLpYieldRow[] = []\n for (const rawLp of args.lps) {\n let lp: Address\n try {\n lp = getAddress(rawLp as `0x${string}`)\n } catch {\n continue\n }\n if (lp === zeroAddress || seen.has(lp.toLowerCase())) continue\n seen.add(lp.toLowerCase())\n const raw = await fetchSugarByAddress(args.rpcUrl, lp)\n if (raw) pools.push(toYieldRow(raw, aeroUsd))\n }\n return {\n chainId: AERODROME_CHAIN_ID,\n pools,\n notes:\n 'Same Sugar emissions formula as fetch_lp_yields (AERO/USDC priced). feeApr is omitted (Sugar has fee tier, not volume).',\n }\n}\n\nexport async function aerodromeFetchLpYieldsForPair(args: {\n chainId: number\n rpcUrl: string\n tokenA: string\n tokenB: string\n}): Promise<{ chainId: number; pools: AerodromeLpYieldRow[]; notes: string }> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const tokenA = resolveYieldToken(args.tokenA, addrs.weth)\n const tokenB = resolveYieldToken(args.tokenB, addrs.weth)\n if (tokenA.toLowerCase() === tokenB.toLowerCase()) {\n return { chainId: AERODROME_CHAIN_ID, pools: [], notes: 'Pair tokens must differ.' }\n }\n const discovered = await aerodromeDiscoverDirectPools({ rpcUrl: args.rpcUrl, tokenA, tokenB })\n return aerodromeFetchLpYieldsForPools({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n lps: discovered.map((p) => p.lp),\n })\n}\n\nexport async function aerodromeFetchStockLpYieldsSummary(args: {\n chainId: number\n rpcUrl: string\n query?: string\n}) {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const scanned = await scanSugarTop(args.rpcUrl)\n const aeroUsd = aeroUsdPriceFromRows(scanned, addrs.aero)\n const stock = scanned.filter((r) => isAerodromeB20AssetToken(r.token0) || isAerodromeB20AssetToken(r.token1))\n const pools = rankAndCap(stock.map((r) => toYieldRow(r, aeroUsd)), args.query)\n return {\n chainId: AERODROME_CHAIN_ID,\n pools,\n notes:\n 'Coinbase B20 stock LP yields only (typically STOCK/USDC Slipstream). Separate from main-pair fetch_lp_yields. HIP-3 / Arcus stock trading is not this list.',\n }\n}\n","import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { AERODROME_CHAIN_ID, AERODROME_PROTOCOL_ID, isAerodromeChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './addresses.js'\nexport * from './stockTokens.js'\nexport * from './discover.js'\nexport * from './sugar.js'\nexport * from './sdkSession.js'\nexport * from './quote.js'\nexport * from './priceImpact.js'\nexport * from './swapMultisign.js'\nexport * from './liquidityBasic.js'\nexport * from './liquidityBasicMultisign.js'\nexport * from './liquidityCl.js'\nexport * from './liquidityClMultisign.js'\nexport * from './gaugeMultisign.js'\nexport * from './reads.js'\nexport * from './yields.js'\nexport * from './purpose.js'\n\nexport const aerodromeProtocolModule: ProtocolModule = {\n id: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n return isAerodromeChainSupported(ctx.chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'native' || token.kind === 'erc20'\n },\n actions: [\n {\n id: 'aerodrome.quote',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Quote an Aerodrome swap on Base via factory discovery + MixedRouteQuoterV3 / Router. Tickers (AAPLc, USDC, ETH) accepted.',\n commonParams: [],\n params: {\n chainId: { type: 'number', required: true, description: `Must be ${AERODROME_CHAIN_ID}` },\n tokenIn: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH, WETH, AERO) or 0x / 0x0 native' },\n tokenOut: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH, WETH, AERO) or 0x / 0x0 native' },\n amountHuman: { type: 'string', required: true, description: 'Human-readable input amount (B20 stocks are 8 decimals)' },\n },\n },\n {\n id: 'aerodrome.swap',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Swap via Aerodrome Router / Slipstream SwapRouter (optional ERC-20 approve batch)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n tokenIn: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n tokenOut: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n amountHuman: { type: 'string', required: true, description: 'Human-readable input amount' },\n slippagePercent: { type: 'number', required: true, description: 'Slippage percent (0–100 exclusive)' },\n },\n },\n {\n id: 'aerodrome.add-liquidity',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit into a basic vAMM/sAMM pool (one-sided amounts; tickers OK)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n tokenA: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n tokenB: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n stable: { type: 'boolean', required: true, description: 'true = sAMM, false = vAMM' },\n amountAHuman: { type: 'string', required: false, description: 'Amount A; omit to solve from B' },\n amountBHuman: { type: 'string', required: false, description: 'Amount B; omit to solve from A' },\n slippagePercent: { type: 'number', required: true, description: 'Slippage percent' },\n },\n },\n {\n id: 'aerodrome.remove-liquidity',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw from a basic vAMM/sAMM pool',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n lpToken: { type: 'address', required: true, description: 'LP token' },\n liquidityHuman: { type: 'string', required: true, description: 'LP amount' },\n },\n },\n {\n id: 'aerodrome.cl-mint',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Mint a Slipstream concentrated liquidity NFT',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n token0: { type: 'address', required: true, description: 'Token0' },\n token1: { type: 'address', required: true, description: 'Token1' },\n tickSpacing: { type: 'number', required: true, description: 'Pool tick spacing' },\n tickLower: { type: 'number', required: true, description: 'Lower tick' },\n tickUpper: { type: 'number', required: true, description: 'Upper tick' },\n },\n },\n {\n id: 'aerodrome.gauge-stake',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake basic LP tokens or a Slipstream NFT in a gauge',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n gauge: { type: 'address', required: true, description: 'Gauge address' },\n },\n },\n {\n id: 'aerodrome.claim-fees',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim unstaked fees from the pool (not the gauge)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { pool: { type: 'address', required: true, description: 'Pool lp from fetch_positions claimFees.pool' } },\n },\n {\n id: 'aerodrome.claim-emissions',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim gauge emissions in AERO (not the pool)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { gauge: { type: 'address', required: true, description: 'Gauge from fetch_positions claimEmissions' } },\n },\n ],\n}\n\nregisterProtocolModule(aerodromeProtocolModule)\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { aerodromePoolMetaAbi, aerodromeVoterAbi, erc20Abi, lpSugarAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { AERODROME_CHAIN_ID, isAerodromeChainSupported } from './support.js'\nimport { ensureCoinbaseB20StockCatalog } from '../shared/coinbaseB20.js'\nimport { aerodromeCoinbaseStockAddresses } from './stockTokens.js'\n\nexport type AerodromeListedToken = {\n address: Address\n symbol: string\n decimals: number\n listed: boolean\n emerging: boolean\n accountBalance: string\n name?: string\n issued?: boolean\n iconUrl?: string\n}\n\nexport type AerodromeSwapPool = {\n lp: Address\n type: number\n token0: Address\n token1: Address\n factory: Address\n poolFee: string\n kind: 'stable' | 'volatile' | 'cl'\n}\n\nexport type AerodromeLpRow = {\n lp: Address\n symbol: string\n type: number\n kind: 'stable' | 'volatile' | 'cl'\n token0: Address\n token1: Address\n gauge: Address\n gaugeAlive: boolean\n nfpm: Address\n reserve0: string\n reserve1: string\n}\n\nexport type AerodromePositionRow = {\n id: string\n lp: Address\n liquidity: string\n staked: string\n amount0: string\n amount1: string\n unstakedEarned0: string\n unstakedEarned1: string\n emissionsEarned: string\n tickLower: number\n tickUpper: number\n}\n\nexport type AerodromePositionWithPool = AerodromePositionRow & {\n symbol: string\n kind: 'stable' | 'volatile' | 'cl'\n gauge: Address\n gaugeAlive: boolean\n token0: Address\n token1: Address\n}\n\nfunction poolKind(type: number): 'stable' | 'volatile' | 'cl' {\n if (type === 0) return 'stable'\n if (type === -1) return 'volatile'\n return 'cl'\n}\n\nasync function paginate<T>(\n pageSize: number,\n maxPages: number,\n readPage: (limit: bigint, offset: bigint) => Promise<readonly T[]>,\n): Promise<T[]> {\n const out: T[] = []\n for (let page = 0; page < maxPages; page++) {\n const rows = await readPage(BigInt(pageSize), BigInt(page * pageSize))\n out.push(...rows)\n if (rows.length < pageSize) break\n }\n return out\n}\n\nexport async function aerodromeFetchListedTokens(args: {\n chainId: number\n rpcUrl: string\n account?: string\n extraAddresses?: string[]\n}): Promise<AerodromeListedToken[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n await ensureCoinbaseB20StockCatalog().catch(() => [])\n const client = aerodromePublicClient(args.rpcUrl)\n const account = args.account?.trim() ? getAddress(args.account as `0x${string}`) : zeroAddress\n const extra = [...aerodromeCoinbaseStockAddresses(), ...(args.extraAddresses ?? [])]\n .map((a) => {\n try {\n return getAddress(a as `0x${string}`)\n } catch {\n return null\n }\n })\n .filter((a): a is Address => Boolean(a))\n\n const rows = await paginate(200, 15, (limit, offset) =>\n client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'tokens',\n args: [limit, offset, account, extra],\n }),\n )\n\n const seen = new Set<string>()\n const tokens: AerodromeListedToken[] = []\n for (const t of rows) {\n const address = getAddress(t.token_address)\n const key = address.toLowerCase()\n if (seen.has(key) || address === zeroAddress) continue\n seen.add(key)\n tokens.push({\n address,\n symbol: t.symbol,\n decimals: Number(t.decimals),\n listed: Boolean(t.listed),\n emerging: Boolean(t.emerging),\n accountBalance: t.account_balance.toString(),\n })\n }\n return tokens\n}\n\nexport async function aerodromeFetchSwapPools(args: {\n chainId: number\n rpcUrl: string\n}): Promise<AerodromeSwapPool[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const rows = await paginate(200, 20, (limit, offset) =>\n client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'forSwaps',\n args: [limit, offset],\n }),\n )\n return rows.map((p) => ({\n lp: getAddress(p.lp),\n type: Number(p.type),\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n factory: getAddress(p.factory),\n poolFee: p.pool_fee.toString(),\n kind: poolKind(Number(p.type)),\n }))\n}\n\nexport async function aerodromeFetchPools(args: {\n chainId: number\n rpcUrl: string\n limit?: number\n offset?: number\n}): Promise<AerodromeLpRow[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const limit = BigInt(args.limit ?? 50)\n const offset = BigInt(args.offset ?? 0)\n const rows = await client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'all',\n args: [limit, offset, 0n],\n })\n return rows.map(mapSugarLp)\n}\n\nfunction mapSugarLp(p: {\n lp: Address\n symbol: string\n type: number | bigint\n token0: Address\n token1: Address\n gauge: Address\n gauge_alive: boolean\n nfpm: Address\n reserve0: bigint\n reserve1: bigint\n}): AerodromeLpRow {\n return {\n lp: getAddress(p.lp),\n symbol: p.symbol,\n type: Number(p.type),\n kind: poolKind(Number(p.type)),\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n gauge: getAddress(p.gauge),\n gaugeAlive: Boolean(p.gauge_alive),\n nfpm: getAddress(p.nfpm),\n reserve0: p.reserve0.toString(),\n reserve1: p.reserve1.toString(),\n }\n}\n\n/** Deployed Base LpSugar does not reliably implement byAddress; read the pool + voter instead. */\nexport async function aerodromeFetchPoolsByAddress(args: {\n chainId: number\n rpcUrl: string\n lps: readonly string[]\n}): Promise<Map<string, AerodromeLpRow>> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const unique: Address[] = []\n const seen = new Set<string>()\n for (const raw of args.lps) {\n try {\n const lp = getAddress(raw as `0x${string}`)\n const key = lp.toLowerCase()\n if (lp === zeroAddress || seen.has(key)) continue\n seen.add(key)\n unique.push(lp)\n } catch {\n /* skip */\n }\n }\n const out = new Map<string, AerodromeLpRow>()\n if (unique.length === 0) return out\n const contracts = unique.flatMap((lp) => [\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'symbol' as const },\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'token0' as const },\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'token1' as const },\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'stable' as const },\n { address: addrs.voter, abi: aerodromeVoterAbi, functionName: 'gauges' as const, args: [lp] as const },\n ])\n const results = await client.multicall({ allowFailure: true, contracts })\n const tokenAddrs = new Set<string>()\n const rawRows: Array<{\n lp: Address\n symbol: string\n token0: Address\n token1: Address\n kind: 'stable' | 'volatile' | 'cl'\n gauge: Address\n }> = []\n for (let i = 0; i < unique.length; i++) {\n const base = i * 5\n const symbolRow = results[base]\n const token0Row = results[base + 1]\n const token1Row = results[base + 2]\n const stableRow = results[base + 3]\n const gaugeRow = results[base + 4]\n if (token0Row?.status !== 'success' || token1Row?.status !== 'success') continue\n if (typeof token0Row.result !== 'string' || typeof token1Row.result !== 'string') continue\n const token0 = getAddress(token0Row.result)\n const token1 = getAddress(token1Row.result)\n tokenAddrs.add(token0.toLowerCase())\n tokenAddrs.add(token1.toLowerCase())\n const stable = stableRow?.status === 'success' ? Boolean(stableRow.result) : null\n rawRows.push({\n lp: unique[i]!,\n symbol: symbolRow?.status === 'success' ? String(symbolRow.result || '') : '',\n token0,\n token1,\n kind: stable == null ? 'cl' : stable ? 'stable' : 'volatile',\n gauge:\n gaugeRow?.status === 'success' && typeof gaugeRow.result === 'string'\n ? getAddress(gaugeRow.result)\n : zeroAddress,\n })\n }\n const tokens = [...tokenAddrs].map((a) => getAddress(a as `0x${string}`))\n const tokenSymbols = new Map<string, string>()\n if (tokens.length > 0) {\n const syms = await client.multicall({\n allowFailure: true,\n contracts: tokens.map((token) => ({\n address: token,\n abi: erc20Abi,\n functionName: 'symbol' as const,\n })),\n })\n for (let i = 0; i < tokens.length; i++) {\n const row = syms[i]\n if (row?.status === 'success' && row.result) tokenSymbols.set(tokens[i]!.toLowerCase(), String(row.result))\n }\n }\n for (const row of rawRows) {\n const kindTag = row.kind === 'stable' ? 'sAMM' : row.kind === 'cl' ? 'CL' : 'vAMM'\n const s0 = tokenSymbols.get(row.token0.toLowerCase()) || ''\n const s1 = tokenSymbols.get(row.token1.toLowerCase()) || ''\n const pair = s0 && s1 ? `${kindTag}-${s0}/${s1}` : ''\n out.set(row.lp.toLowerCase(), {\n lp: row.lp,\n symbol: row.symbol.trim() || pair,\n type: row.kind === 'stable' ? 0 : row.kind === 'volatile' ? -1 : 100,\n kind: row.kind,\n token0: row.token0,\n token1: row.token1,\n gauge: row.gauge,\n gaugeAlive: row.gauge !== zeroAddress,\n nfpm: zeroAddress,\n reserve0: '0',\n reserve1: '0',\n })\n }\n return out\n}\n\nexport async function aerodromeFetchPositions(args: {\n chainId: number\n rpcUrl: string\n account: string\n}): Promise<AerodromePositionRow[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const account = getAddress(args.account as `0x${string}`)\n const rows = await paginate(50, 8, (limit, offset) =>\n client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'positions',\n args: [limit, offset, account],\n }),\n )\n return rows.map((p) => ({\n id: p.id.toString(),\n lp: getAddress(p.lp),\n liquidity: p.liquidity.toString(),\n staked: p.staked.toString(),\n amount0: p.amount0.toString(),\n amount1: p.amount1.toString(),\n unstakedEarned0: p.unstaked_earned0.toString(),\n unstakedEarned1: p.unstaked_earned1.toString(),\n emissionsEarned: p.emissions_earned.toString(),\n tickLower: Number(p.tick_lower),\n tickUpper: Number(p.tick_upper),\n }))\n}\n\nexport async function aerodromeFetchPositionsWithPools(args: {\n chainId: number\n rpcUrl: string\n account: string\n}): Promise<AerodromePositionWithPool[]> {\n const positions = await aerodromeFetchPositions(args)\n const pools = await aerodromeFetchPoolsByAddress({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n lps: positions.map((p) => p.lp),\n })\n return positions\n .map((p) => {\n const pool = pools.get(p.lp.toLowerCase())\n const cl = pool?.kind === 'cl' || p.id !== '0' || p.tickLower !== p.tickUpper\n return {\n ...p,\n symbol: pool?.symbol ?? '',\n kind: pool?.kind ?? (cl ? 'cl' : 'volatile'),\n gauge: pool?.gauge ?? zeroAddress,\n gaugeAlive: pool?.gaugeAlive ?? false,\n token0: pool?.token0 ?? zeroAddress,\n token1: pool?.token1 ?? zeroAddress,\n }\n })\n .filter(isMeaningfulAerodromePosition)\n}\n\nfunction isMeaningfulAerodromePosition(p: AerodromePositionWithPool): boolean {\n if (p.kind === 'cl' || p.id !== '0') return true\n if (BigInt(p.staked || '0') > 0n) return true\n if (BigInt(p.emissionsEarned || '0') > 0n) return true\n return BigInt(p.liquidity || '0') >= 10n ** 12n\n}\n","/**\n * Execution price impact vs a tiny same-route probe (marginal / spot rate).\n * Same idea as Curve's probe fallback: (1 − avgRate / marginalRate) × 100.\n */\n\nexport function aerodromeProbeAmountIn(amountIn: bigint): bigint | null {\n if (amountIn <= 1n) return null\n let probe = amountIn / 10_000n\n if (probe < 1n) probe = 1n\n if (probe >= amountIn) return null\n return probe\n}\n\nexport function computeAerodromePriceImpactPercent(args: {\n amountIn: bigint\n amountOut: bigint\n probeIn: bigint\n probeOut: bigint\n}): number | null {\n const { amountIn, amountOut, probeIn, probeOut } = args\n if (amountIn <= 0n || amountOut <= 0n || probeIn <= 0n || probeOut <= 0n) return null\n // impact = 1 − (out/in) / (probeOut/probeIn) = 1 − (out × probeIn) / (in × probeOut)\n const executed = amountOut * probeIn\n const spot = amountIn * probeOut\n if (spot === 0n) return null\n if (executed >= spot) return 0\n const scale = 100_000_000n\n const scaled = ((spot - executed) * scale * 100n) / spot\n const pct = Number(scaled) / Number(scale)\n if (!Number.isFinite(pct)) return null\n return Math.max(0, pct)\n}\n\n/** e.g. \"0.12%\" from a 0–100 quote field. */\nexport function formatAerodromePriceImpact(percent0to100: number | null | undefined): string {\n if (percent0to100 == null || !Number.isFinite(percent0to100) || percent0to100 < 0) return '—'\n if (percent0to100 === 0) return '0%'\n if (percent0to100 < 0.0001) return '<0.0001%'\n const t =\n percent0to100 < 0.01\n ? percent0to100.toFixed(4)\n : percent0to100 < 1\n ? percent0to100.toFixed(3)\n : percent0to100 < 10\n ? percent0to100.toFixed(2)\n : percent0to100.toFixed(1)\n return `${t.replace(/(\\.\\d*?[1-9])0+$/g, '$1').replace(/\\.0$/, '')}%`\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { aerodromeProbeAmountIn, computeAerodromePriceImpactPercent } from './priceImpact.js'\nimport { AERODROME_CHAIN_ID } from './support.js'\n\ntype SdkJsModule = {\n getDefaultConfig?: (args: unknown) => unknown\n getListedTokens?: (args: unknown) => Promise<unknown>\n getQuoteForSwap?: (args: unknown) => Promise<unknown>\n swap?: (args: unknown) => Promise<unknown>\n base?: { id: number }\n}\n\nasync function loadSdkJs(): Promise<SdkJsModule | null> {\n try {\n return (await import('@dromos-labs/sdk.js')) as SdkJsModule\n } catch {\n return null\n }\n}\n\n/**\n * Optional `@dromos-labs/sdk.js` quote. Returns null when the package is not\n * installed or the Node/wagmi session cannot be created.\n */\nexport async function tryAerodromeSdkQuote(args: {\n rpcUrl: string\n tokenIn: Address\n tokenOut: Address\n amountIn: bigint\n isNativeIn: boolean\n isNativeOut: boolean\n}): Promise<{\n chainId: number\n tokenIn: Address\n tokenOut: Address\n amountInWei: string\n amountOutWei: string\n amountOutHuman: string | null\n priceImpactPercent: number | null\n hops: []\n pathPacked: null\n isNativeIn: boolean\n isNativeOut: boolean\n source: 'sdk.js'\n} | null> {\n const sdk = await loadSdkJs()\n if (!sdk?.getDefaultConfig || !sdk.getQuoteForSwap || !sdk.base) return null\n try {\n const config = sdk.getDefaultConfig({\n chains: [{ chain: sdk.base, rpcUrl: args.rpcUrl }],\n })\n const quote = (await sdk.getQuoteForSwap({\n config,\n fromToken: { address: args.tokenIn, chainId: AERODROME_CHAIN_ID },\n toToken: { address: args.tokenOut, chainId: AERODROME_CHAIN_ID },\n amountIn: args.amountIn,\n })) as { amountOut?: bigint; expectedAmount?: bigint } | null\n if (!quote) return null\n const out = quote.amountOut ?? quote.expectedAmount\n if (out == null || out <= 0n) return null\n let priceImpactPercent: number | null = null\n const probeIn = aerodromeProbeAmountIn(args.amountIn)\n if (probeIn != null) {\n try {\n const probeQuote = (await sdk.getQuoteForSwap({\n config,\n fromToken: { address: args.tokenIn, chainId: AERODROME_CHAIN_ID },\n toToken: { address: args.tokenOut, chainId: AERODROME_CHAIN_ID },\n amountIn: probeIn,\n })) as { amountOut?: bigint; expectedAmount?: bigint } | null\n const probeOut = probeQuote?.amountOut ?? probeQuote?.expectedAmount\n if (probeOut != null && probeOut > 0n) {\n priceImpactPercent = computeAerodromePriceImpactPercent({\n amountIn: args.amountIn,\n amountOut: out,\n probeIn,\n probeOut,\n })\n }\n } catch {\n priceImpactPercent = null\n }\n }\n return {\n chainId: AERODROME_CHAIN_ID,\n tokenIn: args.isNativeIn ? zeroAddress : args.tokenIn,\n tokenOut: args.isNativeOut ? zeroAddress : args.tokenOut,\n amountInWei: args.amountIn.toString(),\n amountOutWei: out.toString(),\n amountOutHuman: null,\n priceImpactPercent,\n hops: [],\n pathPacked: null,\n isNativeIn: args.isNativeIn,\n isNativeOut: args.isNativeOut,\n source: 'sdk.js',\n }\n } catch {\n return null\n }\n}\n\nexport async function tryAerodromeSdkUnsignedSwap(args: {\n rpcUrl: string\n account: Address\n quote: unknown\n slippage: number\n}): Promise<{ to: Address; data: `0x${string}`; value: bigint } | null> {\n const sdk = await loadSdkJs()\n if (!sdk?.getDefaultConfig || !sdk.swap || !sdk.base) return null\n try {\n const config = sdk.getDefaultConfig({\n chains: [{ chain: sdk.base, rpcUrl: args.rpcUrl }],\n })\n const tx = (await sdk.swap({\n config,\n quote: args.quote,\n account: args.account,\n slippage: args.slippage,\n unsignedTransactionOnly: true,\n })) as { to?: string; data?: string; value?: bigint | string | number } | null\n if (!tx?.to || !tx.data) return null\n return {\n to: getAddress(tx.to as `0x${string}`),\n data: (tx.data.startsWith('0x') ? tx.data : `0x${tx.data}`) as `0x${string}`,\n value: typeof tx.value === 'bigint' ? tx.value : BigInt(tx.value ?? 0),\n }\n } catch {\n return null\n }\n}\n","import { encodePacked, formatUnits, getAddress, parseUnits, zeroAddress, type Address, type Hex } from 'viem'\nimport { erc20Abi, mixedQuoterAbi, mixedQuoterV3Abi, routerAbi } from './abi.js'\nimport { AERODROME_BASE_ADDRESSES_FALLBACK, loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeDiscoverConnectorPools } from './discover.js'\nimport { tryAerodromeSdkQuote } from './sdkSession.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n assertAerodromeStockIssued,\n ensureAerodromeStockTickers,\n isAerodromeCoinbaseStockToken,\n resolveAerodromeErc20OrWeth,\n} from './stockTokens.js'\nimport {\n AERODROME_CHAIN_ID,\n AERODROME_USDC_BASE,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n requireAerodromeRpcUrl,\n} from './support.js'\nimport {\n aerodromeProbeAmountIn,\n computeAerodromePriceImpactPercent,\n} from './priceImpact.js'\nimport { aerodromeFetchSwapPools, type AerodromeSwapPool } from './sugar.js'\n\nexport { resolveAerodromeErc20OrWeth } from './stockTokens.js'\n\n/** Official MixedRouteQuoter fillers from velodrome-finance/docs sdk.mdx. */\nexport const AERODROME_STABLE_FILLER = 2_097_152\nexport const AERODROME_VOLATILE_FILLER = 4_194_304\n/** MixedRouteQuoterV3: oldest CL factory (1 << 20). */\nexport const AERODROME_CL_FACTORY_OLDEST_BIT = 1_048_576\n/** MixedRouteQuoterV3: newest CL factory / Slipstream 3 (1 << 19). */\nexport const AERODROME_CL_FACTORY_NEWEST_BIT = 524_288\n\nexport type AerodromeRouteHop = {\n from: Address\n to: Address\n stable: boolean\n factory: Address\n type: number\n kind: 'stable' | 'volatile' | 'cl'\n lp: Address\n}\n\nexport type AerodromeQuoteResult = {\n chainId: number\n tokenIn: Address\n tokenOut: Address\n amountInWei: string\n amountOutWei: string\n amountOutHuman: string | null\n priceImpactPercent: number | null\n hops: AerodromeRouteHop[]\n pathPacked: Hex | null\n isNativeIn: boolean\n isNativeOut: boolean\n source: 'sdk.js' | 'router' | 'mixed_quoter'\n}\n\n/** MixedRouteQuoterV3 path filler: v2 masks, or tickSpacing OR factory bit. */\nexport function aerodromeMixedPathFiller(hop: Pick<AerodromeRouteHop, 'kind' | 'type' | 'factory'>): number {\n if (hop.kind === 'stable') return AERODROME_STABLE_FILLER\n if (hop.kind === 'volatile') return AERODROME_VOLATILE_FILLER\n const f = hop.factory.toLowerCase()\n if (f === AERODROME_BASE_ADDRESSES_FALLBACK.clFactory3.toLowerCase()) {\n return hop.type | AERODROME_CL_FACTORY_NEWEST_BIT\n }\n if (f === AERODROME_BASE_ADDRESSES_FALLBACK.clFactory.toLowerCase()) {\n return hop.type | AERODROME_CL_FACTORY_OLDEST_BIT\n }\n return hop.type\n}\n\n/** encodePacked(address, int24, address, ...) per official sdk.mdx / MixedRouteQuoterV3. */\nexport function encodeAerodromeMixedPath(hops: AerodromeRouteHop[]): Hex {\n if (hops.length === 0) throw new Error('Aerodrome path requires at least one hop.')\n const types: Array<'address' | 'int24'> = ['address']\n const values: Array<Address | number> = [hops[0]!.from]\n for (const hop of hops) {\n types.push('int24', 'address')\n values.push(aerodromeMixedPathFiller(hop), hop.to)\n }\n return encodePacked(types, values)\n}\n\nfunction neighbors(pools: AerodromeSwapPool[], token: Address): AerodromeSwapPool[] {\n const t = token.toLowerCase()\n return pools.filter(\n (p) => p.token0.toLowerCase() === t || p.token1.toLowerCase() === t,\n )\n}\n\nfunction hopFromPool(pool: AerodromeSwapPool, from: Address): AerodromeRouteHop {\n const fromL = from.toLowerCase()\n const to = pool.token0.toLowerCase() === fromL ? pool.token1 : pool.token0\n return {\n from: getAddress(from),\n to: getAddress(to),\n stable: pool.kind === 'stable',\n factory: pool.factory,\n type: pool.type,\n kind: pool.kind,\n lp: pool.lp,\n }\n}\n\n/** Undirected graph search, max depth 3, official sdk.mdx suggestion. */\nexport function findAerodromePaths(\n pools: AerodromeSwapPool[],\n tokenIn: Address,\n tokenOut: Address,\n maxDepth = 3,\n): AerodromeRouteHop[][] {\n const goal = tokenOut.toLowerCase()\n const start = getAddress(tokenIn)\n const out: AerodromeRouteHop[][] = []\n\n const walk = (current: Address, path: AerodromeRouteHop[], usedLp: Set<string>) => {\n if (path.length >= maxDepth) return\n for (const pool of neighbors(pools, current)) {\n const lpKey = pool.lp.toLowerCase()\n if (usedLp.has(lpKey)) continue\n const hop = hopFromPool(pool, current)\n const nextPath = [...path, hop]\n if (hop.to.toLowerCase() === goal) {\n out.push(nextPath)\n continue\n }\n usedLp.add(lpKey)\n walk(hop.to, nextPath, usedLp)\n usedLp.delete(lpKey)\n }\n }\n\n walk(start, [], new Set())\n return out.slice(0, 40)\n}\n\nfunction mergePools(into: AerodromeSwapPool[], extra: AerodromeSwapPool[]): AerodromeSwapPool[] {\n const seen = new Set(into.map((p) => p.lp.toLowerCase()))\n const out = [...into]\n for (const p of extra) {\n const key = p.lp.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n out.push(p)\n }\n return out\n}\n\nasync function quoteViaRouter(\n rpcUrl: string,\n router: Address,\n amountIn: bigint,\n hops: AerodromeRouteHop[],\n): Promise<bigint | null> {\n if (hops.some((h) => h.kind === 'cl')) return null\n const client = aerodromePublicClient(rpcUrl)\n try {\n const amounts = await client.readContract({\n address: router,\n abi: routerAbi,\n functionName: 'getAmountsOut',\n args: [\n amountIn,\n hops.map((h) => ({ from: h.from, to: h.to, stable: h.stable, factory: h.factory })),\n ],\n })\n const last = amounts[amounts.length - 1]\n return last ?? null\n } catch {\n return null\n }\n}\n\nasync function quoteViaMixedQuoter(\n rpcUrl: string,\n quoter: Address,\n amountIn: bigint,\n hops: AerodromeRouteHop[],\n abi: typeof mixedQuoterV3Abi | typeof mixedQuoterAbi,\n): Promise<bigint | null> {\n const client = aerodromePublicClient(rpcUrl)\n const path = encodeAerodromeMixedPath(hops)\n try {\n const res = await client.simulateContract({\n address: quoter,\n abi,\n functionName: 'quoteExactInput',\n args: [path, amountIn],\n })\n return res.result[0]\n } catch {\n return null\n }\n}\n\nexport async function quoteAerodromeHopsAmountOut(args: {\n rpcUrl: string\n router: Address\n mixedQuoter: Address\n mixedQuoterV3: Address\n amountIn: bigint\n hops: AerodromeRouteHop[]\n}): Promise<{ out: bigint; source: 'router' | 'mixed_quoter' } | null> {\n const viaRouter = await quoteViaRouter(args.rpcUrl, args.router, args.amountIn, args.hops)\n if (viaRouter != null && viaRouter > 0n) return { out: viaRouter, source: 'router' }\n const viaV3 = await quoteViaMixedQuoter(\n args.rpcUrl,\n args.mixedQuoterV3,\n args.amountIn,\n args.hops,\n mixedQuoterV3Abi,\n )\n if (viaV3 != null && viaV3 > 0n) return { out: viaV3, source: 'mixed_quoter' }\n const viaV1 = await quoteViaMixedQuoter(\n args.rpcUrl,\n args.mixedQuoter,\n args.amountIn,\n args.hops,\n mixedQuoterAbi,\n )\n if (viaV1 != null && viaV1 > 0n) return { out: viaV1, source: 'mixed_quoter' }\n return null\n}\n\nasync function readTokenDecimals(rpcUrl: string, token: Address, isNative: boolean): Promise<number> {\n if (isNative) return 18\n if (isAerodromeCoinbaseStockToken(token)) return AERODROME_COINBASE_STOCK_DECIMALS\n if (token.toLowerCase() === AERODROME_USDC_BASE.toLowerCase()) return 6\n const client = aerodromePublicClient(rpcUrl)\n return Number(\n await client.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'decimals',\n }),\n )\n}\n\nasync function throwIfUnissuedStock(args: {\n rpcUrl: string\n token: Address\n isNative: boolean\n label: string\n}): Promise<void> {\n await assertAerodromeStockIssued(args)\n}\n\nexport async function aerodromeQuote(args: {\n chainId: number\n rpcUrl: string\n tokenIn: string\n tokenOut: string\n amountHuman: string\n tokenInDecimals?: number\n}): Promise<AerodromeQuoteResult> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const rpcUrl = requireAerodromeRpcUrl(args.rpcUrl)\n const addrs = await loadAerodromeAddresses()\n await ensureAerodromeStockTickers([args.tokenIn, args.tokenOut])\n const isNativeIn = isAerodromeNativeToken(args.tokenIn)\n const isNativeOut = isAerodromeNativeToken(args.tokenOut)\n const tokenIn = resolveAerodromeErc20OrWeth(args.tokenIn, addrs.weth)\n const tokenOut = resolveAerodromeErc20OrWeth(args.tokenOut, addrs.weth)\n if (tokenIn.toLowerCase() === tokenOut.toLowerCase()) {\n throw new Error('tokenIn and tokenOut must differ.')\n }\n\n let decimals = args.tokenInDecimals\n if (isAerodromeCoinbaseStockToken(tokenIn)) {\n decimals = AERODROME_COINBASE_STOCK_DECIMALS\n } else if (decimals == null) {\n decimals = await readTokenDecimals(rpcUrl, tokenIn, isNativeIn)\n }\n const amountIn = parseUnits(args.amountHuman.trim(), decimals)\n if (amountIn <= 0n) throw new Error('amountHuman must be a positive decimal string.')\n\n const sdkQuote = await tryAerodromeSdkQuote({\n rpcUrl,\n tokenIn,\n tokenOut,\n amountIn,\n isNativeIn,\n isNativeOut,\n })\n if (sdkQuote) return sdkQuote\n\n let pools = await aerodromeDiscoverConnectorPools({ rpcUrl, tokenIn, tokenOut, addrs })\n let paths = findAerodromePaths(pools, tokenIn, tokenOut)\n if (paths.length === 0) {\n const sugarPools = await aerodromeFetchSwapPools({ chainId: AERODROME_CHAIN_ID, rpcUrl })\n pools = mergePools(pools, sugarPools)\n const connectors = [addrs.weth, getAddress(AERODROME_USDC_BASE), addrs.aero]\n const relevant = pools.filter((p) => {\n const a = p.token0.toLowerCase()\n const b = p.token1.toLowerCase()\n const tin = tokenIn.toLowerCase()\n const tout = tokenOut.toLowerCase()\n const conn = new Set(connectors.map((c) => c.toLowerCase()))\n return a === tin || b === tin || a === tout || b === tout || conn.has(a) || conn.has(b)\n })\n paths = findAerodromePaths(relevant, tokenIn, tokenOut)\n }\n if (paths.length === 0) {\n await throwIfUnissuedStock({ rpcUrl, token: tokenOut, isNative: isNativeOut, label: args.tokenOut })\n await throwIfUnissuedStock({ rpcUrl, token: tokenIn, isNative: isNativeIn, label: args.tokenIn })\n const tout = tokenOut.toLowerCase()\n const outHasPool = pools.some(\n (p) => p.token0.toLowerCase() === tout || p.token1.toLowerCase() === tout,\n )\n if (!outHasPool) {\n throw new Error(\n `No Aerodrome pool for ${args.tokenOut}. This token may not be issued yet or has no liquidity on Aerodrome.`,\n )\n }\n throw new Error('No Aerodrome route found for this pair.')\n }\n\n let best: { hops: AerodromeRouteHop[]; out: bigint; source: 'router' | 'mixed_quoter' } | null = null\n for (const hops of paths) {\n const quoted = await quoteAerodromeHopsAmountOut({\n rpcUrl,\n router: addrs.router,\n mixedQuoter: addrs.mixedQuoter,\n mixedQuoterV3: addrs.mixedQuoterV3,\n amountIn,\n hops,\n })\n if (!quoted) continue\n if (!best || quoted.out > best.out) {\n best = { hops, out: quoted.out, source: quoted.source }\n }\n }\n if (!best) {\n await throwIfUnissuedStock({ rpcUrl, token: tokenOut, isNative: isNativeOut, label: args.tokenOut })\n await throwIfUnissuedStock({ rpcUrl, token: tokenIn, isNative: isNativeIn, label: args.tokenIn })\n throw new Error('Aerodrome quote returned zero for all candidate routes.')\n }\n\n let amountOutHuman: string | null = null\n try {\n const outDecimals = await readTokenDecimals(rpcUrl, tokenOut, isNativeOut)\n amountOutHuman = formatUnits(best.out, outDecimals)\n } catch {\n amountOutHuman = null\n }\n\n let priceImpactPercent: number | null = null\n const probeIn = aerodromeProbeAmountIn(amountIn)\n if (probeIn != null) {\n const probeQuoted = await quoteAerodromeHopsAmountOut({\n rpcUrl,\n router: addrs.router,\n mixedQuoter: addrs.mixedQuoter,\n mixedQuoterV3: addrs.mixedQuoterV3,\n amountIn: probeIn,\n hops: best.hops,\n })\n if (probeQuoted && probeQuoted.out > 0n) {\n priceImpactPercent = computeAerodromePriceImpactPercent({\n amountIn,\n amountOut: best.out,\n probeIn,\n probeOut: probeQuoted.out,\n })\n }\n }\n\n return {\n chainId: AERODROME_CHAIN_ID,\n tokenIn: isNativeIn ? zeroAddress : tokenIn,\n tokenOut: isNativeOut ? zeroAddress : tokenOut,\n amountInWei: amountIn.toString(),\n amountOutWei: best.out.toString(),\n amountOutHuman,\n priceImpactPercent,\n hops: best.hops,\n pathPacked: encodeAerodromeMixedPath(best.hops),\n isNativeIn,\n isNativeOut,\n source: best.source,\n }\n}\n","import { encodeFunctionData, getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { clSwapRouterAbi, routerAbi } from './abi.js'\nimport { aerodromeClSwapRouterForFactory, loadAerodromeAddresses, type AerodromeAddresses } from './addresses.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport {\n aerodromeQuote,\n quoteAerodromeHopsAmountOut,\n type AerodromeQuoteResult,\n type AerodromeRouteHop,\n} from './quote.js'\nimport { tryAerodromeSdkUnsignedSwap } from './sdkSession.js'\nimport { AERODROME_CHAIN_ID, aerodromeOnChainDeadlineUnix, isAerodromeNativeToken } from './support.js'\n\nfunction applySlippage(amountOut: bigint, slippagePercent: number): bigint {\n if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {\n throw new Error('Slippage must be between 0 and 100 (exclusive).')\n }\n const bps = BigInt(Math.round(slippagePercent * 100))\n return amountOut - (amountOut * bps) / 10_000n\n}\n\nfunction routerRoutes(hops: AerodromeRouteHop[]) {\n return hops.map((h) => ({ from: h.from, to: h.to, stable: h.stable, factory: h.factory }))\n}\n\nasync function appendSequentialMixedHops(args: {\n steps: AerodromeStep[]\n addrs: AerodromeAddresses\n rpcUrl: string\n executor: Address\n hops: AerodromeRouteHop[]\n amountIn: bigint\n amountOutMin: bigint\n slippagePercent: number\n deadline: bigint\n isNativeIn: boolean\n isNativeOut: boolean\n}): Promise<void> {\n let remainingIn = args.amountIn\n for (let i = 0; i < args.hops.length; i++) {\n const hop = args.hops[i]!\n const isFirst = i === 0\n const isLast = i === args.hops.length - 1\n const quoted = await quoteAerodromeHopsAmountOut({\n rpcUrl: args.rpcUrl,\n router: args.addrs.router,\n mixedQuoter: args.addrs.mixedQuoter,\n mixedQuoterV3: args.addrs.mixedQuoterV3,\n amountIn: remainingIn,\n hops: [hop],\n })\n if (!quoted) {\n throw new Error(`Aerodrome hop ${i + 1} of ${args.hops.length} returned no quote.`)\n }\n const hopOutMin = isLast ? args.amountOutMin : applySlippage(quoted.out, args.slippagePercent)\n const payNative = isFirst && args.isNativeIn\n\n if (hop.kind === 'cl') {\n const swapRouter = aerodromeClSwapRouterForFactory(args.addrs, hop.factory)\n if (!payNative) {\n await pushErc20ApproveIfNeeded({\n steps: args.steps,\n rpcUrl: args.rpcUrl,\n token: hop.from,\n owner: args.executor,\n spender: swapRouter,\n amountWei: remainingIn,\n })\n }\n args.steps.push({\n to: swapRouter,\n data: encodeFunctionData({\n abi: clSwapRouterAbi,\n functionName: 'exactInputSingle',\n args: [\n {\n tokenIn: hop.from,\n tokenOut: hop.to,\n tickSpacing: hop.type,\n recipient: args.executor,\n deadline: args.deadline,\n amountIn: remainingIn,\n amountOutMinimum: hopOutMin,\n sqrtPriceLimitX96: 0n,\n },\n ],\n }),\n value: payNative ? remainingIn : 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 400_000n,\n })\n } else {\n if (!payNative) {\n await pushErc20ApproveIfNeeded({\n steps: args.steps,\n rpcUrl: args.rpcUrl,\n token: hop.from,\n owner: args.executor,\n spender: args.addrs.router,\n amountWei: remainingIn,\n })\n }\n const routes = routerRoutes([hop])\n if (payNative) {\n args.steps.push({\n to: args.addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'swapExactETHForTokens',\n args: [hopOutMin, routes, args.executor, args.deadline],\n }),\n value: remainingIn,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n } else if (isLast && args.isNativeOut) {\n args.steps.push({\n to: args.addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'swapExactTokensForETH',\n args: [remainingIn, hopOutMin, routes, args.executor, args.deadline],\n }),\n value: 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n } else {\n args.steps.push({\n to: args.addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'swapExactTokensForTokens',\n args: [remainingIn, hopOutMin, routes, args.executor, args.deadline],\n }),\n value: 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n }\n }\n remainingIn = hopOutMin\n }\n}\n\nexport async function buildEvmMultisignBodyAerodromeSwapBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenIn: string\n tokenOut: string\n amountHuman: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n quoteSnapshot?: AerodromeQuoteResult | null\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n if (args.chainId !== AERODROME_CHAIN_ID) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const quote =\n args.quoteSnapshot?.hops?.length && args.quoteSnapshot.amountOutWei\n ? args.quoteSnapshot\n : await aerodromeQuote({\n chainId: AERODROME_CHAIN_ID,\n rpcUrl: args.rpcUrl,\n tokenIn: args.tokenIn,\n tokenOut: args.tokenOut,\n amountHuman: args.amountHuman,\n })\n\n const amountIn = BigInt(quote.amountInWei)\n const amountOutMin = applySlippage(BigInt(quote.amountOutWei), args.slippagePercent)\n const isNativeIn = quote.isNativeIn || isAerodromeNativeToken(args.tokenIn)\n const isNativeOut = quote.isNativeOut || isAerodromeNativeToken(args.tokenOut)\n const hops = quote.hops\n const deadline = aerodromeOnChainDeadlineUnix(args.expiryDate)\n const steps: AerodromeStep[] = []\n\n const sdkTx = await tryAerodromeSdkUnsignedSwap({\n rpcUrl: args.rpcUrl,\n account: executor,\n quote,\n slippage: args.slippagePercent / 100,\n })\n if (sdkTx) {\n const tokenInAddr = getAddress((isNativeIn ? addrs.weth : quote.tokenIn) as `0x${string}`)\n if (!isNativeIn) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: tokenInAddr,\n owner: executor,\n spender: sdkTx.to,\n amountWei: amountIn,\n })\n }\n steps.push({\n to: sdkTx.to,\n data: sdkTx.data,\n value: sdkTx.value,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 400_000n,\n })\n } else if (hops.length > 0 && hops.every((h) => h.kind !== 'cl')) {\n const routes = routerRoutes(hops)\n if (!isNativeIn) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: hops[0]!.from,\n owner: executor,\n spender: addrs.router,\n amountWei: amountIn,\n })\n }\n if (isNativeIn) {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'swapExactETHForTokens',\n args: [amountOutMin, routes, executor, deadline],\n }),\n value: amountIn,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n } else if (isNativeOut) {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'swapExactTokensForETH',\n args: [amountIn, amountOutMin, routes, executor, deadline],\n }),\n value: 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n } else {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'swapExactTokensForTokens',\n args: [amountIn, amountOutMin, routes, executor, deadline],\n }),\n value: 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n }\n } else if (hops.length === 1 && hops[0]!.kind === 'cl') {\n const hop = hops[0]!\n const swapRouter = aerodromeClSwapRouterForFactory(addrs, hop.factory)\n if (!isNativeIn) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: hop.from,\n owner: executor,\n spender: swapRouter,\n amountWei: amountIn,\n })\n }\n steps.push({\n to: swapRouter,\n data: encodeFunctionData({\n abi: clSwapRouterAbi,\n functionName: 'exactInputSingle',\n args: [\n {\n tokenIn: hop.from,\n tokenOut: hop.to,\n tickSpacing: hop.type,\n recipient: executor,\n deadline,\n amountIn,\n amountOutMinimum: amountOutMin,\n sqrtPriceLimitX96: 0n,\n },\n ],\n }),\n value: isNativeIn ? amountIn : 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 400_000n,\n })\n } else if (hops.length > 1) {\n await appendSequentialMixedHops({\n steps,\n addrs,\n rpcUrl: args.rpcUrl,\n executor,\n hops,\n amountIn,\n amountOutMin,\n slippagePercent: args.slippagePercent,\n deadline,\n isNativeIn,\n isNativeOut,\n })\n } else {\n throw new Error(\n 'No unsigned Aerodrome swap path: install @dromos-labs/sdk.js for mixed routes, or use a v2 / single-hop CL quote.',\n )\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix:\n steps.length === 1\n ? 'Aerodrome: 1-tx swap.'\n : `Aerodrome: ${steps.length}-tx batch — ERC-20 approve then swap.`,\n meta: (step) =>\n step.kind === 'approve'\n ? {\n signatureText: JSON.stringify({\n kind: 'Aerodrome',\n name: 'ERC20.approve',\n note: 'Allowance for this swap amount only.',\n }),\n evm: { type: 'aerodrome_erc20_approve', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }\n : {\n signatureText: JSON.stringify({\n kind: 'Aerodrome',\n name: 'swap',\n hops: hops.map((h) => ({ from: h.from, to: h.to, kind: h.kind })),\n }),\n evm: { type: 'aerodrome_swap', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n },\n })\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { encodeFunctionData, getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail, EvmTxStep } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { routerSwapGasLimitFromEstimate } from '../../../chains/evm/routerSwapGas.js'\nimport { erc20Abi } from './abi.js'\nimport { aerodromePublicClient } from './client.js'\nimport { AERODROME_CHAIN_ID } from './support.js'\n\nexport type AerodromeStep = EvmTxStep & { kind: string }\n\nexport async function pushErc20ApproveIfNeeded(args: {\n steps: AerodromeStep[]\n rpcUrl: string\n token: Address\n owner: Address\n spender: Address\n amountWei: bigint\n}): Promise<void> {\n const client = aerodromePublicClient(args.rpcUrl)\n const allowance = await client.readContract({\n address: args.token,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n if (allowance >= args.amountWei) return\n if (allowance > 0n) {\n args.steps.push({\n to: args.token,\n data: encodeFunctionData({ abi: erc20Abi, functionName: 'approve', args: [args.spender, 0n] }),\n value: 0n,\n kind: 'approve',\n fallbackGas: 80_000n,\n })\n }\n args.steps.push({\n to: args.token,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [args.spender, args.amountWei],\n }),\n value: 0n,\n kind: 'approve',\n fallbackGas: 80_000n,\n })\n}\n\nexport async function buildAerodromeMultisignBatch(args: {\n keyGen: KeyGenSubsetForPermit\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n steps: AerodromeStep[]\n purposeSuffix: string\n meta: (step: AerodromeStep) => Record<string, unknown>\n}): Promise<ReturnType<typeof buildEvmMultisignBatch>> {\n if (args.steps.length === 0) throw new Error('Aerodrome batch has no steps.')\n const executor = getAddress(args.executorAddress)\n const first = args.steps[0]!\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n const payableValueWei = args.steps.reduce((a, s) => a + s.value, 0n)\n const chainGasLimitRouter =\n args.chainDetail?.gasLimit != null &&\n Number.isFinite(Number(args.chainDetail.gasLimit)) &&\n Number(args.chainDetail.gasLimit) > 0\n ? Number(args.chainDetail.gasLimit)\n : undefined\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: AERODROME_CHAIN_ID,\n rpcUrl: args.rpcUrl,\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate: args.expiryDate,\n },\n steps: args.steps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n payableValueWei: payableValueWei > 0n ? payableValueWei : undefined,\n resolveGasLimit: async ({ step, estimatedGas }) => {\n const s = step as AerodromeStep\n if (s.routerSwap) return routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n return estimatedGas\n },\n buildBatchMeta: ({ step }) => args.meta(step as AerodromeStep),\n })\n}\n","import { formatUnits, parseUnits, zeroAddress, type Address } from 'viem'\nimport { aerodromePoolMetaAbi, clPoolAbi, erc20Abi, routerAbi, sugarHelperAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeDiscoverDirectPools } from './discover.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n assertAerodromeStockIssued,\n ensureAerodromeStockTickers,\n isAerodromeB20AssetToken,\n isAerodromeCoinbaseStockToken,\n lookupAerodromeKnownToken,\n resolveAerodromeErc20OrWeth,\n} from './stockTokens.js'\nimport {\n AERODROME_CHAIN_ID,\n AERODROME_USDC_BASE,\n AERODROME_WETH_BASE,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n} from './support.js'\n\n/** Large desired amount so Router quoteAddLiquidity solves for the other side from reserves. */\nconst OTHER_SIDE_DESIRED = 10n ** 36n\n\nexport type AerodromeAddLiquidityQuote = {\n tokenA: Address\n tokenB: Address\n stable: boolean\n amountA: string\n amountB: string\n amountAHuman: string\n amountBHuman: string\n liquidity: string\n isNativeA: boolean\n isNativeB: boolean\n pool: Address\n emptyPool: boolean\n kind?: 'stable' | 'volatile' | 'cl'\n tickSpacing?: number\n seedable?: boolean\n hint?: string\n}\n\nconst Q96 = 1n << 96n\n\nfunction pairTokenLabel(address: Address, isNative: boolean): string {\n if (isNative) return 'ETH'\n if (address.toLowerCase() === AERODROME_WETH_BASE.toLowerCase()) return 'WETH'\n if (address.toLowerCase() === AERODROME_USDC_BASE.toLowerCase()) return 'USDC'\n return lookupAerodromeKnownToken(address)?.symbol || `${address.slice(0, 6)}…${address.slice(-4)}`\n}\n\nfunction noDirectPoolHint(args: {\n tokenA: Address\n tokenB: Address\n isNativeA: boolean\n isNativeB: boolean\n}): string {\n const a = pairTokenLabel(args.tokenA, args.isNativeA)\n const b = pairTokenLabel(args.tokenB, args.isNativeB)\n const stockAddr = isAerodromeB20AssetToken(args.tokenB)\n ? args.tokenB\n : isAerodromeB20AssetToken(args.tokenA)\n ? args.tokenA\n : null\n if (stockAddr) {\n const sym = pairTokenLabel(stockAddr, false)\n return `No ${a}/${b} pool on Aerodrome. ${sym} liquidity is on Slipstream vs USDC (swaps hop through USDC). Pick USDC as the pair token to add ${sym}/USDC liquidity.`\n }\n return `No vAMM, sAMM, or Slipstream pool for ${a}/${b}. This pair cannot be deposited as a single LP.`\n}\n\nfunction formatLpHuman(wei: bigint, decimals: number): string {\n const maxFrac = Math.min(Math.max(decimals, 0), 8)\n const dust = decimals > maxFrac ? 10n ** BigInt(decimals - maxFrac) : 1n\n const rounded = dust === 1n ? wei : (wei + dust / 2n) / dust * dust\n const s = formatUnits(rounded, decimals)\n if (!s.includes('.')) return s\n const [i, f] = s.split('.')\n const trimmed = (f ?? '').replace(/0+$/, '')\n return trimmed ? `${i}.${trimmed}` : i ?? s\n}\n\nexport async function aerodromeQuoteAddLiquidity(args: {\n chainId: number\n rpcUrl: string\n tokenA: string\n tokenB: string\n stable: boolean\n amountAHuman?: string\n amountBHuman?: string\n tokenADecimals?: number\n tokenBDecimals?: number\n}): Promise<AerodromeAddLiquidityQuote> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n await ensureAerodromeStockTickers([args.tokenA, args.tokenB])\n const isNativeA = isAerodromeNativeToken(args.tokenA)\n const isNativeB = isAerodromeNativeToken(args.tokenB)\n const tokenA = resolveAerodromeErc20OrWeth(args.tokenA, addrs.weth)\n const tokenB = resolveAerodromeErc20OrWeth(args.tokenB, addrs.weth)\n await assertAerodromeStockIssued({\n rpcUrl: args.rpcUrl,\n token: tokenA,\n isNative: isNativeA,\n label: args.tokenA,\n })\n await assertAerodromeStockIssued({\n rpcUrl: args.rpcUrl,\n token: tokenB,\n isNative: isNativeB,\n label: args.tokenB,\n })\n const rawA = (args.amountAHuman ?? '').trim().replace(/,/g, '')\n const rawB = (args.amountBHuman ?? '').trim().replace(/,/g, '')\n if (!rawA && !rawB) throw new Error('Enter amount A or amount B.')\n const decA = isAerodromeCoinbaseStockToken(tokenA)\n ? AERODROME_COINBASE_STOCK_DECIMALS\n : args.tokenADecimals ??\n (isNativeA\n ? 18\n : Number(await client.readContract({ address: tokenA, abi: erc20Abi, functionName: 'decimals' })))\n const decB = isAerodromeCoinbaseStockToken(tokenB)\n ? AERODROME_COINBASE_STOCK_DECIMALS\n : args.tokenBDecimals ??\n (isNativeB\n ? 18\n : Number(await client.readContract({ address: tokenB, abi: erc20Abi, functionName: 'decimals' })))\n\n const pool = await client.readContract({\n address: addrs.router,\n abi: routerAbi,\n functionName: 'poolFor',\n args: [tokenA, tokenB, args.stable, addrs.poolFactory],\n })\n let emptyPool = pool === zeroAddress\n if (!emptyPool) {\n try {\n const reserves = await client.readContract({\n address: pool,\n abi: aerodromePoolMetaAbi,\n functionName: 'getReserves',\n })\n emptyPool = reserves[0] === 0n || reserves[1] === 0n\n } catch {\n emptyPool = true\n }\n }\n\n const amountAParsed = rawA ? parseUnits(rawA, decA) : 0n\n const amountBParsed = rawB ? parseUnits(rawB, decB) : 0n\n if (emptyPool) {\n const cl = await quoteClPairRatio({\n rpcUrl: args.rpcUrl,\n tokenA,\n tokenB,\n rawA,\n rawB,\n amountAParsed,\n amountBParsed,\n decA,\n decB,\n })\n if (cl) {\n return {\n tokenA,\n tokenB,\n stable: args.stable,\n amountA: cl.amountA.toString(),\n amountB: cl.amountB.toString(),\n amountAHuman: formatLpHuman(cl.amountA, decA),\n amountBHuman: formatLpHuman(cl.amountB, decB),\n liquidity: '0',\n isNativeA,\n isNativeB,\n pool: cl.pool,\n emptyPool: false,\n kind: 'cl',\n tickSpacing: cl.tickSpacing,\n }\n }\n return {\n tokenA,\n tokenB,\n stable: args.stable,\n amountA: amountAParsed.toString(),\n amountB: amountBParsed.toString(),\n amountAHuman: rawA,\n amountBHuman: rawB,\n liquidity: '0',\n isNativeA,\n isNativeB,\n pool,\n emptyPool: true,\n seedable: false,\n hint: noDirectPoolHint({ tokenA, tokenB, isNativeA, isNativeB }),\n }\n }\n\n const amountADesired = rawA ? amountAParsed : OTHER_SIDE_DESIRED\n const amountBDesired = rawB ? amountBParsed : OTHER_SIDE_DESIRED\n const [amountA, amountB, liquidity] = await client.readContract({\n address: addrs.router,\n abi: routerAbi,\n functionName: 'quoteAddLiquidity',\n args: [tokenA, tokenB, args.stable, addrs.poolFactory, amountADesired, amountBDesired],\n })\n return {\n tokenA,\n tokenB,\n stable: args.stable,\n amountA: amountA.toString(),\n amountB: amountB.toString(),\n amountAHuman: formatLpHuman(amountA, decA),\n amountBHuman: formatLpHuman(amountB, decB),\n liquidity: liquidity.toString(),\n isNativeA,\n isNativeB,\n pool,\n emptyPool: false,\n kind: args.stable ? 'stable' : 'volatile',\n seedable: true,\n }\n}\n\nasync function quoteClPairRatio(args: {\n rpcUrl: string\n tokenA: Address\n tokenB: Address\n rawA: string\n rawB: string\n amountAParsed: bigint\n amountBParsed: bigint\n decA: number\n decB: number\n}): Promise<{ pool: Address; tickSpacing: number; amountA: bigint; amountB: bigint } | null> {\n const directs = await aerodromeDiscoverDirectPools({\n rpcUrl: args.rpcUrl,\n tokenA: args.tokenA,\n tokenB: args.tokenB,\n })\n const cls = directs.filter((p) => p.kind === 'cl')\n if (cls.length === 0) return null\n const client = aerodromePublicClient(args.rpcUrl)\n const meta = await client.multicall({\n allowFailure: true,\n contracts: cls.flatMap((p) => [\n { address: p.lp, abi: clPoolAbi, functionName: 'liquidity' as const },\n { address: p.lp, abi: clPoolAbi, functionName: 'slot0' as const },\n ]),\n })\n let best: { pool: Address; tickSpacing: number; sqrtP: bigint; liquidity: bigint } | null = null\n for (let i = 0; i < cls.length; i++) {\n const liqRow = meta[i * 2]\n const slotRow = meta[i * 2 + 1]\n if (slotRow?.status !== 'success' || !slotRow.result) continue\n const slot = slotRow.result\n if (!Array.isArray(slot)) continue\n const sqrtP = BigInt(slot[0])\n if (sqrtP === 0n) continue\n const liquidity =\n liqRow?.status === 'success' &&\n (typeof liqRow.result === 'bigint' ||\n typeof liqRow.result === 'string' ||\n typeof liqRow.result === 'number')\n ? BigInt(liqRow.result)\n : 0n\n if (!best || liquidity > best.liquidity) {\n best = { pool: cls[i]!.lp, tickSpacing: cls[i]!.type, sqrtP, liquidity }\n }\n }\n if (!best) return null\n const token0 = args.tokenA.toLowerCase() < args.tokenB.toLowerCase() ? args.tokenA : args.tokenB\n const aIs0 = args.tokenA.toLowerCase() === token0.toLowerCase()\n const addrs = await loadAerodromeAddresses()\n let amount0 = aIs0 ? args.amountAParsed : args.amountBParsed\n let amount1 = aIs0 ? args.amountBParsed : args.amountAParsed\n if (args.rawA && !args.rawB) {\n if (aIs0) {\n amount0 = args.amountAParsed\n amount1 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount0, best.sqrtP, true)\n } else {\n amount1 = args.amountAParsed\n amount0 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount1, best.sqrtP, false)\n }\n } else if (args.rawB && !args.rawA) {\n if (aIs0) {\n amount1 = args.amountBParsed\n amount0 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount1, best.sqrtP, false)\n } else {\n amount0 = args.amountBParsed\n amount1 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount0, best.sqrtP, true)\n }\n }\n return {\n pool: best.pool,\n tickSpacing: best.tickSpacing,\n amountA: aIs0 ? amount0 : amount1,\n amountB: aIs0 ? amount1 : amount0,\n }\n}\n\nasync function estimateClOtherSide(\n client: ReturnType<typeof aerodromePublicClient>,\n helper: Address,\n amount: bigint,\n sqrtP: bigint,\n amountIs0: boolean,\n): Promise<bigint> {\n try {\n const out = await client.readContract({\n address: helper,\n abi: sugarHelperAbi,\n functionName: amountIs0 ? 'estimateAmount1' : 'estimateAmount0',\n args: [amount, sqrtP, sqrtP, sqrtP],\n })\n if (out > 0n) return out\n } catch {\n /* fall through */\n }\n if (sqrtP === 0n) return 0n\n return amountIs0 ? (amount * sqrtP) / Q96 * sqrtP / Q96 : (amount * Q96) / sqrtP * Q96 / sqrtP\n}\n","import { encodeFunctionData, getAddress, parseUnits, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { erc20Abi, routerAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeQuoteAddLiquidity } from './liquidityBasic.js'\nimport { ensureAerodromeStockTickers, resolveAerodromeErc20OrWeth } from './stockTokens.js'\nimport { AERODROME_CHAIN_ID, aerodromeOnChainDeadlineUnix, isAerodromeNativeToken } from './support.js'\n\nfunction minAfterSlippage(amount: bigint, slippagePercent: number): bigint {\n if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {\n throw new Error('Slippage must be between 0 and 100 (exclusive).')\n }\n const bps = BigInt(Math.round(slippagePercent * 100))\n return amount - (amount * bps) / 10_000n\n}\n\nexport async function buildEvmMultisignBodyAerodromeAddLiquidityBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenA: string\n tokenB: string\n stable: boolean\n amountAHuman?: string\n amountBHuman?: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const quote = await aerodromeQuoteAddLiquidity({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n tokenA: args.tokenA,\n tokenB: args.tokenB,\n stable: args.stable,\n amountAHuman: args.amountAHuman,\n amountBHuman: args.amountBHuman,\n })\n if (quote.emptyPool || quote.seedable === false) {\n throw new Error(\n quote.hint ||\n 'No Aerodrome pool to deposit into. Coinbase stocks such as AAPLc have no ETH pool — pair vs USDC.',\n )\n }\n if (quote.kind === 'cl') {\n throw new Error(\n `This pair’s live liquidity is Slipstream (tick spacing ${quote.tickSpacing ?? '?'}). Use ctm_aerodrome_quote_cl_deposit + ctm_aerodrome_build_cl_mint_multisign. Basic addLiquidity would seed a new empty vAMM.`,\n )\n }\n const amountA = BigInt(quote.amountA)\n const amountB = BigInt(quote.amountB)\n const minA = minAfterSlippage(amountA, args.slippagePercent)\n const minB = minAfterSlippage(amountB, args.slippagePercent)\n const deadline = aerodromeOnChainDeadlineUnix(args.expiryDate)\n const steps: AerodromeStep[] = []\n\n if (!quote.isNativeA) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.tokenA,\n owner: executor,\n spender: addrs.router,\n amountWei: amountA,\n })\n }\n if (!quote.isNativeB) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.tokenB,\n owner: executor,\n spender: addrs.router,\n amountWei: amountB,\n })\n }\n\n if (quote.isNativeA || quote.isNativeB) {\n const token = quote.isNativeA ? quote.tokenB : quote.tokenA\n const amountToken = quote.isNativeA ? amountB : amountA\n const amountEth = quote.isNativeA ? amountA : amountB\n const minToken = quote.isNativeA ? minB : minA\n const minEth = quote.isNativeA ? minA : minB\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'addLiquidityETH',\n args: [token, args.stable, amountToken, minToken, minEth, executor, deadline],\n }),\n value: amountEth,\n kind: 'add_liquidity',\n fallbackGas: 400_000n,\n })\n } else {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'addLiquidity',\n args: [\n quote.tokenA,\n quote.tokenB,\n args.stable,\n amountA,\n amountB,\n minA,\n minB,\n executor,\n deadline,\n ],\n }),\n value: 0n,\n kind: 'add_liquidity',\n fallbackGas: 400_000n,\n })\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: add basic-pool liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'addLiquidity', stable: args.stable }),\n evm: { type: 'aerodrome_add_liquidity', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeRemoveLiquidityBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenA: string\n tokenB: string\n stable: boolean\n lpToken: Address\n liquidityHuman: string\n lpDecimals?: number\n amountAMinHuman?: string\n amountBMinHuman?: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n const lp = getAddress(args.lpToken)\n const dec =\n args.lpDecimals ??\n Number(await client.readContract({ address: lp, abi: erc20Abi, functionName: 'decimals' }))\n const liquidity = parseUnits(args.liquidityHuman.trim(), dec)\n await ensureAerodromeStockTickers([args.tokenA, args.tokenB])\n const tokenA = resolveAerodromeErc20OrWeth(args.tokenA, addrs.weth)\n const tokenB = resolveAerodromeErc20OrWeth(args.tokenB, addrs.weth)\n const isNativeA = isAerodromeNativeToken(args.tokenA)\n const isNativeB = isAerodromeNativeToken(args.tokenB)\n const minA = parseUnits(args.amountAMinHuman?.trim() || '0', 18)\n const minB = parseUnits(args.amountBMinHuman?.trim() || '0', 18)\n const deadline = aerodromeOnChainDeadlineUnix(args.expiryDate)\n const steps: AerodromeStep[] = []\n\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: lp,\n owner: executor,\n spender: addrs.router,\n amountWei: liquidity,\n })\n\n if (isNativeA || isNativeB) {\n const token = isNativeA ? tokenB : tokenA\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'removeLiquidityETH',\n args: [token, args.stable, liquidity, isNativeA ? minB : minA, isNativeA ? minA : minB, executor, deadline],\n }),\n value: 0n,\n kind: 'remove_liquidity',\n fallbackGas: 350_000n,\n })\n } else {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'removeLiquidity',\n args: [tokenA, tokenB, args.stable, liquidity, minA, minB, executor, deadline],\n }),\n value: 0n,\n kind: 'remove_liquidity',\n fallbackGas: 350_000n,\n })\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: remove basic-pool liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'removeLiquidity', lp }),\n evm: { type: 'aerodrome_remove_liquidity', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n","import { parseUnits, type Address } from 'viem'\nimport { erc20Abi, sugarHelperAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { ensureAerodromeStockTickers, resolveAerodromeErc20OrWeth } from './stockTokens.js'\nimport { AERODROME_CHAIN_ID, isAerodromeChainSupported, isAerodromeNativeToken } from './support.js'\n\nexport type AerodromeClDepositQuote = {\n token0: Address\n token1: Address\n amount0: string\n amount1: string\n tickSpacing: number\n tickLower: number\n tickUpper: number\n sqrtPriceX96: string\n}\n\nexport async function aerodromeQuoteClDeposit(args: {\n chainId: number\n rpcUrl: string\n token0: string\n token1: string\n amount0Human?: string\n amount1Human?: string\n tickSpacing: number\n tickLower: number\n tickUpper: number\n sqrtPriceX96: string\n token0Decimals?: number\n token1Decimals?: number\n}): Promise<AerodromeClDepositQuote> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const addrs = await loadAerodromeAddresses()\n const client = aerodromePublicClient(args.rpcUrl)\n await ensureAerodromeStockTickers([args.token0, args.token1])\n const token0 = resolveAerodromeErc20OrWeth(args.token0, addrs.weth)\n const token1 = resolveAerodromeErc20OrWeth(args.token1, addrs.weth)\n const dec0 =\n args.token0Decimals ??\n (isAerodromeNativeToken(args.token0)\n ? 18\n : Number(await client.readContract({ address: token0, abi: erc20Abi, functionName: 'decimals' })))\n const dec1 =\n args.token1Decimals ??\n (isAerodromeNativeToken(args.token1)\n ? 18\n : Number(await client.readContract({ address: token1, abi: erc20Abi, functionName: 'decimals' })))\n\n const helper = addrs.sugarSlipstreamHelper\n const sqrt = BigInt(args.sqrtPriceX96 || '0')\n let amount0 = args.amount0Human?.trim() ? parseUnits(args.amount0Human.trim(), dec0) : 0n\n let amount1 = args.amount1Human?.trim() ? parseUnits(args.amount1Human.trim(), dec1) : 0n\n\n // SugarHelper needs sqrtRatio at the ticks (not the tick ints). When both\n // amounts are set we skip it; when one side is missing and sqrtPriceX96 is set,\n // callers should pass precomputed sqrtRatioAX96/BX96 via amount pairing.\n if (sqrt > 0n && amount0 > 0n && amount1 === 0n) {\n try {\n amount1 = await client.readContract({\n address: helper,\n abi: sugarHelperAbi,\n functionName: 'estimateAmount1',\n args: [amount0, sqrt, sqrt, sqrt],\n })\n } catch {\n /* keep amount1 = 0 */\n }\n } else if (sqrt > 0n && amount1 > 0n && amount0 === 0n) {\n try {\n amount0 = await client.readContract({\n address: helper,\n abi: sugarHelperAbi,\n functionName: 'estimateAmount0',\n args: [amount1, sqrt, sqrt, sqrt],\n })\n } catch {\n /* keep amount0 = 0 */\n }\n }\n\n return {\n token0,\n token1,\n amount0: amount0.toString(),\n amount1: amount1.toString(),\n tickSpacing: args.tickSpacing,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n sqrtPriceX96: args.sqrtPriceX96,\n }\n}\n","import { encodeFunctionData, getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { nfpmAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport { aerodromeQuoteClDeposit } from './liquidityCl.js'\nimport { ensureAerodromeStockTickers, resolveAerodromeErc20OrWeth } from './stockTokens.js'\nimport { AERODROME_CHAIN_ID, aerodromeOnChainDeadlineUnix, isAerodromeNativeToken } from './support.js'\n\nfunction minAfterSlippage(amount: bigint, slippagePercent: number): bigint {\n if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {\n throw new Error('Slippage must be between 0 and 100 (exclusive).')\n }\n const bps = BigInt(Math.round(slippagePercent * 100))\n return amount - (amount * bps) / 10_000n\n}\n\nexport async function buildEvmMultisignBodyAerodromeClMintBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n token0: string\n token1: string\n amount0Human?: string\n amount1Human?: string\n tickSpacing: number\n tickLower: number\n tickUpper: number\n sqrtPriceX96: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const quote = await aerodromeQuoteClDeposit({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n token0: args.token0,\n token1: args.token1,\n amount0Human: args.amount0Human,\n amount1Human: args.amount1Human,\n tickSpacing: args.tickSpacing,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n sqrtPriceX96: args.sqrtPriceX96,\n })\n const amount0 = BigInt(quote.amount0)\n const amount1 = BigInt(quote.amount1)\n const steps: AerodromeStep[] = []\n let value = 0n\n if (!isAerodromeNativeToken(args.token0)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.token0,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount0,\n })\n } else {\n value += amount0\n }\n if (!isAerodromeNativeToken(args.token1)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.token1,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount1,\n })\n } else {\n value += amount1\n }\n\n const poolExists = BigInt(args.sqrtPriceX96) === 0n\n steps.push({\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'mint',\n args: [\n {\n token0: quote.token0,\n token1: quote.token1,\n tickSpacing: args.tickSpacing,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n amount0Desired: amount0,\n amount1Desired: amount1,\n amount0Min: minAfterSlippage(amount0, args.slippagePercent),\n amount1Min: minAfterSlippage(amount1, args.slippagePercent),\n recipient: executor,\n deadline: aerodromeOnChainDeadlineUnix(args.expiryDate),\n sqrtPriceX96: poolExists ? 0n : BigInt(args.sqrtPriceX96),\n },\n ],\n }),\n value,\n kind: 'cl_mint',\n fallbackGas: 600_000n,\n })\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: mint concentrated position NFT.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.mint' }),\n evm: { type: 'aerodrome_cl_mint', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClIncreaseBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n token0: string\n token1: string\n amount0Wei: string\n amount1Wei: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const amount0 = BigInt(args.amount0Wei)\n const amount1 = BigInt(args.amount1Wei)\n await ensureAerodromeStockTickers([args.token0, args.token1])\n const token0 = resolveAerodromeErc20OrWeth(args.token0, addrs.weth)\n const token1 = resolveAerodromeErc20OrWeth(args.token1, addrs.weth)\n const steps: AerodromeStep[] = []\n let value = 0n\n if (!isAerodromeNativeToken(args.token0)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: token0,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount0,\n })\n } else value += amount0\n if (!isAerodromeNativeToken(args.token1)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: token1,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount1,\n })\n } else value += amount1\n\n steps.push({\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'increaseLiquidity',\n args: [\n {\n tokenId: BigInt(args.tokenId),\n amount0Desired: amount0,\n amount1Desired: amount1,\n amount0Min: minAfterSlippage(amount0, args.slippagePercent),\n amount1Min: minAfterSlippage(amount1, args.slippagePercent),\n deadline: aerodromeOnChainDeadlineUnix(args.expiryDate),\n },\n ],\n }),\n value,\n kind: 'cl_increase',\n fallbackGas: 400_000n,\n })\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: increase liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.increaseLiquidity', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_increase', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClDecreaseBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n liquidity: string\n amount0MinWei?: string\n amount1MinWei?: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const steps: AerodromeStep[] = [\n {\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'decreaseLiquidity',\n args: [\n {\n tokenId: BigInt(args.tokenId),\n liquidity: BigInt(args.liquidity),\n amount0Min: BigInt(args.amount0MinWei ?? '0'),\n amount1Min: BigInt(args.amount1MinWei ?? '0'),\n deadline: aerodromeOnChainDeadlineUnix(args.expiryDate),\n },\n ],\n }),\n value: 0n,\n kind: 'cl_decrease',\n fallbackGas: 300_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: decrease liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.decreaseLiquidity', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_decrease', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClCollectBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const max = (2n ** 128n) - 1n\n const steps: AerodromeStep[] = [\n {\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'collect',\n args: [{ tokenId: BigInt(args.tokenId), recipient: executor, amount0Max: max, amount1Max: max }],\n }),\n value: 0n,\n kind: 'cl_collect',\n fallbackGas: 200_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: collect fees.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.collect', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_collect', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClBurnBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses()\n const steps: AerodromeStep[] = [\n {\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'burn',\n args: [BigInt(args.tokenId)],\n }),\n value: 0n,\n kind: 'cl_burn',\n fallbackGas: 120_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: burn empty position NFT.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.burn', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_burn', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n","import { encodeFunctionData, getAddress, parseUnits, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { clGaugeAbi, gaugeAbi, nfpmAbi, poolClaimFeesAbi } from './abi.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport { AERODROME_CHAIN_ID } from './support.js'\n\nexport async function buildEvmMultisignBodyAerodromeGaugeStakeBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n gauge: Address\n lpToken?: Address\n amountHuman?: string\n lpDecimals?: number\n tokenId?: string\n cl?: boolean\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const gauge = getAddress(args.gauge)\n const steps: AerodromeStep[] = []\n\n if (args.cl) {\n if (!args.tokenId) throw new Error('tokenId is required to stake a Slipstream NFT.')\n if (!args.lpToken) throw new Error('nfpm / lpToken address is required to approve a Slipstream NFT.')\n const tokenId = BigInt(args.tokenId)\n const nfpm = getAddress(args.lpToken)\n steps.push({\n to: nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'approve',\n args: [gauge, tokenId],\n }),\n value: 0n,\n kind: 'nft_approve',\n fallbackGas: 80_000n,\n })\n steps.push({\n to: gauge,\n data: encodeFunctionData({ abi: clGaugeAbi, functionName: 'deposit', args: [tokenId] }),\n value: 0n,\n kind: 'gauge_stake',\n fallbackGas: 200_000n,\n })\n } else {\n if (!args.lpToken || !args.amountHuman) throw new Error('lpToken and amountHuman are required to stake basic LP.')\n const amount = parseUnits(args.amountHuman.trim(), args.lpDecimals ?? 18)\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(args.lpToken),\n owner: executor,\n spender: gauge,\n amountWei: amount,\n })\n steps.push({\n to: gauge,\n data: encodeFunctionData({ abi: gaugeAbi, functionName: 'deposit', args: [amount] }),\n value: 0n,\n kind: 'gauge_stake',\n fallbackGas: 180_000n,\n })\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: stake LP in gauge.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'gauge.deposit' }),\n evm: { type: 'aerodrome_gauge_stake', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeGaugeUnstakeBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n gauge: Address\n amountHuman?: string\n lpDecimals?: number\n tokenId?: string\n cl?: boolean\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const gauge = getAddress(args.gauge)\n const steps: AerodromeStep[] = []\n if (args.cl) {\n if (!args.tokenId) throw new Error('tokenId is required to unstake a Slipstream NFT.')\n steps.push({\n to: gauge,\n data: encodeFunctionData({\n abi: clGaugeAbi,\n functionName: 'withdraw',\n args: [BigInt(args.tokenId)],\n }),\n value: 0n,\n kind: 'gauge_unstake',\n fallbackGas: 200_000n,\n })\n } else {\n if (!args.amountHuman) throw new Error('amountHuman is required to unstake basic LP.')\n const amount = parseUnits(args.amountHuman.trim(), args.lpDecimals ?? 18)\n steps.push({\n to: gauge,\n data: encodeFunctionData({ abi: gaugeAbi, functionName: 'withdraw', args: [amount] }),\n value: 0n,\n kind: 'gauge_unstake',\n fallbackGas: 180_000n,\n })\n }\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: unstake LP from gauge.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'gauge.withdraw' }),\n evm: { type: 'aerodrome_gauge_unstake', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClaimFeesBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n pool: Address\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const pool = getAddress(args.pool)\n const steps: AerodromeStep[] = [\n {\n to: pool,\n data: encodeFunctionData({ abi: poolClaimFeesAbi, functionName: 'claimFees' }),\n value: 0n,\n kind: 'claim_fees',\n fallbackGas: 150_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: claim basic-pool fees.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'pool.claimFees', pool }),\n evm: { type: 'aerodrome_claim_fees', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClaimEmissionsBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n gauge: Address\n tokenId?: string\n cl?: boolean\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const gauge = getAddress(args.gauge)\n const steps: AerodromeStep[] = [\n args.cl\n ? {\n to: gauge,\n data: encodeFunctionData({\n abi: clGaugeAbi,\n functionName: 'getReward',\n args: [BigInt(args.tokenId ?? '0')],\n }),\n value: 0n,\n kind: 'claim_emissions',\n fallbackGas: 150_000n,\n }\n : {\n to: gauge,\n data: encodeFunctionData({\n abi: gaugeAbi,\n functionName: 'getReward',\n args: [executor],\n }),\n value: 0n,\n kind: 'claim_emissions',\n fallbackGas: 150_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: claim gauge emissions.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'gauge.getReward' }),\n evm: { type: 'aerodrome_claim_emissions', version: 1, chainId: String(AERODROME_CHAIN_ID) },\n }),\n })\n}\n","import { zeroAddress } from 'viem'\nimport {\n AERODROME_CHAIN_ID,\n AERODROME_USDC_BASE,\n AERODROME_WETH_BASE,\n isAerodromeChainSupported,\n} from './support.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePositionLabel } from './purpose.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n aerodromeResolveStockTokens,\n fetchOfficialBaseTokenizedStocks,\n isAerodromeB20AssetToken,\n type AerodromeStockTokenRow,\n} from './stockTokens.js'\nimport {\n aerodromeFetchListedTokens,\n aerodromeFetchPositionsWithPools,\n type AerodromeListedToken,\n} from './sugar.js'\n\nfunction mergeStocksIntoListed(\n tokens: AerodromeListedToken[],\n stocks: AerodromeStockTokenRow[],\n): AerodromeListedToken[] {\n const byAddr = new Map(tokens.map((t) => [t.address.toLowerCase(), { ...t }]))\n for (const stock of stocks) {\n const key = stock.address.toLowerCase()\n const prev = byAddr.get(key)\n byAddr.set(key, {\n address: stock.address,\n symbol: stock.symbol || prev?.symbol || '',\n decimals: stock.decimals || prev?.decimals || AERODROME_COINBASE_STOCK_DECIMALS,\n listed: prev?.listed ?? true,\n emerging: prev?.emerging ?? false,\n accountBalance: prev?.accountBalance ?? '0',\n name: stock.name,\n issued: stock.issued,\n iconUrl: stock.iconUrl,\n })\n }\n const stocksFirst = stocks.map((s) => byAddr.get(s.address.toLowerCase())!).filter(Boolean)\n const rest = [...byAddr.values()].filter((t) => !isAerodromeB20AssetToken(t.address))\n return [...stocksFirst, ...rest]\n}\n\nexport async function aerodromeFetchListedTokensSummary(args: {\n chainId: number\n rpcUrl: string\n account?: string\n /** Default true for the Multi-Sign dialog. MCP agents should leave this false. */\n includeSugarListed?: boolean\n}) {\n const includeSugar = args.includeSugarListed !== false\n const officialPromise = fetchOfficialBaseTokenizedStocks().catch(() => [])\n const tokens = includeSugar ? await aerodromeFetchListedTokens(args) : []\n const official = await officialPromise\n const stocks = await aerodromeResolveStockTokens({\n rpcUrl: args.rpcUrl,\n official,\n knownTokens: tokens,\n })\n const addrs = await loadAerodromeAddresses()\n const core: AerodromeListedToken[] = [\n { address: zeroAddress, symbol: 'ETH', decimals: 18, listed: true, emerging: false, accountBalance: '0' },\n {\n address: AERODROME_WETH_BASE,\n symbol: 'WETH',\n decimals: 18,\n listed: true,\n emerging: false,\n accountBalance: '0',\n },\n {\n address: AERODROME_USDC_BASE,\n symbol: 'USDC',\n decimals: 6,\n listed: true,\n emerging: false,\n accountBalance: '0',\n },\n { address: addrs.aero, symbol: 'AERO', decimals: 18, listed: true, emerging: false, accountBalance: '0' },\n ]\n return {\n chainId: AERODROME_CHAIN_ID,\n native: { address: zeroAddress, symbol: 'ETH', decimals: 18 },\n aero: { address: addrs.aero, symbol: 'AERO', decimals: 18 },\n stocks,\n includeSugarListed: includeSugar,\n tokens: mergeStocksIntoListed([...core, ...tokens], stocks),\n notes: includeSugar\n ? 'Full LpSugar.tokens plus Coinbase B20 stocks. issued is totalSupply > 0. For a price, call ctm_aerodrome_quote with the ticker — do not grep this list.'\n : 'Slim list: ETH, WETH, USDC, AERO, and Coinbase B20 stocks (AAPLc, …). issued is totalSupply > 0. Do not use this for a price — call ctm_aerodrome_quote({ tokenIn, tokenOut, amountHuman }) with tickers. Pass includeSugarListed:true only if you need the full Sugar dump.',\n }\n}\n\nexport async function aerodromeFetchPoolsSummary(args: {\n chainId: number\n rpcUrl: string\n limit?: number\n offset?: number\n query?: string\n}) {\n const { aerodromeFetchImportantPoolsSummary } = await import('./yields.js')\n const { pools, notes } = await aerodromeFetchImportantPoolsSummary({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n query: args.query,\n })\n const offset = Math.max(0, args.offset ?? 0)\n const limit = Math.min(Math.max(args.limit ?? pools.length, 1), pools.length)\n return {\n chainId: AERODROME_CHAIN_ID,\n pools: pools.slice(offset, offset + limit),\n notes,\n }\n}\n\nexport async function aerodromeFetchPositionsSummary(args: {\n chainId: number\n rpcUrl: string\n account?: string\n executorAddress?: string\n}) {\n const account = (args.account ?? args.executorAddress ?? '').trim()\n if (!account) throw new Error('account or executorAddress is required.')\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`)\n }\n const positions = await aerodromeFetchPositionsWithPools({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account,\n })\n return {\n chainId: AERODROME_CHAIN_ID,\n account,\n notes:\n 'Dust v2 rows hidden (liquidity < 1e12 and no stake/emissions). Claim fees from the pool (claimFees.pool = lp). Claim emissions from the gauge in AERO (claimEmissions); CL staked also needs tokenId + cl. Skip emissions when claimEmissions is null.',\n positions: positions.map((p) => {\n const gaugeOk = Boolean(p.gauge) && p.gauge.toLowerCase() !== zeroAddress.toLowerCase()\n return {\n ...p,\n label: aerodromePositionLabel(p),\n stakedInGauge: BigInt(p.staked || '0') > 0n,\n claimFees: { pool: p.lp },\n claimEmissions: gaugeOk\n ? {\n gauge: p.gauge,\n ...(p.kind === 'cl' && p.id !== '0' ? { tokenId: p.id, cl: true } : { cl: false }),\n }\n : null,\n }\n }),\n }\n}\n","export function buildAerodromeSwapPurposePrefill(args: {\n tokenInSymbol: string\n tokenOutSymbol: string\n amountIn: string\n quoteOutAmount?: string | null\n slippageInput: string\n}): string {\n const symIn = (args.tokenInSymbol || '').trim() || 'token in'\n const symOut = (args.tokenOutSymbol || '').trim() || 'token out'\n const slip = Number.parseFloat(String(args.slippageInput || '0.5').replace(/,/g, ''))\n const slipText = Number.isFinite(slip) ? String(Math.round(slip * 100) / 100) : '0.5'\n const amt = (args.amountIn || '').trim()\n const qo = (args.quoteOutAmount || '').trim()\n const mid = amt && qo ? `${amt} ${symIn} for an estimated ${qo} ${symOut}` : `${amt || '…'} ${symIn} → ${symOut}`\n return `Aerodrome: swap ${mid} (max slippage ${slipText}%) on Base (chainId 8453)`\n}\n\nexport function buildAerodromeLiquidityPurposePrefill(args: {\n action: string\n tokenASymbol: string\n tokenBSymbol: string\n}): string {\n return `Aerodrome: ${args.action} ${args.tokenASymbol}/${args.tokenBSymbol} on Base (chainId 8453)`\n}\n\nexport function buildAerodromeRewardsPurposePrefill(args?: {\n action?: 'claim fees' | 'claim emissions'\n poolLabel?: string\n}): string {\n const action = args?.action ?? 'claim fees/emissions'\n const label = (args?.poolLabel || '').trim()\n const mid = label ? `${action} on ${label}` : action\n return `Aerodrome: ${mid} on Base (chainId 8453)`\n}\n\nexport function aerodromePositionLabel(row: {\n symbol?: string\n kind?: 'stable' | 'volatile' | 'cl'\n lp: string\n id?: string\n}): string {\n const symbol = (row.symbol || '').trim()\n if (symbol) {\n if (row.kind === 'cl' && row.id && row.id !== '0') return `${symbol} #${row.id}`\n return symbol\n }\n const kind = row.kind === 'stable' ? 'sAMM' : row.kind === 'cl' ? 'CL' : 'vAMM'\n const short = row.lp.length > 12 ? `${row.lp.slice(0, 6)}…${row.lp.slice(-4)}` : row.lp\n return row.id && row.id !== '0' ? `${kind} ${short} #${row.id}` : `${kind} ${short}`\n}\n\nexport function aerodromePositionKey(row: { lp: string; id?: string }): string {\n return `${row.lp.toLowerCase()}:${row.id || '0'}`\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/expiry.ts","../../../../src/protocols/evm/aerodrome/support.ts","../../../../src/protocols/evm/aerodrome/addresses.ts","../../../../src/protocols/evm/shared/coinbaseB20.ts","../../../../src/protocols/evm/aerodrome/abi.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/aerodrome/client.ts","../../../../src/protocols/evm/aerodrome/stockTokens.ts","../../../../src/protocols/evm/aerodrome/discover.ts","../../../../src/protocols/evm/aerodrome/yields.ts","../../../../src/core/registry.ts","../../../../src/protocols/evm/aerodrome/index.ts","../../../../src/protocols/evm/aerodrome/sugar.ts","../../../../src/protocols/evm/aerodrome/priceImpact.ts","../../../../src/protocols/evm/aerodrome/sdkSession.ts","../../../../src/protocols/evm/aerodrome/quote.ts","../../../../src/protocols/evm/aerodrome/swapMultisign.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/protocols/evm/aerodrome/batch.ts","../../../../src/protocols/evm/aerodrome/liquidityBasic.ts","../../../../src/protocols/evm/aerodrome/liquidityBasicMultisign.ts","../../../../src/protocols/evm/aerodrome/liquidityCl.ts","../../../../src/protocols/evm/aerodrome/liquidityClMultisign.ts","../../../../src/protocols/evm/aerodrome/gaugeMultisign.ts","../../../../src/protocols/evm/aerodrome/reads.ts","../../../../src/protocols/evm/aerodrome/purpose.ts"],"names":["addr","getAddress","zeroAddress","poolKind","defineChain","createPublicClient","gasLimitFromEstimateAndChainConfig","encodeFunctionData","formatUnits","parseUnits","minAfterSlippage","aerodromeFetchImportantPoolsSummary"],"mappings":"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","file":"index.js","sourcesContent":["/** Default MPC sign-request agreement window for fast-moving DeFi protocols (30 minutes). */\nexport const DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS = 30 * 60\n\n/** Protocol ids that default to 30-minute expiry when `expiryDate` is omitted on multisign MCP tools. */\nexport const DEFI_PROTOCOLS_WITH_30MIN_EXPIRY = new Set([\n 'uniswap-v4',\n 'gmx',\n 'hyperliquid',\n 'arcus',\n 'curve-dao',\n 'aerodrome',\n 'pendle',\n 'derive',\n 'trueo',\n 'hyperliquidOutcome',\n])\n\nexport function defiMultisignExpiryUnixSeconds(\n protocolId: string | undefined,\n explicitExpiryDate?: number | null,\n): number | undefined {\n if (typeof explicitExpiryDate === 'number' && Number.isFinite(explicitExpiryDate) && explicitExpiryDate > 0) {\n return Math.floor(explicitExpiryDate)\n }\n if (protocolId && DEFI_PROTOCOLS_WITH_30MIN_EXPIRY.has(protocolId)) {\n return Math.floor(Date.now() / 1000) + DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS\n }\n return undefined\n}\n","import { getAddress, zeroAddress } from 'viem'\nimport { DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS } from '../../../core/expiry.js'\n\nexport const AERODROME_PROTOCOL_ID = 'aerodrome' as const\n\n/**\n * Aero (Aerodrome + Velodrome) launch chains. Protocol id stays `aerodrome`.\n * Base remains the default. Coinbase tokenized-stock LP stays on Base.\n * https://app.aero.xyz/docs/security/\n */\nexport const AERODROME_CHAIN_ID = 8453 as const\n\nexport const AERO_CHAIN_IDS = [8453, 1, 10, 42161, 4663, 5042, 57073] as const\n\nconst AERO_CHAIN_LABEL: Record<number, string> = {\n 1: 'Ethereum',\n 10: 'OP Mainnet',\n 42161: 'Arbitrum',\n 4663: 'Robinhood Chain',\n 5042: 'Arc',\n 8453: 'Base',\n 57073: 'Ink',\n}\n\n/** Native ETH placeholder used by the app and MCP (Uniswap-style). */\nexport const AERODROME_NATIVE_PLACEHOLDER = zeroAddress\n\n/** WETH on Base. */\nexport const AERODROME_WETH_BASE = '0x4200000000000000000000000000000000000006' as const\n\n/** USDC on Base — official connector used by Sugar / sdk.js routing. */\nexport const AERODROME_USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' as const\n\nexport function isAerodromeChainSupported(chainId: number | string): boolean {\n const n = typeof chainId === 'number' ? chainId : Number.parseInt(String(chainId), 10)\n return (AERO_CHAIN_IDS as readonly number[]).includes(n)\n}\n\nexport function aerodromeUnsupportedChainMessage(chainId: number | string): string {\n const listed = AERO_CHAIN_IDS.map((id) => `${AERO_CHAIN_LABEL[id]} ${id}`).join(', ')\n return `Aero is not deployed on chain ${chainId}. Launch chains: ${listed}.`\n}\n\n/** Router / NFPM deadline: same unix seconds as the multiSignRequest expiry (default 30 minutes). */\nexport function aerodromeOnChainDeadlineUnix(expiryDate?: number): bigint {\n if (typeof expiryDate === 'number' && Number.isFinite(expiryDate) && expiryDate > 0) {\n return BigInt(Math.floor(expiryDate))\n }\n return BigInt(Math.floor(Date.now() / 1000) + DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS)\n}\n\nexport function requireAerodromeRpcUrl(rpcUrl: string | undefined | null): string {\n const url = (rpcUrl ?? '').trim()\n if (!url) {\n throw new Error(\n 'rpcUrl is required. The MCP server injects it from get_chain_registry rpcGateway — pass an Aero chainId (Base 8453, Ethereum 1, OP 10, Arbitrum 42161, Robinhood 4663, Arc 5042, Ink 57073). Do not pass a public RPC URL.',\n )\n }\n return url\n}\n\nexport function isAerodromeNativeToken(address: string): boolean {\n const t = (address ?? '').trim().toLowerCase()\n if (!t) return false\n if (t === 'eth' || t === 'native' || t === 'native_eth') return true\n if (t === '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee') return true\n try {\n return getAddress(address as `0x${string}`) === zeroAddress\n } catch {\n return false\n }\n}\n","import { getAddress, type Address } from 'viem'\nimport { AERODROME_CHAIN_ID, AERODROME_WETH_BASE, aerodromeUnsupportedChainMessage, isAerodromeChainSupported } from './support.js'\n\n/**\n * Last-known Base addresses copied from official sources (2026-08):\n * - https://raw.githubusercontent.com/aerodrome-finance/docs/main/content/security.mdx\n * - https://raw.githubusercontent.com/velodrome-finance/sugar/main/deployments/base.env\n */\nexport const AERODROME_BASE_ADDRESSES_FALLBACK = {\n chainId: AERODROME_CHAIN_ID,\n aero: '0x940181a94A35A4569E4529A3CDfB74e38FD98631',\n router: '0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43',\n poolFactory: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da',\n factoryRegistry: '0x5C3F18F06CC09CA1910767A34a20F771039E37C0',\n voter: '0x16613524e02ad97eDfeF371bC883F2F5d6C480A5',\n votingEscrow: '0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4',\n rewardsDistributor: '0x227f65131A261548b057215bB1D5Ab2997964C7d',\n mixedQuoter: '0x0A5aA5D3a4d28014f967Bf0f29EAA3FF9807D5c6',\n /** MixedRouteQuoterV3 — v2 + all three CL factories (bitmask path encoding). */\n mixedQuoterV3: '0xCd2A7D98e82D6107eac1828ce8DeAA6acB65b555',\n nfpm: '0x827922686190790b37229fd06084350E74485b72',\n /** Oldest Slipstream CL factory (Gauges V1). Path bit 1<<20. */\n clFactory: '0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A',\n /** Slipstream CL factory 2 (gauge caps). Raw tickSpacing in MixedQuoterV3. */\n clFactory2: '0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a',\n /** Newest Slipstream CL factory (Gauges V3) — Coinbase B20 stock pools. Path bit 1<<19. */\n clFactory3: '0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef',\n universalRouter: '0x6Cb442acF35158D5eDa88fe602221b67B400Be3E',\n swapRouter: '0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5',\n swapRouter2: '0xcbBb8035cAc7D4B3Ca7aBb74cF7BdF900215Ce0D',\n swapRouter3: '0x698Cb2b6dd822994581fEa6eA4Fc755d1363A92F',\n pricesOracle: '0xee717411f6E44F9feE011835C8E6FAaC5dEfF166',\n slipstreamHelper: '0x0AD09A66af0154a84e86F761313d02d0abB6edd5',\n lpSugar: '0x69dD9db6d8f8E7d83887A704f447b1a584b599A1',\n sugarSlipstreamHelper: '0x9c62ab10577fB3C20A22E231b7703Ed6D456CC7a',\n swapper: '0x91616a7B9CF6D23f8C17845581051EBdC4BcB916',\n weth: AERODROME_WETH_BASE,\n} as const\n\nexport type AerodromeAddresses = {\n [K in keyof typeof AERODROME_BASE_ADDRESSES_FALLBACK]: K extends 'chainId' ? number : Address\n} & {\n stablePoolFactory: Address\n volatilePoolFactory: Address\n metarouter: Address\n metaquoter: Address\n receiptToken: Address\n}\n\n/** Parse `KEY=0xabc` / `KEY_8453=0xabc,0xdef` Sugar deployment env. Exported for tests. */\nexport function parseSugarBaseEnv(text: string): Partial<Record<string, string>> {\n const out: Record<string, string> = {}\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n const eq = trimmed.indexOf('=')\n if (eq <= 0) continue\n const key = trimmed.slice(0, eq).trim()\n const val = trimmed.slice(eq + 1).trim().replace(/^['\"]|['\"]$/g, '')\n if (key && val) out[key] = val\n }\n return out\n}\n\n/** Pull `Name` + `0x…` pairs from Aerodrome security.mdx tables. Exported for tests. */\nexport function parseSecurityMdxAddresses(text: string): Record<string, string> {\n const out: Record<string, string> = {}\n const re = /([A-Za-z][A-Za-z0-9 /_-]{1,80})\\s+((?:0x)[a-fA-F0-9]{40})/g\n let m: RegExpExecArray | null\n while ((m = re.exec(text))) {\n const name = (m[1] ?? '').trim().toLowerCase().replace(/\\s+/g, '')\n const addr = m[2]\n if (name && addr && !out[name]) out[name] = addr\n }\n return out\n}\n\n/** Aero contracts from https://app.aero.xyz/docs/security/ (launched 2026-10-22). */\nexport const AERO_TOKEN_BASE = '0x3f5bF3EdAc59d650D8fDf9657a71F2f904A3a4Ee'\nexport const AERO_LEGACY_TOKEN_BASE = '0x940181a94A35A4569E4529A3CDfB74e38FD98631'\nexport const AERO_METAROUTER = '0x0fEf9e88A7b76BCDBF451780C6774FE32965Ee98'\nexport const AERO_METAQUOTER = '0x1dDfeC5058180C207F55BB77D95AcDd0d8227868'\nexport const AERO_STABLE_POOL_FACTORY = '0x78589E876edcEbdce72ee3436ab3c9AD3a7cEF2D'\nexport const AERO_VOLATILE_POOL_FACTORY = '0x8E6a9FCd1d638CC760Ffba397605Fe3355dE76D2'\nexport const AERO_NFPM = '0x4857DB576eE0e45F10525eC59527BfD10beeC60b'\nexport const AERO_SWAP_ROUTER = '0x9Ee35Bf1bd69a03c6F0393582030fCe8Bb93D418'\nexport const AERO_LEAF_VOTER = '0x382409fad8503FbCdbB27A4211551fa03e884078'\n\nconst AERO_RECEIPT_BY_CHAIN: Record<number, string> = {\n 8453: '0x6CdDa0E730744DC6fF67654B35350Adad05EceE7',\n 10: '0xbdEaeA5205d16f34Cb40038052d91235D87B4C54',\n 42161: '0x436a085B2751cB87db270FFa66f8d698F87bEC82',\n 1: '0x9e148C5716b5aAdCFD3B71cEAE9EE7a9e22C29E2',\n 57073: '0x9e148C5716b5aAdCFD3B71cEAE9EE7a9e22C29E2',\n 4663: '0x9e148C5716b5aAdCFD3B71cEAE9EE7a9e22C29E2',\n 5042: '0x20077cC0d5E385A0Fe9C91bbC7DC744f51559307',\n}\n\nconst AERO_FACTORY_REGISTRY_BY_CHAIN: Record<number, string> = {\n 8453: '0x7b2A2c12dC5Ea2a31455952a05031C3E4BB28F3E',\n 10: '0xb6F9705A631CC1C0E8570FFde48882C95E2Df408',\n 42161: '0x9E635b2c689fC52201DF7eF1C9FA607c2F58f666',\n 1: '0xdd1705e23762F4D6e44D8C31BD8Ea80c54612239',\n 57073: '0xdd1705e23762F4D6e44D8C31BD8Ea80c54612239',\n 4663: '0xdd1705e23762F4D6e44D8C31BD8Ea80c54612239',\n 5042: '0xCe44907DC45D3BFa3f5f6035B0e6E8B22D780A42',\n}\n\nconst AERO_CL_FACTORY_BY_CHAIN: Record<number, string> = {\n 8453: '0x9CB220581b91b0C83223012FE69688b92aD07a76',\n 10: '0xfeaB42D90055db3a0616249f76B6002D72266778',\n 42161: '0x88a60ee77392577c355C0acb2A8d476D5a4EC03a',\n 1: '0xF4Fd2E6c5B60c5b365cd1B96DD6245E6D60414c2',\n 57073: '0x7660BF2aDefC687C22906112ca323d60A00358cF',\n 4663: '0xc63d7338c178e805c544B8f897066bD3BBcBE136',\n 5042: '0x7F83235643181E440433400a027618Cd50879751',\n}\n\nconst OP_STACK_WETH = '0x4200000000000000000000000000000000000006'\nconst AERO_WETH_BY_CHAIN: Record<number, string> = {\n 1: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n 10: OP_STACK_WETH,\n 42161: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n 8453: OP_STACK_WETH,\n 57073: OP_STACK_WETH,\n 4663: '0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73',\n}\n\nconst AERO_USDC_BY_CHAIN: Record<number, string> = {\n 1: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n 10: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n 42161: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n}\n\nfunction addr(raw: string): Address {\n return getAddress(raw as `0x${string}`)\n}\n\nexport function aeroUsdcAddress(chainId: number): Address | null {\n const raw = AERO_USDC_BY_CHAIN[chainId]\n return raw ? addr(raw) : null\n}\n\nexport function aeroWrappedNativeAddress(chainId: number): Address | null {\n const raw = AERO_WETH_BY_CHAIN[chainId]\n return raw ? addr(raw) : null\n}\n\n/** Token addresses that should show the Aero mark on an asset row for this chain. */\nexport function aeroRowIconAddresses(chainId: number): Address[] {\n const out: Address[] = []\n if (chainId === AERODROME_CHAIN_ID) {\n out.push(addr(AERO_LEGACY_TOKEN_BASE), addr(AERO_TOKEN_BASE))\n }\n const receipt = AERO_RECEIPT_BY_CHAIN[chainId]\n if (receipt) out.push(addr(receipt))\n const weth = aeroWrappedNativeAddress(chainId)\n if (weth) out.push(weth)\n const usdc = aeroUsdcAddress(chainId)\n if (usdc) out.push(usdc)\n return out\n}\n\nexport function aeroAddressesForChain(chainId: number): AerodromeAddresses {\n const fb = AERODROME_BASE_ADDRESSES_FALLBACK\n const cl = addr(AERO_CL_FACTORY_BY_CHAIN[chainId] ?? AERO_CL_FACTORY_BY_CHAIN[AERODROME_CHAIN_ID]!)\n const receipt = addr(AERO_RECEIPT_BY_CHAIN[chainId] ?? AERO_RECEIPT_BY_CHAIN[AERODROME_CHAIN_ID]!)\n const weth = aeroWrappedNativeAddress(chainId) ?? addr('0x0000000000000000000000000000000000000000')\n const token = chainId === AERODROME_CHAIN_ID ? addr(AERO_TOKEN_BASE) : receipt\n return {\n chainId,\n aero: token,\n router: chainId === AERODROME_CHAIN_ID ? addr(fb.router) : addr(AERO_METAROUTER),\n poolFactory: addr(AERO_VOLATILE_POOL_FACTORY),\n factoryRegistry: addr(AERO_FACTORY_REGISTRY_BY_CHAIN[chainId] ?? AERO_FACTORY_REGISTRY_BY_CHAIN[AERODROME_CHAIN_ID]!),\n voter: addr(AERO_LEAF_VOTER),\n votingEscrow: addr('0xBF7977E1521e9a3032bf7243Ee4712f311f13915'),\n rewardsDistributor: addr(fb.rewardsDistributor),\n mixedQuoter: addr(AERO_METAQUOTER),\n mixedQuoterV3: addr(AERO_METAQUOTER),\n nfpm: addr(AERO_NFPM),\n clFactory: cl,\n clFactory2: cl,\n clFactory3: cl,\n universalRouter: addr(fb.universalRouter),\n swapRouter: addr(AERO_SWAP_ROUTER),\n swapRouter2: addr(AERO_SWAP_ROUTER),\n swapRouter3: addr(AERO_SWAP_ROUTER),\n pricesOracle: addr(fb.pricesOracle),\n slipstreamHelper: addr(fb.slipstreamHelper),\n lpSugar: chainId === AERODROME_CHAIN_ID ? addr(fb.lpSugar) : addr('0x0000000000000000000000000000000000000000'),\n sugarSlipstreamHelper: addr(fb.sugarSlipstreamHelper),\n swapper: addr(fb.swapper),\n weth,\n stablePoolFactory: addr(AERO_STABLE_POOL_FACTORY),\n volatilePoolFactory: addr(AERO_VOLATILE_POOL_FACTORY),\n metarouter: addr(AERO_METAROUTER),\n metaquoter: addr(AERO_METAQUOTER),\n receiptToken: receipt,\n }\n}\n\nlet cache = new Map<number, AerodromeAddresses>()\n\nexport async function loadAerodromeAddresses(chainId: number = AERODROME_CHAIN_ID): Promise<AerodromeAddresses> {\n if (!isAerodromeChainSupported(chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(chainId))\n }\n const cached = cache.get(chainId)\n if (cached) return cached\n const addrs = aeroAddressesForChain(chainId)\n cache.set(chainId, addrs)\n return addrs\n}\n\n/** Test helper — reset GitHub cache. */\nexport function resetAerodromeAddressCache(): void {\n cache = new Map()\n}\n\nexport function aerodromeFallbackAddresses(): AerodromeAddresses {\n return aeroAddressesForChain(AERODROME_CHAIN_ID)\n}\n\nexport function aerodromeClFactoryList(addrs: AerodromeAddresses): Address[] {\n const out: Address[] = []\n const seen = new Set<string>()\n for (const factory of [addrs.clFactory, addrs.clFactory2, addrs.clFactory3]) {\n const key = factory.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n out.push(factory)\n }\n return out\n}\n\nexport function aerodromeClSwapRouterForFactory(addrs: AerodromeAddresses, factory: Address): Address {\n const f = getAddress(factory).toLowerCase()\n if (f === addrs.clFactory3.toLowerCase()) return addrs.swapRouter3\n if (f === addrs.clFactory2.toLowerCase()) return addrs.swapRouter2\n return addrs.swapRouter\n}\n","import { getAddress, isAddress, type Address } from 'viem'\n\n/**\n * Coinbase B20 tokenized stocks on Base. Addresses come from\n * https://api.coinbase.com/v1/tokenized-stocks — there is no baked-in token list.\n */\nexport const COINBASE_B20_STOCK_DECIMALS = 8 as const\n\n/** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */\nexport const COINBASE_B20_ASSET_PREFIX = '0xb200000000000000000000'\n\nexport type CoinbaseB20KnownToken = {\n address: Address\n symbol: string\n decimals: number\n name?: string\n iconUrl?: string\n}\n\nexport type CoinbaseB20StockToken = CoinbaseB20KnownToken\n\nexport function isCoinbaseB20AssetToken(address: string): boolean {\n try {\n return getAddress(address as `0x${string}`).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX)\n } catch {\n return false\n }\n}\n\n/** Tickers such as AAPLc and BRK.Bc. Rejects WETH, USDC, and AERO. */\nexport function looksLikeCoinbaseStockSymbol(symbol: string): boolean {\n return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? '').trim())\n}\n\nexport function coinbaseB20StockAddresses(): Address[] {\n return coinbaseB20CatalogTokens().map((t) => t.address)\n}\n\nexport const COINBASE_TOKENIZED_STOCKS_API_URL = 'https://api.coinbase.com/v1/tokenized-stocks'\n\nexport type CoinbaseB20CatalogToken = CoinbaseB20KnownToken & { name: string }\n\nconst CATALOG_TTL_MS = 15 * 60 * 1000\nconst CATALOG_MAX = 500\n\nlet catalogRows: CoinbaseB20CatalogToken[] | null = null\nlet catalogAt = 0\nlet catalogInflight: Promise<CoinbaseB20CatalogToken[]> | null = null\nconst catalogBySymbol = new Map<string, CoinbaseB20CatalogToken>()\nconst catalogByAddress = new Map<string, CoinbaseB20CatalogToken>()\n\nfunction indexCatalog(rows: CoinbaseB20CatalogToken[]) {\n catalogRows = rows\n catalogAt = Date.now()\n catalogBySymbol.clear()\n catalogByAddress.clear()\n for (const row of rows) {\n catalogBySymbol.set(row.symbol.toLowerCase(), row)\n catalogByAddress.set(row.address.toLowerCase(), row)\n }\n}\n\n/** Test hook. Production loads this from the Coinbase tokenized-stocks API. */\nexport function applyCoinbaseB20StockCatalog(rows: CoinbaseB20CatalogToken[]): void {\n indexCatalog(rows)\n}\n\nexport function clearCoinbaseB20StockCatalog(): void {\n catalogRows = null\n catalogAt = 0\n catalogBySymbol.clear()\n catalogByAddress.clear()\n}\n\nexport function coinbaseB20CatalogTokens(): readonly CoinbaseB20CatalogToken[] {\n return catalogRows ?? []\n}\n\nexport function parseCoinbaseTokenizedStocksPayload(payload: unknown): CoinbaseB20CatalogToken[] {\n const tokens = Array.isArray(payload)\n ? payload\n : payload && typeof payload === 'object' && Array.isArray((payload as { tokens?: unknown }).tokens)\n ? (payload as { tokens: unknown[] }).tokens\n : []\n const out: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n for (const row of tokens) {\n if (!row || typeof row !== 'object') continue\n const rec = row as Record<string, unknown>\n const symbol = typeof rec.symbol === 'string' ? rec.symbol.trim() : ''\n const addressRaw = typeof rec.contract_address === 'string' ? rec.contract_address.trim() : ''\n if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue\n const address = getAddress(addressRaw as `0x${string}`)\n const key = address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n const name = typeof rec.name === 'string' && rec.name.trim() ? rec.name.trim() : symbol\n const iconUrl = typeof rec.icon_url === 'string' && rec.icon_url.trim() ? rec.icon_url.trim() : undefined\n const decimals =\n typeof rec.decimals === 'number' && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18\n ? rec.decimals\n : COINBASE_B20_STOCK_DECIMALS\n out.push({ address, symbol, name, decimals, iconUrl })\n if (out.length >= CATALOG_MAX) break\n }\n return out\n}\n\nasync function fetchCoinbaseB20StockCatalog(): Promise<CoinbaseB20CatalogToken[]> {\n const merged: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n let pageToken = ''\n for (let page = 0; page < 4; page++) {\n const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL)\n url.searchParams.set('page_size', '500')\n if (pageToken) url.searchParams.set('page_token', pageToken)\n const res = await fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(8_000) })\n if (!res.ok) break\n const json = (await res.json()) as { next_page_token?: unknown }\n for (const row of parseCoinbaseTokenizedStocksPayload(json)) {\n const key = row.address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(row)\n if (merged.length >= CATALOG_MAX) break\n }\n pageToken = typeof json.next_page_token === 'string' ? json.next_page_token.trim() : ''\n if (!pageToken || merged.length >= CATALOG_MAX) break\n }\n if (merged.length > 0) indexCatalog(merged)\n return catalogRows ?? []\n}\n\n/** Live Coinbase list (PYPLc, AMDc, ORCLc, …). Falls back to the seed when the API is down. */\nexport async function ensureCoinbaseB20StockCatalog(): Promise<readonly CoinbaseB20CatalogToken[]> {\n if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows\n if (!catalogInflight) {\n catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {\n catalogInflight = null\n })\n }\n try {\n return await catalogInflight\n } catch {\n return catalogRows ?? []\n }\n}\n\n/** Resolve a Coinbase B20 ticker or 0x address from the fetched catalog. */\nexport function lookupCoinbaseB20StockToken(token: string): CoinbaseB20KnownToken | null {\n const key = (token ?? '').trim()\n if (!key) return null\n const fromCatalog = catalogBySymbol.get(key.toLowerCase())\n if (fromCatalog) return fromCatalog\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase()) ?? null\n } catch {\n return null\n }\n}\n\nexport function coinbaseB20CatalogName(addressOrSymbol: string): string | undefined {\n const key = (addressOrSymbol ?? '').trim()\n if (!key) return undefined\n const bySymbol = catalogBySymbol.get(key.toLowerCase())\n if (bySymbol?.name) return bySymbol.name\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase())?.name\n } catch {\n return undefined\n }\n}\n\nexport function coinbaseB20SymbolForAddress(address: string): string | null {\n return lookupCoinbaseB20StockToken(address)?.symbol ?? null\n}\n\n/**\n * Addresses pass through. A Coinbase stock ticker (`AAPLc`, `BRK.Bc`) becomes the\n * address from the live tokenized-stocks catalog — the same contract Aave and Aerodrome use.\n */\nexport async function canonicalizeEvmTokenInput(token: string): Promise<string> {\n const raw = (token ?? '').trim()\n if (!raw || isAddress(raw)) return raw\n if (!looksLikeCoinbaseStockSymbol(raw)) return raw\n await ensureCoinbaseB20StockCatalog().catch(() => [])\n const hit = lookupCoinbaseB20StockToken(raw)\n if (!hit) {\n throw new Error(\n `Unknown Coinbase stock ticker \"${raw}\". It is not in the live tokenized-stocks catalog.`,\n )\n }\n return hit.address\n}\n","export const lpSugarAbi = [\n {\n type: 'function',\n name: 'tokens',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n { name: '_account', type: 'address' },\n { name: '_addresses', type: 'address[]' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'token_address', type: 'address' },\n { name: 'symbol', type: 'string' },\n { name: 'decimals', type: 'uint8' },\n { name: 'account_balance', type: 'uint256' },\n { name: 'listed', type: 'bool' },\n { name: 'emerging', type: 'bool' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'forSwaps',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'lp', type: 'address' },\n { name: 'type', type: 'int24' },\n { name: 'token0', type: 'address' },\n { name: 'token1', type: 'address' },\n { name: 'factory', type: 'address' },\n { name: 'pool_fee', type: 'uint256' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'all',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n { name: '_filter', type: 'uint256' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'lp', type: 'address' },\n { name: 'symbol', type: 'string' },\n { name: 'decimals', type: 'uint8' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'type', type: 'int24' },\n { name: 'tick', type: 'int24' },\n { name: 'sqrt_ratio', type: 'uint160' },\n { name: 'token0', type: 'address' },\n { name: 'reserve0', type: 'uint256' },\n { name: 'staked0', type: 'uint256' },\n { name: 'token1', type: 'address' },\n { name: 'reserve1', type: 'uint256' },\n { name: 'staked1', type: 'uint256' },\n { name: 'gauge', type: 'address' },\n { name: 'gauge_liquidity', type: 'uint256' },\n { name: 'gauge_alive', type: 'bool' },\n { name: 'fee', type: 'address' },\n { name: 'bribe', type: 'address' },\n { name: 'factory', type: 'address' },\n { name: 'emissions', type: 'uint256' },\n { name: 'emissions_token', type: 'address' },\n { name: 'emissions_cap', type: 'uint256' },\n { name: 'pool_fee', type: 'uint256' },\n { name: 'unstaked_fee', type: 'uint256' },\n { name: 'token0_fees', type: 'uint256' },\n { name: 'token1_fees', type: 'uint256' },\n { name: 'locked', type: 'uint256' },\n { name: 'emerging', type: 'uint256' },\n { name: 'created_at', type: 'uint32' },\n { name: 'nfpm', type: 'address' },\n { name: 'alm', type: 'address' },\n { name: 'root', type: 'address' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'byAddress',\n stateMutability: 'view',\n inputs: [{ name: '_address', type: 'address' }],\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n { name: 'lp', type: 'address' },\n { name: 'symbol', type: 'string' },\n { name: 'decimals', type: 'uint8' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'type', type: 'int24' },\n { name: 'tick', type: 'int24' },\n { name: 'sqrt_ratio', type: 'uint160' },\n { name: 'token0', type: 'address' },\n { name: 'reserve0', type: 'uint256' },\n { name: 'staked0', type: 'uint256' },\n { name: 'token1', type: 'address' },\n { name: 'reserve1', type: 'uint256' },\n { name: 'staked1', type: 'uint256' },\n { name: 'gauge', type: 'address' },\n { name: 'gauge_liquidity', type: 'uint256' },\n { name: 'gauge_alive', type: 'bool' },\n { name: 'fee', type: 'address' },\n { name: 'bribe', type: 'address' },\n { name: 'factory', type: 'address' },\n { name: 'emissions', type: 'uint256' },\n { name: 'emissions_token', type: 'address' },\n { name: 'emissions_cap', type: 'uint256' },\n { name: 'pool_fee', type: 'uint256' },\n { name: 'unstaked_fee', type: 'uint256' },\n { name: 'token0_fees', type: 'uint256' },\n { name: 'token1_fees', type: 'uint256' },\n { name: 'locked', type: 'uint256' },\n { name: 'emerging', type: 'uint256' },\n { name: 'created_at', type: 'uint32' },\n { name: 'nfpm', type: 'address' },\n { name: 'alm', type: 'address' },\n { name: 'root', type: 'address' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'count',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n type: 'function',\n name: 'positions',\n stateMutability: 'view',\n inputs: [\n { name: '_limit', type: 'uint256' },\n { name: '_offset', type: 'uint256' },\n { name: '_account', type: 'address' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n components: [\n { name: 'id', type: 'uint256' },\n { name: 'lp', type: 'address' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'staked', type: 'uint256' },\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n { name: 'staked0', type: 'uint256' },\n { name: 'staked1', type: 'uint256' },\n { name: 'unstaked_earned0', type: 'uint256' },\n { name: 'unstaked_earned1', type: 'uint256' },\n { name: 'emissions_earned', type: 'uint256' },\n { name: 'tick_lower', type: 'int24' },\n { name: 'tick_upper', type: 'int24' },\n { name: 'sqrt_ratio_lower', type: 'uint160' },\n { name: 'sqrt_ratio_upper', type: 'uint160' },\n { name: 'locker', type: 'address' },\n { name: 'unlocks_at', type: 'uint32' },\n { name: 'alm', type: 'address' },\n ],\n },\n ],\n },\n] as const\n\nexport const routerAbi = [\n {\n type: 'function',\n name: 'weth',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n type: 'function',\n name: 'defaultFactory',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n type: 'function',\n name: 'poolFor',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: '_factory', type: 'address' },\n ],\n outputs: [{ name: 'pool', type: 'address' }],\n },\n {\n type: 'function',\n name: 'getAmountsOut',\n stateMutability: 'view',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n {\n type: 'function',\n name: 'quoteAddLiquidity',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: '_factory', type: 'address' },\n { name: 'amountADesired', type: 'uint256' },\n { name: 'amountBDesired', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountA', type: 'uint256' },\n { name: 'amountB', type: 'uint256' },\n { name: 'liquidity', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'addLiquidity',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'amountADesired', type: 'uint256' },\n { name: 'amountBDesired', type: 'uint256' },\n { name: 'amountAMin', type: 'uint256' },\n { name: 'amountBMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountA', type: 'uint256' },\n { name: 'amountB', type: 'uint256' },\n { name: 'liquidity', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'addLiquidityETH',\n stateMutability: 'payable',\n inputs: [\n { name: 'token', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'amountTokenDesired', type: 'uint256' },\n { name: 'amountTokenMin', type: 'uint256' },\n { name: 'amountETHMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountToken', type: 'uint256' },\n { name: 'amountETH', type: 'uint256' },\n { name: 'liquidity', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'removeLiquidity',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'amountAMin', type: 'uint256' },\n { name: 'amountBMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountA', type: 'uint256' },\n { name: 'amountB', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'removeLiquidityETH',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'token', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'liquidity', type: 'uint256' },\n { name: 'amountTokenMin', type: 'uint256' },\n { name: 'amountETHMin', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountToken', type: 'uint256' },\n { name: 'amountETH', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'swapExactTokensForTokens',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMin', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n {\n type: 'function',\n name: 'swapExactETHForTokens',\n stateMutability: 'payable',\n inputs: [\n { name: 'amountOutMin', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n {\n type: 'function',\n name: 'swapExactTokensForETH',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMin', type: 'uint256' },\n {\n name: 'routes',\n type: 'tuple[]',\n components: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'stable', type: 'bool' },\n { name: 'factory', type: 'address' },\n ],\n },\n { name: 'to', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [{ name: 'amounts', type: 'uint256[]' }],\n },\n] as const\n\nexport const mixedQuoterAbi = [\n {\n type: 'function',\n name: 'quoteExactInput',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'path', type: 'bytes' },\n { name: 'amountIn', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountOut', type: 'uint256' },\n { name: 'v3RouteStartTickSpacing', type: 'uint160[]' },\n { name: 'v3RouteStartSqrtPriceX96AfterList', type: 'uint160[]' },\n { name: 'v3RouteInitializedTicksCrossedList', type: 'uint32[]' },\n { name: 'v3SwapGasEstimate', type: 'uint256' },\n ],\n },\n] as const\n\n/** MixedRouteQuoterV3 — four return values; CL factory selected via path bitmasks. */\nexport const mixedQuoterV3Abi = [\n {\n type: 'function',\n name: 'quoteExactInput',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'path', type: 'bytes' },\n { name: 'amountIn', type: 'uint256' },\n ],\n outputs: [\n { name: 'amountOut', type: 'uint256' },\n { name: 'v3SqrtPriceX96AfterList', type: 'uint160[]' },\n { name: 'v3InitializedTicksCrossedList', type: 'uint32[]' },\n { name: 'v3SwapGasEstimate', type: 'uint256' },\n ],\n },\n] as const\n\nexport const aeroV2FactoryAbi = [\n {\n type: 'function',\n name: 'getPool',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n ],\n outputs: [{ name: '', type: 'address' }],\n },\n] as const\n\nexport const aeroPoolAmountOutAbi = [\n {\n type: 'function',\n name: 'getAmountOut',\n stateMutability: 'view',\n inputs: [\n { name: 'amountIn', type: 'uint256' },\n { name: 'tokenIn', type: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n] as const\n\nexport const aeroMetarouterAbi = [\n {\n type: 'function',\n name: 'execute',\n stateMutability: 'payable',\n inputs: [\n { name: 'commands', type: 'bytes' },\n { name: 'inputs', type: 'bytes[]' },\n ],\n outputs: [],\n },\n] as const\n\nexport const v2PoolFactoryAbi = [\n {\n type: 'function',\n name: 'getPool',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'stable', type: 'bool' },\n ],\n outputs: [{ name: '', type: 'address' }],\n },\n] as const\n\nexport const clPoolFactoryAbi = [\n {\n type: 'function',\n name: 'getPool',\n stateMutability: 'view',\n inputs: [\n { name: 'tokenA', type: 'address' },\n { name: 'tokenB', type: 'address' },\n { name: 'tickSpacing', type: 'int24' },\n ],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n type: 'function',\n name: 'tickSpacings',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'int24[]' }],\n },\n] as const\n\nexport const clPoolAbi = [\n {\n type: 'function',\n name: 'slot0',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n { name: 'sqrtPriceX96', type: 'uint160' },\n { name: 'tick', type: 'int24' },\n { name: 'observationIndex', type: 'uint16' },\n { name: 'observationCardinality', type: 'uint16' },\n { name: 'observationCardinalityNext', type: 'uint16' },\n { name: 'unlocked', type: 'bool' },\n ],\n },\n {\n type: 'function',\n name: 'liquidity',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint128' }],\n },\n] as const\n\nexport const sugarHelperAbi = [\n {\n type: 'function',\n name: 'estimateAmount0',\n stateMutability: 'view',\n inputs: [\n { name: 'amount1', type: 'uint256' },\n { name: 'sqrtRatioX96', type: 'uint160' },\n { name: 'sqrtRatioAX96', type: 'uint160' },\n { name: 'sqrtRatioBX96', type: 'uint160' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n type: 'function',\n name: 'estimateAmount1',\n stateMutability: 'view',\n inputs: [\n { name: 'amount0', type: 'uint256' },\n { name: 'sqrtRatioX96', type: 'uint160' },\n { name: 'sqrtRatioAX96', type: 'uint160' },\n { name: 'sqrtRatioBX96', type: 'uint160' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n] as const\n\nexport const nfpmAbi = [\n {\n type: 'function',\n name: 'mint',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'token0', type: 'address' },\n { name: 'token1', type: 'address' },\n { name: 'tickSpacing', type: 'int24' },\n { name: 'tickLower', type: 'int24' },\n { name: 'tickUpper', type: 'int24' },\n { name: 'amount0Desired', type: 'uint256' },\n { name: 'amount1Desired', type: 'uint256' },\n { name: 'amount0Min', type: 'uint256' },\n { name: 'amount1Min', type: 'uint256' },\n { name: 'recipient', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n { name: 'sqrtPriceX96', type: 'uint160' },\n ],\n },\n ],\n outputs: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'liquidity', type: 'uint128' },\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'increaseLiquidity',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'amount0Desired', type: 'uint256' },\n { name: 'amount1Desired', type: 'uint256' },\n { name: 'amount0Min', type: 'uint256' },\n { name: 'amount1Min', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n ],\n outputs: [\n { name: 'liquidity', type: 'uint128' },\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'decreaseLiquidity',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'liquidity', type: 'uint128' },\n { name: 'amount0Min', type: 'uint256' },\n { name: 'amount1Min', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n ],\n outputs: [\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'collect',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenId', type: 'uint256' },\n { name: 'recipient', type: 'address' },\n { name: 'amount0Max', type: 'uint128' },\n { name: 'amount1Max', type: 'uint128' },\n ],\n },\n ],\n outputs: [\n { name: 'amount0', type: 'uint256' },\n { name: 'amount1', type: 'uint256' },\n ],\n },\n {\n type: 'function',\n name: 'burn',\n stateMutability: 'payable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'to', type: 'address' },\n { name: 'tokenId', type: 'uint256' },\n ],\n outputs: [],\n },\n] as const\n\nexport const clSwapRouterAbi = [\n {\n type: 'function',\n name: 'exactInputSingle',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'params',\n type: 'tuple',\n components: [\n { name: 'tokenIn', type: 'address' },\n { name: 'tokenOut', type: 'address' },\n { name: 'tickSpacing', type: 'int24' },\n { name: 'recipient', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMinimum', type: 'uint256' },\n { name: 'sqrtPriceLimitX96', type: 'uint160' },\n ],\n },\n ],\n outputs: [{ name: 'amountOut', type: 'uint256' }],\n },\n] as const\n\nexport const poolClaimFeesAbi = [\n {\n type: 'function',\n name: 'claimFees',\n stateMutability: 'nonpayable',\n inputs: [],\n outputs: [\n { name: 'claimed0', type: 'uint256' },\n { name: 'claimed1', type: 'uint256' },\n ],\n },\n] as const\n\nexport const gaugeAbi = [\n {\n type: 'function',\n name: 'deposit',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_amount', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'withdraw',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_amount', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'getReward',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_account', type: 'address' }],\n outputs: [],\n },\n] as const\n\nexport const clGaugeAbi = [\n {\n type: 'function',\n name: 'deposit',\n stateMutability: 'nonpayable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'withdraw',\n stateMutability: 'nonpayable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n {\n type: 'function',\n name: 'getReward',\n stateMutability: 'nonpayable',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [],\n },\n] as const\n\nexport const aerodromePoolMetaAbi = [\n { type: 'function', name: 'symbol', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'token0', stateMutability: 'view', inputs: [], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'token1', stateMutability: 'view', inputs: [], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'stable', stateMutability: 'view', inputs: [], outputs: [{ type: 'bool' }] },\n {\n type: 'function',\n name: 'getReserves',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n { name: '_reserve0', type: 'uint256' },\n { name: '_reserve1', type: 'uint256' },\n { name: '_blockTimestampLast', type: 'uint256' },\n ],\n },\n] as const\n\nexport const aerodromeVoterAbi = [\n {\n type: 'function',\n name: 'gauges',\n stateMutability: 'view',\n inputs: [{ name: 'pool', type: 'address' }],\n outputs: [{ type: 'address' }],\n },\n] as const\n\nexport const erc20Abi = [\n { type: 'function', name: 'name', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'decimals', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint8' }] },\n { type: 'function', name: 'totalSupply', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ type: 'uint256' }],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ type: 'bool' }],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ type: 'string' }],\n },\n] as const\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","import { createPublicClient, defineChain, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { AERODROME_CHAIN_ID, requireAerodromeRpcUrl } from './support.js'\n\nexport function aerodromePublicClient(rpcUrl: string | undefined | null): PublicClient {\n const url = requireAerodromeRpcUrl(rpcUrl)\n const chain = defineChain({\n id: AERODROME_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [url] } },\n contracts: {\n multicall3: {\n address: '0xcA11bde05977b3631167028862bE2a173976CA11',\n blockCreated: 5022,\n },\n },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(url) })\n}\n","import { getAddress, type Address } from 'viem'\nimport {\n COINBASE_B20_STOCK_DECIMALS,\n coinbaseB20CatalogName,\n coinbaseB20StockAddresses,\n ensureCoinbaseB20StockCatalog,\n isCoinbaseB20AssetToken,\n looksLikeCoinbaseStockSymbol,\n lookupCoinbaseB20StockToken,\n} from '../shared/coinbaseB20.js'\nimport { AERODROME_BASE_ADDRESSES_FALLBACK } from './addresses.js'\nimport { erc20Abi } from './abi.js'\nimport { aerodromePublicClient } from './client.js'\nimport { AERODROME_USDC_BASE, AERODROME_WETH_BASE, isAerodromeNativeToken } from './support.js'\n\nexport {\n COINBASE_B20_STOCK_DECIMALS as AERODROME_COINBASE_STOCK_DECIMALS,\n COINBASE_B20_ASSET_PREFIX as AERODROME_B20_ASSET_PREFIX,\n isCoinbaseB20AssetToken as isAerodromeB20AssetToken,\n looksLikeCoinbaseStockSymbol,\n coinbaseB20CatalogTokens as aerodromeCoinbaseStockCatalog,\n} from '../shared/coinbaseB20.js'\n\nexport function isAerodromeCoinbaseStockToken(address: string): boolean {\n return isCoinbaseB20AssetToken(address)\n}\n\nconst BASE_STOCKS_DOCS_URLS = [\n 'https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base.md',\n 'https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base',\n] as const\n\nexport type AerodromeStockTokenRow = {\n address: Address\n symbol: string\n name: string\n decimals: number\n issued: boolean\n iconUrl?: string\n}\n\nexport type AerodromeKnownToken = {\n address: Address\n symbol: string\n decimals: number\n}\n\n/** Tickers the MCP quote/swap tools accept without a 0x address. */\nexport function lookupAerodromeKnownToken(token: string): AerodromeKnownToken | null {\n const key = (token ?? '').trim()\n if (!key) return null\n const lower = key.toLowerCase()\n if (lower === 'weth') {\n return { address: getAddress(AERODROME_WETH_BASE), symbol: 'WETH', decimals: 18 }\n }\n if (lower === 'usdc') {\n return { address: getAddress(AERODROME_USDC_BASE), symbol: 'USDC', decimals: 6 }\n }\n if (lower === 'aero') {\n return { address: getAddress(AERODROME_BASE_ADDRESSES_FALLBACK.aero), symbol: 'AERO', decimals: 18 }\n }\n const stock = lookupCoinbaseB20StockToken(key)\n if (stock) return stock\n try {\n const address = getAddress(key as `0x${string}`)\n const want = address.toLowerCase()\n if (want === getAddress(AERODROME_WETH_BASE).toLowerCase()) {\n return { address, symbol: 'WETH', decimals: 18 }\n }\n if (want === getAddress(AERODROME_USDC_BASE).toLowerCase()) {\n return { address, symbol: 'USDC', decimals: 6 }\n }\n if (want === getAddress(AERODROME_BASE_ADDRESSES_FALLBACK.aero).toLowerCase()) {\n return { address, symbol: 'AERO', decimals: 18 }\n }\n } catch {\n /* not an address */\n }\n return null\n}\n\n/** Load the Coinbase catalog when a ticker is not already in the seed (PYPLc, AMDc, …). */\nexport async function ensureAerodromeStockTickers(tokens: string[]): Promise<void> {\n const needsCatalog = tokens.some((token) => {\n const raw = (token ?? '').trim()\n if (!raw || isAerodromeNativeToken(raw)) return false\n if (lookupAerodromeKnownToken(raw)) return false\n if (/^0x[a-fA-F0-9]{40}$/.test(raw)) return false\n return looksLikeCoinbaseStockSymbol(raw)\n })\n if (needsCatalog) await ensureCoinbaseB20StockCatalog()\n}\n\nexport function resolveAerodromeErc20OrWeth(token: string, weth: Address): Address {\n const raw = (token ?? '').trim()\n if (!raw) throw new Error('Token is required.')\n if (isAerodromeNativeToken(raw)) return getAddress(weth)\n const known = lookupAerodromeKnownToken(raw)\n if (known) return known.address\n try {\n return getAddress(raw as `0x${string}`)\n } catch {\n throw new Error(\n `Unknown Aerodrome token \"${raw}\". Pass a 0x address or a ticker (ETH, WETH, USDC, AERO, AAPLc, …). Coinbase B20 tickers come from the live tokenized-stocks catalog.`,\n )\n }\n}\n\nexport function aerodromeUnissuedStockMessage(symbolOrAddress: string): string {\n const label = (symbolOrAddress ?? '').trim() || 'This token'\n return `${label} is listed but not issued yet (zero supply). There is no Aerodrome liquidity to quote.`\n}\n\n/** Same gate the Multi-Sign dialog uses: skip quote RPC when totalSupply is 0. */\nexport async function assertAerodromeStockIssued(args: {\n rpcUrl: string\n token: Address\n isNative?: boolean\n label: string\n}): Promise<void> {\n if (args.isNative || !isAerodromeCoinbaseStockToken(args.token)) return\n try {\n const client = aerodromePublicClient(args.rpcUrl)\n const supply = await client.readContract({\n address: args.token,\n abi: erc20Abi,\n functionName: 'totalSupply',\n })\n if (supply === 0n) throw new Error(aerodromeUnissuedStockMessage(args.label))\n } catch (e) {\n if (e instanceof Error && e.message.includes('not issued yet')) throw e\n }\n}\n\nexport function aerodromeCoinbaseStockAddresses(): Address[] {\n return coinbaseB20StockAddresses()\n}\n\nconst MAX_DOCS_CHARS = 400_000\nconst MAX_OFFICIAL_STOCKS = 40\n\n/** Parse the official Base docs contract table. Corrupt / unrelated pages return []. */\nexport function parseBaseTokenizedStockDocs(text: string): Array<{ symbol: string; address: Address }> {\n try {\n if (typeof text !== 'string' || text.length < 20) return []\n const clipped = text.length > MAX_DOCS_CHARS ? text.slice(0, MAX_DOCS_CHARS) : text\n const out: Array<{ symbol: string; address: Address }> = []\n const seen = new Set<string>()\n const patterns = [\n /\\|\\s*`?([A-Za-z][A-Za-z0-9]{0,10}c)`?\\s*\\|\\s*`?(0x[bB]200[a-fA-F0-9]{36})`?/g,\n /([A-Za-z][A-Za-z0-9]{0,10}c)[^0]{0,40}(0x[bB]200[a-fA-F0-9]{36})/g,\n ]\n for (const re of patterns) {\n let m: RegExpExecArray | null\n while ((m = re.exec(clipped))) {\n const symbol = (m[1] ?? '').trim()\n if (!looksLikeCoinbaseStockSymbol(symbol)) continue\n let address: Address\n try {\n address = getAddress((m[2] ?? '') as `0x${string}`)\n } catch {\n continue\n }\n if (!isCoinbaseB20AssetToken(address)) continue\n const key = address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n out.push({ symbol, address })\n if (out.length > MAX_OFFICIAL_STOCKS) return []\n }\n }\n return out\n } catch {\n return []\n }\n}\n\n/** Optional enrichment only. Never throws — empty list if the API and docs are unusable. */\nexport async function fetchOfficialBaseTokenizedStocks(): Promise<Array<{ symbol: string; address: Address }>> {\n try {\n const live = await ensureCoinbaseB20StockCatalog()\n if (live.length > 0) return live.map((t) => ({ symbol: t.symbol, address: t.address }))\n } catch {\n /* docs fallback */\n }\n for (const url of BASE_STOCKS_DOCS_URLS) {\n try {\n const res = await fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(8_000) })\n if (!res.ok) continue\n const parsed = parseBaseTokenizedStockDocs(await res.text())\n if (parsed.length > 0) return parsed\n } catch {\n /* try next */\n }\n }\n return []\n}\n\nfunction catalogName(address: Address): string | undefined {\n return coinbaseB20CatalogName(address)\n}\n\nfunction catalogSymbol(address: Address): string | undefined {\n return lookupCoinbaseB20StockToken(address)?.symbol\n}\n\n/**\n * Live Coinbase catalog + Sugar B20 ASSET tokens that look like Coinbase stocks (`*c`).\n * `issued` is `totalSupply() > 0`.\n */\n\nexport async function aerodromeResolveStockTokens(args: {\n rpcUrl: string\n official?: Array<{ symbol: string; address: Address }>\n knownTokens?: Array<{ address: string; symbol?: string; decimals?: number }>\n}): Promise<AerodromeStockTokenRow[]> {\n let official: Array<{ symbol: string; address: Address }> = []\n try {\n official = args.official ?? (await fetchOfficialBaseTokenizedStocks())\n } catch {\n official = []\n }\n const candidates = new Map<string, { address: Address; symbol?: string; name?: string; decimals?: number }>()\n const add = (addressRaw: string, meta?: { symbol?: string; name?: string; decimals?: number }) => {\n if (!isCoinbaseB20AssetToken(addressRaw)) return\n const address = getAddress(addressRaw as `0x${string}`)\n const key = address.toLowerCase()\n const prev = candidates.get(key)\n candidates.set(key, {\n address,\n symbol: meta?.symbol || prev?.symbol,\n name: meta?.name || prev?.name,\n decimals: meta?.decimals ?? prev?.decimals,\n })\n }\n for (const t of official) {\n add(t.address, { symbol: t.symbol, decimals: COINBASE_B20_STOCK_DECIMALS })\n }\n for (const t of args.knownTokens ?? []) {\n if (!isCoinbaseB20AssetToken(t.address)) continue\n const symbol = (t.symbol ?? '').trim()\n const known = Boolean(catalogSymbol(getAddress(t.address as `0x${string}`)))\n if (!known && symbol && !looksLikeCoinbaseStockSymbol(symbol)) continue\n add(t.address, { symbol, decimals: t.decimals })\n }\n\n const rows = [...candidates.values()]\n if (rows.length === 0) return []\n try {\n const client = aerodromePublicClient(args.rpcUrl)\n const meta = await client.multicall({\n allowFailure: true,\n contracts: rows.flatMap((row) => [\n { address: row.address, abi: erc20Abi, functionName: 'symbol' as const },\n { address: row.address, abi: erc20Abi, functionName: 'name' as const },\n { address: row.address, abi: erc20Abi, functionName: 'decimals' as const },\n { address: row.address, abi: erc20Abi, functionName: 'totalSupply' as const },\n ]),\n })\n\n return rows.map((row, i) => {\n const base = i * 4\n const onchainSymbol = meta[base]?.status === 'success' ? String(meta[base].result) : ''\n const onchainName = meta[base + 1]?.status === 'success' ? String(meta[base + 1].result) : ''\n const onchainDecimals = meta[base + 2]?.status === 'success' ? Number(meta[base + 2].result) : NaN\n const supply = meta[base + 3]?.status === 'success' ? (meta[base + 3].result as bigint) : 0n\n return {\n address: row.address,\n symbol: onchainSymbol || row.symbol || catalogSymbol(row.address) || row.address.slice(0, 8),\n name: catalogName(row.address) || onchainName || onchainSymbol || row.symbol || '',\n decimals: Number.isFinite(onchainDecimals) ? onchainDecimals : (row.decimals ?? COINBASE_B20_STOCK_DECIMALS),\n issued: supply > 0n,\n iconUrl: lookupCoinbaseB20StockToken(row.address)?.iconUrl,\n }\n })\n } catch {\n return rows.map((row) => ({\n address: row.address,\n symbol: row.symbol || catalogSymbol(row.address) || row.address.slice(0, 8),\n name: row.name || catalogName(row.address) || row.symbol || '',\n decimals: row.decimals ?? COINBASE_B20_STOCK_DECIMALS,\n issued: false,\n iconUrl: lookupCoinbaseB20StockToken(row.address)?.iconUrl,\n }))\n }\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { aeroV2FactoryAbi, clPoolFactoryAbi } from './abi.js'\nimport {\n aeroUsdcAddress,\n aerodromeClFactoryList,\n loadAerodromeAddresses,\n type AerodromeAddresses,\n} from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport {\n assertAerodromeStockIssued,\n ensureAerodromeStockTickers,\n lookupAerodromeKnownToken,\n resolveAerodromeErc20OrWeth,\n} from './stockTokens.js'\nimport {\n aerodromeUnsupportedChainMessage,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n requireAerodromeRpcUrl,\n} from './support.js'\nimport type { AerodromeSwapPool } from './sugar.js'\n\n/** Official Slipstream tick spacings; used if `tickSpacings()` is unavailable. */\nconst FALLBACK_TICK_SPACINGS = [1, 10, 50, 100, 200, 500, 2000] as const\n\nfunction checksum(addr: Address): Address {\n return getAddress(addr)\n}\n\nfunction pairKey(a: Address, b: Address): string {\n const [x, y] = [a.toLowerCase(), b.toLowerCase()].sort()\n return `${x}-${y}`\n}\n\nfunction connectorPairs(tokenIn: Address, tokenOut: Address, connectors: Address[]): [Address, Address][] {\n const pairs: [Address, Address][] = []\n const seen = new Set<string>()\n const add = (a: Address, b: Address) => {\n if (a.toLowerCase() === b.toLowerCase()) return\n const key = pairKey(a, b)\n if (seen.has(key)) return\n seen.add(key)\n pairs.push([a, b])\n }\n add(tokenIn, tokenOut)\n for (const c of connectors) {\n add(tokenIn, c)\n add(tokenOut, c)\n }\n const weth = connectors[0]\n const usdc = connectors[1]\n if (weth && usdc) add(weth, usdc)\n return pairs\n}\n\nasync function tickSpacingsForFactory(\n rpcUrl: string,\n factory: Address,\n): Promise<number[]> {\n const client = aerodromePublicClient(rpcUrl)\n try {\n const rows = await client.readContract({\n address: factory,\n abi: clPoolFactoryAbi,\n functionName: 'tickSpacings',\n })\n const nums = rows.map((n) => Number(n)).filter((n) => Number.isFinite(n) && n > 0)\n return nums.length > 0 ? nums : [...FALLBACK_TICK_SPACINGS]\n } catch {\n return [...FALLBACK_TICK_SPACINGS]\n }\n}\n\n/**\n * Probe v2 + all three CL factories for pools that touch tokenIn / tokenOut / WETH / USDC / AERO.\n * Needed because Sugar `forSwaps` paginates oldest factories first and never reaches Slipstream 3\n * (where Coinbase B20 stock / USDC pools live).\n */\nexport async function aerodromeDiscoverConnectorPools(args: {\n rpcUrl: string\n tokenIn: Address\n tokenOut: Address\n addrs: AerodromeAddresses\n}): Promise<AerodromeSwapPool[]> {\n const client = aerodromePublicClient(args.rpcUrl)\n const usdc = aeroUsdcAddress(args.addrs.chainId)\n const connectors = [args.addrs.weth, ...(usdc ? [usdc] : []), args.addrs.aero]\n const pairs = connectorPairs(args.tokenIn, args.tokenOut, connectors)\n const clFactories = aerodromeClFactoryList(args.addrs)\n const spacingsByFactory = await Promise.all(\n clFactories.map(async (factory) => ({ factory, spacings: await tickSpacingsForFactory(args.rpcUrl, factory) })),\n )\n\n type Job =\n | { kind: 'v2'; tokenA: Address; tokenB: Address; stable: boolean }\n | { kind: 'cl'; factory: Address; tokenA: Address; tokenB: Address; spacing: number }\n\n const jobs: Job[] = []\n for (const [tokenA, tokenB] of pairs) {\n jobs.push({ kind: 'v2', tokenA, tokenB, stable: false })\n jobs.push({ kind: 'v2', tokenA, tokenB, stable: true })\n for (const { factory, spacings } of spacingsByFactory) {\n for (const spacing of spacings) {\n jobs.push({ kind: 'cl', factory, tokenA, tokenB, spacing })\n }\n }\n }\n\n const results = await client.multicall({\n allowFailure: true,\n contracts: jobs.map((job) =>\n job.kind === 'v2'\n ? {\n address: job.stable ? args.addrs.stablePoolFactory : args.addrs.volatilePoolFactory,\n abi: aeroV2FactoryAbi,\n functionName: 'getPool' as const,\n args: [job.tokenA, job.tokenB] as const,\n }\n : {\n address: job.factory,\n abi: clPoolFactoryAbi,\n functionName: 'getPool' as const,\n args: [job.tokenA, job.tokenB, job.spacing] as const,\n },\n ),\n })\n\n const seen = new Set<string>()\n const pools: AerodromeSwapPool[] = []\n for (let i = 0; i < jobs.length; i++) {\n const job = jobs[i]!\n const row = results[i]\n if (!row || row.status !== 'success') continue\n const lp = row.result as Address\n if (!lp || lp === zeroAddress) continue\n const key = lp.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n const token0 = job.tokenA.toLowerCase() < job.tokenB.toLowerCase() ? job.tokenA : job.tokenB\n const token1 = token0.toLowerCase() === job.tokenA.toLowerCase() ? job.tokenB : job.tokenA\n if (job.kind === 'v2') {\n pools.push({\n lp: checksum(lp),\n type: job.stable ? 0 : -1,\n token0: checksum(token0),\n token1: checksum(token1),\n factory: job.stable ? args.addrs.stablePoolFactory : args.addrs.volatilePoolFactory,\n poolFee: '0',\n kind: job.stable ? 'stable' : 'volatile',\n })\n } else {\n pools.push({\n lp: checksum(lp),\n type: job.spacing,\n token0: checksum(token0),\n token1: checksum(token1),\n factory: checksum(job.factory),\n poolFee: '0',\n kind: 'cl',\n })\n }\n }\n return pools\n}\n\nexport async function aerodromeDiscoverConnectorPoolsLoaded(args: {\n rpcUrl: string\n tokenIn: Address\n tokenOut: Address\n chainId?: number\n}): Promise<AerodromeSwapPool[]> {\n const addrs = await loadAerodromeAddresses(args.chainId)\n return aerodromeDiscoverConnectorPools({ ...args, addrs })\n}\n\n/** v2 + Slipstream pools for one pair only (no WETH/USDC connector hops). */\nexport async function aerodromeDiscoverDirectPools(args: {\n rpcUrl: string\n tokenA: Address\n tokenB: Address\n chainId?: number\n}): Promise<AerodromeSwapPool[]> {\n const addrs = await loadAerodromeAddresses(args.chainId)\n const client = aerodromePublicClient(args.rpcUrl)\n const tokenA = checksum(args.tokenA)\n const tokenB = checksum(args.tokenB)\n const clFactories = aerodromeClFactoryList(addrs)\n const spacingsByFactory = await Promise.all(\n clFactories.map(async (factory) => ({ factory, spacings: await tickSpacingsForFactory(args.rpcUrl, factory) })),\n )\n type Job =\n | { kind: 'v2'; stable: boolean }\n | { kind: 'cl'; factory: Address; spacing: number }\n const jobs: Job[] = [\n { kind: 'v2', stable: false },\n { kind: 'v2', stable: true },\n ]\n for (const { factory, spacings } of spacingsByFactory) {\n for (const spacing of spacings) jobs.push({ kind: 'cl', factory, spacing })\n }\n const results = await client.multicall({\n allowFailure: true,\n contracts: jobs.map((job) =>\n job.kind === 'v2'\n ? {\n address: job.stable ? addrs.stablePoolFactory : addrs.volatilePoolFactory,\n abi: aeroV2FactoryAbi,\n functionName: 'getPool' as const,\n args: [tokenA, tokenB] as const,\n }\n : {\n address: job.factory,\n abi: clPoolFactoryAbi,\n functionName: 'getPool' as const,\n args: [tokenA, tokenB, job.spacing] as const,\n },\n ),\n })\n const token0 = tokenA.toLowerCase() < tokenB.toLowerCase() ? tokenA : tokenB\n const token1 = token0.toLowerCase() === tokenA.toLowerCase() ? tokenB : tokenA\n const seen = new Set<string>()\n const pools: AerodromeSwapPool[] = []\n for (let i = 0; i < jobs.length; i++) {\n const job = jobs[i]!\n const row = results[i]\n if (!row || row.status !== 'success') continue\n const lp = row.result as Address\n if (!lp || lp === zeroAddress) continue\n const key = lp.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n if (job.kind === 'v2') {\n pools.push({\n lp: checksum(lp),\n type: job.stable ? 0 : -1,\n token0,\n token1,\n factory: job.stable ? addrs.stablePoolFactory : addrs.volatilePoolFactory,\n poolFee: '0',\n kind: job.stable ? 'stable' : 'volatile',\n })\n } else {\n pools.push({\n lp: checksum(lp),\n type: job.spacing,\n token0,\n token1,\n factory: checksum(job.factory),\n poolFee: '0',\n kind: 'cl',\n })\n }\n }\n return pools\n}\n\nfunction tokenLabel(raw: string, resolved: Address, isNative: boolean): string {\n if (isNative) return 'ETH'\n return lookupAerodromeKnownToken(raw)?.symbol || lookupAerodromeKnownToken(resolved)?.symbol || resolved.slice(0, 8)\n}\n\nexport async function aerodromeDiscoverPoolsSummary(args: {\n chainId: number\n rpcUrl: string\n token: string\n tokenOut?: string\n}) {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const rpcUrl = requireAerodromeRpcUrl(args.rpcUrl)\n const addrs = await loadAerodromeAddresses(args.chainId)\n await ensureAerodromeStockTickers([args.token, args.tokenOut ?? ''])\n const isNative = isAerodromeNativeToken(args.token)\n const token = resolveAerodromeErc20OrWeth(args.token, addrs.weth)\n await assertAerodromeStockIssued({ rpcUrl, token, isNative, label: args.token })\n const counterpartRaw = (args.tokenOut ?? '').trim() || 'USDC'\n const isNativeOut = isAerodromeNativeToken(counterpartRaw)\n const tokenOut = resolveAerodromeErc20OrWeth(counterpartRaw, addrs.weth)\n await assertAerodromeStockIssued({ rpcUrl, token: tokenOut, isNative: isNativeOut, label: counterpartRaw })\n if (token.toLowerCase() === tokenOut.toLowerCase()) {\n throw new Error('token and tokenOut must differ (default tokenOut is USDC).')\n }\n const pools = await aerodromeDiscoverConnectorPools({ rpcUrl, tokenIn: token, tokenOut, addrs })\n const inLabel = tokenLabel(args.token, token, isNative)\n const outLabel = tokenLabel(counterpartRaw, tokenOut, isNativeOut)\n return {\n chainId: args.chainId,\n token: {\n address: isNative ? zeroAddress : token,\n symbol: inLabel,\n decimals: lookupAerodromeKnownToken(args.token)?.decimals ?? lookupAerodromeKnownToken(token)?.decimals ?? null,\n },\n tokenOut: {\n address: isNativeOut ? zeroAddress : tokenOut,\n symbol: outLabel,\n decimals:\n lookupAerodromeKnownToken(counterpartRaw)?.decimals ?? lookupAerodromeKnownToken(tokenOut)?.decimals ?? null,\n },\n pools: pools.map((p) => ({\n lp: p.lp,\n kind: p.kind,\n tickSpacing: p.kind === 'cl' ? p.type : undefined,\n token0: p.token0,\n token1: p.token1,\n factory: p.factory,\n })),\n notes:\n pools.length === 0\n ? `No factory pool on the ${inLabel}/${outLabel} connector graph (direct + WETH/USDC/AERO hops). B20 stocks LP vs USDC; ETH→stock quotes hop WETH→USDC→stock. Call ctm_aerodrome_quote with tickers for a price.`\n : `Factory-discovered pools on the ${inLabel}/${outLabel} connector graph (v2 + Slipstream 1/2/3). Not a Sugar dump. Call ctm_aerodrome_quote({ tokenIn: \"${inLabel}\", tokenOut: \"${outLabel}\", amountHuman }) for a price.`,\n }\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { lpSugarAbi } from './abi.js'\nimport { AERODROME_BASE_ADDRESSES_FALLBACK, aeroUsdcAddress, loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeDiscoverDirectPools } from './discover.js'\nimport { isAerodromeB20AssetToken } from './stockTokens.js'\nimport {\n AERODROME_USDC_BASE,\n AERODROME_WETH_BASE,\n aerodromeUnsupportedChainMessage,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n} from './support.js'\n\nexport const AERODROME_IMPORTANT_POOL_CAP = 100\nconst SUGAR_PAGE = 50\nconst SUGAR_SCAN_PAGES = 4\nconst SECONDS_PER_YEAR = 365.25 * 24 * 60 * 60\n\nconst BASE_MAIN_TOKEN_ADDRESSES = new Set(\n [\n AERODROME_WETH_BASE,\n AERODROME_USDC_BASE,\n AERODROME_BASE_ADDRESSES_FALLBACK.aero,\n '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb',\n '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2',\n '0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34',\n '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',\n '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',\n ].map((a) => a.toLowerCase()),\n)\n\nexport type AerodromeLpYieldRow = {\n lp: string\n symbol: string\n kind: 'stable' | 'volatile' | 'cl'\n token0: string\n token1: string\n gauge: string\n gaugeAlive: boolean\n reserve0: string\n reserve1: string\n feeBps: number | null\n feeApr: string | null\n emissionsApr: string | null\n totalApr: string | null\n tvlUsd: number | null\n}\n\nfunction poolKind(type: number): 'stable' | 'volatile' | 'cl' {\n if (type === 0) return 'stable'\n if (type === -1) return 'volatile'\n return 'cl'\n}\n\nfunction formatApr(pct: number | null): string | null {\n if (pct == null || !Number.isFinite(pct) || pct < 0) return null\n return `${pct.toFixed(2)}%`\n}\n\nexport function formatAerodromeLpYieldLabel(row: AerodromeLpYieldRow): string {\n const kind = row.kind === 'stable' ? 'sAMM' : row.kind === 'volatile' ? 'vAMM' : 'Slipstream'\n if (row.emissionsApr) {\n return `${row.emissionsApr} emissions APR (${kind})`\n }\n return `Emissions APR not priced (${kind})`\n}\n\nfunction isMainPair(token0: Address, token1: Address, aero: string): boolean {\n const mains = new Set(BASE_MAIN_TOKEN_ADDRESSES)\n mains.add(aero.toLowerCase())\n return mains.has(token0.toLowerCase()) && mains.has(token1.toLowerCase())\n}\n\ntype SugarYieldRaw = {\n lp: Address\n symbol: string\n type: number | bigint\n token0: Address\n token1: Address\n gauge: Address\n gauge_alive: boolean\n reserve0: bigint\n reserve1: bigint\n liquidity: bigint\n emissions: bigint\n pool_fee: bigint\n}\n\nasync function fetchSugarYieldPage(args: {\n chainId: number\n rpcUrl: string\n limit: number\n offset: number\n}): Promise<SugarYieldRaw[]> {\n const addrs = await loadAerodromeAddresses(args.chainId)\n if (addrs.lpSugar === zeroAddress) return []\n const client = aerodromePublicClient(args.rpcUrl)\n const rows = await client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'all',\n args: [BigInt(args.limit), BigInt(args.offset), 0n],\n })\n return (rows as readonly SugarYieldRaw[]).map((p) => ({\n lp: getAddress(p.lp),\n symbol: p.symbol,\n type: p.type,\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n gauge: getAddress(p.gauge),\n gauge_alive: Boolean(p.gauge_alive),\n reserve0: p.reserve0,\n reserve1: p.reserve1,\n liquidity: p.liquidity,\n emissions: p.emissions,\n pool_fee: p.pool_fee,\n }))\n}\n\nfunction aeroUsdPriceFromRows(rows: SugarYieldRaw[], aero: string): number | null {\n const aeroLo = aero.toLowerCase()\n const usdcLo = AERODROME_USDC_BASE.toLowerCase()\n for (const r of rows) {\n const t0 = r.token0.toLowerCase()\n const t1 = r.token1.toLowerCase()\n if ((t0 === aeroLo && t1 === usdcLo) || (t0 === usdcLo && t1 === aeroLo)) {\n const aeroRes = t0 === aeroLo ? Number(r.reserve0) / 1e18 : Number(r.reserve1) / 1e18\n const usdcRes = t0 === usdcLo ? Number(r.reserve0) / 1e6 : Number(r.reserve1) / 1e6\n if (aeroRes > 0 && usdcRes > 0) return usdcRes / aeroRes\n }\n }\n return null\n}\n\nfunction rowTvlUsd(r: SugarYieldRaw): number | null {\n const fromLiq = Number(r.liquidity) / 1e18\n if (Number.isFinite(fromLiq) && fromLiq > 1) return fromLiq\n const t0 = r.token0.toLowerCase()\n const t1 = r.token1.toLowerCase()\n const usdc = AERODROME_USDC_BASE.toLowerCase()\n if (t0 === usdc) {\n const usd = Number(r.reserve0) / 1e6\n return Number.isFinite(usd) && usd > 0 ? usd * 2 : null\n }\n if (t1 === usdc) {\n const usd = Number(r.reserve1) / 1e6\n return Number.isFinite(usd) && usd > 0 ? usd * 2 : null\n }\n return null\n}\n\nfunction toYieldRow(r: SugarYieldRaw, aeroUsd: number | null): AerodromeLpYieldRow {\n const tvlUsd = rowTvlUsd(r)\n const emissionsPerSec = Number(r.emissions) / 1e18\n let emissionsApr: number | null = null\n if (aeroUsd != null && tvlUsd != null && tvlUsd > 0 && Number.isFinite(emissionsPerSec) && emissionsPerSec > 0) {\n emissionsApr = ((emissionsPerSec * SECONDS_PER_YEAR * aeroUsd) / tvlUsd) * 100\n }\n const feeBpsRaw = Number(r.pool_fee)\n const feeBps = Number.isFinite(feeBpsRaw) && feeBpsRaw > 0 ? feeBpsRaw : null\n return {\n lp: r.lp,\n symbol: r.symbol,\n kind: poolKind(Number(r.type)),\n token0: r.token0,\n token1: r.token1,\n gauge: r.gauge === zeroAddress ? '' : r.gauge,\n gaugeAlive: Boolean(r.gauge_alive),\n reserve0: r.reserve0.toString(),\n reserve1: r.reserve1.toString(),\n feeBps,\n feeApr: null,\n emissionsApr: formatApr(emissionsApr),\n totalApr: formatApr(emissionsApr),\n tvlUsd,\n }\n}\n\nfunction rankAndCap(rows: AerodromeLpYieldRow[], query?: string): AerodromeLpYieldRow[] {\n const q = (query ?? '').trim().toLowerCase()\n let filtered = rows.filter((r) => (r.tvlUsd ?? 0) > 0)\n if (q) {\n filtered = filtered.filter((r) =>\n [r.symbol, r.lp, r.token0, r.token1, r.kind].join(' ').toLowerCase().includes(q),\n )\n }\n filtered.sort((a, b) => (b.tvlUsd ?? 0) - (a.tvlUsd ?? 0))\n return filtered.slice(0, AERODROME_IMPORTANT_POOL_CAP)\n}\n\nasync function scanSugarTop(chainId: number, rpcUrl: string): Promise<SugarYieldRaw[]> {\n const pages: SugarYieldRaw[][] = []\n for (let i = 0; i < SUGAR_SCAN_PAGES; i++) {\n const page = await fetchSugarYieldPage({ chainId, rpcUrl, limit: SUGAR_PAGE, offset: i * SUGAR_PAGE })\n pages.push(page)\n if (page.length < SUGAR_PAGE) break\n }\n return pages.flat()\n}\n\nexport async function aerodromeFetchImportantPoolsSummary(args: {\n chainId: number\n rpcUrl: string\n query?: string\n}) {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n const scanned = await scanSugarTop(args.chainId, args.rpcUrl)\n const aeroUsd = aeroUsdPriceFromRows(scanned, addrs.aero)\n const main = scanned.filter((r) => isMainPair(r.token0, r.token1, addrs.aero))\n const pools = rankAndCap(main.map((r) => toYieldRow(r, aeroUsd)), args.query)\n return {\n chainId: args.chainId,\n pools,\n notes:\n `At most ${AERODROME_IMPORTANT_POOL_CAP} important pairs (ETH/WETH, USDC, AERO, major stables), TVL-ranked from the Base LpSugar index. feeApr is omitted. emissionsApr uses on-chain AERO/USDC when priced. Other Aero chains have no Sugar index, so this list is empty there — use ctm_aerodrome_discover_pools for a pair. AERO rewards on those chains are sAERO allocation, not a Sugar emissions APR.`,\n }\n}\n\nexport async function aerodromeFetchLpYieldsSummary(args: {\n chainId: number\n rpcUrl: string\n query?: string\n}) {\n return aerodromeFetchImportantPoolsSummary(args)\n}\n\nasync function fetchSugarByAddress(chainId: number, rpcUrl: string, lp: Address): Promise<SugarYieldRaw | null> {\n const addrs = await loadAerodromeAddresses(chainId)\n if (addrs.lpSugar === zeroAddress) return null\n const client = aerodromePublicClient(rpcUrl)\n try {\n const p = (await client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'byAddress',\n args: [lp],\n })) as SugarYieldRaw\n if (!p?.lp || p.lp === zeroAddress) return null\n return {\n lp: getAddress(p.lp),\n symbol: p.symbol,\n type: p.type,\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n gauge: getAddress(p.gauge),\n gauge_alive: Boolean(p.gauge_alive),\n reserve0: p.reserve0,\n reserve1: p.reserve1,\n liquidity: p.liquidity,\n emissions: p.emissions,\n pool_fee: p.pool_fee,\n }\n } catch {\n return null\n }\n}\n\nfunction resolveYieldToken(addr: string, weth: string): Address {\n if (isAerodromeNativeToken(addr)) return getAddress(weth)\n return getAddress(addr as `0x${string}`)\n}\n\nasync function aeroUsdFromUsdcPool(chainId: number, rpcUrl: string, aero: string): Promise<number | null> {\n const usdc = aeroUsdcAddress(chainId)\n if (!usdc) return null\n const aeroUsdc = await aerodromeDiscoverDirectPools({\n chainId,\n rpcUrl,\n tokenA: getAddress(aero as `0x${string}`),\n tokenB: usdc,\n })\n const prefer = aeroUsdc.find((p) => p.kind === 'volatile') ?? aeroUsdc[0]\n if (!prefer) return null\n const raw = await fetchSugarByAddress(chainId, rpcUrl, prefer.lp)\n return raw ? aeroUsdPriceFromRows([raw], aero) : null\n}\n\nexport async function aerodromeFetchLpYieldsForPools(args: {\n chainId: number\n rpcUrl: string\n lps: string[]\n}): Promise<{ chainId: number; pools: AerodromeLpYieldRow[]; notes: string }> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n const aeroUsd = await aeroUsdFromUsdcPool(args.chainId, args.rpcUrl, addrs.aero)\n const seen = new Set<string>()\n const pools: AerodromeLpYieldRow[] = []\n for (const rawLp of args.lps) {\n let lp: Address\n try {\n lp = getAddress(rawLp as `0x${string}`)\n } catch {\n continue\n }\n if (lp === zeroAddress || seen.has(lp.toLowerCase())) continue\n seen.add(lp.toLowerCase())\n const raw = await fetchSugarByAddress(args.chainId, args.rpcUrl, lp)\n if (raw) pools.push(toYieldRow(raw, aeroUsd))\n }\n return {\n chainId: args.chainId,\n pools,\n notes:\n 'Same Sugar emissions formula as fetch_lp_yields (AERO/USDC priced). feeApr is omitted (Sugar has fee tier, not volume).',\n }\n}\n\nexport async function aerodromeFetchLpYieldsForPair(args: {\n chainId: number\n rpcUrl: string\n tokenA: string\n tokenB: string\n}): Promise<{ chainId: number; pools: AerodromeLpYieldRow[]; notes: string }> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n const tokenA = resolveYieldToken(args.tokenA, addrs.weth)\n const tokenB = resolveYieldToken(args.tokenB, addrs.weth)\n if (tokenA.toLowerCase() === tokenB.toLowerCase()) {\n return { chainId: args.chainId, pools: [], notes: 'Pair tokens must differ.' }\n }\n const discovered = await aerodromeDiscoverDirectPools({ rpcUrl: args.rpcUrl, tokenA, tokenB })\n return aerodromeFetchLpYieldsForPools({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n lps: discovered.map((p) => p.lp),\n })\n}\n\nexport async function aerodromeFetchStockLpYieldsSummary(args: {\n chainId: number\n rpcUrl: string\n query?: string\n}) {\n if (args.chainId !== 8453) {\n throw new Error('Aero stock LP yields are Base (8453) only.')\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n const scanned = await scanSugarTop(args.chainId, args.rpcUrl)\n const aeroUsd = aeroUsdPriceFromRows(scanned, addrs.aero)\n const stock = scanned.filter((r) => isAerodromeB20AssetToken(r.token0) || isAerodromeB20AssetToken(r.token1))\n const pools = rankAndCap(stock.map((r) => toYieldRow(r, aeroUsd)), args.query)\n return {\n chainId: args.chainId,\n pools,\n notes:\n 'Coinbase B20 stock LP yields only (typically STOCK/USDC Slipstream). Separate from main-pair fetch_lp_yields. HIP-3 / Arcus stock trading is not this list.',\n }\n}\n","import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { AERODROME_PROTOCOL_ID, isAerodromeChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './addresses.js'\nexport * from './stockTokens.js'\nexport * from './discover.js'\nexport * from './sugar.js'\nexport * from './sdkSession.js'\nexport * from './quote.js'\nexport * from './priceImpact.js'\nexport * from './swapMultisign.js'\nexport * from './liquidityBasic.js'\nexport * from './liquidityBasicMultisign.js'\nexport * from './liquidityCl.js'\nexport * from './liquidityClMultisign.js'\nexport * from './gaugeMultisign.js'\nexport * from './reads.js'\nexport * from './yields.js'\nexport * from './purpose.js'\n\nexport const aerodromeProtocolModule: ProtocolModule = {\n id: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n return isAerodromeChainSupported(ctx.chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'native' || token.kind === 'erc20'\n },\n actions: [\n {\n id: 'aerodrome.quote',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n 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.',\n commonParams: [],\n params: {\n chainId: { type: 'number', required: true, description: 'Aero chain: 8453 (Base, default), 1, 10, 42161, 4663, 5042, or 57073.' },\n tokenIn: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH, WETH, AERO) or 0x / 0x0 native' },\n tokenOut: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH, WETH, AERO) or 0x / 0x0 native' },\n amountHuman: { type: 'string', required: true, description: 'Human-readable input amount (B20 stocks are 8 decimals)' },\n },\n },\n {\n id: 'aerodrome.swap',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Swap via Aerodrome Router / Slipstream SwapRouter (optional ERC-20 approve batch)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n tokenIn: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n tokenOut: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n amountHuman: { type: 'string', required: true, description: 'Human-readable input amount' },\n slippagePercent: { type: 'number', required: true, description: 'Slippage percent (0–100 exclusive)' },\n },\n },\n {\n id: 'aerodrome.add-liquidity',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit into a basic vAMM/sAMM pool (one-sided amounts; tickers OK)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n tokenA: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n tokenB: { type: 'address', required: true, description: 'Ticker (AAPLc, USDC, ETH) or 0x / 0x0 native' },\n stable: { type: 'boolean', required: true, description: 'true = sAMM, false = vAMM' },\n amountAHuman: { type: 'string', required: false, description: 'Amount A; omit to solve from B' },\n amountBHuman: { type: 'string', required: false, description: 'Amount B; omit to solve from A' },\n slippagePercent: { type: 'number', required: true, description: 'Slippage percent' },\n },\n },\n {\n id: 'aerodrome.remove-liquidity',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw from a basic vAMM/sAMM pool',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n lpToken: { type: 'address', required: true, description: 'LP token' },\n liquidityHuman: { type: 'string', required: true, description: 'LP amount' },\n },\n },\n {\n id: 'aerodrome.cl-mint',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Mint a Slipstream concentrated liquidity NFT',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n token0: { type: 'address', required: true, description: 'Token0' },\n token1: { type: 'address', required: true, description: 'Token1' },\n tickSpacing: { type: 'number', required: true, description: 'Pool tick spacing' },\n tickLower: { type: 'number', required: true, description: 'Lower tick' },\n tickUpper: { type: 'number', required: true, description: 'Upper tick' },\n },\n },\n {\n id: 'aerodrome.gauge-stake',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake basic LP tokens or a Slipstream NFT in a gauge',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n gauge: { type: 'address', required: true, description: 'Gauge address' },\n },\n },\n {\n id: 'aerodrome.claim-fees',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim unstaked fees from the pool (not the gauge)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { pool: { type: 'address', required: true, description: 'Pool lp from fetch_positions claimFees.pool' } },\n },\n {\n id: 'aerodrome.claim-emissions',\n protocolId: AERODROME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim gauge emissions in AERO (not the pool)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { gauge: { type: 'address', required: true, description: 'Gauge from fetch_positions claimEmissions' } },\n },\n ],\n}\n\nregisterProtocolModule(aerodromeProtocolModule)\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { aerodromePoolMetaAbi, aerodromeVoterAbi, erc20Abi, lpSugarAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeUnsupportedChainMessage, isAerodromeChainSupported } from './support.js'\nimport { ensureCoinbaseB20StockCatalog } from '../shared/coinbaseB20.js'\nimport { aerodromeCoinbaseStockAddresses } from './stockTokens.js'\n\nexport type AerodromeListedToken = {\n address: Address\n symbol: string\n decimals: number\n listed: boolean\n emerging: boolean\n accountBalance: string\n name?: string\n issued?: boolean\n iconUrl?: string\n}\n\nexport type AerodromeSwapPool = {\n lp: Address\n type: number\n token0: Address\n token1: Address\n factory: Address\n poolFee: string\n kind: 'stable' | 'volatile' | 'cl'\n}\n\nexport type AerodromeLpRow = {\n lp: Address\n symbol: string\n type: number\n kind: 'stable' | 'volatile' | 'cl'\n token0: Address\n token1: Address\n gauge: Address\n gaugeAlive: boolean\n nfpm: Address\n reserve0: string\n reserve1: string\n}\n\nexport type AerodromePositionRow = {\n id: string\n lp: Address\n liquidity: string\n staked: string\n amount0: string\n amount1: string\n unstakedEarned0: string\n unstakedEarned1: string\n emissionsEarned: string\n tickLower: number\n tickUpper: number\n}\n\nexport type AerodromePositionWithPool = AerodromePositionRow & {\n symbol: string\n kind: 'stable' | 'volatile' | 'cl'\n gauge: Address\n gaugeAlive: boolean\n token0: Address\n token1: Address\n}\n\nfunction poolKind(type: number): 'stable' | 'volatile' | 'cl' {\n if (type === 0) return 'stable'\n if (type === -1) return 'volatile'\n return 'cl'\n}\n\nasync function paginate<T>(\n pageSize: number,\n maxPages: number,\n readPage: (limit: bigint, offset: bigint) => Promise<readonly T[]>,\n): Promise<T[]> {\n const out: T[] = []\n for (let page = 0; page < maxPages; page++) {\n const rows = await readPage(BigInt(pageSize), BigInt(page * pageSize))\n out.push(...rows)\n if (rows.length < pageSize) break\n }\n return out\n}\n\nexport async function aerodromeFetchListedTokens(args: {\n chainId: number\n rpcUrl: string\n account?: string\n extraAddresses?: string[]\n}): Promise<AerodromeListedToken[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n if (addrs.lpSugar === zeroAddress) return []\n await ensureCoinbaseB20StockCatalog().catch(() => [])\n const client = aerodromePublicClient(args.rpcUrl)\n const account = args.account?.trim() ? getAddress(args.account as `0x${string}`) : zeroAddress\n const extra = [...aerodromeCoinbaseStockAddresses(), ...(args.extraAddresses ?? [])]\n .map((a) => {\n try {\n return getAddress(a as `0x${string}`)\n } catch {\n return null\n }\n })\n .filter((a): a is Address => Boolean(a))\n\n const rows = await paginate(200, 15, (limit, offset) =>\n client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'tokens',\n args: [limit, offset, account, extra],\n }),\n )\n\n const seen = new Set<string>()\n const tokens: AerodromeListedToken[] = []\n for (const t of rows) {\n const address = getAddress(t.token_address)\n const key = address.toLowerCase()\n if (seen.has(key) || address === zeroAddress) continue\n seen.add(key)\n tokens.push({\n address,\n symbol: t.symbol,\n decimals: Number(t.decimals),\n listed: Boolean(t.listed),\n emerging: Boolean(t.emerging),\n accountBalance: t.account_balance.toString(),\n })\n }\n return tokens\n}\n\nexport async function aerodromeFetchSwapPools(args: {\n chainId: number\n rpcUrl: string\n}): Promise<AerodromeSwapPool[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n if (addrs.lpSugar === zeroAddress) return []\n const client = aerodromePublicClient(args.rpcUrl)\n const rows = await paginate(200, 20, (limit, offset) =>\n client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'forSwaps',\n args: [limit, offset],\n }),\n )\n return rows.map((p) => ({\n lp: getAddress(p.lp),\n type: Number(p.type),\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n factory: getAddress(p.factory),\n poolFee: p.pool_fee.toString(),\n kind: poolKind(Number(p.type)),\n }))\n}\n\nexport async function aerodromeFetchPools(args: {\n chainId: number\n rpcUrl: string\n limit?: number\n offset?: number\n}): Promise<AerodromeLpRow[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n if (addrs.lpSugar === zeroAddress) return []\n const client = aerodromePublicClient(args.rpcUrl)\n const limit = BigInt(args.limit ?? 50)\n const offset = BigInt(args.offset ?? 0)\n const rows = await client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'all',\n args: [limit, offset, 0n],\n })\n return rows.map(mapSugarLp)\n}\n\nfunction mapSugarLp(p: {\n lp: Address\n symbol: string\n type: number | bigint\n token0: Address\n token1: Address\n gauge: Address\n gauge_alive: boolean\n nfpm: Address\n reserve0: bigint\n reserve1: bigint\n}): AerodromeLpRow {\n return {\n lp: getAddress(p.lp),\n symbol: p.symbol,\n type: Number(p.type),\n kind: poolKind(Number(p.type)),\n token0: getAddress(p.token0),\n token1: getAddress(p.token1),\n gauge: getAddress(p.gauge),\n gaugeAlive: Boolean(p.gauge_alive),\n nfpm: getAddress(p.nfpm),\n reserve0: p.reserve0.toString(),\n reserve1: p.reserve1.toString(),\n }\n}\n\n/** Deployed Base LpSugar does not reliably implement byAddress; read the pool + voter instead. */\nexport async function aerodromeFetchPoolsByAddress(args: {\n chainId: number\n rpcUrl: string\n lps: readonly string[]\n}): Promise<Map<string, AerodromeLpRow>> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n if (addrs.lpSugar === zeroAddress) return new Map()\n const client = aerodromePublicClient(args.rpcUrl)\n const unique: Address[] = []\n const seen = new Set<string>()\n for (const raw of args.lps) {\n try {\n const lp = getAddress(raw as `0x${string}`)\n const key = lp.toLowerCase()\n if (lp === zeroAddress || seen.has(key)) continue\n seen.add(key)\n unique.push(lp)\n } catch {\n /* skip */\n }\n }\n const out = new Map<string, AerodromeLpRow>()\n if (unique.length === 0) return out\n const contracts = unique.flatMap((lp) => [\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'symbol' as const },\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'token0' as const },\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'token1' as const },\n { address: lp, abi: aerodromePoolMetaAbi, functionName: 'stable' as const },\n { address: addrs.voter, abi: aerodromeVoterAbi, functionName: 'gauges' as const, args: [lp] as const },\n ])\n const results = await client.multicall({ allowFailure: true, contracts })\n const tokenAddrs = new Set<string>()\n const rawRows: Array<{\n lp: Address\n symbol: string\n token0: Address\n token1: Address\n kind: 'stable' | 'volatile' | 'cl'\n gauge: Address\n }> = []\n for (let i = 0; i < unique.length; i++) {\n const base = i * 5\n const symbolRow = results[base]\n const token0Row = results[base + 1]\n const token1Row = results[base + 2]\n const stableRow = results[base + 3]\n const gaugeRow = results[base + 4]\n if (token0Row?.status !== 'success' || token1Row?.status !== 'success') continue\n if (typeof token0Row.result !== 'string' || typeof token1Row.result !== 'string') continue\n const token0 = getAddress(token0Row.result)\n const token1 = getAddress(token1Row.result)\n tokenAddrs.add(token0.toLowerCase())\n tokenAddrs.add(token1.toLowerCase())\n const stable = stableRow?.status === 'success' ? Boolean(stableRow.result) : null\n rawRows.push({\n lp: unique[i]!,\n symbol: symbolRow?.status === 'success' ? String(symbolRow.result || '') : '',\n token0,\n token1,\n kind: stable == null ? 'cl' : stable ? 'stable' : 'volatile',\n gauge:\n gaugeRow?.status === 'success' && typeof gaugeRow.result === 'string'\n ? getAddress(gaugeRow.result)\n : zeroAddress,\n })\n }\n const tokens = [...tokenAddrs].map((a) => getAddress(a as `0x${string}`))\n const tokenSymbols = new Map<string, string>()\n if (tokens.length > 0) {\n const syms = await client.multicall({\n allowFailure: true,\n contracts: tokens.map((token) => ({\n address: token,\n abi: erc20Abi,\n functionName: 'symbol' as const,\n })),\n })\n for (let i = 0; i < tokens.length; i++) {\n const row = syms[i]\n if (row?.status === 'success' && row.result) tokenSymbols.set(tokens[i]!.toLowerCase(), String(row.result))\n }\n }\n for (const row of rawRows) {\n const kindTag = row.kind === 'stable' ? 'sAMM' : row.kind === 'cl' ? 'CL' : 'vAMM'\n const s0 = tokenSymbols.get(row.token0.toLowerCase()) || ''\n const s1 = tokenSymbols.get(row.token1.toLowerCase()) || ''\n const pair = s0 && s1 ? `${kindTag}-${s0}/${s1}` : ''\n out.set(row.lp.toLowerCase(), {\n lp: row.lp,\n symbol: row.symbol.trim() || pair,\n type: row.kind === 'stable' ? 0 : row.kind === 'volatile' ? -1 : 100,\n kind: row.kind,\n token0: row.token0,\n token1: row.token1,\n gauge: row.gauge,\n gaugeAlive: row.gauge !== zeroAddress,\n nfpm: zeroAddress,\n reserve0: '0',\n reserve1: '0',\n })\n }\n return out\n}\n\nexport async function aerodromeFetchPositions(args: {\n chainId: number\n rpcUrl: string\n account: string\n}): Promise<AerodromePositionRow[]> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n if (addrs.lpSugar === zeroAddress) return []\n const client = aerodromePublicClient(args.rpcUrl)\n const account = getAddress(args.account as `0x${string}`)\n const rows = await paginate(50, 8, (limit, offset) =>\n client.readContract({\n address: addrs.lpSugar,\n abi: lpSugarAbi,\n functionName: 'positions',\n args: [limit, offset, account],\n }),\n )\n return rows.map((p) => ({\n id: p.id.toString(),\n lp: getAddress(p.lp),\n liquidity: p.liquidity.toString(),\n staked: p.staked.toString(),\n amount0: p.amount0.toString(),\n amount1: p.amount1.toString(),\n unstakedEarned0: p.unstaked_earned0.toString(),\n unstakedEarned1: p.unstaked_earned1.toString(),\n emissionsEarned: p.emissions_earned.toString(),\n tickLower: Number(p.tick_lower),\n tickUpper: Number(p.tick_upper),\n }))\n}\n\nexport async function aerodromeFetchPositionsWithPools(args: {\n chainId: number\n rpcUrl: string\n account: string\n}): Promise<AerodromePositionWithPool[]> {\n const positions = await aerodromeFetchPositions(args)\n const pools = await aerodromeFetchPoolsByAddress({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n lps: positions.map((p) => p.lp),\n })\n return positions\n .map((p) => {\n const pool = pools.get(p.lp.toLowerCase())\n const cl = pool?.kind === 'cl' || p.id !== '0' || p.tickLower !== p.tickUpper\n return {\n ...p,\n symbol: pool?.symbol ?? '',\n kind: pool?.kind ?? (cl ? 'cl' : 'volatile'),\n gauge: pool?.gauge ?? zeroAddress,\n gaugeAlive: pool?.gaugeAlive ?? false,\n token0: pool?.token0 ?? zeroAddress,\n token1: pool?.token1 ?? zeroAddress,\n }\n })\n .filter(isMeaningfulAerodromePosition)\n}\n\nfunction isMeaningfulAerodromePosition(p: AerodromePositionWithPool): boolean {\n if (p.kind === 'cl' || p.id !== '0') return true\n if (BigInt(p.staked || '0') > 0n) return true\n if (BigInt(p.emissionsEarned || '0') > 0n) return true\n return BigInt(p.liquidity || '0') >= 10n ** 12n\n}\n","/**\n * Execution price impact vs a tiny same-route probe (marginal / spot rate).\n * Same idea as Curve's probe fallback: (1 − avgRate / marginalRate) × 100.\n */\n\nexport function aerodromeProbeAmountIn(amountIn: bigint): bigint | null {\n if (amountIn <= 1n) return null\n let probe = amountIn / 10_000n\n if (probe < 1n) probe = 1n\n if (probe >= amountIn) return null\n return probe\n}\n\nexport function computeAerodromePriceImpactPercent(args: {\n amountIn: bigint\n amountOut: bigint\n probeIn: bigint\n probeOut: bigint\n}): number | null {\n const { amountIn, amountOut, probeIn, probeOut } = args\n if (amountIn <= 0n || amountOut <= 0n || probeIn <= 0n || probeOut <= 0n) return null\n // impact = 1 − (out/in) / (probeOut/probeIn) = 1 − (out × probeIn) / (in × probeOut)\n const executed = amountOut * probeIn\n const spot = amountIn * probeOut\n if (spot === 0n) return null\n if (executed >= spot) return 0\n const scale = 100_000_000n\n const scaled = ((spot - executed) * scale * 100n) / spot\n const pct = Number(scaled) / Number(scale)\n if (!Number.isFinite(pct)) return null\n return Math.max(0, pct)\n}\n\n/** e.g. \"0.12%\" from a 0–100 quote field. */\nexport function formatAerodromePriceImpact(percent0to100: number | null | undefined): string {\n if (percent0to100 == null || !Number.isFinite(percent0to100) || percent0to100 < 0) return '—'\n if (percent0to100 === 0) return '0%'\n if (percent0to100 < 0.0001) return '<0.0001%'\n const t =\n percent0to100 < 0.01\n ? percent0to100.toFixed(4)\n : percent0to100 < 1\n ? percent0to100.toFixed(3)\n : percent0to100 < 10\n ? percent0to100.toFixed(2)\n : percent0to100.toFixed(1)\n return `${t.replace(/(\\.\\d*?[1-9])0+$/g, '$1').replace(/\\.0$/, '')}%`\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\nimport { aerodromeProbeAmountIn, computeAerodromePriceImpactPercent } from './priceImpact.js'\nimport { AERODROME_CHAIN_ID } from './support.js'\n\ntype SdkJsModule = {\n getDefaultConfig?: (args: unknown) => unknown\n getListedTokens?: (args: unknown) => Promise<unknown>\n getQuoteForSwap?: (args: unknown) => Promise<unknown>\n swap?: (args: unknown) => Promise<unknown>\n base?: { id: number }\n}\n\nasync function loadSdkJs(): Promise<SdkJsModule | null> {\n try {\n return (await import('@dromos-labs/sdk.js')) as SdkJsModule\n } catch {\n return null\n }\n}\n\n/**\n * Optional `@dromos-labs/sdk.js` quote. Returns null when the package is not\n * installed or the Node/wagmi session cannot be created.\n */\nexport async function tryAerodromeSdkQuote(args: {\n rpcUrl: string\n tokenIn: Address\n tokenOut: Address\n amountIn: bigint\n isNativeIn: boolean\n isNativeOut: boolean\n}): Promise<{\n chainId: number\n tokenIn: Address\n tokenOut: Address\n amountInWei: string\n amountOutWei: string\n amountOutHuman: string | null\n priceImpactPercent: number | null\n hops: []\n pathPacked: null\n isNativeIn: boolean\n isNativeOut: boolean\n source: 'sdk.js'\n} | null> {\n const sdk = await loadSdkJs()\n if (!sdk?.getDefaultConfig || !sdk.getQuoteForSwap || !sdk.base) return null\n try {\n const config = sdk.getDefaultConfig({\n chains: [{ chain: sdk.base, rpcUrl: args.rpcUrl }],\n })\n const quote = (await sdk.getQuoteForSwap({\n config,\n fromToken: { address: args.tokenIn, chainId: AERODROME_CHAIN_ID },\n toToken: { address: args.tokenOut, chainId: AERODROME_CHAIN_ID },\n amountIn: args.amountIn,\n })) as { amountOut?: bigint; expectedAmount?: bigint } | null\n if (!quote) return null\n const out = quote.amountOut ?? quote.expectedAmount\n if (out == null || out <= 0n) return null\n let priceImpactPercent: number | null = null\n const probeIn = aerodromeProbeAmountIn(args.amountIn)\n if (probeIn != null) {\n try {\n const probeQuote = (await sdk.getQuoteForSwap({\n config,\n fromToken: { address: args.tokenIn, chainId: AERODROME_CHAIN_ID },\n toToken: { address: args.tokenOut, chainId: AERODROME_CHAIN_ID },\n amountIn: probeIn,\n })) as { amountOut?: bigint; expectedAmount?: bigint } | null\n const probeOut = probeQuote?.amountOut ?? probeQuote?.expectedAmount\n if (probeOut != null && probeOut > 0n) {\n priceImpactPercent = computeAerodromePriceImpactPercent({\n amountIn: args.amountIn,\n amountOut: out,\n probeIn,\n probeOut,\n })\n }\n } catch {\n priceImpactPercent = null\n }\n }\n return {\n chainId: AERODROME_CHAIN_ID,\n tokenIn: args.isNativeIn ? zeroAddress : args.tokenIn,\n tokenOut: args.isNativeOut ? zeroAddress : args.tokenOut,\n amountInWei: args.amountIn.toString(),\n amountOutWei: out.toString(),\n amountOutHuman: null,\n priceImpactPercent,\n hops: [],\n pathPacked: null,\n isNativeIn: args.isNativeIn,\n isNativeOut: args.isNativeOut,\n source: 'sdk.js',\n }\n } catch {\n return null\n }\n}\n\nexport async function tryAerodromeSdkUnsignedSwap(args: {\n rpcUrl: string\n account: Address\n quote: unknown\n slippage: number\n}): Promise<{ to: Address; data: `0x${string}`; value: bigint } | null> {\n const sdk = await loadSdkJs()\n if (!sdk?.getDefaultConfig || !sdk.swap || !sdk.base) return null\n try {\n const config = sdk.getDefaultConfig({\n chains: [{ chain: sdk.base, rpcUrl: args.rpcUrl }],\n })\n const tx = (await sdk.swap({\n config,\n quote: args.quote,\n account: args.account,\n slippage: args.slippage,\n unsignedTransactionOnly: true,\n })) as { to?: string; data?: string; value?: bigint | string | number } | null\n if (!tx?.to || !tx.data) return null\n return {\n to: getAddress(tx.to as `0x${string}`),\n data: (tx.data.startsWith('0x') ? tx.data : `0x${tx.data}`) as `0x${string}`,\n value: typeof tx.value === 'bigint' ? tx.value : BigInt(tx.value ?? 0),\n }\n } catch {\n return null\n }\n}\n","import { encodePacked, formatUnits, getAddress, parseUnits, zeroAddress, type Address, type Hex } from 'viem'\nimport { aeroPoolAmountOutAbi, erc20Abi, mixedQuoterAbi, mixedQuoterV3Abi, routerAbi } from './abi.js'\nimport { AERODROME_BASE_ADDRESSES_FALLBACK, aeroUsdcAddress, loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeDiscoverConnectorPools } from './discover.js'\nimport { tryAerodromeSdkQuote } from './sdkSession.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n assertAerodromeStockIssued,\n ensureAerodromeStockTickers,\n isAerodromeCoinbaseStockToken,\n resolveAerodromeErc20OrWeth,\n} from './stockTokens.js'\nimport {\n AERODROME_USDC_BASE,\n aerodromeUnsupportedChainMessage,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n requireAerodromeRpcUrl,\n} from './support.js'\nimport {\n aerodromeProbeAmountIn,\n computeAerodromePriceImpactPercent,\n} from './priceImpact.js'\nimport { aerodromeFetchSwapPools, type AerodromeSwapPool } from './sugar.js'\n\nexport { resolveAerodromeErc20OrWeth } from './stockTokens.js'\n\n/** Official MixedRouteQuoter fillers from velodrome-finance/docs sdk.mdx. */\nexport const AERODROME_STABLE_FILLER = 2_097_152\nexport const AERODROME_VOLATILE_FILLER = 4_194_304\n/** MixedRouteQuoterV3: oldest CL factory (1 << 20). */\nexport const AERODROME_CL_FACTORY_OLDEST_BIT = 1_048_576\n/** MixedRouteQuoterV3: newest CL factory / Slipstream 3 (1 << 19). */\nexport const AERODROME_CL_FACTORY_NEWEST_BIT = 524_288\n\nexport type AerodromeRouteHop = {\n from: Address\n to: Address\n stable: boolean\n factory: Address\n type: number\n kind: 'stable' | 'volatile' | 'cl'\n lp: Address\n}\n\nexport type AerodromeQuoteResult = {\n chainId: number\n tokenIn: Address\n tokenOut: Address\n amountInWei: string\n amountOutWei: string\n amountOutHuman: string | null\n priceImpactPercent: number | null\n hops: AerodromeRouteHop[]\n pathPacked: Hex | null\n isNativeIn: boolean\n isNativeOut: boolean\n source: 'sdk.js' | 'router' | 'mixed_quoter'\n}\n\n/** MixedRouteQuoterV3 path filler: v2 masks, or tickSpacing OR factory bit. */\nexport function aerodromeMixedPathFiller(hop: Pick<AerodromeRouteHop, 'kind' | 'type' | 'factory'>): number {\n if (hop.kind === 'stable') return AERODROME_STABLE_FILLER\n if (hop.kind === 'volatile') return AERODROME_VOLATILE_FILLER\n const f = hop.factory.toLowerCase()\n if (f === AERODROME_BASE_ADDRESSES_FALLBACK.clFactory3.toLowerCase()) {\n return hop.type | AERODROME_CL_FACTORY_NEWEST_BIT\n }\n if (f === AERODROME_BASE_ADDRESSES_FALLBACK.clFactory.toLowerCase()) {\n return hop.type | AERODROME_CL_FACTORY_OLDEST_BIT\n }\n return hop.type\n}\n\n/** encodePacked(address, int24, address, ...) per official sdk.mdx / MixedRouteQuoterV3. */\nexport function encodeAerodromeMixedPath(hops: AerodromeRouteHop[]): Hex {\n if (hops.length === 0) throw new Error('Aerodrome path requires at least one hop.')\n const types: Array<'address' | 'int24'> = ['address']\n const values: Array<Address | number> = [hops[0]!.from]\n for (const hop of hops) {\n types.push('int24', 'address')\n values.push(aerodromeMixedPathFiller(hop), hop.to)\n }\n return encodePacked(types, values)\n}\n\nfunction neighbors(pools: AerodromeSwapPool[], token: Address): AerodromeSwapPool[] {\n const t = token.toLowerCase()\n return pools.filter(\n (p) => p.token0.toLowerCase() === t || p.token1.toLowerCase() === t,\n )\n}\n\nfunction hopFromPool(pool: AerodromeSwapPool, from: Address): AerodromeRouteHop {\n const fromL = from.toLowerCase()\n const to = pool.token0.toLowerCase() === fromL ? pool.token1 : pool.token0\n return {\n from: getAddress(from),\n to: getAddress(to),\n stable: pool.kind === 'stable',\n factory: pool.factory,\n type: pool.type,\n kind: pool.kind,\n lp: pool.lp,\n }\n}\n\n/** Undirected graph search, max depth 3, official sdk.mdx suggestion. */\nexport function findAerodromePaths(\n pools: AerodromeSwapPool[],\n tokenIn: Address,\n tokenOut: Address,\n maxDepth = 3,\n): AerodromeRouteHop[][] {\n const goal = tokenOut.toLowerCase()\n const start = getAddress(tokenIn)\n const out: AerodromeRouteHop[][] = []\n\n const walk = (current: Address, path: AerodromeRouteHop[], usedLp: Set<string>) => {\n if (path.length >= maxDepth) return\n for (const pool of neighbors(pools, current)) {\n const lpKey = pool.lp.toLowerCase()\n if (usedLp.has(lpKey)) continue\n const hop = hopFromPool(pool, current)\n const nextPath = [...path, hop]\n if (hop.to.toLowerCase() === goal) {\n out.push(nextPath)\n continue\n }\n usedLp.add(lpKey)\n walk(hop.to, nextPath, usedLp)\n usedLp.delete(lpKey)\n }\n }\n\n walk(start, [], new Set())\n return out.slice(0, 40)\n}\n\nfunction mergePools(into: AerodromeSwapPool[], extra: AerodromeSwapPool[]): AerodromeSwapPool[] {\n const seen = new Set(into.map((p) => p.lp.toLowerCase()))\n const out = [...into]\n for (const p of extra) {\n const key = p.lp.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n out.push(p)\n }\n return out\n}\n\nasync function quoteViaPools(rpcUrl: string, amountIn: bigint, hops: AerodromeRouteHop[]): Promise<bigint | null> {\n if (hops.length === 0 || hops.some((h) => h.kind === 'cl')) return null\n const client = aerodromePublicClient(rpcUrl)\n let cursor = amountIn\n for (const hop of hops) {\n try {\n cursor = await client.readContract({\n address: hop.lp,\n abi: aeroPoolAmountOutAbi,\n functionName: 'getAmountOut',\n args: [cursor, hop.from],\n })\n } catch {\n return null\n }\n if (cursor <= 0n) return null\n }\n return cursor\n}\n\nasync function quoteViaRouter(\n rpcUrl: string,\n router: Address,\n amountIn: bigint,\n hops: AerodromeRouteHop[],\n): Promise<bigint | null> {\n if (hops.some((h) => h.kind === 'cl')) return null\n const client = aerodromePublicClient(rpcUrl)\n try {\n const amounts = await client.readContract({\n address: router,\n abi: routerAbi,\n functionName: 'getAmountsOut',\n args: [\n amountIn,\n hops.map((h) => ({ from: h.from, to: h.to, stable: h.stable, factory: h.factory })),\n ],\n })\n const last = amounts[amounts.length - 1]\n return last ?? null\n } catch {\n return null\n }\n}\n\nasync function quoteViaMixedQuoter(\n rpcUrl: string,\n quoter: Address,\n amountIn: bigint,\n hops: AerodromeRouteHop[],\n abi: typeof mixedQuoterV3Abi | typeof mixedQuoterAbi,\n): Promise<bigint | null> {\n const client = aerodromePublicClient(rpcUrl)\n const path = encodeAerodromeMixedPath(hops)\n try {\n const res = await client.simulateContract({\n address: quoter,\n abi,\n functionName: 'quoteExactInput',\n args: [path, amountIn],\n })\n return res.result[0]\n } catch {\n return null\n }\n}\n\nexport async function quoteAerodromeHopsAmountOut(args: {\n rpcUrl: string\n router: Address\n mixedQuoter: Address\n mixedQuoterV3: Address\n amountIn: bigint\n hops: AerodromeRouteHop[]\n}): Promise<{ out: bigint; source: 'router' | 'mixed_quoter' } | null> {\n const viaPools = await quoteViaPools(args.rpcUrl, args.amountIn, args.hops)\n if (viaPools != null && viaPools > 0n) return { out: viaPools, source: 'router' }\n const viaRouter = await quoteViaRouter(args.rpcUrl, args.router, args.amountIn, args.hops)\n if (viaRouter != null && viaRouter > 0n) return { out: viaRouter, source: 'router' }\n const viaV3 = await quoteViaMixedQuoter(\n args.rpcUrl,\n args.mixedQuoterV3,\n args.amountIn,\n args.hops,\n mixedQuoterV3Abi,\n )\n if (viaV3 != null && viaV3 > 0n) return { out: viaV3, source: 'mixed_quoter' }\n const viaV1 = await quoteViaMixedQuoter(\n args.rpcUrl,\n args.mixedQuoter,\n args.amountIn,\n args.hops,\n mixedQuoterAbi,\n )\n if (viaV1 != null && viaV1 > 0n) return { out: viaV1, source: 'mixed_quoter' }\n return null\n}\n\nasync function readTokenDecimals(rpcUrl: string, token: Address, isNative: boolean): Promise<number> {\n if (isNative) return 18\n if (isAerodromeCoinbaseStockToken(token)) return AERODROME_COINBASE_STOCK_DECIMALS\n if (token.toLowerCase() === AERODROME_USDC_BASE.toLowerCase()) return 6\n const client = aerodromePublicClient(rpcUrl)\n return Number(\n await client.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'decimals',\n }),\n )\n}\n\nasync function throwIfUnissuedStock(args: {\n rpcUrl: string\n token: Address\n isNative: boolean\n label: string\n}): Promise<void> {\n await assertAerodromeStockIssued(args)\n}\n\nexport async function aerodromeQuote(args: {\n chainId: number\n rpcUrl: string\n tokenIn: string\n tokenOut: string\n amountHuman: string\n tokenInDecimals?: number\n}): Promise<AerodromeQuoteResult> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const rpcUrl = requireAerodromeRpcUrl(args.rpcUrl)\n const addrs = await loadAerodromeAddresses(args.chainId)\n await ensureAerodromeStockTickers([args.tokenIn, args.tokenOut])\n const isNativeIn = isAerodromeNativeToken(args.tokenIn)\n const isNativeOut = isAerodromeNativeToken(args.tokenOut)\n const tokenIn = resolveAerodromeErc20OrWeth(args.tokenIn, addrs.weth)\n const tokenOut = resolveAerodromeErc20OrWeth(args.tokenOut, addrs.weth)\n if (tokenIn.toLowerCase() === tokenOut.toLowerCase()) {\n throw new Error('tokenIn and tokenOut must differ.')\n }\n\n let decimals = args.tokenInDecimals\n if (isAerodromeCoinbaseStockToken(tokenIn)) {\n decimals = AERODROME_COINBASE_STOCK_DECIMALS\n } else if (decimals == null) {\n decimals = await readTokenDecimals(rpcUrl, tokenIn, isNativeIn)\n }\n const amountIn = parseUnits(args.amountHuman.trim(), decimals)\n if (amountIn <= 0n) throw new Error('amountHuman must be a positive decimal string.')\n\n const sdkQuote = await tryAerodromeSdkQuote({\n rpcUrl,\n tokenIn,\n tokenOut,\n amountIn,\n isNativeIn,\n isNativeOut,\n })\n if (sdkQuote) return sdkQuote\n\n let pools = await aerodromeDiscoverConnectorPools({ rpcUrl, tokenIn, tokenOut, addrs })\n let paths = findAerodromePaths(pools, tokenIn, tokenOut)\n if (paths.length === 0) {\n const sugarPools = await aerodromeFetchSwapPools({ chainId: args.chainId, rpcUrl })\n pools = mergePools(pools, sugarPools)\n const usdc = aeroUsdcAddress(args.chainId)\n const connectors = [addrs.weth, ...(usdc ? [usdc] : []), addrs.aero]\n const relevant = pools.filter((p) => {\n const a = p.token0.toLowerCase()\n const b = p.token1.toLowerCase()\n const tin = tokenIn.toLowerCase()\n const tout = tokenOut.toLowerCase()\n const conn = new Set(connectors.map((c) => c.toLowerCase()))\n return a === tin || b === tin || a === tout || b === tout || conn.has(a) || conn.has(b)\n })\n paths = findAerodromePaths(relevant, tokenIn, tokenOut)\n }\n if (paths.length === 0) {\n await throwIfUnissuedStock({ rpcUrl, token: tokenOut, isNative: isNativeOut, label: args.tokenOut })\n await throwIfUnissuedStock({ rpcUrl, token: tokenIn, isNative: isNativeIn, label: args.tokenIn })\n const tout = tokenOut.toLowerCase()\n const outHasPool = pools.some(\n (p) => p.token0.toLowerCase() === tout || p.token1.toLowerCase() === tout,\n )\n if (!outHasPool) {\n throw new Error(\n `No Aerodrome pool for ${args.tokenOut}. This token may not be issued yet or has no liquidity on Aerodrome.`,\n )\n }\n throw new Error('No Aerodrome route found for this pair.')\n }\n\n let best: { hops: AerodromeRouteHop[]; out: bigint; source: 'router' | 'mixed_quoter' } | null = null\n for (const hops of paths) {\n const quoted = await quoteAerodromeHopsAmountOut({\n rpcUrl,\n router: addrs.router,\n mixedQuoter: addrs.mixedQuoter,\n mixedQuoterV3: addrs.mixedQuoterV3,\n amountIn,\n hops,\n })\n if (!quoted) continue\n if (!best || quoted.out > best.out) {\n best = { hops, out: quoted.out, source: quoted.source }\n }\n }\n if (!best) {\n await throwIfUnissuedStock({ rpcUrl, token: tokenOut, isNative: isNativeOut, label: args.tokenOut })\n await throwIfUnissuedStock({ rpcUrl, token: tokenIn, isNative: isNativeIn, label: args.tokenIn })\n throw new Error('Aerodrome quote returned zero for all candidate routes.')\n }\n\n let amountOutHuman: string | null = null\n try {\n const outDecimals = await readTokenDecimals(rpcUrl, tokenOut, isNativeOut)\n amountOutHuman = formatUnits(best.out, outDecimals)\n } catch {\n amountOutHuman = null\n }\n\n let priceImpactPercent: number | null = null\n const probeIn = aerodromeProbeAmountIn(amountIn)\n if (probeIn != null) {\n const probeQuoted = await quoteAerodromeHopsAmountOut({\n rpcUrl,\n router: addrs.router,\n mixedQuoter: addrs.mixedQuoter,\n mixedQuoterV3: addrs.mixedQuoterV3,\n amountIn: probeIn,\n hops: best.hops,\n })\n if (probeQuoted && probeQuoted.out > 0n) {\n priceImpactPercent = computeAerodromePriceImpactPercent({\n amountIn,\n amountOut: best.out,\n probeIn,\n probeOut: probeQuoted.out,\n })\n }\n }\n\n return {\n chainId: args.chainId,\n tokenIn: isNativeIn ? zeroAddress : tokenIn,\n tokenOut: isNativeOut ? zeroAddress : tokenOut,\n amountInWei: amountIn.toString(),\n amountOutWei: best.out.toString(),\n amountOutHuman,\n priceImpactPercent,\n hops: best.hops,\n pathPacked: encodeAerodromeMixedPath(best.hops),\n isNativeIn,\n isNativeOut,\n source: best.source,\n }\n}\n","import { encodeAbiParameters, encodeFunctionData, getAddress, type Address, type Hex } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { aeroMetarouterAbi, clSwapRouterAbi } from './abi.js'\nimport { aerodromeClSwapRouterForFactory, loadAerodromeAddresses, type AerodromeAddresses } from './addresses.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport {\n aerodromeQuote,\n quoteAerodromeHopsAmountOut,\n type AerodromeQuoteResult,\n type AerodromeRouteHop,\n} from './quote.js'\nimport { tryAerodromeSdkUnsignedSwap } from './sdkSession.js'\nimport { aerodromeOnChainDeadlineUnix, aerodromeUnsupportedChainMessage, isAerodromeChainSupported, isAerodromeNativeToken } from './support.js'\n\nfunction applySlippage(amountOut: bigint, slippagePercent: number): bigint {\n if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {\n throw new Error('Slippage must be between 0 and 100 (exclusive).')\n }\n const bps = BigInt(Math.round(slippagePercent * 100))\n return amountOut - (amountOut * bps) / 10_000n\n}\n\n/** Metarouter V2_SWAP_EXACT_IN (0x08), optional WRAP_ETH (0x0b) and UNWRAP_WETH (0x0c). */\nfunction encodeAeroV2ExactIn(args: {\n router: Address\n weth: Address\n pools: Address[]\n tokenIn: Address\n amountIn: bigint\n minOut: bigint\n recipient: Address\n wrapNative: boolean\n unwrapNative: boolean\n}): { data: Hex; value: bigint } {\n const commands: number[] = []\n const inputs: Hex[] = []\n const spend = (mode: number, amount: bigint): Hex =>\n encodeAbiParameters(\n [\n { type: 'uint8', name: 'mode' },\n { type: 'uint256', name: 'value' },\n ],\n [mode, amount],\n )\n if (args.wrapNative) {\n commands.push(0x0b)\n inputs.push(spend(0, args.amountIn))\n }\n commands.push(0x08)\n inputs.push(\n encodeAbiParameters(\n [\n { type: 'address[]', name: 'pools' },\n { type: 'address', name: 'tokenIn' },\n {\n type: 'tuple',\n name: 'amountIn',\n components: [\n { name: 'mode', type: 'uint8' },\n { name: 'value', type: 'uint256' },\n ],\n },\n { type: 'bool', name: 'payerIsUser' },\n { type: 'uint256', name: 'minAmountOut' },\n { type: 'address', name: 'recipient' },\n ],\n [\n args.pools,\n args.wrapNative ? args.weth : args.tokenIn,\n { mode: 0, value: args.amountIn },\n !args.wrapNative,\n args.minOut,\n args.unwrapNative ? args.router : args.recipient,\n ],\n ),\n )\n if (args.unwrapNative) {\n commands.push(0x0c)\n inputs.push(\n encodeAbiParameters(\n [\n { type: 'address', name: 'recipient' },\n {\n type: 'tuple',\n name: 'spend',\n components: [\n { name: 'mode', type: 'uint8' },\n { name: 'value', type: 'uint256' },\n ],\n },\n ],\n [args.recipient, { mode: 1, value: 1_000_000n }],\n ),\n )\n }\n const commandsBytes = `0x${commands.map((n) => n.toString(16).padStart(2, '0')).join('')}` as Hex\n return {\n data: encodeFunctionData({\n abi: aeroMetarouterAbi,\n functionName: 'execute',\n args: [commandsBytes, inputs],\n }),\n value: args.wrapNative ? args.amountIn : 0n,\n }\n}\n\nasync function appendSequentialMixedHops(args: {\n steps: AerodromeStep[]\n addrs: AerodromeAddresses\n rpcUrl: string\n executor: Address\n hops: AerodromeRouteHop[]\n amountIn: bigint\n amountOutMin: bigint\n slippagePercent: number\n deadline: bigint\n isNativeIn: boolean\n isNativeOut: boolean\n}): Promise<void> {\n let remainingIn = args.amountIn\n for (let i = 0; i < args.hops.length; i++) {\n const hop = args.hops[i]!\n const isFirst = i === 0\n const isLast = i === args.hops.length - 1\n const quoted = await quoteAerodromeHopsAmountOut({\n rpcUrl: args.rpcUrl,\n router: args.addrs.router,\n mixedQuoter: args.addrs.mixedQuoter,\n mixedQuoterV3: args.addrs.mixedQuoterV3,\n amountIn: remainingIn,\n hops: [hop],\n })\n if (!quoted) {\n throw new Error(`Aerodrome hop ${i + 1} of ${args.hops.length} returned no quote.`)\n }\n const hopOutMin = isLast ? args.amountOutMin : applySlippage(quoted.out, args.slippagePercent)\n const payNative = isFirst && args.isNativeIn\n\n if (hop.kind === 'cl') {\n const swapRouter = aerodromeClSwapRouterForFactory(args.addrs, hop.factory)\n if (!payNative) {\n await pushErc20ApproveIfNeeded({\n steps: args.steps,\n rpcUrl: args.rpcUrl,\n token: hop.from,\n owner: args.executor,\n spender: swapRouter,\n amountWei: remainingIn,\n })\n }\n args.steps.push({\n to: swapRouter,\n data: encodeFunctionData({\n abi: clSwapRouterAbi,\n functionName: 'exactInputSingle',\n args: [\n {\n tokenIn: hop.from,\n tokenOut: hop.to,\n tickSpacing: hop.type,\n recipient: args.executor,\n deadline: args.deadline,\n amountIn: remainingIn,\n amountOutMinimum: hopOutMin,\n sqrtPriceLimitX96: 0n,\n },\n ],\n }),\n value: payNative ? remainingIn : 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 400_000n,\n })\n } else {\n if (!payNative) {\n await pushErc20ApproveIfNeeded({\n steps: args.steps,\n rpcUrl: args.rpcUrl,\n token: hop.from,\n owner: args.executor,\n spender: args.addrs.metarouter,\n amountWei: remainingIn,\n })\n }\n const encoded = encodeAeroV2ExactIn({\n router: args.addrs.metarouter,\n weth: args.addrs.weth,\n pools: [hop.lp],\n tokenIn: hop.from,\n amountIn: remainingIn,\n minOut: hopOutMin,\n recipient: args.executor,\n wrapNative: payNative,\n unwrapNative: isLast && args.isNativeOut,\n })\n args.steps.push({\n to: args.addrs.metarouter,\n data: encoded.data,\n value: encoded.value,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n }\n remainingIn = hopOutMin\n }\n}\n\nexport async function buildEvmMultisignBodyAerodromeSwapBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenIn: string\n tokenOut: string\n amountHuman: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n quoteSnapshot?: AerodromeQuoteResult | null\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const quote =\n args.quoteSnapshot?.hops?.length && args.quoteSnapshot.amountOutWei\n ? args.quoteSnapshot\n : await aerodromeQuote({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n tokenIn: args.tokenIn,\n tokenOut: args.tokenOut,\n amountHuman: args.amountHuman,\n })\n\n const amountIn = BigInt(quote.amountInWei)\n const amountOutMin = applySlippage(BigInt(quote.amountOutWei), args.slippagePercent)\n const isNativeIn = quote.isNativeIn || isAerodromeNativeToken(args.tokenIn)\n const isNativeOut = quote.isNativeOut || isAerodromeNativeToken(args.tokenOut)\n const hops = quote.hops\n const deadline = aerodromeOnChainDeadlineUnix(args.expiryDate)\n const steps: AerodromeStep[] = []\n\n const sdkTx =\n hops.length === 0\n ? await tryAerodromeSdkUnsignedSwap({\n rpcUrl: args.rpcUrl,\n account: executor,\n quote,\n slippage: args.slippagePercent / 100,\n })\n : null\n if (sdkTx) {\n const tokenInAddr = getAddress((isNativeIn ? addrs.weth : quote.tokenIn) as `0x${string}`)\n if (!isNativeIn) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: tokenInAddr,\n owner: executor,\n spender: sdkTx.to,\n amountWei: amountIn,\n })\n }\n steps.push({\n to: sdkTx.to,\n data: sdkTx.data,\n value: sdkTx.value,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 400_000n,\n })\n } else if (hops.length > 0 && hops.every((h) => h.kind !== 'cl')) {\n if (!isNativeIn) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: hops[0]!.from,\n owner: executor,\n spender: addrs.metarouter,\n amountWei: amountIn,\n })\n }\n const encoded = encodeAeroV2ExactIn({\n router: addrs.metarouter,\n weth: addrs.weth,\n pools: hops.map((h) => h.lp),\n tokenIn: hops[0]!.from,\n amountIn,\n minOut: amountOutMin,\n recipient: executor,\n wrapNative: isNativeIn,\n unwrapNative: isNativeOut,\n })\n steps.push({\n to: addrs.metarouter,\n data: encoded.data,\n value: encoded.value,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 350_000n,\n })\n } else if (hops.length === 1 && hops[0]!.kind === 'cl') {\n const hop = hops[0]!\n const swapRouter = aerodromeClSwapRouterForFactory(addrs, hop.factory)\n if (!isNativeIn) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: hop.from,\n owner: executor,\n spender: swapRouter,\n amountWei: amountIn,\n })\n }\n steps.push({\n to: swapRouter,\n data: encodeFunctionData({\n abi: clSwapRouterAbi,\n functionName: 'exactInputSingle',\n args: [\n {\n tokenIn: hop.from,\n tokenOut: hop.to,\n tickSpacing: hop.type,\n recipient: executor,\n deadline,\n amountIn,\n amountOutMinimum: amountOutMin,\n sqrtPriceLimitX96: 0n,\n },\n ],\n }),\n value: isNativeIn ? amountIn : 0n,\n kind: 'swap',\n routerSwap: true,\n fallbackGas: 400_000n,\n })\n } else if (hops.length > 1) {\n await appendSequentialMixedHops({\n steps,\n addrs,\n rpcUrl: args.rpcUrl,\n executor,\n hops,\n amountIn,\n amountOutMin,\n slippagePercent: args.slippagePercent,\n deadline,\n isNativeIn,\n isNativeOut,\n })\n } else {\n throw new Error(\n 'No unsigned Aerodrome swap path: install @dromos-labs/sdk.js for mixed routes, or use a v2 / single-hop CL quote.',\n )\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix:\n steps.length === 1\n ? 'Aerodrome: 1-tx swap.'\n : `Aerodrome: ${steps.length}-tx batch — ERC-20 approve then swap.`,\n meta: (step) =>\n step.kind === 'approve'\n ? {\n signatureText: JSON.stringify({\n kind: 'Aerodrome',\n name: 'ERC20.approve',\n note: 'Allowance for this swap amount only.',\n }),\n evm: { type: 'aerodrome_erc20_approve', version: 1, chainId: String(args.chainId) },\n }\n : {\n signatureText: JSON.stringify({\n kind: 'Aerodrome',\n name: 'swap',\n hops: hops.map((h) => ({ from: h.from, to: h.to, kind: h.kind })),\n }),\n evm: { type: 'aerodrome_swap', version: 1, chainId: String(args.chainId) },\n },\n })\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { encodeFunctionData, getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail, EvmTxStep } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { routerSwapGasLimitFromEstimate } from '../../../chains/evm/routerSwapGas.js'\nimport { erc20Abi } from './abi.js'\nimport { aerodromePublicClient } from './client.js'\nimport { AERODROME_CHAIN_ID } from './support.js'\n\nexport type AerodromeStep = EvmTxStep & { kind: string }\n\nexport async function pushErc20ApproveIfNeeded(args: {\n steps: AerodromeStep[]\n rpcUrl: string\n token: Address\n owner: Address\n spender: Address\n amountWei: bigint\n}): Promise<void> {\n const client = aerodromePublicClient(args.rpcUrl)\n const allowance = await client.readContract({\n address: args.token,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n if (allowance >= args.amountWei) return\n if (allowance > 0n) {\n args.steps.push({\n to: args.token,\n data: encodeFunctionData({ abi: erc20Abi, functionName: 'approve', args: [args.spender, 0n] }),\n value: 0n,\n kind: 'approve',\n fallbackGas: 80_000n,\n })\n }\n args.steps.push({\n to: args.token,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [args.spender, args.amountWei],\n }),\n value: 0n,\n kind: 'approve',\n fallbackGas: 80_000n,\n })\n}\n\nexport async function buildAerodromeMultisignBatch(args: {\n keyGen: KeyGenSubsetForPermit\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n chainId?: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n steps: AerodromeStep[]\n purposeSuffix: string\n meta: (step: AerodromeStep) => Record<string, unknown>\n}): Promise<ReturnType<typeof buildEvmMultisignBatch>> {\n if (args.steps.length === 0) throw new Error('Aerodrome batch has no steps.')\n const executor = getAddress(args.executorAddress)\n const first = args.steps[0]!\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n const payableValueWei = args.steps.reduce((a, s) => a + s.value, 0n)\n const chainGasLimitRouter =\n args.chainDetail?.gasLimit != null &&\n Number.isFinite(Number(args.chainDetail.gasLimit)) &&\n Number(args.chainDetail.gasLimit) > 0\n ? Number(args.chainDetail.gasLimit)\n : undefined\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId ?? AERODROME_CHAIN_ID,\n rpcUrl: args.rpcUrl,\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate: args.expiryDate,\n },\n steps: args.steps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n payableValueWei: payableValueWei > 0n ? payableValueWei : undefined,\n resolveGasLimit: async ({ step, estimatedGas }) => {\n const s = step as AerodromeStep\n if (s.routerSwap) return routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n return estimatedGas\n },\n buildBatchMeta: ({ step }) => args.meta(step as AerodromeStep),\n })\n}\n","import { formatUnits, parseUnits, zeroAddress, type Address } from 'viem'\nimport { aerodromePoolMetaAbi, clPoolAbi, erc20Abi, routerAbi, sugarHelperAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeDiscoverDirectPools } from './discover.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n assertAerodromeStockIssued,\n ensureAerodromeStockTickers,\n isAerodromeB20AssetToken,\n isAerodromeCoinbaseStockToken,\n lookupAerodromeKnownToken,\n resolveAerodromeErc20OrWeth,\n} from './stockTokens.js'\nimport {\n AERODROME_USDC_BASE,\n AERODROME_WETH_BASE,\n aerodromeUnsupportedChainMessage,\n isAerodromeChainSupported,\n isAerodromeNativeToken,\n} from './support.js'\n\n/** Large desired amount so Router quoteAddLiquidity solves for the other side from reserves. */\nconst OTHER_SIDE_DESIRED = 10n ** 36n\n\nexport type AerodromeAddLiquidityQuote = {\n tokenA: Address\n tokenB: Address\n stable: boolean\n amountA: string\n amountB: string\n amountAHuman: string\n amountBHuman: string\n liquidity: string\n isNativeA: boolean\n isNativeB: boolean\n pool: Address\n emptyPool: boolean\n kind?: 'stable' | 'volatile' | 'cl'\n tickSpacing?: number\n seedable?: boolean\n hint?: string\n}\n\nconst Q96 = 1n << 96n\n\nfunction pairTokenLabel(address: Address, isNative: boolean): string {\n if (isNative) return 'ETH'\n if (address.toLowerCase() === AERODROME_WETH_BASE.toLowerCase()) return 'WETH'\n if (address.toLowerCase() === AERODROME_USDC_BASE.toLowerCase()) return 'USDC'\n return lookupAerodromeKnownToken(address)?.symbol || `${address.slice(0, 6)}…${address.slice(-4)}`\n}\n\nfunction noDirectPoolHint(args: {\n tokenA: Address\n tokenB: Address\n isNativeA: boolean\n isNativeB: boolean\n}): string {\n const a = pairTokenLabel(args.tokenA, args.isNativeA)\n const b = pairTokenLabel(args.tokenB, args.isNativeB)\n const stockAddr = isAerodromeB20AssetToken(args.tokenB)\n ? args.tokenB\n : isAerodromeB20AssetToken(args.tokenA)\n ? args.tokenA\n : null\n if (stockAddr) {\n const sym = pairTokenLabel(stockAddr, false)\n return `No ${a}/${b} pool on Aerodrome. ${sym} liquidity is on Slipstream vs USDC (swaps hop through USDC). Pick USDC as the pair token to add ${sym}/USDC liquidity.`\n }\n return `No vAMM, sAMM, or Slipstream pool for ${a}/${b}. This pair cannot be deposited as a single LP.`\n}\n\nfunction formatLpHuman(wei: bigint, decimals: number): string {\n const maxFrac = Math.min(Math.max(decimals, 0), 8)\n const dust = decimals > maxFrac ? 10n ** BigInt(decimals - maxFrac) : 1n\n const rounded = dust === 1n ? wei : (wei + dust / 2n) / dust * dust\n const s = formatUnits(rounded, decimals)\n if (!s.includes('.')) return s\n const [i, f] = s.split('.')\n const trimmed = (f ?? '').replace(/0+$/, '')\n return trimmed ? `${i}.${trimmed}` : i ?? s\n}\n\nexport async function aerodromeQuoteAddLiquidity(args: {\n chainId: number\n rpcUrl: string\n tokenA: string\n tokenB: string\n stable: boolean\n amountAHuman?: string\n amountBHuman?: string\n tokenADecimals?: number\n tokenBDecimals?: number\n}): Promise<AerodromeAddLiquidityQuote> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n const client = aerodromePublicClient(args.rpcUrl)\n await ensureAerodromeStockTickers([args.tokenA, args.tokenB])\n const isNativeA = isAerodromeNativeToken(args.tokenA)\n const isNativeB = isAerodromeNativeToken(args.tokenB)\n const tokenA = resolveAerodromeErc20OrWeth(args.tokenA, addrs.weth)\n const tokenB = resolveAerodromeErc20OrWeth(args.tokenB, addrs.weth)\n await assertAerodromeStockIssued({\n rpcUrl: args.rpcUrl,\n token: tokenA,\n isNative: isNativeA,\n label: args.tokenA,\n })\n await assertAerodromeStockIssued({\n rpcUrl: args.rpcUrl,\n token: tokenB,\n isNative: isNativeB,\n label: args.tokenB,\n })\n const rawA = (args.amountAHuman ?? '').trim().replace(/,/g, '')\n const rawB = (args.amountBHuman ?? '').trim().replace(/,/g, '')\n if (!rawA && !rawB) throw new Error('Enter amount A or amount B.')\n const decA = isAerodromeCoinbaseStockToken(tokenA)\n ? AERODROME_COINBASE_STOCK_DECIMALS\n : args.tokenADecimals ??\n (isNativeA\n ? 18\n : Number(await client.readContract({ address: tokenA, abi: erc20Abi, functionName: 'decimals' })))\n const decB = isAerodromeCoinbaseStockToken(tokenB)\n ? AERODROME_COINBASE_STOCK_DECIMALS\n : args.tokenBDecimals ??\n (isNativeB\n ? 18\n : Number(await client.readContract({ address: tokenB, abi: erc20Abi, functionName: 'decimals' })))\n\n const pool = await client.readContract({\n address: addrs.router,\n abi: routerAbi,\n functionName: 'poolFor',\n args: [tokenA, tokenB, args.stable, addrs.poolFactory],\n })\n let emptyPool = pool === zeroAddress\n if (!emptyPool) {\n try {\n const reserves = await client.readContract({\n address: pool,\n abi: aerodromePoolMetaAbi,\n functionName: 'getReserves',\n })\n emptyPool = reserves[0] === 0n || reserves[1] === 0n\n } catch {\n emptyPool = true\n }\n }\n\n const amountAParsed = rawA ? parseUnits(rawA, decA) : 0n\n const amountBParsed = rawB ? parseUnits(rawB, decB) : 0n\n if (emptyPool) {\n const cl = await quoteClPairRatio({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n tokenA,\n tokenB,\n rawA,\n rawB,\n amountAParsed,\n amountBParsed,\n decA,\n decB,\n })\n if (cl) {\n return {\n tokenA,\n tokenB,\n stable: args.stable,\n amountA: cl.amountA.toString(),\n amountB: cl.amountB.toString(),\n amountAHuman: formatLpHuman(cl.amountA, decA),\n amountBHuman: formatLpHuman(cl.amountB, decB),\n liquidity: '0',\n isNativeA,\n isNativeB,\n pool: cl.pool,\n emptyPool: false,\n kind: 'cl',\n tickSpacing: cl.tickSpacing,\n }\n }\n return {\n tokenA,\n tokenB,\n stable: args.stable,\n amountA: amountAParsed.toString(),\n amountB: amountBParsed.toString(),\n amountAHuman: rawA,\n amountBHuman: rawB,\n liquidity: '0',\n isNativeA,\n isNativeB,\n pool,\n emptyPool: true,\n seedable: false,\n hint: noDirectPoolHint({ tokenA, tokenB, isNativeA, isNativeB }),\n }\n }\n\n const amountADesired = rawA ? amountAParsed : OTHER_SIDE_DESIRED\n const amountBDesired = rawB ? amountBParsed : OTHER_SIDE_DESIRED\n if (addrs.router.toLowerCase() === addrs.metarouter.toLowerCase()) {\n throw new Error(\n 'Aero v2 add-liquidity on this chain uses the Metarouter and is not encoded yet. Base still quotes through the legacy router.',\n )\n }\n const [amountA, amountB, liquidity] = await client.readContract({\n address: addrs.router,\n abi: routerAbi,\n functionName: 'quoteAddLiquidity',\n args: [tokenA, tokenB, args.stable, addrs.poolFactory, amountADesired, amountBDesired],\n })\n return {\n tokenA,\n tokenB,\n stable: args.stable,\n amountA: amountA.toString(),\n amountB: amountB.toString(),\n amountAHuman: formatLpHuman(amountA, decA),\n amountBHuman: formatLpHuman(amountB, decB),\n liquidity: liquidity.toString(),\n isNativeA,\n isNativeB,\n pool,\n emptyPool: false,\n kind: args.stable ? 'stable' : 'volatile',\n seedable: true,\n }\n}\n\nasync function quoteClPairRatio(args: {\n chainId: number\n rpcUrl: string\n tokenA: Address\n tokenB: Address\n rawA: string\n rawB: string\n amountAParsed: bigint\n amountBParsed: bigint\n decA: number\n decB: number\n}): Promise<{ pool: Address; tickSpacing: number; amountA: bigint; amountB: bigint } | null> {\n const directs = await aerodromeDiscoverDirectPools({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n tokenA: args.tokenA,\n tokenB: args.tokenB,\n })\n const cls = directs.filter((p) => p.kind === 'cl')\n if (cls.length === 0) return null\n const client = aerodromePublicClient(args.rpcUrl)\n const meta = await client.multicall({\n allowFailure: true,\n contracts: cls.flatMap((p) => [\n { address: p.lp, abi: clPoolAbi, functionName: 'liquidity' as const },\n { address: p.lp, abi: clPoolAbi, functionName: 'slot0' as const },\n ]),\n })\n let best: { pool: Address; tickSpacing: number; sqrtP: bigint; liquidity: bigint } | null = null\n for (let i = 0; i < cls.length; i++) {\n const liqRow = meta[i * 2]\n const slotRow = meta[i * 2 + 1]\n if (slotRow?.status !== 'success' || !slotRow.result) continue\n const slot = slotRow.result\n if (!Array.isArray(slot)) continue\n const sqrtP = BigInt(slot[0])\n if (sqrtP === 0n) continue\n const liquidity =\n liqRow?.status === 'success' &&\n (typeof liqRow.result === 'bigint' ||\n typeof liqRow.result === 'string' ||\n typeof liqRow.result === 'number')\n ? BigInt(liqRow.result)\n : 0n\n if (!best || liquidity > best.liquidity) {\n best = { pool: cls[i]!.lp, tickSpacing: cls[i]!.type, sqrtP, liquidity }\n }\n }\n if (!best) return null\n const token0 = args.tokenA.toLowerCase() < args.tokenB.toLowerCase() ? args.tokenA : args.tokenB\n const aIs0 = args.tokenA.toLowerCase() === token0.toLowerCase()\n const addrs = await loadAerodromeAddresses(args.chainId)\n let amount0 = aIs0 ? args.amountAParsed : args.amountBParsed\n let amount1 = aIs0 ? args.amountBParsed : args.amountAParsed\n if (args.rawA && !args.rawB) {\n if (aIs0) {\n amount0 = args.amountAParsed\n amount1 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount0, best.sqrtP, true)\n } else {\n amount1 = args.amountAParsed\n amount0 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount1, best.sqrtP, false)\n }\n } else if (args.rawB && !args.rawA) {\n if (aIs0) {\n amount1 = args.amountBParsed\n amount0 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount1, best.sqrtP, false)\n } else {\n amount0 = args.amountBParsed\n amount1 = await estimateClOtherSide(client, addrs.sugarSlipstreamHelper, amount0, best.sqrtP, true)\n }\n }\n return {\n pool: best.pool,\n tickSpacing: best.tickSpacing,\n amountA: aIs0 ? amount0 : amount1,\n amountB: aIs0 ? amount1 : amount0,\n }\n}\n\nasync function estimateClOtherSide(\n client: ReturnType<typeof aerodromePublicClient>,\n helper: Address,\n amount: bigint,\n sqrtP: bigint,\n amountIs0: boolean,\n): Promise<bigint> {\n try {\n const out = await client.readContract({\n address: helper,\n abi: sugarHelperAbi,\n functionName: amountIs0 ? 'estimateAmount1' : 'estimateAmount0',\n args: [amount, sqrtP, sqrtP, sqrtP],\n })\n if (out > 0n) return out\n } catch {\n /* fall through */\n }\n if (sqrtP === 0n) return 0n\n return amountIs0 ? (amount * sqrtP) / Q96 * sqrtP / Q96 : (amount * Q96) / sqrtP * Q96 / sqrtP\n}\n","import { encodeFunctionData, getAddress, parseUnits, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { erc20Abi, routerAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport { aerodromePublicClient } from './client.js'\nimport { aerodromeQuoteAddLiquidity } from './liquidityBasic.js'\nimport { ensureAerodromeStockTickers, resolveAerodromeErc20OrWeth } from './stockTokens.js'\nimport { aerodromeOnChainDeadlineUnix, isAerodromeNativeToken } from './support.js'\n\nfunction minAfterSlippage(amount: bigint, slippagePercent: number): bigint {\n if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {\n throw new Error('Slippage must be between 0 and 100 (exclusive).')\n }\n const bps = BigInt(Math.round(slippagePercent * 100))\n return amount - (amount * bps) / 10_000n\n}\n\nexport async function buildEvmMultisignBodyAerodromeAddLiquidityBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenA: string\n tokenB: string\n stable: boolean\n amountAHuman?: string\n amountBHuman?: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const quote = await aerodromeQuoteAddLiquidity({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n tokenA: args.tokenA,\n tokenB: args.tokenB,\n stable: args.stable,\n amountAHuman: args.amountAHuman,\n amountBHuman: args.amountBHuman,\n })\n if (quote.emptyPool || quote.seedable === false) {\n throw new Error(\n quote.hint ||\n 'No Aerodrome pool to deposit into. Coinbase stocks such as AAPLc have no ETH pool — pair vs USDC.',\n )\n }\n if (quote.kind === 'cl') {\n throw new Error(\n `This pair’s live liquidity is Slipstream (tick spacing ${quote.tickSpacing ?? '?'}). Use ctm_aerodrome_quote_cl_deposit + ctm_aerodrome_build_cl_mint_multisign. Basic addLiquidity would seed a new empty vAMM.`,\n )\n }\n const amountA = BigInt(quote.amountA)\n const amountB = BigInt(quote.amountB)\n const minA = minAfterSlippage(amountA, args.slippagePercent)\n const minB = minAfterSlippage(amountB, args.slippagePercent)\n const deadline = aerodromeOnChainDeadlineUnix(args.expiryDate)\n const steps: AerodromeStep[] = []\n\n if (!quote.isNativeA) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.tokenA,\n owner: executor,\n spender: addrs.router,\n amountWei: amountA,\n })\n }\n if (!quote.isNativeB) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.tokenB,\n owner: executor,\n spender: addrs.router,\n amountWei: amountB,\n })\n }\n\n if (quote.isNativeA || quote.isNativeB) {\n const token = quote.isNativeA ? quote.tokenB : quote.tokenA\n const amountToken = quote.isNativeA ? amountB : amountA\n const amountEth = quote.isNativeA ? amountA : amountB\n const minToken = quote.isNativeA ? minB : minA\n const minEth = quote.isNativeA ? minA : minB\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'addLiquidityETH',\n args: [token, args.stable, amountToken, minToken, minEth, executor, deadline],\n }),\n value: amountEth,\n kind: 'add_liquidity',\n fallbackGas: 400_000n,\n })\n } else {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'addLiquidity',\n args: [\n quote.tokenA,\n quote.tokenB,\n args.stable,\n amountA,\n amountB,\n minA,\n minB,\n executor,\n deadline,\n ],\n }),\n value: 0n,\n kind: 'add_liquidity',\n fallbackGas: 400_000n,\n })\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: add basic-pool liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'addLiquidity', stable: args.stable }),\n evm: { type: 'aerodrome_add_liquidity', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeRemoveLiquidityBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenA: string\n tokenB: string\n stable: boolean\n lpToken: Address\n liquidityHuman: string\n lpDecimals?: number\n amountAMinHuman?: string\n amountBMinHuman?: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const client = aerodromePublicClient(args.rpcUrl)\n const lp = getAddress(args.lpToken)\n const dec =\n args.lpDecimals ??\n Number(await client.readContract({ address: lp, abi: erc20Abi, functionName: 'decimals' }))\n const liquidity = parseUnits(args.liquidityHuman.trim(), dec)\n await ensureAerodromeStockTickers([args.tokenA, args.tokenB])\n const tokenA = resolveAerodromeErc20OrWeth(args.tokenA, addrs.weth)\n const tokenB = resolveAerodromeErc20OrWeth(args.tokenB, addrs.weth)\n const isNativeA = isAerodromeNativeToken(args.tokenA)\n const isNativeB = isAerodromeNativeToken(args.tokenB)\n const minA = parseUnits(args.amountAMinHuman?.trim() || '0', 18)\n const minB = parseUnits(args.amountBMinHuman?.trim() || '0', 18)\n const deadline = aerodromeOnChainDeadlineUnix(args.expiryDate)\n const steps: AerodromeStep[] = []\n\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: lp,\n owner: executor,\n spender: addrs.router,\n amountWei: liquidity,\n })\n\n if (isNativeA || isNativeB) {\n const token = isNativeA ? tokenB : tokenA\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'removeLiquidityETH',\n args: [token, args.stable, liquidity, isNativeA ? minB : minA, isNativeA ? minA : minB, executor, deadline],\n }),\n value: 0n,\n kind: 'remove_liquidity',\n fallbackGas: 350_000n,\n })\n } else {\n steps.push({\n to: addrs.router,\n data: encodeFunctionData({\n abi: routerAbi,\n functionName: 'removeLiquidity',\n args: [tokenA, tokenB, args.stable, liquidity, minA, minB, executor, deadline],\n }),\n value: 0n,\n kind: 'remove_liquidity',\n fallbackGas: 350_000n,\n })\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: remove basic-pool liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'removeLiquidity', lp }),\n evm: { type: 'aerodrome_remove_liquidity', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n","import { parseUnits, type Address } from 'viem'\nimport { erc20Abi, sugarHelperAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePublicClient } from './client.js'\nimport { ensureAerodromeStockTickers, resolveAerodromeErc20OrWeth } from './stockTokens.js'\nimport { aerodromeUnsupportedChainMessage, isAerodromeChainSupported, isAerodromeNativeToken } from './support.js'\n\nexport type AerodromeClDepositQuote = {\n token0: Address\n token1: Address\n amount0: string\n amount1: string\n tickSpacing: number\n tickLower: number\n tickUpper: number\n sqrtPriceX96: string\n}\n\nexport async function aerodromeQuoteClDeposit(args: {\n chainId: number\n rpcUrl: string\n token0: string\n token1: string\n amount0Human?: string\n amount1Human?: string\n tickSpacing: number\n tickLower: number\n tickUpper: number\n sqrtPriceX96: string\n token0Decimals?: number\n token1Decimals?: number\n}): Promise<AerodromeClDepositQuote> {\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const addrs = await loadAerodromeAddresses(args.chainId)\n const client = aerodromePublicClient(args.rpcUrl)\n await ensureAerodromeStockTickers([args.token0, args.token1])\n const token0 = resolveAerodromeErc20OrWeth(args.token0, addrs.weth)\n const token1 = resolveAerodromeErc20OrWeth(args.token1, addrs.weth)\n const dec0 =\n args.token0Decimals ??\n (isAerodromeNativeToken(args.token0)\n ? 18\n : Number(await client.readContract({ address: token0, abi: erc20Abi, functionName: 'decimals' })))\n const dec1 =\n args.token1Decimals ??\n (isAerodromeNativeToken(args.token1)\n ? 18\n : Number(await client.readContract({ address: token1, abi: erc20Abi, functionName: 'decimals' })))\n\n const helper = addrs.sugarSlipstreamHelper\n const sqrt = BigInt(args.sqrtPriceX96 || '0')\n let amount0 = args.amount0Human?.trim() ? parseUnits(args.amount0Human.trim(), dec0) : 0n\n let amount1 = args.amount1Human?.trim() ? parseUnits(args.amount1Human.trim(), dec1) : 0n\n\n // SugarHelper needs sqrtRatio at the ticks (not the tick ints). When both\n // amounts are set we skip it; when one side is missing and sqrtPriceX96 is set,\n // callers should pass precomputed sqrtRatioAX96/BX96 via amount pairing.\n if (sqrt > 0n && amount0 > 0n && amount1 === 0n) {\n try {\n amount1 = await client.readContract({\n address: helper,\n abi: sugarHelperAbi,\n functionName: 'estimateAmount1',\n args: [amount0, sqrt, sqrt, sqrt],\n })\n } catch {\n /* keep amount1 = 0 */\n }\n } else if (sqrt > 0n && amount1 > 0n && amount0 === 0n) {\n try {\n amount0 = await client.readContract({\n address: helper,\n abi: sugarHelperAbi,\n functionName: 'estimateAmount0',\n args: [amount1, sqrt, sqrt, sqrt],\n })\n } catch {\n /* keep amount0 = 0 */\n }\n }\n\n return {\n token0,\n token1,\n amount0: amount0.toString(),\n amount1: amount1.toString(),\n tickSpacing: args.tickSpacing,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n sqrtPriceX96: args.sqrtPriceX96,\n }\n}\n","import { encodeFunctionData, getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { nfpmAbi } from './abi.js'\nimport { loadAerodromeAddresses } from './addresses.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\nimport { aerodromeQuoteClDeposit } from './liquidityCl.js'\nimport { ensureAerodromeStockTickers, resolveAerodromeErc20OrWeth } from './stockTokens.js'\nimport { aerodromeOnChainDeadlineUnix, isAerodromeNativeToken } from './support.js'\n\nfunction minAfterSlippage(amount: bigint, slippagePercent: number): bigint {\n if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {\n throw new Error('Slippage must be between 0 and 100 (exclusive).')\n }\n const bps = BigInt(Math.round(slippagePercent * 100))\n return amount - (amount * bps) / 10_000n\n}\n\nexport async function buildEvmMultisignBodyAerodromeClMintBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n token0: string\n token1: string\n amount0Human?: string\n amount1Human?: string\n tickSpacing: number\n tickLower: number\n tickUpper: number\n sqrtPriceX96: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const quote = await aerodromeQuoteClDeposit({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n token0: args.token0,\n token1: args.token1,\n amount0Human: args.amount0Human,\n amount1Human: args.amount1Human,\n tickSpacing: args.tickSpacing,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n sqrtPriceX96: args.sqrtPriceX96,\n })\n const amount0 = BigInt(quote.amount0)\n const amount1 = BigInt(quote.amount1)\n const steps: AerodromeStep[] = []\n let value = 0n\n if (!isAerodromeNativeToken(args.token0)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.token0,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount0,\n })\n } else {\n value += amount0\n }\n if (!isAerodromeNativeToken(args.token1)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: quote.token1,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount1,\n })\n } else {\n value += amount1\n }\n\n const poolExists = BigInt(args.sqrtPriceX96) === 0n\n steps.push({\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'mint',\n args: [\n {\n token0: quote.token0,\n token1: quote.token1,\n tickSpacing: args.tickSpacing,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n amount0Desired: amount0,\n amount1Desired: amount1,\n amount0Min: minAfterSlippage(amount0, args.slippagePercent),\n amount1Min: minAfterSlippage(amount1, args.slippagePercent),\n recipient: executor,\n deadline: aerodromeOnChainDeadlineUnix(args.expiryDate),\n sqrtPriceX96: poolExists ? 0n : BigInt(args.sqrtPriceX96),\n },\n ],\n }),\n value,\n kind: 'cl_mint',\n fallbackGas: 600_000n,\n })\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: mint concentrated position NFT.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.mint' }),\n evm: { type: 'aerodrome_cl_mint', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClIncreaseBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n token0: string\n token1: string\n amount0Wei: string\n amount1Wei: string\n slippagePercent: number\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const amount0 = BigInt(args.amount0Wei)\n const amount1 = BigInt(args.amount1Wei)\n await ensureAerodromeStockTickers([args.token0, args.token1])\n const token0 = resolveAerodromeErc20OrWeth(args.token0, addrs.weth)\n const token1 = resolveAerodromeErc20OrWeth(args.token1, addrs.weth)\n const steps: AerodromeStep[] = []\n let value = 0n\n if (!isAerodromeNativeToken(args.token0)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: token0,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount0,\n })\n } else value += amount0\n if (!isAerodromeNativeToken(args.token1)) {\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: token1,\n owner: executor,\n spender: addrs.nfpm,\n amountWei: amount1,\n })\n } else value += amount1\n\n steps.push({\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'increaseLiquidity',\n args: [\n {\n tokenId: BigInt(args.tokenId),\n amount0Desired: amount0,\n amount1Desired: amount1,\n amount0Min: minAfterSlippage(amount0, args.slippagePercent),\n amount1Min: minAfterSlippage(amount1, args.slippagePercent),\n deadline: aerodromeOnChainDeadlineUnix(args.expiryDate),\n },\n ],\n }),\n value,\n kind: 'cl_increase',\n fallbackGas: 400_000n,\n })\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: increase liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.increaseLiquidity', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_increase', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClDecreaseBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n liquidity: string\n amount0MinWei?: string\n amount1MinWei?: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const steps: AerodromeStep[] = [\n {\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'decreaseLiquidity',\n args: [\n {\n tokenId: BigInt(args.tokenId),\n liquidity: BigInt(args.liquidity),\n amount0Min: BigInt(args.amount0MinWei ?? '0'),\n amount1Min: BigInt(args.amount1MinWei ?? '0'),\n deadline: aerodromeOnChainDeadlineUnix(args.expiryDate),\n },\n ],\n }),\n value: 0n,\n kind: 'cl_decrease',\n fallbackGas: 300_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: decrease liquidity.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.decreaseLiquidity', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_decrease', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClCollectBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const max = (2n ** 128n) - 1n\n const steps: AerodromeStep[] = [\n {\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'collect',\n args: [{ tokenId: BigInt(args.tokenId), recipient: executor, amount0Max: max, amount1Max: max }],\n }),\n value: 0n,\n kind: 'cl_collect',\n fallbackGas: 200_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: collect fees.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.collect', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_collect', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClBurnBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n tokenId: string\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const addrs = await loadAerodromeAddresses(args.chainId)\n const steps: AerodromeStep[] = [\n {\n to: addrs.nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'burn',\n args: [BigInt(args.tokenId)],\n }),\n value: 0n,\n kind: 'cl_burn',\n fallbackGas: 120_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome Slipstream: burn empty position NFT.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'nfpm.burn', tokenId: args.tokenId }),\n evm: { type: 'aerodrome_cl_burn', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n","import { encodeFunctionData, getAddress, parseUnits, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { clGaugeAbi, gaugeAbi, nfpmAbi, poolClaimFeesAbi } from './abi.js'\nimport { buildAerodromeMultisignBatch, pushErc20ApproveIfNeeded, type AerodromeStep } from './batch.js'\n\nexport async function buildEvmMultisignBodyAerodromeGaugeStakeBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n gauge: Address\n lpToken?: Address\n amountHuman?: string\n lpDecimals?: number\n tokenId?: string\n cl?: boolean\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const gauge = getAddress(args.gauge)\n const steps: AerodromeStep[] = []\n\n if (args.cl) {\n if (!args.tokenId) throw new Error('tokenId is required to stake a Slipstream NFT.')\n if (!args.lpToken) throw new Error('nfpm / lpToken address is required to approve a Slipstream NFT.')\n const tokenId = BigInt(args.tokenId)\n const nfpm = getAddress(args.lpToken)\n steps.push({\n to: nfpm,\n data: encodeFunctionData({\n abi: nfpmAbi,\n functionName: 'approve',\n args: [gauge, tokenId],\n }),\n value: 0n,\n kind: 'nft_approve',\n fallbackGas: 80_000n,\n })\n steps.push({\n to: gauge,\n data: encodeFunctionData({ abi: clGaugeAbi, functionName: 'deposit', args: [tokenId] }),\n value: 0n,\n kind: 'gauge_stake',\n fallbackGas: 200_000n,\n })\n } else {\n if (!args.lpToken || !args.amountHuman) throw new Error('lpToken and amountHuman are required to stake basic LP.')\n const amount = parseUnits(args.amountHuman.trim(), args.lpDecimals ?? 18)\n await pushErc20ApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(args.lpToken),\n owner: executor,\n spender: gauge,\n amountWei: amount,\n })\n steps.push({\n to: gauge,\n data: encodeFunctionData({ abi: gaugeAbi, functionName: 'deposit', args: [amount] }),\n value: 0n,\n kind: 'gauge_stake',\n fallbackGas: 180_000n,\n })\n }\n\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: stake LP in gauge.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'gauge.deposit' }),\n evm: { type: 'aerodrome_gauge_stake', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeGaugeUnstakeBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n gauge: Address\n amountHuman?: string\n lpDecimals?: number\n tokenId?: string\n cl?: boolean\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const gauge = getAddress(args.gauge)\n const steps: AerodromeStep[] = []\n if (args.cl) {\n if (!args.tokenId) throw new Error('tokenId is required to unstake a Slipstream NFT.')\n steps.push({\n to: gauge,\n data: encodeFunctionData({\n abi: clGaugeAbi,\n functionName: 'withdraw',\n args: [BigInt(args.tokenId)],\n }),\n value: 0n,\n kind: 'gauge_unstake',\n fallbackGas: 200_000n,\n })\n } else {\n if (!args.amountHuman) throw new Error('amountHuman is required to unstake basic LP.')\n const amount = parseUnits(args.amountHuman.trim(), args.lpDecimals ?? 18)\n steps.push({\n to: gauge,\n data: encodeFunctionData({ abi: gaugeAbi, functionName: 'withdraw', args: [amount] }),\n value: 0n,\n kind: 'gauge_unstake',\n fallbackGas: 180_000n,\n })\n }\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: unstake LP from gauge.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'gauge.withdraw' }),\n evm: { type: 'aerodrome_gauge_unstake', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClaimFeesBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n pool: Address\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const pool = getAddress(args.pool)\n const steps: AerodromeStep[] = [\n {\n to: pool,\n data: encodeFunctionData({ abi: poolClaimFeesAbi, functionName: 'claimFees' }),\n value: 0n,\n kind: 'claim_fees',\n fallbackGas: 150_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: claim basic-pool fees.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'pool.claimFees', pool }),\n evm: { type: 'aerodrome_claim_fees', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyAerodromeClaimEmissionsBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n gauge: Address\n tokenId?: string\n cl?: boolean\n executorAddress: Address\n purposeText: string\n expiryDate?: number\n}): Promise<ReturnType<typeof buildAerodromeMultisignBatch>> {\n const executor = getAddress(args.executorAddress)\n const gauge = getAddress(args.gauge)\n const steps: AerodromeStep[] = [\n args.cl\n ? {\n to: gauge,\n data: encodeFunctionData({\n abi: clGaugeAbi,\n functionName: 'getReward',\n args: [BigInt(args.tokenId ?? '0')],\n }),\n value: 0n,\n kind: 'claim_emissions',\n fallbackGas: 150_000n,\n }\n : {\n to: gauge,\n data: encodeFunctionData({\n abi: gaugeAbi,\n functionName: 'getReward',\n args: [executor],\n }),\n value: 0n,\n kind: 'claim_emissions',\n fallbackGas: 150_000n,\n },\n ]\n return buildAerodromeMultisignBatch({\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n executorAddress: executor,\n purposeText: args.purposeText,\n expiryDate: args.expiryDate,\n steps,\n purposeSuffix: 'Aerodrome: claim gauge emissions.',\n meta: () => ({\n signatureText: JSON.stringify({ kind: 'Aerodrome', name: 'gauge.getReward' }),\n evm: { type: 'aerodrome_claim_emissions', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n","import { zeroAddress } from 'viem'\nimport {\n aerodromeUnsupportedChainMessage,\n isAerodromeChainSupported,\n} from './support.js'\nimport { aeroUsdcAddress, loadAerodromeAddresses } from './addresses.js'\nimport { aerodromePositionLabel } from './purpose.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n aerodromeResolveStockTokens,\n fetchOfficialBaseTokenizedStocks,\n isAerodromeB20AssetToken,\n type AerodromeStockTokenRow,\n} from './stockTokens.js'\nimport {\n aerodromeFetchListedTokens,\n aerodromeFetchPositionsWithPools,\n type AerodromeListedToken,\n} from './sugar.js'\n\nfunction mergeStocksIntoListed(\n tokens: AerodromeListedToken[],\n stocks: AerodromeStockTokenRow[],\n): AerodromeListedToken[] {\n const byAddr = new Map(tokens.map((t) => [t.address.toLowerCase(), { ...t }]))\n for (const stock of stocks) {\n const key = stock.address.toLowerCase()\n const prev = byAddr.get(key)\n byAddr.set(key, {\n address: stock.address,\n symbol: stock.symbol || prev?.symbol || '',\n decimals: stock.decimals || prev?.decimals || AERODROME_COINBASE_STOCK_DECIMALS,\n listed: prev?.listed ?? true,\n emerging: prev?.emerging ?? false,\n accountBalance: prev?.accountBalance ?? '0',\n name: stock.name,\n issued: stock.issued,\n iconUrl: stock.iconUrl,\n })\n }\n const stocksFirst = stocks.map((s) => byAddr.get(s.address.toLowerCase())!).filter(Boolean)\n const rest = [...byAddr.values()].filter((t) => !isAerodromeB20AssetToken(t.address))\n return [...stocksFirst, ...rest]\n}\n\nexport async function aerodromeFetchListedTokensSummary(args: {\n chainId: number\n rpcUrl: string\n account?: string\n /** Default true for the Multi-Sign dialog. MCP agents should leave this false. */\n includeSugarListed?: boolean\n}) {\n const includeSugar = args.includeSugarListed !== false && args.chainId === 8453\n const officialPromise =\n args.chainId === 8453 ? fetchOfficialBaseTokenizedStocks().catch(() => []) : Promise.resolve([])\n const tokens = includeSugar ? await aerodromeFetchListedTokens(args) : []\n const official = await officialPromise\n const stocks =\n args.chainId === 8453\n ? await aerodromeResolveStockTokens({\n rpcUrl: args.rpcUrl,\n official,\n knownTokens: tokens,\n })\n : []\n const addrs = await loadAerodromeAddresses(args.chainId)\n const usdc = aeroUsdcAddress(args.chainId)\n const core: AerodromeListedToken[] = [\n { address: zeroAddress, symbol: 'ETH', decimals: 18, listed: true, emerging: false, accountBalance: '0' },\n ...(addrs.weth === zeroAddress\n ? []\n : [\n {\n address: addrs.weth,\n symbol: 'WETH',\n decimals: 18,\n listed: true,\n emerging: false,\n accountBalance: '0',\n },\n ]),\n ...(usdc\n ? [\n {\n address: usdc,\n symbol: 'USDC',\n decimals: 6,\n listed: true,\n emerging: false,\n accountBalance: '0',\n },\n ]\n : []),\n { address: addrs.aero, symbol: 'AERO', decimals: 18, listed: true, emerging: false, accountBalance: '0' },\n ...(addrs.receiptToken.toLowerCase() === addrs.aero.toLowerCase()\n ? []\n : [\n {\n address: addrs.receiptToken,\n symbol: 'xAERO',\n decimals: 18,\n listed: true,\n emerging: false,\n accountBalance: '0',\n },\n ]),\n ]\n return {\n chainId: args.chainId,\n native: { address: zeroAddress, symbol: 'ETH', decimals: 18 },\n aero: { address: addrs.aero, symbol: 'AERO', decimals: 18 },\n stocks,\n includeSugarListed: includeSugar,\n tokens: mergeStocksIntoListed([...core, ...tokens], stocks),\n notes: includeSugar\n ? 'Full LpSugar.tokens plus Coinbase B20 stocks. issued is totalSupply > 0. For a price, call ctm_aerodrome_quote with the ticker — do not grep this list.'\n : 'Slim list: ETH, WETH, USDC, AERO, and Coinbase B20 stocks (AAPLc, …). issued is totalSupply > 0. Do not use this for a price — call ctm_aerodrome_quote({ tokenIn, tokenOut, amountHuman }) with tickers. Pass includeSugarListed:true only if you need the full Sugar dump.',\n }\n}\n\nexport async function aerodromeFetchPoolsSummary(args: {\n chainId: number\n rpcUrl: string\n limit?: number\n offset?: number\n query?: string\n}) {\n const { aerodromeFetchImportantPoolsSummary } = await import('./yields.js')\n const { pools, notes } = await aerodromeFetchImportantPoolsSummary({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n query: args.query,\n })\n const offset = Math.max(0, args.offset ?? 0)\n const limit = Math.min(Math.max(args.limit ?? pools.length, 1), pools.length)\n return {\n chainId: args.chainId,\n pools: pools.slice(offset, offset + limit),\n notes,\n }\n}\n\nexport async function aerodromeFetchPositionsSummary(args: {\n chainId: number\n rpcUrl: string\n account?: string\n executorAddress?: string\n}) {\n const account = (args.account ?? args.executorAddress ?? '').trim()\n if (!account) throw new Error('account or executorAddress is required.')\n if (!isAerodromeChainSupported(args.chainId)) {\n throw new Error(aerodromeUnsupportedChainMessage(args.chainId))\n }\n const positions = await aerodromeFetchPositionsWithPools({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account,\n })\n return {\n chainId: args.chainId,\n account,\n notes:\n 'Dust v2 rows hidden (liquidity < 1e12 and no stake/emissions). Claim fees from the pool (claimFees.pool = lp). Claim emissions from the gauge in AERO (claimEmissions); CL staked also needs tokenId + cl. Skip emissions when claimEmissions is null.',\n positions: positions.map((p) => {\n const gaugeOk = Boolean(p.gauge) && p.gauge.toLowerCase() !== zeroAddress.toLowerCase()\n return {\n ...p,\n label: aerodromePositionLabel(p),\n stakedInGauge: BigInt(p.staked || '0') > 0n,\n claimFees: { pool: p.lp },\n claimEmissions: gaugeOk\n ? {\n gauge: p.gauge,\n ...(p.kind === 'cl' && p.id !== '0' ? { tokenId: p.id, cl: true } : { cl: false }),\n }\n : null,\n }\n }),\n }\n}\n","export function buildAerodromeSwapPurposePrefill(args: {\n tokenInSymbol: string\n tokenOutSymbol: string\n amountIn: string\n quoteOutAmount?: string | null\n slippageInput: string\n}): string {\n const symIn = (args.tokenInSymbol || '').trim() || 'token in'\n const symOut = (args.tokenOutSymbol || '').trim() || 'token out'\n const slip = Number.parseFloat(String(args.slippageInput || '0.5').replace(/,/g, ''))\n const slipText = Number.isFinite(slip) ? String(Math.round(slip * 100) / 100) : '0.5'\n const amt = (args.amountIn || '').trim()\n const qo = (args.quoteOutAmount || '').trim()\n const mid = amt && qo ? `${amt} ${symIn} for an estimated ${qo} ${symOut}` : `${amt || '…'} ${symIn} → ${symOut}`\n return `Aerodrome: swap ${mid} (max slippage ${slipText}%) on Base (chainId 8453)`\n}\n\nexport function buildAerodromeLiquidityPurposePrefill(args: {\n action: string\n tokenASymbol: string\n tokenBSymbol: string\n}): string {\n return `Aerodrome: ${args.action} ${args.tokenASymbol}/${args.tokenBSymbol} on Base (chainId 8453)`\n}\n\nexport function buildAerodromeRewardsPurposePrefill(args?: {\n action?: 'claim fees' | 'claim emissions'\n poolLabel?: string\n}): string {\n const action = args?.action ?? 'claim fees/emissions'\n const label = (args?.poolLabel || '').trim()\n const mid = label ? `${action} on ${label}` : action\n return `Aerodrome: ${mid} on Base (chainId 8453)`\n}\n\nexport function aerodromePositionLabel(row: {\n symbol?: string\n kind?: 'stable' | 'volatile' | 'cl'\n lp: string\n id?: string\n}): string {\n const symbol = (row.symbol || '').trim()\n if (symbol) {\n if (row.kind === 'cl' && row.id && row.id !== '0') return `${symbol} #${row.id}`\n return symbol\n }\n const kind = row.kind === 'stable' ? 'sAMM' : row.kind === 'cl' ? 'CL' : 'vAMM'\n const short = row.lp.length > 12 ? `${row.lp.slice(0, 6)}…${row.lp.slice(-4)}` : row.lp\n return row.id && row.id !== '0' ? `${kind} ${short} #${row.id}` : `${kind} ${short}`\n}\n\nexport function aerodromePositionKey(row: { lp: string; id?: string }): string {\n return `${row.lp.toLowerCase()}:${row.id || '0'}`\n}\n"]}
|