@continuumdao/ctm-mpc-defi 0.2.56 → 0.2.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/agent/catalog.cjs +749 -171
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +373 -44
  4. package/dist/agent/catalog.js +738 -173
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/aave-v4/SKILL.md +26 -3
  7. package/dist/agent/skills/aerodrome/SKILL.md +3 -1
  8. package/dist/agent/skills/circle-cctp/SKILL.md +1 -1
  9. package/dist/agent/skills/curve-dao/SKILL.md +2 -2
  10. package/dist/agent/skills/railgun/SKILL.md +39 -0
  11. package/dist/agent/skills/uniswap-v4/SKILL.md +2 -2
  12. package/dist/index.cjs +165 -19
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.js +166 -20
  15. package/dist/index.js.map +1 -1
  16. package/dist/protocols/evm/aave-v4/index.cjs +198 -15
  17. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  18. package/dist/protocols/evm/aave-v4/index.d.ts +62 -7
  19. package/dist/protocols/evm/aave-v4/index.js +189 -16
  20. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  21. package/dist/protocols/evm/aerodrome/index.cjs +152 -63
  22. package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
  23. package/dist/protocols/evm/aerodrome/index.d.ts +30 -58
  24. package/dist/protocols/evm/aerodrome/index.js +151 -64
  25. package/dist/protocols/evm/aerodrome/index.js.map +1 -1
  26. package/dist/protocols/evm/circle-cctp/index.cjs +5 -3
  27. package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
  28. package/dist/protocols/evm/circle-cctp/index.d.ts +3 -1
  29. package/dist/protocols/evm/circle-cctp/index.js +5 -4
  30. package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
  31. package/dist/protocols/evm/compound-v3/index.cjs +115 -2
  32. package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
  33. package/dist/protocols/evm/compound-v3/index.js +116 -3
  34. package/dist/protocols/evm/compound-v3/index.js.map +1 -1
  35. package/dist/protocols/evm/continuum-dao/index.cjs +1 -1
  36. package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
  37. package/dist/protocols/evm/continuum-dao/index.d.ts +1 -1
  38. package/dist/protocols/evm/continuum-dao/index.js +1 -1
  39. package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
  40. package/dist/protocols/evm/curve-dao/index.cjs +120 -5
  41. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  42. package/dist/protocols/evm/curve-dao/index.js +120 -5
  43. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  44. package/dist/protocols/evm/euler-v2/index.cjs +121 -6
  45. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  46. package/dist/protocols/evm/euler-v2/index.js +121 -6
  47. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  48. package/dist/protocols/evm/morpho/index.cjs +129 -57
  49. package/dist/protocols/evm/morpho/index.cjs.map +1 -1
  50. package/dist/protocols/evm/morpho/index.d.ts +2 -1
  51. package/dist/protocols/evm/morpho/index.js +129 -58
  52. package/dist/protocols/evm/morpho/index.js.map +1 -1
  53. package/dist/protocols/evm/pendle/index.cjs +129 -10
  54. package/dist/protocols/evm/pendle/index.cjs.map +1 -1
  55. package/dist/protocols/evm/pendle/index.js +129 -10
  56. package/dist/protocols/evm/pendle/index.js.map +1 -1
  57. package/dist/protocols/evm/railgun/index.cjs +1261 -0
  58. package/dist/protocols/evm/railgun/index.cjs.map +1 -0
  59. package/dist/protocols/evm/railgun/index.d.ts +294 -0
  60. package/dist/protocols/evm/railgun/index.js +1218 -0
  61. package/dist/protocols/evm/railgun/index.js.map +1 -0
  62. package/dist/protocols/evm/uniswap-v4/index.cjs +164 -17
  63. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  64. package/dist/protocols/evm/uniswap-v4/index.js +165 -18
  65. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  66. package/package.json +17 -1
