@continuumdao/ctm-mpc-defi 0.2.34 → 0.2.35
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 +712 -44
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1630 -244
- package/dist/agent/catalog.js +678 -45
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/aave-v4/SKILL.md +19 -4
- package/dist/agent/skills/aerodrome/SKILL.md +2 -2
- package/dist/agent/skills/compound-v3/SKILL.md +2 -2
- package/dist/agent/skills/curve-dao/SKILL.md +14 -0
- package/dist/agent/skills/ethena/SKILL.md +3 -1
- package/dist/agent/skills/euler-v2/SKILL.md +1 -1
- package/dist/agent/skills/gmx/SKILL.md +1 -1
- package/dist/agent/skills/hyperliquid/SKILL.md +7 -5
- package/dist/agent/skills/lido/SKILL.md +3 -0
- package/dist/agent/skills/maple-syrup/SKILL.md +35 -3
- package/dist/agent/skills/morpho/SKILL.md +1 -1
- package/dist/agent/skills/sky/SKILL.md +2 -0
- package/dist/agent/skills/yield-compare/SKILL.md +78 -0
- package/dist/index.cjs +129 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +129 -27
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs +170 -0
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.d.ts +59 -1
- package/dist/protocols/evm/aave-v4/index.js +164 -1
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +1308 -901
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +69 -2
- package/dist/protocols/evm/aerodrome/index.js +1217 -807
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/compound-v3/index.cjs +82 -6
- package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
- package/dist/protocols/evm/compound-v3/index.d.ts +89 -1
- package/dist/protocols/evm/compound-v3/index.js +80 -7
- package/dist/protocols/evm/compound-v3/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +447 -18
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.d.ts +108 -1
- package/dist/protocols/evm/curve-dao/index.js +440 -19
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/ethena/index.cjs +89 -0
- package/dist/protocols/evm/ethena/index.cjs.map +1 -1
- package/dist/protocols/evm/ethena/index.d.ts +17 -1
- package/dist/protocols/evm/ethena/index.js +89 -2
- package/dist/protocols/evm/ethena/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +29 -0
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.d.ts +21 -1
- package/dist/protocols/evm/euler-v2/index.js +29 -1
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/gmx/index.cjs +83 -1
- package/dist/protocols/evm/gmx/index.cjs.map +1 -1
- package/dist/protocols/evm/gmx/index.d.ts +22 -2
- package/dist/protocols/evm/gmx/index.js +80 -2
- package/dist/protocols/evm/gmx/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +67 -11
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.d.ts +39 -2
- package/dist/protocols/evm/hyperliquid/index.js +64 -12
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.cjs +13 -0
- package/dist/protocols/evm/lido/index.cjs.map +1 -1
- package/dist/protocols/evm/lido/index.d.ts +9 -1
- package/dist/protocols/evm/lido/index.js +13 -1
- package/dist/protocols/evm/lido/index.js.map +1 -1
- package/dist/protocols/evm/maple/index.cjs +129 -1
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.d.ts +45 -1
- package/dist/protocols/evm/maple/index.js +124 -3
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +34 -7
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +23 -1
- package/dist/protocols/evm/morpho/index.js +34 -8
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/sky/index.cjs +52 -0
- package/dist/protocols/evm/sky/index.cjs.map +1 -1
- package/dist/protocols/evm/sky/index.d.ts +16 -1
- package/dist/protocols/evm/sky/index.js +50 -1
- package/dist/protocols/evm/sky/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/core/expiry.ts","../../../../src/protocols/evm/aerodrome/support.ts","../../../../src/protocols/evm/aerodrome/addresses.ts","../../../../src/protocols/evm/aerodrome/abi.ts","../../../../src/protocols/evm/aerodrome/client.ts","../../../../src/protocols/evm/aerodrome/stockTokens.ts","../../../../src/protocols/evm/aerodrome/discover.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/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/aerodrome/batch.ts","../../../../src/protocols/evm/aerodrome/swapMultisign.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/purpose.ts","../../../../src/protocols/evm/aerodrome/reads.ts","../../../../src/protocols/evm/aerodrome/index.ts"],"names":["getAddress","zeroAddress","defineChain","createPublicClient","http","gasLimitFromEstimateAndChainConfig","encodeFunctionData","formatUnits","parseUnits","minAfterSlippage"],"mappings":"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","file":"index.js","sourcesContent":["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","/** 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])\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/** Aerodrome is Base-only. */\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","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 { createPublicClient, defineChain, http, type PublicClient } from 'viem'\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: http(url) })\n}\n","import { getAddress, type Address } from 'viem'\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\n/**\n * Seed of Coinbase B20 tokenized stocks on Base.\n * Official table: https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base\n * New names are merged at runtime from that page + Sugar tokens with the B20 ASSET prefix.\n */\nexport const AERODROME_COINBASE_STOCK_TOKENS = [\n { symbol: 'AAPLc', name: 'Apple Inc.', address: '0xb200000000000000000000C2e324d24d7eEcd1fb' },\n { symbol: 'NVDAc', name: 'NVIDIA Corporation', address: '0xb20000000000000000000078ee7ce2fE4908108C' },\n { symbol: 'METAc', name: 'Meta Platforms Inc.', address: '0xb2000000000000000000008bC8786B856E61707C' },\n { symbol: 'GOOGLc', name: 'Alphabet Inc.', address: '0xb2000000000000000000002D0BA3164cc74f58B7' },\n { symbol: 'AMZNc', name: 'Amazon.com Inc.', address: '0xb200000000000000000000d9192b6B456483C2E8' },\n { symbol: 'TSLAc', name: 'Tesla Inc.', address: '0xb2000000000000000000001e800a7f5189430cD0' },\n { symbol: 'MSFTc', name: 'Microsoft Corporation', address: '0xB200000000000000000000Ab99cFa739E253872B' },\n { symbol: 'COINc', name: 'Coinbase Global Inc.', address: '0xb200000000000000000000c85a31389D71F3ecfb' },\n { symbol: 'MSTRc', name: 'Strategy Inc.', address: '0xb2000000000000000000004884b426556b92883d' },\n { symbol: 'CRCLc', name: 'Circle Internet Group Inc.', address: '0xB20000000000000000000019f6E7C675b73C2e4D' },\n { symbol: 'INTCc', name: 'Intel Corporation', address: '0xB2000000000000000000004AFF16039bA04bdFBc' },\n { symbol: 'SNDKc', name: 'Sandisk Corporation', address: '0xb200000000000000000000397293Cb8cda9a10c5' },\n { symbol: 'SPCXc', name: 'Space Exploration Technologies Corp.', address: '0xb2000000000000000000007b9fcbd005511aCBd5' },\n] as const\n\nexport const AERODROME_COINBASE_STOCK_DECIMALS = 8 as const\n\n/** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */\nexport const AERODROME_B20_ASSET_PREFIX = '0xb200000000000000000000'\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}\n\nexport function isAerodromeB20AssetToken(address: string): boolean {\n try {\n return getAddress(address as `0x${string}`).toLowerCase().startsWith(AERODROME_B20_ASSET_PREFIX)\n } catch {\n return false\n }\n}\n\nexport function isAerodromeCoinbaseStockToken(address: string): boolean {\n return isAerodromeB20AssetToken(address)\n}\n\nexport function looksLikeCoinbaseStockSymbol(symbol: string): boolean {\n return /^[A-Za-z][A-Za-z0-9]{0,10}c$/.test((symbol ?? '').trim())\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 = AERODROME_COINBASE_STOCK_TOKENS.find((t) => t.symbol.toLowerCase() === lower)\n if (stock) {\n return {\n address: getAddress(stock.address),\n symbol: stock.symbol,\n decimals: AERODROME_COINBASE_STOCK_DECIMALS,\n }\n }\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 const byAddr = AERODROME_COINBASE_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)\n if (byAddr) {\n return { address, symbol: byAddr.symbol, decimals: AERODROME_COINBASE_STOCK_DECIMALS }\n }\n } catch {\n /* not an address */\n }\n return null\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 known ticker (ETH, WETH, USDC, AERO, AAPLc, NVDAc, …). Coinbase B20 stocks are seeded — do not ask the user for a contract address.`,\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 AERODROME_COINBASE_STOCK_TOKENS.map((t) => getAddress(t.address))\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 (!isAerodromeB20AssetToken(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 page is gone or unusable. */\nexport async function fetchOfficialBaseTokenizedStocks(): Promise<Array<{ symbol: string; address: Address }>> {\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 seedName(address: Address): string | undefined {\n const want = address.toLowerCase()\n return AERODROME_COINBASE_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)?.name\n}\n\nfunction seedSymbol(address: Address): string | undefined {\n const want = address.toLowerCase()\n return AERODROME_COINBASE_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)?.symbol\n}\n\n/**\n * Official docs + seed + Sugar B20 ASSET tokens that look like Coinbase stocks (`*c`).\n * `issued` is `totalSupply() > 0` (SPCXc stays unissued until Coinbase mints).\n */\nfunction seedStockRows(): AerodromeStockTokenRow[] {\n return AERODROME_COINBASE_STOCK_TOKENS.map((t) => ({\n address: getAddress(t.address),\n symbol: t.symbol,\n name: t.name,\n decimals: AERODROME_COINBASE_STOCK_DECIMALS,\n issued: false,\n }))\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 (!isAerodromeB20AssetToken(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 AERODROME_COINBASE_STOCK_TOKENS) {\n add(t.address, { symbol: t.symbol, name: t.name, decimals: AERODROME_COINBASE_STOCK_DECIMALS })\n }\n for (const t of official) {\n add(t.address, { symbol: t.symbol, decimals: AERODROME_COINBASE_STOCK_DECIMALS })\n }\n for (const t of args.knownTokens ?? []) {\n if (!isAerodromeB20AssetToken(t.address)) continue\n const symbol = (t.symbol ?? '').trim()\n const seeded = Boolean(seedSymbol(getAddress(t.address as `0x${string}`)))\n if (!seeded && 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 seedStockRows()\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 || seedSymbol(row.address) || row.address.slice(0, 8),\n name: seedName(row.address) || onchainName || onchainSymbol || row.symbol || '',\n decimals: Number.isFinite(onchainDecimals) ? onchainDecimals : (row.decimals ?? AERODROME_COINBASE_STOCK_DECIMALS),\n issued: supply > 0n,\n }\n })\n } catch {\n return seedStockRows()\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 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 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 { 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 { 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}\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 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 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 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","/** 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 {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\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: http(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","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 { 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 { 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 { resolveAerodromeErc20OrWeth } from './quote.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n AERODROME_COINBASE_STOCK_TOKENS,\n assertAerodromeStockIssued,\n isAerodromeB20AssetToken,\n isAerodromeCoinbaseStockToken,\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 const stock = AERODROME_COINBASE_STOCK_TOKENS.find((t) => t.address.toLowerCase() === address.toLowerCase())\n return stock?.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 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 { resolveAerodromeErc20OrWeth } from './quote.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 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 { resolveAerodromeErc20OrWeth } from './quote.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 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 { resolveAerodromeErc20OrWeth } from './quote.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 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","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","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 aerodromeFetchPools,\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 })\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}) {\n const pools = await aerodromeFetchPools(args)\n return { chainId: AERODROME_CHAIN_ID, pools }\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","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 './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"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/expiry.ts","../../../../src/protocols/evm/aerodrome/support.ts","../../../../src/protocols/evm/aerodrome/addresses.ts","../../../../src/protocols/evm/aerodrome/abi.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/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.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","http","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])\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/** Aerodrome is Base-only. */\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","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 { createPublicClient, defineChain, http, type PublicClient } from 'viem'\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: http(url) })\n}\n","import { getAddress, type Address } from 'viem'\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\n/**\n * Seed of Coinbase B20 tokenized stocks on Base.\n * Official table: https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base\n * New names are merged at runtime from that page + Sugar tokens with the B20 ASSET prefix.\n */\nexport const AERODROME_COINBASE_STOCK_TOKENS = [\n { symbol: 'AAPLc', name: 'Apple Inc.', address: '0xb200000000000000000000C2e324d24d7eEcd1fb' },\n { symbol: 'NVDAc', name: 'NVIDIA Corporation', address: '0xb20000000000000000000078ee7ce2fE4908108C' },\n { symbol: 'METAc', name: 'Meta Platforms Inc.', address: '0xb2000000000000000000008bC8786B856E61707C' },\n { symbol: 'GOOGLc', name: 'Alphabet Inc.', address: '0xb2000000000000000000002D0BA3164cc74f58B7' },\n { symbol: 'AMZNc', name: 'Amazon.com Inc.', address: '0xb200000000000000000000d9192b6B456483C2E8' },\n { symbol: 'TSLAc', name: 'Tesla Inc.', address: '0xb2000000000000000000001e800a7f5189430cD0' },\n { symbol: 'MSFTc', name: 'Microsoft Corporation', address: '0xB200000000000000000000Ab99cFa739E253872B' },\n { symbol: 'COINc', name: 'Coinbase Global Inc.', address: '0xb200000000000000000000c85a31389D71F3ecfb' },\n { symbol: 'MSTRc', name: 'Strategy Inc.', address: '0xb2000000000000000000004884b426556b92883d' },\n { symbol: 'CRCLc', name: 'Circle Internet Group Inc.', address: '0xB20000000000000000000019f6E7C675b73C2e4D' },\n { symbol: 'INTCc', name: 'Intel Corporation', address: '0xB2000000000000000000004AFF16039bA04bdFBc' },\n { symbol: 'SNDKc', name: 'Sandisk Corporation', address: '0xb200000000000000000000397293Cb8cda9a10c5' },\n { symbol: 'SPCXc', name: 'Space Exploration Technologies Corp.', address: '0xb2000000000000000000007b9fcbd005511aCBd5' },\n] as const\n\nexport const AERODROME_COINBASE_STOCK_DECIMALS = 8 as const\n\n/** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */\nexport const AERODROME_B20_ASSET_PREFIX = '0xb200000000000000000000'\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}\n\nexport function isAerodromeB20AssetToken(address: string): boolean {\n try {\n return getAddress(address as `0x${string}`).toLowerCase().startsWith(AERODROME_B20_ASSET_PREFIX)\n } catch {\n return false\n }\n}\n\nexport function isAerodromeCoinbaseStockToken(address: string): boolean {\n return isAerodromeB20AssetToken(address)\n}\n\nexport function looksLikeCoinbaseStockSymbol(symbol: string): boolean {\n return /^[A-Za-z][A-Za-z0-9]{0,10}c$/.test((symbol ?? '').trim())\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 = AERODROME_COINBASE_STOCK_TOKENS.find((t) => t.symbol.toLowerCase() === lower)\n if (stock) {\n return {\n address: getAddress(stock.address),\n symbol: stock.symbol,\n decimals: AERODROME_COINBASE_STOCK_DECIMALS,\n }\n }\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 const byAddr = AERODROME_COINBASE_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)\n if (byAddr) {\n return { address, symbol: byAddr.symbol, decimals: AERODROME_COINBASE_STOCK_DECIMALS }\n }\n } catch {\n /* not an address */\n }\n return null\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 known ticker (ETH, WETH, USDC, AERO, AAPLc, NVDAc, …). Coinbase B20 stocks are seeded — do not ask the user for a contract address.`,\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 AERODROME_COINBASE_STOCK_TOKENS.map((t) => getAddress(t.address))\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 (!isAerodromeB20AssetToken(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 page is gone or unusable. */\nexport async function fetchOfficialBaseTokenizedStocks(): Promise<Array<{ symbol: string; address: Address }>> {\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 seedName(address: Address): string | undefined {\n const want = address.toLowerCase()\n return AERODROME_COINBASE_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)?.name\n}\n\nfunction seedSymbol(address: Address): string | undefined {\n const want = address.toLowerCase()\n return AERODROME_COINBASE_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)?.symbol\n}\n\n/**\n * Official docs + seed + Sugar B20 ASSET tokens that look like Coinbase stocks (`*c`).\n * `issued` is `totalSupply() > 0` (SPCXc stays unissued until Coinbase mints).\n */\nfunction seedStockRows(): AerodromeStockTokenRow[] {\n return AERODROME_COINBASE_STOCK_TOKENS.map((t) => ({\n address: getAddress(t.address),\n symbol: t.symbol,\n name: t.name,\n decimals: AERODROME_COINBASE_STOCK_DECIMALS,\n issued: false,\n }))\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 (!isAerodromeB20AssetToken(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 AERODROME_COINBASE_STOCK_TOKENS) {\n add(t.address, { symbol: t.symbol, name: t.name, decimals: AERODROME_COINBASE_STOCK_DECIMALS })\n }\n for (const t of official) {\n add(t.address, { symbol: t.symbol, decimals: AERODROME_COINBASE_STOCK_DECIMALS })\n }\n for (const t of args.knownTokens ?? []) {\n if (!isAerodromeB20AssetToken(t.address)) continue\n const symbol = (t.symbol ?? '').trim()\n const seeded = Boolean(seedSymbol(getAddress(t.address as `0x${string}`)))\n if (!seeded && 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 seedStockRows()\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 || seedSymbol(row.address) || row.address.slice(0, 8),\n name: seedName(row.address) || onchainName || onchainSymbol || row.symbol || '',\n decimals: Number.isFinite(onchainDecimals) ? onchainDecimals : (row.decimals ?? AERODROME_COINBASE_STOCK_DECIMALS),\n issued: supply > 0n,\n }\n })\n } catch {\n return seedStockRows()\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 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 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 { 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}\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 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 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 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","/** 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 {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\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: http(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","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 { resolveAerodromeErc20OrWeth } from './quote.js'\nimport {\n AERODROME_COINBASE_STOCK_DECIMALS,\n AERODROME_COINBASE_STOCK_TOKENS,\n assertAerodromeStockIssued,\n isAerodromeB20AssetToken,\n isAerodromeCoinbaseStockToken,\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 const stock = AERODROME_COINBASE_STOCK_TOKENS.find((t) => t.address.toLowerCase() === address.toLowerCase())\n return stock?.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 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 { resolveAerodromeErc20OrWeth } from './quote.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 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 { resolveAerodromeErc20OrWeth } from './quote.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 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 { resolveAerodromeErc20OrWeth } from './quote.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 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 })\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"]}
|