@@ -64,7 +64,12 @@ type KeyGenSubset = {
64
64
  type KeyGenSubsetForPermit = KeyGenSubset;
65
65
 
66
66
  declare const AERODROME_PROTOCOL_ID: "aerodrome";
67
- /** Aerodrome is Base-only. */
67
+ /**
68
+ * Live Aerodrome deployment. Aero (the rename) is scheduled for 2026-10-22T00:00:00Z
69
+ * on Base, Ethereum, OP Mainnet, Arc, Ink, Robinhood Chain, and Arbitrum, but those
70
+ * contract addresses are not published yet. Do not add chains until the official
71
+ * sugar/security docs list them. Coinbase tokenized stocks stay on Base.
72
+ */
68
73
  declare const AERODROME_CHAIN_ID: 8453;
69
74
  /** Native ETH placeholder used by the app and MCP (Uniswap-style). */
70
75
  declare const AERODROME_NATIVE_PLACEHOLDER: "0x0000000000000000000000000000000000000000";
@@ -128,67 +133,26 @@ declare function aerodromeClFactoryList(addrs: AerodromeAddresses): Address[];
128
133
  declare function aerodromeClSwapRouterForFactory(addrs: AerodromeAddresses, factory: Address): Address;
129
134
 
130
135
  /**
131
- * Seed of Coinbase B20 tokenized stocks on Base.
132
- * Official table: https://docs.base.org/base-chain/asset-issuance/tokenized-stocks-on-base
136
+ * Coinbase B20 tokenized stocks on Base. Addresses come from
137
+ * https://api.coinbase.com/v1/tokenized-stocks — there is no baked-in token list.
133
138
  */
134
- declare const COINBASE_B20_STOCK_TOKENS: readonly [{
135
- readonly symbol: "AAPLc";
136
- readonly name: "Apple Inc.";
137
- readonly address: "0xb200000000000000000000C2e324d24d7eEcd1fb";
138
- }, {
139
- readonly symbol: "NVDAc";
140
- readonly name: "NVIDIA Corporation";
141
- readonly address: "0xb20000000000000000000078ee7ce2fE4908108C";
142
- }, {
143
- readonly symbol: "METAc";
144
- readonly name: "Meta Platforms Inc.";
145
- readonly address: "0xb2000000000000000000008bC8786B856E61707C";
146
- }, {
147
- readonly symbol: "GOOGLc";
148
- readonly name: "Alphabet Inc.";
149
- readonly address: "0xb2000000000000000000002D0BA3164cc74f58B7";
150
- }, {
151
- readonly symbol: "AMZNc";
152
- readonly name: "Amazon.com Inc.";
153
- readonly address: "0xb200000000000000000000d9192b6B456483C2E8";
154
- }, {
155
- readonly symbol: "TSLAc";
156
- readonly name: "Tesla Inc.";
157
- readonly address: "0xb2000000000000000000001e800a7f5189430cD0";
158
- }, {
159
- readonly symbol: "MSFTc";
160
- readonly name: "Microsoft Corporation";
161
- readonly address: "0xB200000000000000000000Ab99cFa739E253872B";
162
- }, {
163
- readonly symbol: "COINc";
164
- readonly name: "Coinbase Global Inc.";
165
- readonly address: "0xb200000000000000000000c85a31389D71F3ecfb";
166
- }, {
167
- readonly symbol: "MSTRc";
168
- readonly name: "Strategy Inc.";
169
- readonly address: "0xb2000000000000000000004884b426556b92883d";
170
- }, {
171
- readonly symbol: "CRCLc";
172
- readonly name: "Circle Internet Group Inc.";
173
- readonly address: "0xB20000000000000000000019f6E7C675b73C2e4D";
174
- }, {
175
- readonly symbol: "INTCc";
176
- readonly name: "Intel Corporation";
177
- readonly address: "0xB2000000000000000000004AFF16039bA04bdFBc";
178
- }, {
179
- readonly symbol: "SNDKc";
180
- readonly name: "Sandisk Corporation";
181
- readonly address: "0xb200000000000000000000397293Cb8cda9a10c5";
182
- }, {
183
- readonly symbol: "SPCXc";
184
- readonly name: "Space Exploration Technologies Corp.";
185
- readonly address: "0xb2000000000000000000007b9fcbd005511aCBd5";
186
- }];
187
139
  declare const COINBASE_B20_STOCK_DECIMALS: 8;
188
140
  /** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */
189
141
  declare const COINBASE_B20_ASSET_PREFIX = "0xb200000000000000000000";
142
+ type CoinbaseB20KnownToken = {
143
+ address: Address;
144
+ symbol: string;
145
+ decimals: number;
146
+ name?: string;
147
+ iconUrl?: string;
148
+ };
190
149
  declare function isCoinbaseB20AssetToken(address: string): boolean;
150
+ /** Tickers such as AAPLc and BRK.Bc. Rejects WETH, USDC, and AERO. */
191
151
  declare function looksLikeCoinbaseStockSymbol(symbol: string): boolean;
152
+ type CoinbaseB20CatalogToken = CoinbaseB20KnownToken & {
153
+ name: string;
154
+ };
155
+ declare function coinbaseB20CatalogTokens(): readonly CoinbaseB20CatalogToken[];
192
156
 
193
157
  declare function isAerodromeCoinbaseStockToken(address: string): boolean;
194
158
  type AerodromeStockTokenRow = {
@@ -197,6 +161,7 @@ type AerodromeStockTokenRow = {
197
161
  name: string;
198
162
  decimals: number;
199
163
  issued: boolean;
164
+ iconUrl?: string;
200
165
  };
201
166
  type AerodromeKnownToken = {
202
167
  address: Address;
@@ -205,6 +170,8 @@ type AerodromeKnownToken = {
205
170
  };
206
171
  /** Tickers the MCP quote/swap tools accept without a 0x address. */
207
172
  declare function lookupAerodromeKnownToken(token: string): AerodromeKnownToken | null;
173
+ /** Load the Coinbase catalog when a ticker is not already in the seed (PYPLc, AMDc, …). */
174
+ declare function ensureAerodromeStockTickers(tokens: string[]): Promise<void>;
208
175
  declare function resolveAerodromeErc20OrWeth(token: string, weth: Address): Address;
209
176
  declare function aerodromeUnissuedStockMessage(symbolOrAddress: string): string;
210
177
  /** Same gate the Multi-Sign dialog uses: skip quote RPC when totalSupply is 0. */
@@ -220,11 +187,15 @@ declare function parseBaseTokenizedStockDocs(text: string): Array<{
220
187
  symbol: string;
221
188
  address: Address;
222
189
  }>;
223
- /** Optional enrichment only. Never throws — empty list if the page is gone or unusable. */
190
+ /** Optional enrichment only. Never throws — empty list if the API and docs are unusable. */
224
191
  declare function fetchOfficialBaseTokenizedStocks(): Promise<Array<{
225
192
  symbol: string;
226
193
  address: Address;
227
194
  }>>;
195
+ /**
196
+ * Live Coinbase catalog + Sugar B20 ASSET tokens that look like Coinbase stocks (`*c`).
197
+ * `issued` is `totalSupply() > 0`.
198
+ */
228
199
  declare function aerodromeResolveStockTokens(args: {
229
200
  rpcUrl: string;
230
201
  official?: Array<{
@@ -247,6 +218,7 @@ type AerodromeListedToken = {
247
218
  accountBalance: string;
248
219
  name?: string;
249
220
  issued?: boolean;
221
+ iconUrl?: string;
250
222
  };
251
223
  type AerodromeSwapPool = {
252
224
  lp: Address;
@@ -976,4 +948,4 @@ declare function aerodromePositionKey(row: {
976
948
 
977
949
  declare const aerodromeProtocolModule: ProtocolModule;
978
950
 
979
- export { COINBASE_B20_ASSET_PREFIX as AERODROME_B20_ASSET_PREFIX, AERODROME_BASE_ADDRESSES_FALLBACK, AERODROME_CHAIN_ID, AERODROME_CL_FACTORY_NEWEST_BIT, AERODROME_CL_FACTORY_OLDEST_BIT, COINBASE_B20_STOCK_DECIMALS as AERODROME_COINBASE_STOCK_DECIMALS, COINBASE_B20_STOCK_TOKENS as AERODROME_COINBASE_STOCK_TOKENS, AERODROME_IMPORTANT_POOL_CAP, AERODROME_NATIVE_PLACEHOLDER, AERODROME_PROTOCOL_ID, AERODROME_STABLE_FILLER, AERODROME_USDC_BASE, AERODROME_VOLATILE_FILLER, AERODROME_WETH_BASE, type AerodromeAddLiquidityQuote, type AerodromeAddresses, type AerodromeClDepositQuote, type AerodromeKnownToken, type AerodromeListedToken, type AerodromeLpRow, type AerodromeLpYieldRow, type AerodromePositionRow, type AerodromePositionWithPool, type AerodromeQuoteResult, type AerodromeRouteHop, type AerodromeStockTokenRow, type AerodromeSwapPool, aerodromeClFactoryList, aerodromeClSwapRouterForFactory, aerodromeCoinbaseStockAddresses, aerodromeDiscoverConnectorPools, aerodromeDiscoverConnectorPoolsLoaded, aerodromeDiscoverDirectPools, aerodromeDiscoverPoolsSummary, aerodromeFallbackAddresses, aerodromeFetchImportantPoolsSummary, aerodromeFetchListedTokens, aerodromeFetchListedTokensSummary, aerodromeFetchLpYieldsForPair, aerodromeFetchLpYieldsForPools, aerodromeFetchLpYieldsSummary, aerodromeFetchPools, aerodromeFetchPoolsByAddress, aerodromeFetchPoolsSummary, aerodromeFetchPositions, aerodromeFetchPositionsSummary, aerodromeFetchPositionsWithPools, aerodromeFetchStockLpYieldsSummary, aerodromeFetchSwapPools, aerodromeMixedPathFiller, aerodromeOnChainDeadlineUnix, aerodromePositionKey, aerodromePositionLabel, aerodromeProbeAmountIn, aerodromeProtocolModule, aerodromeQuote, aerodromeQuoteAddLiquidity, aerodromeQuoteClDeposit, aerodromeResolveStockTokens, aerodromeUnissuedStockMessage, assertAerodromeStockIssued, buildAerodromeLiquidityPurposePrefill, buildAerodromeRewardsPurposePrefill, buildAerodromeSwapPurposePrefill, buildEvmMultisignBodyAerodromeAddLiquidityBatch, buildEvmMultisignBodyAerodromeClBurnBatch, buildEvmMultisignBodyAerodromeClCollectBatch, buildEvmMultisignBodyAerodromeClDecreaseBatch, buildEvmMultisignBodyAerodromeClIncreaseBatch, buildEvmMultisignBodyAerodromeClMintBatch, buildEvmMultisignBodyAerodromeClaimEmissionsBatch, buildEvmMultisignBodyAerodromeClaimFeesBatch, buildEvmMultisignBodyAerodromeGaugeStakeBatch, buildEvmMultisignBodyAerodromeGaugeUnstakeBatch, buildEvmMultisignBodyAerodromeRemoveLiquidityBatch, buildEvmMultisignBodyAerodromeSwapBatch, computeAerodromePriceImpactPercent, encodeAerodromeMixedPath, fetchOfficialBaseTokenizedStocks, findAerodromePaths, formatAerodromeLpYieldLabel, formatAerodromePriceImpact, isCoinbaseB20AssetToken as isAerodromeB20AssetToken, isAerodromeChainSupported, isAerodromeCoinbaseStockToken, isAerodromeNativeToken, loadAerodromeAddresses, looksLikeCoinbaseStockSymbol, lookupAerodromeKnownToken, parseBaseTokenizedStockDocs, parseSecurityMdxAddresses, parseSugarBaseEnv, quoteAerodromeHopsAmountOut, requireAerodromeRpcUrl, resetAerodromeAddressCache, resolveAerodromeErc20OrWeth, tryAerodromeSdkQuote, tryAerodromeSdkUnsignedSwap };
951
+ export { COINBASE_B20_ASSET_PREFIX as AERODROME_B20_ASSET_PREFIX, AERODROME_BASE_ADDRESSES_FALLBACK, AERODROME_CHAIN_ID, AERODROME_CL_FACTORY_NEWEST_BIT, AERODROME_CL_FACTORY_OLDEST_BIT, COINBASE_B20_STOCK_DECIMALS as AERODROME_COINBASE_STOCK_DECIMALS, AERODROME_IMPORTANT_POOL_CAP, AERODROME_NATIVE_PLACEHOLDER, AERODROME_PROTOCOL_ID, AERODROME_STABLE_FILLER, AERODROME_USDC_BASE, AERODROME_VOLATILE_FILLER, AERODROME_WETH_BASE, type AerodromeAddLiquidityQuote, type AerodromeAddresses, type AerodromeClDepositQuote, type AerodromeKnownToken, type AerodromeListedToken, type AerodromeLpRow, type AerodromeLpYieldRow, type AerodromePositionRow, type AerodromePositionWithPool, type AerodromeQuoteResult, type AerodromeRouteHop, type AerodromeStockTokenRow, type AerodromeSwapPool, aerodromeClFactoryList, aerodromeClSwapRouterForFactory, aerodromeCoinbaseStockAddresses, coinbaseB20CatalogTokens as aerodromeCoinbaseStockCatalog, aerodromeDiscoverConnectorPools, aerodromeDiscoverConnectorPoolsLoaded, aerodromeDiscoverDirectPools, aerodromeDiscoverPoolsSummary, aerodromeFallbackAddresses, aerodromeFetchImportantPoolsSummary, aerodromeFetchListedTokens, aerodromeFetchListedTokensSummary, aerodromeFetchLpYieldsForPair, aerodromeFetchLpYieldsForPools, aerodromeFetchLpYieldsSummary, aerodromeFetchPools, aerodromeFetchPoolsByAddress, aerodromeFetchPoolsSummary, aerodromeFetchPositions, aerodromeFetchPositionsSummary, aerodromeFetchPositionsWithPools, aerodromeFetchStockLpYieldsSummary, aerodromeFetchSwapPools, aerodromeMixedPathFiller, aerodromeOnChainDeadlineUnix, aerodromePositionKey, aerodromePositionLabel, aerodromeProbeAmountIn, aerodromeProtocolModule, aerodromeQuote, aerodromeQuoteAddLiquidity, aerodromeQuoteClDeposit, aerodromeResolveStockTokens, aerodromeUnissuedStockMessage, assertAerodromeStockIssued, buildAerodromeLiquidityPurposePrefill, buildAerodromeRewardsPurposePrefill, buildAerodromeSwapPurposePrefill, buildEvmMultisignBodyAerodromeAddLiquidityBatch, buildEvmMultisignBodyAerodromeClBurnBatch, buildEvmMultisignBodyAerodromeClCollectBatch, buildEvmMultisignBodyAerodromeClDecreaseBatch, buildEvmMultisignBodyAerodromeClIncreaseBatch, buildEvmMultisignBodyAerodromeClMintBatch, buildEvmMultisignBodyAerodromeClaimEmissionsBatch, buildEvmMultisignBodyAerodromeClaimFeesBatch, buildEvmMultisignBodyAerodromeGaugeStakeBatch, buildEvmMultisignBodyAerodromeGaugeUnstakeBatch, buildEvmMultisignBodyAerodromeRemoveLiquidityBatch, buildEvmMultisignBodyAerodromeSwapBatch, computeAerodromePriceImpactPercent, encodeAerodromeMixedPath, ensureAerodromeStockTickers, fetchOfficialBaseTokenizedStocks, findAerodromePaths, formatAerodromeLpYieldLabel, formatAerodromePriceImpact, isCoinbaseB20AssetToken as isAerodromeB20AssetToken, isAerodromeChainSupported, isAerodromeCoinbaseStockToken, isAerodromeNativeToken, loadAerodromeAddresses, looksLikeCoinbaseStockSymbol, lookupAerodromeKnownToken, parseBaseTokenizedStockDocs, parseSecurityMdxAddresses, parseSugarBaseEnv, quoteAerodromeHopsAmountOut, requireAerodromeRpcUrl, resetAerodromeAddressCache, resolveAerodromeErc20OrWeth, tryAerodromeSdkQuote, tryAerodromeSdkUnsignedSwap };
@@ -212,50 +212,118 @@ function isCoinbaseB20AssetToken(address) {
212
212
  }
213
213
  }
214
214
  function looksLikeCoinbaseStockSymbol(symbol) {
215
- return /^[A-Za-z][A-Za-z0-9]{0,10}c$/.test((symbol ?? "").trim());
215
+ return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? "").trim());
216
+ }
217
+ function coinbaseB20StockAddresses() {
218
+ return coinbaseB20CatalogTokens().map((t) => t.address);
219
+ }
220
+ function indexCatalog(rows) {
221
+ catalogRows = rows;
222
+ catalogAt = Date.now();
223
+ catalogBySymbol.clear();
224
+ catalogByAddress.clear();
225
+ for (const row of rows) {
226
+ catalogBySymbol.set(row.symbol.toLowerCase(), row);
227
+ catalogByAddress.set(row.address.toLowerCase(), row);
228
+ }
229
+ }
230
+ function coinbaseB20CatalogTokens() {
231
+ return catalogRows ?? [];
232
+ }
233
+ function parseCoinbaseTokenizedStocksPayload(payload) {
234
+ const tokens = Array.isArray(payload) ? payload : payload && typeof payload === "object" && Array.isArray(payload.tokens) ? payload.tokens : [];
235
+ const out = [];
236
+ const seen = /* @__PURE__ */ new Set();
237
+ for (const row of tokens) {
238
+ if (!row || typeof row !== "object") continue;
239
+ const rec = row;
240
+ const symbol = typeof rec.symbol === "string" ? rec.symbol.trim() : "";
241
+ const addressRaw = typeof rec.contract_address === "string" ? rec.contract_address.trim() : "";
242
+ if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue;
243
+ const address = getAddress(addressRaw);
244
+ const key = address.toLowerCase();
245
+ if (seen.has(key)) continue;
246
+ seen.add(key);
247
+ const name = typeof rec.name === "string" && rec.name.trim() ? rec.name.trim() : symbol;
248
+ const iconUrl = typeof rec.icon_url === "string" && rec.icon_url.trim() ? rec.icon_url.trim() : void 0;
249
+ const decimals = typeof rec.decimals === "number" && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18 ? rec.decimals : COINBASE_B20_STOCK_DECIMALS;
250
+ out.push({ address, symbol, name, decimals, iconUrl });
251
+ if (out.length >= CATALOG_MAX) break;
252
+ }
253
+ return out;
254
+ }
255
+ async function fetchCoinbaseB20StockCatalog() {
256
+ const merged = [];
257
+ const seen = /* @__PURE__ */ new Set();
258
+ let pageToken = "";
259
+ for (let page = 0; page < 4; page++) {
260
+ const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL);
261
+ url.searchParams.set("page_size", "500");
262
+ if (pageToken) url.searchParams.set("page_token", pageToken);
263
+ const res = await fetch(url, { cache: "no-store", signal: AbortSignal.timeout(8e3) });
264
+ if (!res.ok) break;
265
+ const json = await res.json();
266
+ for (const row of parseCoinbaseTokenizedStocksPayload(json)) {
267
+ const key = row.address.toLowerCase();
268
+ if (seen.has(key)) continue;
269
+ seen.add(key);
270
+ merged.push(row);
271
+ if (merged.length >= CATALOG_MAX) break;
272
+ }
273
+ pageToken = typeof json.next_page_token === "string" ? json.next_page_token.trim() : "";
274
+ if (!pageToken || merged.length >= CATALOG_MAX) break;
275
+ }
276
+ if (merged.length > 0) indexCatalog(merged);
277
+ return catalogRows ?? [];
278
+ }
279
+ async function ensureCoinbaseB20StockCatalog() {
280
+ if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows;
281
+ if (!catalogInflight) {
282
+ catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {
283
+ catalogInflight = null;
284
+ });
285
+ }
286
+ try {
287
+ return await catalogInflight;
288
+ } catch {
289
+ return catalogRows ?? [];
290
+ }
216
291
  }
217
292
  function lookupCoinbaseB20StockToken(token) {
218
293
  const key = (token ?? "").trim();
219
294
  if (!key) return null;
220
- const lower = key.toLowerCase();
221
- const bySymbol = COINBASE_B20_STOCK_TOKENS.find((t) => t.symbol.toLowerCase() === lower);
222
- if (bySymbol) {
223
- return {
224
- address: getAddress(bySymbol.address),
225
- symbol: bySymbol.symbol,
226
- decimals: COINBASE_B20_STOCK_DECIMALS
227
- };
295
+ const fromCatalog = catalogBySymbol.get(key.toLowerCase());
296
+ if (fromCatalog) return fromCatalog;
297
+ try {
298
+ return catalogByAddress.get(getAddress(key).toLowerCase()) ?? null;
299
+ } catch {
300
+ return null;
228
301
  }
302
+ }
303
+ function coinbaseB20CatalogName(addressOrSymbol) {
304
+ const key = (addressOrSymbol ?? "").trim();
305
+ if (!key) return void 0;
306
+ const bySymbol = catalogBySymbol.get(key.toLowerCase());
307
+ if (bySymbol?.name) return bySymbol.name;
229
308
  try {
230
- const address = getAddress(key);
231
- const byAddr = COINBASE_B20_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === address.toLowerCase());
232
- if (byAddr) {
233
- return { address, symbol: byAddr.symbol, decimals: COINBASE_B20_STOCK_DECIMALS };
234
- }
309
+ return catalogByAddress.get(getAddress(key).toLowerCase())?.name;
235
310
  } catch {
311
+ return void 0;
236
312
  }
237
- return null;
238
313
  }
239
- var COINBASE_B20_STOCK_TOKENS, COINBASE_B20_STOCK_DECIMALS, COINBASE_B20_ASSET_PREFIX;
314
+ var COINBASE_B20_STOCK_DECIMALS, COINBASE_B20_ASSET_PREFIX, COINBASE_TOKENIZED_STOCKS_API_URL, CATALOG_TTL_MS, CATALOG_MAX, catalogRows, catalogAt, catalogInflight, catalogBySymbol, catalogByAddress;
240
315
  var init_coinbaseB20 = __esm({
241
316
  "src/protocols/evm/shared/coinbaseB20.ts"() {
242
- COINBASE_B20_STOCK_TOKENS = [
243
- { symbol: "AAPLc", name: "Apple Inc.", address: "0xb200000000000000000000C2e324d24d7eEcd1fb" },
244
- { symbol: "NVDAc", name: "NVIDIA Corporation", address: "0xb20000000000000000000078ee7ce2fE4908108C" },
245
- { symbol: "METAc", name: "Meta Platforms Inc.", address: "0xb2000000000000000000008bC8786B856E61707C" },
246
- { symbol: "GOOGLc", name: "Alphabet Inc.", address: "0xb2000000000000000000002D0BA3164cc74f58B7" },
247
- { symbol: "AMZNc", name: "Amazon.com Inc.", address: "0xb200000000000000000000d9192b6B456483C2E8" },
248
- { symbol: "TSLAc", name: "Tesla Inc.", address: "0xb2000000000000000000001e800a7f5189430cD0" },
249
- { symbol: "MSFTc", name: "Microsoft Corporation", address: "0xB200000000000000000000Ab99cFa739E253872B" },
250
- { symbol: "COINc", name: "Coinbase Global Inc.", address: "0xb200000000000000000000c85a31389D71F3ecfb" },
251
- { symbol: "MSTRc", name: "Strategy Inc.", address: "0xb2000000000000000000004884b426556b92883d" },
252
- { symbol: "CRCLc", name: "Circle Internet Group Inc.", address: "0xB20000000000000000000019f6E7C675b73C2e4D" },
253
- { symbol: "INTCc", name: "Intel Corporation", address: "0xB2000000000000000000004AFF16039bA04bdFBc" },
254
- { symbol: "SNDKc", name: "Sandisk Corporation", address: "0xb200000000000000000000397293Cb8cda9a10c5" },
255
- { symbol: "SPCXc", name: "Space Exploration Technologies Corp.", address: "0xb2000000000000000000007b9fcbd005511aCBd5" }
256
- ];
257
317
  COINBASE_B20_STOCK_DECIMALS = 8;
258
318
  COINBASE_B20_ASSET_PREFIX = "0xb200000000000000000000";
319
+ COINBASE_TOKENIZED_STOCKS_API_URL = "https://api.coinbase.com/v1/tokenized-stocks";
320
+ CATALOG_TTL_MS = 15 * 60 * 1e3;
321
+ CATALOG_MAX = 500;
322
+ catalogRows = null;
323
+ catalogAt = 0;
324
+ catalogInflight = null;
325
+ catalogBySymbol = /* @__PURE__ */ new Map();
326
+ catalogByAddress = /* @__PURE__ */ new Map();
259
327
  }
260
328
  });
261
329
 
@@ -1099,6 +1167,16 @@ function lookupAerodromeKnownToken(token) {
1099
1167
  }
1100
1168
  return null;
1101
1169
  }
1170
+ async function ensureAerodromeStockTickers(tokens) {
1171
+ const needsCatalog = tokens.some((token) => {
1172
+ const raw = (token ?? "").trim();
1173
+ if (!raw || isAerodromeNativeToken(raw)) return false;
1174
+ if (lookupAerodromeKnownToken(raw)) return false;
1175
+ if (/^0x[a-fA-F0-9]{40}$/.test(raw)) return false;
1176
+ return looksLikeCoinbaseStockSymbol(raw);
1177
+ });
1178
+ if (needsCatalog) await ensureCoinbaseB20StockCatalog();
1179
+ }
1102
1180
  function resolveAerodromeErc20OrWeth(token, weth) {
1103
1181
  const raw = (token ?? "").trim();
1104
1182
  if (!raw) throw new Error("Token is required.");
@@ -1109,7 +1187,7 @@ function resolveAerodromeErc20OrWeth(token, weth) {
1109
1187
  return getAddress(raw);
1110
1188
  } catch {
1111
1189
  throw new Error(
1112
- `Unknown Aerodrome token "${raw}". Pass a 0x address or a known ticker (ETH, WETH, USDC, AERO, AAPLc, NVDAc, \u2026). Coinbase B20 stocks are seeded \u2014 do not ask the user for a contract address.`
1190
+ `Unknown Aerodrome token "${raw}". Pass a 0x address or a ticker (ETH, WETH, USDC, AERO, AAPLc, \u2026). Coinbase B20 tickers come from the live tokenized-stocks catalog.`
1113
1191
  );
1114
1192
  }
1115
1193
  }
@@ -1132,7 +1210,7 @@ async function assertAerodromeStockIssued(args) {
1132
1210
  }
1133
1211
  }
1134
1212
  function aerodromeCoinbaseStockAddresses() {
1135
- return COINBASE_B20_STOCK_TOKENS.map((t) => getAddress(t.address));
1213
+ return coinbaseB20StockAddresses();
1136
1214
  }
1137
1215
  function parseBaseTokenizedStockDocs(text) {
1138
1216
  try {
@@ -1169,6 +1247,11 @@ function parseBaseTokenizedStockDocs(text) {
1169
1247
  }
1170
1248
  }
1171
1249
  async function fetchOfficialBaseTokenizedStocks() {
1250
+ try {
1251
+ const live = await ensureCoinbaseB20StockCatalog();
1252
+ if (live.length > 0) return live.map((t) => ({ symbol: t.symbol, address: t.address }));
1253
+ } catch {
1254
+ }
1172
1255
  for (const url of BASE_STOCKS_DOCS_URLS) {
1173
1256
  try {
1174
1257
  const res = await fetch(url, { cache: "no-store", signal: AbortSignal.timeout(8e3) });
@@ -1180,22 +1263,11 @@ async function fetchOfficialBaseTokenizedStocks() {
1180
1263
  }
1181
1264
  return [];
1182
1265
  }
1183
- function seedName(address) {
1184
- const want = address.toLowerCase();
1185
- return COINBASE_B20_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)?.name;
1186
- }
1187
- function seedSymbol(address) {
1188
- const want = address.toLowerCase();
1189
- return COINBASE_B20_STOCK_TOKENS.find((t) => getAddress(t.address).toLowerCase() === want)?.symbol;
1190
- }
1191
- function seedStockRows() {
1192
- return COINBASE_B20_STOCK_TOKENS.map((t) => ({
1193
- address: getAddress(t.address),
1194
- symbol: t.symbol,
1195
- name: t.name,
1196
- decimals: COINBASE_B20_STOCK_DECIMALS,
1197
- issued: false
1198
- }));
1266
+ function catalogName(address) {
1267
+ return coinbaseB20CatalogName(address);
1268
+ }
1269
+ function catalogSymbol(address) {
1270
+ return lookupCoinbaseB20StockToken(address)?.symbol;
1199
1271
  }
1200
1272
  async function aerodromeResolveStockTokens(args) {
1201
1273
  let official = [];
@@ -1217,21 +1289,18 @@ async function aerodromeResolveStockTokens(args) {
1217
1289
  decimals: meta?.decimals ?? prev?.decimals
1218
1290
  });
1219
1291
  };
1220
- for (const t of COINBASE_B20_STOCK_TOKENS) {
1221
- add(t.address, { symbol: t.symbol, name: t.name, decimals: COINBASE_B20_STOCK_DECIMALS });
1222
- }
1223
1292
  for (const t of official) {
1224
1293
  add(t.address, { symbol: t.symbol, decimals: COINBASE_B20_STOCK_DECIMALS });
1225
1294
  }
1226
1295
  for (const t of args.knownTokens ?? []) {
1227
1296
  if (!isCoinbaseB20AssetToken(t.address)) continue;
1228
1297
  const symbol = (t.symbol ?? "").trim();
1229
- const seeded = Boolean(seedSymbol(getAddress(t.address)));
1230
- if (!seeded && symbol && !looksLikeCoinbaseStockSymbol(symbol)) continue;
1298
+ const known = Boolean(catalogSymbol(getAddress(t.address)));
1299
+ if (!known && symbol && !looksLikeCoinbaseStockSymbol(symbol)) continue;
1231
1300
  add(t.address, { symbol, decimals: t.decimals });
1232
1301
  }
1233
1302
  const rows = [...candidates.values()];
1234
- if (rows.length === 0) return seedStockRows();
1303
+ if (rows.length === 0) return [];
1235
1304
  try {
1236
1305
  const client = aerodromePublicClient(args.rpcUrl);
1237
1306
  const meta = await client.multicall({
@@ -1251,14 +1320,22 @@ async function aerodromeResolveStockTokens(args) {
1251
1320
  const supply = meta[base + 3]?.status === "success" ? meta[base + 3].result : 0n;
1252
1321
  return {
1253
1322
  address: row.address,
1254
- symbol: onchainSymbol || row.symbol || seedSymbol(row.address) || row.address.slice(0, 8),
1255
- name: seedName(row.address) || onchainName || onchainSymbol || row.symbol || "",
1323
+ symbol: onchainSymbol || row.symbol || catalogSymbol(row.address) || row.address.slice(0, 8),
1324
+ name: catalogName(row.address) || onchainName || onchainSymbol || row.symbol || "",
1256
1325
  decimals: Number.isFinite(onchainDecimals) ? onchainDecimals : row.decimals ?? COINBASE_B20_STOCK_DECIMALS,
1257
- issued: supply > 0n
1326
+ issued: supply > 0n,
1327
+ iconUrl: lookupCoinbaseB20StockToken(row.address)?.iconUrl
1258
1328
  };
1259
1329
  });
1260
1330
  } catch {
1261
- return seedStockRows();
1331
+ return rows.map((row) => ({
1332
+ address: row.address,
1333
+ symbol: row.symbol || catalogSymbol(row.address) || row.address.slice(0, 8),
1334
+ name: row.name || catalogName(row.address) || row.symbol || "",
1335
+ decimals: row.decimals ?? COINBASE_B20_STOCK_DECIMALS,
1336
+ issued: false,
1337
+ iconUrl: lookupCoinbaseB20StockToken(row.address)?.iconUrl
1338
+ }));
1262
1339
  }
1263
1340
  }
1264
1341
  var BASE_STOCKS_DOCS_URLS, MAX_DOCS_CHARS, MAX_OFFICIAL_STOCKS;
@@ -1473,6 +1550,7 @@ async function aerodromeDiscoverPoolsSummary(args) {
1473
1550
  }
1474
1551
  const rpcUrl = requireAerodromeRpcUrl(args.rpcUrl);
1475
1552
  const addrs = await loadAerodromeAddresses();
1553
+ await ensureAerodromeStockTickers([args.token, args.tokenOut ?? ""]);
1476
1554
  const isNative = isAerodromeNativeToken(args.token);
1477
1555
  const token = resolveAerodromeErc20OrWeth(args.token, addrs.weth);
1478
1556
  await assertAerodromeStockIssued({ rpcUrl, token, isNative, label: args.token });
@@ -1824,6 +1902,7 @@ init_abi();
1824
1902
  init_addresses();
1825
1903
  init_client();
1826
1904
  init_support();
1905
+ init_coinbaseB20();
1827
1906
  init_stockTokens();
1828
1907
  function poolKind(type) {
1829
1908
  if (type === 0) return "stable";
@@ -1844,6 +1923,7 @@ async function aerodromeFetchListedTokens(args) {
1844
1923
  throw new Error(`Aerodrome is Base-only (chainId ${AERODROME_CHAIN_ID}).`);
1845
1924
  }
1846
1925
  const addrs = await loadAerodromeAddresses();
1926
+ await ensureCoinbaseB20StockCatalog().catch(() => []);
1847
1927
  const client = aerodromePublicClient(args.rpcUrl);
1848
1928
  const account = args.account?.trim() ? getAddress(args.account) : zeroAddress;
1849
1929
  const extra = [...aerodromeCoinbaseStockAddresses(), ...args.extraAddresses ?? []].map((a) => {
@@ -2214,7 +2294,6 @@ init_client();
2214
2294
  init_discover();
2215
2295
  init_stockTokens();
2216
2296
  init_support();
2217
- init_stockTokens();
2218
2297
  var AERODROME_STABLE_FILLER = 2097152;
2219
2298
  var AERODROME_VOLATILE_FILLER = 4194304;
2220
2299
  var AERODROME_CL_FACTORY_OLDEST_BIT = 1048576;
@@ -2371,6 +2450,7 @@ async function aerodromeQuote(args) {
2371
2450
  }
2372
2451
  const rpcUrl = requireAerodromeRpcUrl(args.rpcUrl);
2373
2452
  const addrs = await loadAerodromeAddresses();
2453
+ await ensureAerodromeStockTickers([args.tokenIn, args.tokenOut]);
2374
2454
  const isNativeIn = isAerodromeNativeToken(args.tokenIn);
2375
2455
  const isNativeOut = isAerodromeNativeToken(args.tokenOut);
2376
2456
  const tokenIn = resolveAerodromeErc20OrWeth(args.tokenIn, addrs.weth);
@@ -3114,8 +3194,7 @@ function pairTokenLabel(address, isNative) {
3114
3194
  if (isNative) return "ETH";
3115
3195
  if (address.toLowerCase() === AERODROME_WETH_BASE.toLowerCase()) return "WETH";
3116
3196
  if (address.toLowerCase() === AERODROME_USDC_BASE.toLowerCase()) return "USDC";
3117
- const stock = COINBASE_B20_STOCK_TOKENS.find((t) => t.address.toLowerCase() === address.toLowerCase());
3118
- return stock?.symbol || `${address.slice(0, 6)}\u2026${address.slice(-4)}`;
3197
+ return lookupAerodromeKnownToken(address)?.symbol || `${address.slice(0, 6)}\u2026${address.slice(-4)}`;
3119
3198
  }
3120
3199
  function noDirectPoolHint(args) {
3121
3200
  const a = pairTokenLabel(args.tokenA, args.isNativeA);
@@ -3143,6 +3222,7 @@ async function aerodromeQuoteAddLiquidity(args) {
3143
3222
  }
3144
3223
  const addrs = await loadAerodromeAddresses();
3145
3224
  const client = aerodromePublicClient(args.rpcUrl);
3225
+ await ensureAerodromeStockTickers([args.tokenA, args.tokenB]);
3146
3226
  const isNativeA = isAerodromeNativeToken(args.tokenA);
3147
3227
  const isNativeB = isAerodromeNativeToken(args.tokenB);
3148
3228
  const tokenA = resolveAerodromeErc20OrWeth(args.tokenA, addrs.weth);
@@ -3333,6 +3413,7 @@ async function estimateClOtherSide(client, helper, amount, sqrtP, amountIs0) {
3333
3413
  init_abi();
3334
3414
  init_addresses();
3335
3415
  init_client();
3416
+ init_stockTokens();
3336
3417
  init_support();
3337
3418
  function minAfterSlippage(amount, slippagePercent) {
3338
3419
  if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {
@@ -3453,6 +3534,7 @@ async function buildEvmMultisignBodyAerodromeRemoveLiquidityBatch(args) {
3453
3534
  const lp = getAddress(args.lpToken);
3454
3535
  const dec = args.lpDecimals ?? Number(await client.readContract({ address: lp, abi: erc20Abi, functionName: "decimals" }));
3455
3536
  const liquidity = parseUnits(args.liquidityHuman.trim(), dec);
3537
+ await ensureAerodromeStockTickers([args.tokenA, args.tokenB]);
3456
3538
  const tokenA = resolveAerodromeErc20OrWeth(args.tokenA, addrs.weth);
3457
3539
  const tokenB = resolveAerodromeErc20OrWeth(args.tokenB, addrs.weth);
3458
3540
  const isNativeA = isAerodromeNativeToken(args.tokenA);
@@ -3517,6 +3599,7 @@ async function buildEvmMultisignBodyAerodromeRemoveLiquidityBatch(args) {
3517
3599
  init_abi();
3518
3600
  init_addresses();
3519
3601
  init_client();
3602
+ init_stockTokens();
3520
3603
  init_support();
3521
3604
  async function aerodromeQuoteClDeposit(args) {
3522
3605
  if (!isAerodromeChainSupported(args.chainId)) {
@@ -3524,6 +3607,7 @@ async function aerodromeQuoteClDeposit(args) {
3524
3607
  }
3525
3608
  const addrs = await loadAerodromeAddresses();
3526
3609
  const client = aerodromePublicClient(args.rpcUrl);
3610
+ await ensureAerodromeStockTickers([args.token0, args.token1]);
3527
3611
  const token0 = resolveAerodromeErc20OrWeth(args.token0, addrs.weth);
3528
3612
  const token1 = resolveAerodromeErc20OrWeth(args.token1, addrs.weth);
3529
3613
  const dec0 = args.token0Decimals ?? (isAerodromeNativeToken(args.token0) ? 18 : Number(await client.readContract({ address: token0, abi: erc20Abi, functionName: "decimals" })));
@@ -3568,6 +3652,7 @@ async function aerodromeQuoteClDeposit(args) {
3568
3652
  // src/protocols/evm/aerodrome/liquidityClMultisign.ts
3569
3653
  init_abi();
3570
3654
  init_addresses();
3655
+ init_stockTokens();
3571
3656
  init_support();
3572
3657
  function minAfterSlippage2(amount, slippagePercent) {
3573
3658
  if (!Number.isFinite(slippagePercent) || slippagePercent <= 0 || slippagePercent >= 100) {
@@ -3668,6 +3753,7 @@ async function buildEvmMultisignBodyAerodromeClIncreaseBatch(args) {
3668
3753
  const addrs = await loadAerodromeAddresses();
3669
3754
  const amount0 = BigInt(args.amount0Wei);
3670
3755
  const amount1 = BigInt(args.amount1Wei);
3756
+ await ensureAerodromeStockTickers([args.token0, args.token1]);
3671
3757
  const token0 = resolveAerodromeErc20OrWeth(args.token0, addrs.weth);
3672
3758
  const token1 = resolveAerodromeErc20OrWeth(args.token1, addrs.weth);
3673
3759
  const steps = [];
@@ -4075,7 +4161,8 @@ function mergeStocksIntoListed(tokens, stocks) {
4075
4161
  emerging: prev?.emerging ?? false,
4076
4162
  accountBalance: prev?.accountBalance ?? "0",
4077
4163
  name: stock.name,
4078
- issued: stock.issued
4164
+ issued: stock.issued,
4165
+ iconUrl: stock.iconUrl
4079
4166
  });
4080
4167
  }
4081
4168
  const stocksFirst = stocks.map((s) => byAddr.get(s.address.toLowerCase())).filter(Boolean);
@@ -4279,6 +4366,6 @@ var aerodromeProtocolModule = {
4279
4366
  };
4280
4367
  registerProtocolModule(aerodromeProtocolModule);
4281
4368
 
4282
- export { COINBASE_B20_ASSET_PREFIX as AERODROME_B20_ASSET_PREFIX, AERODROME_BASE_ADDRESSES_FALLBACK, AERODROME_CHAIN_ID, AERODROME_CL_FACTORY_NEWEST_BIT, AERODROME_CL_FACTORY_OLDEST_BIT, COINBASE_B20_STOCK_DECIMALS as AERODROME_COINBASE_STOCK_DECIMALS, COINBASE_B20_STOCK_TOKENS as AERODROME_COINBASE_STOCK_TOKENS, AERODROME_IMPORTANT_POOL_CAP, AERODROME_NATIVE_PLACEHOLDER, AERODROME_PROTOCOL_ID, AERODROME_STABLE_FILLER, AERODROME_USDC_BASE, AERODROME_VOLATILE_FILLER, AERODROME_WETH_BASE, aerodromeClFactoryList, aerodromeClSwapRouterForFactory, aerodromeCoinbaseStockAddresses, aerodromeDiscoverConnectorPools, aerodromeDiscoverConnectorPoolsLoaded, aerodromeDiscoverDirectPools, aerodromeDiscoverPoolsSummary, aerodromeFallbackAddresses, aerodromeFetchImportantPoolsSummary, aerodromeFetchListedTokens, aerodromeFetchListedTokensSummary, aerodromeFetchLpYieldsForPair, aerodromeFetchLpYieldsForPools, aerodromeFetchLpYieldsSummary, aerodromeFetchPools, aerodromeFetchPoolsByAddress, aerodromeFetchPoolsSummary, aerodromeFetchPositions, aerodromeFetchPositionsSummary, aerodromeFetchPositionsWithPools, aerodromeFetchStockLpYieldsSummary, aerodromeFetchSwapPools, aerodromeMixedPathFiller, aerodromeOnChainDeadlineUnix, aerodromePositionKey, aerodromePositionLabel, aerodromeProbeAmountIn, aerodromeProtocolModule, aerodromeQuote, aerodromeQuoteAddLiquidity, aerodromeQuoteClDeposit, aerodromeResolveStockTokens, aerodromeUnissuedStockMessage, assertAerodromeStockIssued, buildAerodromeLiquidityPurposePrefill, buildAerodromeRewardsPurposePrefill, buildAerodromeSwapPurposePrefill, buildEvmMultisignBodyAerodromeAddLiquidityBatch, buildEvmMultisignBodyAerodromeClBurnBatch, buildEvmMultisignBodyAerodromeClCollectBatch, buildEvmMultisignBodyAerodromeClDecreaseBatch, buildEvmMultisignBodyAerodromeClIncreaseBatch, buildEvmMultisignBodyAerodromeClMintBatch, buildEvmMultisignBodyAerodromeClaimEmissionsBatch, buildEvmMultisignBodyAerodromeClaimFeesBatch, buildEvmMultisignBodyAerodromeGaugeStakeBatch, buildEvmMultisignBodyAerodromeGaugeUnstakeBatch, buildEvmMultisignBodyAerodromeRemoveLiquidityBatch, buildEvmMultisignBodyAerodromeSwapBatch, computeAerodromePriceImpactPercent, encodeAerodromeMixedPath, fetchOfficialBaseTokenizedStocks, findAerodromePaths, formatAerodromeLpYieldLabel, formatAerodromePriceImpact, isCoinbaseB20AssetToken as isAerodromeB20AssetToken, isAerodromeChainSupported, isAerodromeCoinbaseStockToken, isAerodromeNativeToken, loadAerodromeAddresses, looksLikeCoinbaseStockSymbol, lookupAerodromeKnownToken, parseBaseTokenizedStockDocs, parseSecurityMdxAddresses, parseSugarBaseEnv, quoteAerodromeHopsAmountOut, requireAerodromeRpcUrl, resetAerodromeAddressCache, resolveAerodromeErc20OrWeth, tryAerodromeSdkQuote, tryAerodromeSdkUnsignedSwap };
4369
+ export { COINBASE_B20_ASSET_PREFIX as AERODROME_B20_ASSET_PREFIX, AERODROME_BASE_ADDRESSES_FALLBACK, AERODROME_CHAIN_ID, AERODROME_CL_FACTORY_NEWEST_BIT, AERODROME_CL_FACTORY_OLDEST_BIT, COINBASE_B20_STOCK_DECIMALS as AERODROME_COINBASE_STOCK_DECIMALS, AERODROME_IMPORTANT_POOL_CAP, AERODROME_NATIVE_PLACEHOLDER, AERODROME_PROTOCOL_ID, AERODROME_STABLE_FILLER, AERODROME_USDC_BASE, AERODROME_VOLATILE_FILLER, AERODROME_WETH_BASE, aerodromeClFactoryList, aerodromeClSwapRouterForFactory, aerodromeCoinbaseStockAddresses, coinbaseB20CatalogTokens as aerodromeCoinbaseStockCatalog, aerodromeDiscoverConnectorPools, aerodromeDiscoverConnectorPoolsLoaded, aerodromeDiscoverDirectPools, aerodromeDiscoverPoolsSummary, aerodromeFallbackAddresses, aerodromeFetchImportantPoolsSummary, aerodromeFetchListedTokens, aerodromeFetchListedTokensSummary, aerodromeFetchLpYieldsForPair, aerodromeFetchLpYieldsForPools, aerodromeFetchLpYieldsSummary, aerodromeFetchPools, aerodromeFetchPoolsByAddress, aerodromeFetchPoolsSummary, aerodromeFetchPositions, aerodromeFetchPositionsSummary, aerodromeFetchPositionsWithPools, aerodromeFetchStockLpYieldsSummary, aerodromeFetchSwapPools, aerodromeMixedPathFiller, aerodromeOnChainDeadlineUnix, aerodromePositionKey, aerodromePositionLabel, aerodromeProbeAmountIn, aerodromeProtocolModule, aerodromeQuote, aerodromeQuoteAddLiquidity, aerodromeQuoteClDeposit, aerodromeResolveStockTokens, aerodromeUnissuedStockMessage, assertAerodromeStockIssued, buildAerodromeLiquidityPurposePrefill, buildAerodromeRewardsPurposePrefill, buildAerodromeSwapPurposePrefill, buildEvmMultisignBodyAerodromeAddLiquidityBatch, buildEvmMultisignBodyAerodromeClBurnBatch, buildEvmMultisignBodyAerodromeClCollectBatch, buildEvmMultisignBodyAerodromeClDecreaseBatch, buildEvmMultisignBodyAerodromeClIncreaseBatch, buildEvmMultisignBodyAerodromeClMintBatch, buildEvmMultisignBodyAerodromeClaimEmissionsBatch, buildEvmMultisignBodyAerodromeClaimFeesBatch, buildEvmMultisignBodyAerodromeGaugeStakeBatch, buildEvmMultisignBodyAerodromeGaugeUnstakeBatch, buildEvmMultisignBodyAerodromeRemoveLiquidityBatch, buildEvmMultisignBodyAerodromeSwapBatch, computeAerodromePriceImpactPercent, encodeAerodromeMixedPath, ensureAerodromeStockTickers, fetchOfficialBaseTokenizedStocks, findAerodromePaths, formatAerodromeLpYieldLabel, formatAerodromePriceImpact, isCoinbaseB20AssetToken as isAerodromeB20AssetToken, isAerodromeChainSupported, isAerodromeCoinbaseStockToken, isAerodromeNativeToken, loadAerodromeAddresses, looksLikeCoinbaseStockSymbol, lookupAerodromeKnownToken, parseBaseTokenizedStockDocs, parseSecurityMdxAddresses, parseSugarBaseEnv, quoteAerodromeHopsAmountOut, requireAerodromeRpcUrl, resetAerodromeAddressCache, resolveAerodromeErc20OrWeth, tryAerodromeSdkQuote, tryAerodromeSdkUnsignedSwap };
4283
4370
  //# sourceMappingURL=index.js.map
4284
4371
  //# sourceMappingURL=index.js.map