hermes-swap 0.6.11 → 0.7.0

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.
@@ -1153,31 +1153,66 @@ var _Aggregator = class {
1153
1153
  );
1154
1154
  });
1155
1155
  }
1156
- async sendSignedTxToChannels(chain, signedTx, txHash, channels, traceReq) {
1157
- const results = await Promise.all(
1158
- channels.map(async ({ label, send }) => {
1159
- var _a, _b, _c, _d, _e;
1156
+ async sendSignedTxToChannels(chain, signedTx, txHash, channels, traceReq, abortSignal) {
1157
+ return await new Promise((resolve, reject) => {
1158
+ let settled = false;
1159
+ let finishedCount = 0;
1160
+ const failures = [];
1161
+ const cleanup = () => {
1162
+ abortSignal == null ? void 0 : abortSignal.removeEventListener("abort", onAbort);
1163
+ };
1164
+ const finishResolve = () => {
1165
+ if (settled)
1166
+ return;
1167
+ settled = true;
1168
+ cleanup();
1169
+ resolve();
1170
+ };
1171
+ const finishReject = () => {
1172
+ if (settled)
1173
+ return;
1174
+ settled = true;
1175
+ cleanup();
1176
+ const detail = failures.map((result) => `${result.label}: ${result.msg ?? "unknown error"}`).join("; ");
1177
+ reject(new Error(`All broadcast channels failed for ${txHash}: ${detail}`));
1178
+ };
1179
+ const onAbort = () => {
1180
+ finishResolve();
1181
+ };
1182
+ if (abortSignal == null ? void 0 : abortSignal.aborted) {
1183
+ finishResolve();
1184
+ return;
1185
+ }
1186
+ abortSignal == null ? void 0 : abortSignal.addEventListener("abort", onAbort, { once: true });
1187
+ for (const { label, send } of channels) {
1160
1188
  const sendTs = Date.now();
1161
- try {
1162
- await send();
1163
- this.trace(chain, traceReq, "log", "hermes-broadcast-channel-成功", `广播${label} OK, txHash=${txHash}, 耗时=${Date.now() - sendTs}ms`);
1164
- return { label, ok: true };
1165
- } catch (err) {
1166
- const msg = ((_c = (_b = (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data) == null ? void 0 : _b.error) == null ? void 0 : _c.message) ?? ((_e = (_d = err == null ? void 0 : err.response) == null ? void 0 : _d.data) == null ? void 0 : _e.message) ?? (err == null ? void 0 : err.message) ?? String(err);
1167
- if (_Aggregator.isBenignBroadcastError(msg)) {
1168
- this.trace(chain, traceReq, "log", "hermes-broadcast-channel-已存在", `广播${label} already-known, txHash=${txHash}, 耗时=${Date.now() - sendTs}ms`);
1169
- return { label, ok: true };
1189
+ send(abortSignal).then(
1190
+ () => {
1191
+ if (settled || (abortSignal == null ? void 0 : abortSignal.aborted))
1192
+ return;
1193
+ this.trace(chain, traceReq, "log", "hermes-broadcast-channel-成功", `广播${label} OK, txHash=${txHash}, 耗时=${Date.now() - sendTs}ms`);
1194
+ finishResolve();
1195
+ },
1196
+ (err) => {
1197
+ var _a, _b, _c, _d, _e;
1198
+ if (settled || (abortSignal == null ? void 0 : abortSignal.aborted))
1199
+ return;
1200
+ const msg = ((_c = (_b = (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.data) == null ? void 0 : _b.error) == null ? void 0 : _c.message) ?? ((_e = (_d = err == null ? void 0 : err.response) == null ? void 0 : _d.data) == null ? void 0 : _e.message) ?? (err == null ? void 0 : err.message) ?? String(err);
1201
+ if (_Aggregator.isBenignBroadcastError(msg)) {
1202
+ this.trace(chain, traceReq, "log", "hermes-broadcast-channel-已存在", `广播${label} already-known, txHash=${txHash}, 耗时=${Date.now() - sendTs}ms`);
1203
+ finishResolve();
1204
+ return;
1205
+ }
1206
+ this.trace(chain, traceReq, "warn", "hermes-broadcast-channel-失败", `广播${label} 失败: ${msg}, txHash=${txHash}, 耗时=${Date.now() - sendTs}ms`);
1207
+ failures.push({ label, msg });
1208
+ finishedCount += 1;
1209
+ if (finishedCount === channels.length) {
1210
+ finishReject();
1211
+ }
1170
1212
  }
1171
- this.trace(chain, traceReq, "warn", "hermes-broadcast-channel-失败", `广播${label} 失败: ${msg}, txHash=${txHash}, 耗时=${Date.now() - sendTs}ms`);
1172
- return { label, ok: false, msg };
1173
- }
1174
- })
1175
- );
1176
- if (results.some((result) => result.ok)) {
1177
- return;
1178
- }
1179
- const detail = results.map((result) => `${result.label}: ${result.msg ?? "unknown error"}`).join("; ");
1180
- throw new Error(`All broadcast channels failed for ${txHash}: ${detail}`);
1213
+ );
1214
+ }
1215
+ });
1181
1216
  }
1182
1217
  raceForReceipt(chain, txHash, providers, ownedProviders = [], timeoutMs = _Aggregator.TX_CONFIRM_TIMEOUT_MS, traceReq) {
1183
1218
  return new Promise((resolve, reject) => {
@@ -1237,9 +1272,9 @@ var _Aggregator = class {
1237
1272
  return null;
1238
1273
  return {
1239
1274
  label: `Sequencer[${new URL(sequencerUrl).hostname}]`,
1240
- send: async () => {
1275
+ send: async (signal) => {
1241
1276
  var _a;
1242
- const resp = await import_axios.default.post(sequencerUrl, { jsonrpc: "2.0", id: 1, method: "eth_sendRawTransaction", params: [signedTx] }, { timeout: 5e3 });
1277
+ const resp = await import_axios.default.post(sequencerUrl, { jsonrpc: "2.0", id: 1, method: "eth_sendRawTransaction", params: [signedTx] }, { timeout: 5e3, signal });
1243
1278
  if ((_a = resp.data) == null ? void 0 : _a.error) {
1244
1279
  throw new Error(resp.data.error.message ?? JSON.stringify(resp.data.error));
1245
1280
  }
@@ -1288,10 +1323,17 @@ var _Aggregator = class {
1288
1323
  const providers = [{ provider: mainProvider2, label: "RPC[0/主]" }];
1289
1324
  const sequencerChannel2 = this.buildSequencerChannel(chain, signedTx2);
1290
1325
  const channels2 = [...providers.map(({ provider, label }) => ({ label, send: () => provider.broadcastTransaction(signedTx2) })), ...sequencerChannel2 ? [sequencerChannel2] : []];
1291
- const receiptPromise2 = this.raceForReceipt(chain, txHash2, providers, [], _Aggregator.TX_CONFIRM_TIMEOUT_MS, traceReq);
1292
- await this.sendSignedTxToChannels(chain, signedTx2, txHash2, channels2, traceReq);
1326
+ const broadcastAbortController2 = new AbortController();
1327
+ const receiptPromise2 = this.raceForReceipt(chain, txHash2, providers, [], _Aggregator.TX_CONFIRM_TIMEOUT_MS, traceReq).finally(() => {
1328
+ broadcastAbortController2.abort();
1329
+ });
1330
+ const broadcastPromise2 = this.sendSignedTxToChannels(chain, signedTx2, txHash2, channels2, traceReq, broadcastAbortController2.signal);
1293
1331
  this.trace(chain, traceReq, "log", "hermes-sendContractTx-等待确认", `并行广播后开始等待确认, txHash=${txHash2}`);
1294
- const receipt2 = await receiptPromise2;
1332
+ const receipt2 = await Promise.race([
1333
+ receiptPromise2,
1334
+ broadcastPromise2.then(() => new Promise(() => {
1335
+ }))
1336
+ ]);
1295
1337
  const blockTs2 = await this.getBlockTimestampStr(mainProvider2, receipt2.blockNumber);
1296
1338
  this.trace(
1297
1339
  chain,
@@ -1330,11 +1372,18 @@ var _Aggregator = class {
1330
1372
  const broadcastTs = Date.now();
1331
1373
  const sequencerChannel = this.buildSequencerChannel(chain, signedTx);
1332
1374
  const channels = [...allProviders.map(({ provider, label }) => ({ label, send: () => provider.broadcastTransaction(signedTx) })), ...sequencerChannel ? [sequencerChannel] : []];
1333
- const receiptPromise = this.raceForReceipt(chain, txHash, allProviders, ownedProviders, _Aggregator.TX_CONFIRM_TIMEOUT_MS, traceReq);
1375
+ const broadcastAbortController = new AbortController();
1376
+ const receiptPromise = this.raceForReceipt(chain, txHash, allProviders, ownedProviders, _Aggregator.TX_CONFIRM_TIMEOUT_MS, traceReq).finally(() => {
1377
+ broadcastAbortController.abort();
1378
+ });
1379
+ const broadcastPromise = this.sendSignedTxToChannels(chain, signedTx, txHash, channels, traceReq, broadcastAbortController.signal);
1334
1380
  this.trace(chain, traceReq, "log", "hermes-sendContractTx-RPC发送前", `多RPC广播准备发送, txHash=${txHash}`);
1335
- await this.sendSignedTxToChannels(chain, signedTx, txHash, channels, traceReq);
1336
1381
  this.trace(chain, traceReq, "log", "hermes-sendContractTx-等待确认", `多RPC广播后开始等待确认, txHash=${txHash}`);
1337
- const receipt = await receiptPromise;
1382
+ const receipt = await Promise.race([
1383
+ receiptPromise,
1384
+ broadcastPromise.then(() => new Promise(() => {
1385
+ }))
1386
+ ]);
1338
1387
  const blockTs = await this.getBlockTimestampStr(mainProvider, receipt.blockNumber);
1339
1388
  this.trace(
1340
1389
  chain,
@@ -1393,6 +1442,7 @@ var _Aggregator = class {
1393
1442
  let totalSent = 0;
1394
1443
  let totalFailed = 0;
1395
1444
  const signer = builderCfg.authType === "flashbots" ? this.flashbotSigner : void 0;
1445
+ const builderAbortController = new AbortController();
1396
1446
  const fireAndForget = builderEntries.flatMap(([name, url]) => {
1397
1447
  if (name === "flashbots" && builderCfg.authType === "flashbots" && signer) {
1398
1448
  return [
@@ -1404,7 +1454,9 @@ var _Aggregator = class {
1404
1454
  };
1405
1455
  const ts = Date.now();
1406
1456
  try {
1407
- const response = await import_axios.default.post(url, body, { headers, timeout: 3e3 });
1457
+ const response = await import_axios.default.post(url, body, { headers, timeout: 3e3, signal: builderAbortController.signal });
1458
+ if (builderAbortController.signal.aborted)
1459
+ return;
1408
1460
  const rpcErrorMessage = _Aggregator.getJsonRpcErrorMessage(response.data);
1409
1461
  if (rpcErrorMessage) {
1410
1462
  totalFailed++;
@@ -1418,6 +1470,8 @@ var _Aggregator = class {
1418
1470
  return;
1419
1471
  }
1420
1472
  totalSent++;
1473
+ if (builderAbortController.signal.aborted)
1474
+ return;
1421
1475
  this.trace(
1422
1476
  chain,
1423
1477
  traceReq,
@@ -1426,6 +1480,8 @@ var _Aggregator = class {
1426
1480
  `Builder[${name}] mev_sendBundle 发送成功, targetBlocks=[${targetBlocks.join(",")}], 耗时=${Date.now() - ts}ms, resp=${JSON.stringify(response.data)}`
1427
1481
  );
1428
1482
  } catch (error) {
1483
+ if (builderAbortController.signal.aborted)
1484
+ return;
1429
1485
  totalFailed++;
1430
1486
  const msg = (error == null ? void 0 : error.response) ? JSON.stringify(error.response.data) : (error == null ? void 0 : error.message) ?? String(error);
1431
1487
  this.trace(
@@ -1447,7 +1503,9 @@ var _Aggregator = class {
1447
1503
  }
1448
1504
  const ts = Date.now();
1449
1505
  try {
1450
- const response = await import_axios.default.post(url, body, { headers, timeout: 3e3 });
1506
+ const response = await import_axios.default.post(url, body, { headers, timeout: 3e3, signal: builderAbortController.signal });
1507
+ if (builderAbortController.signal.aborted)
1508
+ return;
1451
1509
  const rpcErrorMessage = _Aggregator.getJsonRpcErrorMessage(response.data);
1452
1510
  if (rpcErrorMessage) {
1453
1511
  totalFailed++;
@@ -1461,32 +1519,47 @@ var _Aggregator = class {
1461
1519
  return;
1462
1520
  }
1463
1521
  totalSent++;
1522
+ if (builderAbortController.signal.aborted)
1523
+ return;
1464
1524
  this.trace(chain, traceReq, "log", "hermes-submitBundleTx-builder-成功", `Builder[${name}] 发送成功, targetBlock=${block}, 耗时=${Date.now() - ts}ms, resp=${JSON.stringify(response.data)}`);
1465
1525
  } catch (error) {
1526
+ if (builderAbortController.signal.aborted)
1527
+ return;
1466
1528
  totalFailed++;
1467
1529
  const msg = (error == null ? void 0 : error.response) ? JSON.stringify(error.response.data) : (error == null ? void 0 : error.message) ?? String(error);
1468
1530
  this.trace(chain, traceReq, "error", "hermes-submitBundleTx-builder-失败", `Builder[${name}] 发送失败, targetBlock=${block}, 耗时=${Date.now() - ts}ms, error=${msg}`);
1469
1531
  }
1470
1532
  });
1471
1533
  });
1472
- const abortController = new AbortController();
1473
- const inclusionPromise = this.waitForBundleInclusion(provider, txHash, targetBlocks, abortController.signal);
1534
+ const inclusionAbortController = new AbortController();
1535
+ const inclusionPromise = this.waitForBundleInclusion(provider, txHash, targetBlocks, inclusionAbortController.signal).finally(() => {
1536
+ builderAbortController.abort();
1537
+ });
1474
1538
  const waitTs = Date.now();
1475
1539
  this.trace(chain, traceReq, "log", "hermes-submitBundleTx-RPC发送前", `Bundle 请求开始发送, txHash=${txHash}, targetBlocks=[${targetBlocks.join(",")}]`);
1476
- const [receipt] = await Promise.all([
1477
- inclusionPromise,
1478
- Promise.all(fireAndForget).then(() => {
1479
- this.trace(
1480
- chain,
1481
- traceReq,
1482
- "log",
1483
- "hermes-submitBundleTx-RPC已发送",
1484
- `Bundle发送完成, 成功=${totalSent}, 失败=${totalFailed}, 总请求=${fireAndForget.length}, 耗时=${Date.now() - sendBundleTs}ms, txHash=${txHash}`
1485
- );
1486
- if (totalSent === 0)
1487
- abortController.abort();
1488
- })
1540
+ const sendPromise = Promise.all(fireAndForget).then(() => {
1541
+ this.trace(
1542
+ chain,
1543
+ traceReq,
1544
+ "log",
1545
+ "hermes-submitBundleTx-RPC已发送",
1546
+ `Bundle发送完成, 成功=${totalSent}, 失败=${totalFailed}, 总请求=${fireAndForget.length}, 耗时=${Date.now() - sendBundleTs}ms, txHash=${txHash}`
1547
+ );
1548
+ return { totalSent, totalFailed };
1549
+ });
1550
+ const firstResult = await Promise.race([
1551
+ inclusionPromise.then((receipt2) => ({ kind: "receipt", receipt: receipt2 })),
1552
+ sendPromise.then((summary) => ({ kind: "sendDone", summary }))
1489
1553
  ]);
1554
+ let receipt;
1555
+ if (firstResult.kind === "receipt") {
1556
+ receipt = firstResult.receipt;
1557
+ } else {
1558
+ if (firstResult.summary.totalSent === 0) {
1559
+ inclusionAbortController.abort();
1560
+ }
1561
+ receipt = await inclusionPromise;
1562
+ }
1490
1563
  if (receipt) {
1491
1564
  const blockTs = await this.getBlockTimestampStr(provider, receipt.blockNumber);
1492
1565
  this.trace(
@@ -1638,8 +1711,7 @@ Aggregator.DEFAULT_ETH_BUILDERS = {
1638
1711
  // bloXroute: 'https://mev.api.blxrbdn.com', // 旧 api.blxrbdn.com 也行,需配置 Authorization 头
1639
1712
  "Builder+": "https://rpc.btcs.com",
1640
1713
  // BTCS 官方文档支持 eth_sendBundle
1641
- turbobuilder: "https://rpc.turbobuilder.xyz",
1642
- // 官方文档支持 eth_sendBundle
1714
+ // turbobuilder: 'https://rpc.turbobuilder.xyz', // 官方文档支持 eth_sendBundle
1643
1715
  lightspeedbuilder: "https://rpc.lightspeedbuilder.info",
1644
1716
  // 新增,实测直接可用
1645
1717
  buildernet: "https://rpc.buildernet.org",
@@ -36,7 +36,9 @@ var import_lz_definitions = require("@layerzerolabs/lz-definitions");
36
36
  var DexType = /* @__PURE__ */ ((DexType2) => {
37
37
  DexType2["FX"] = "f(x)";
38
38
  DexType2["UNISWAPV2"] = "uniswapv2";
39
+ DexType2["SUSHIV2"] = "sushiv2";
39
40
  DexType2["UNISWAPV3"] = "uniswapv3";
41
+ DexType2["SUSHIV3"] = "sushiv3";
40
42
  DexType2["UNISWAPV4"] = "uniswapv4";
41
43
  DexType2["CURVE128"] = "curve128";
42
44
  DexType2["CURVE256"] = "curve256";
@@ -58,6 +60,58 @@ var DexType = /* @__PURE__ */ ((DexType2) => {
58
60
  DexType2["BLACKHOLEV3"] = "blackholev3";
59
61
  DexType2["BLACKHOLEV2"] = "blackholev2";
60
62
  DexType2["FLUID"] = "fluid";
63
+ DexType2["BANCOR"] = "bancor";
64
+ DexType2["ERC4626"] = "erc4626";
65
+ DexType2["DODOV2"] = "dodo-v2";
66
+ DexType2["AERODROMEV3"] = "aerodrome_v3";
67
+ DexType2["ALGEBRAINTEGRAL"] = "algebra_integral";
68
+ DexType2["AMBIENT"] = "ambient";
69
+ DexType2["ANGSTROM"] = "angstrom";
70
+ DexType2["APESWAP"] = "apeswap";
71
+ DexType2["ARCHLYV2"] = "archly_v2";
72
+ DexType2["BALANCER"] = "balancer";
73
+ DexType2["BALANCERV2"] = "balancer_v2";
74
+ DexType2["BALANCERV3"] = "balancer_v3";
75
+ DexType2["BANCORV2"] = "bancor_v2";
76
+ DexType2["BANCORV3"] = "bancor_v3";
77
+ DexType2["BASIN"] = "basin";
78
+ DexType2["BUNNIV2"] = "bunni_v2";
79
+ DexType2["CURVELENDINGPOOLS"] = "curve_lending_pools";
80
+ DexType2["CURVEMETAPOOL"] = "curve_metapool";
81
+ DexType2["CURVESTABLESWAP"] = "curve_stable_swap";
82
+ DexType2["CURVESTABLESWAPNG"] = "curve_stable_swap_ng";
83
+ DexType2["CURVETRICRYPTO"] = "curve_tricrypto";
84
+ DexType2["CURVETRICRYPTONG"] = "curve_tricrypto_ng";
85
+ DexType2["CURVETWOCRYPTO"] = "curve_twocrypto";
86
+ DexType2["CYPHERV2"] = "cypher_v2";
87
+ DexType2["DEFIPLAZA"] = "defiplaza";
88
+ DexType2["DFXV2"] = "dfx_v2";
89
+ DexType2["DODOV1"] = "dodo_v1";
90
+ DexType2["EKUBO"] = "ekubo";
91
+ DexType2["EMPIREDEX"] = "empiredex";
92
+ DexType2["EULERSWAP"] = "eulerswap";
93
+ DexType2["FLUIDDEXLITE"] = "fluid_dex_lite";
94
+ DexType2["FLUIDDEXT1"] = "fluid_dex_t1";
95
+ DexType2["INTEGRAL"] = "integral";
96
+ DexType2["JOEV2"] = "joe_v2";
97
+ DexType2["KYBERSWAPCLASSIC"] = "kyberswap_classic";
98
+ DexType2["KYBERSWAPELASTIC"] = "kyberswap_elastic";
99
+ DexType2["LISTADEX"] = "lista_dex";
100
+ DexType2["LUASWAP"] = "luaswap";
101
+ DexType2["MAVERICKV2"] = "maverick_v2";
102
+ DexType2["MOONISWAP"] = "mooniswap";
103
+ DexType2["PENDLEV2"] = "pendle_v2";
104
+ DexType2["RINGSWAP"] = "ring_swap";
105
+ DexType2["SADDLEFINANCE"] = "saddle_finance";
106
+ DexType2["SHIBASWAPV1"] = "shibaswap_v1";
107
+ DexType2["SMARDEX"] = "smardex";
108
+ DexType2["SOLIDLYV3"] = "solidly_v3";
109
+ DexType2["STABULL"] = "stabull";
110
+ DexType2["SUPERNOVABASIC"] = "supernova_basic";
111
+ DexType2["SWAPR"] = "swapr";
112
+ DexType2["UNISWAPV1"] = "uniswap_v1";
113
+ DexType2["WOMBAT"] = "wombat";
114
+ DexType2["YIELDBASIS"] = "yield_basis";
61
115
  return DexType2;
62
116
  })(DexType || {});
63
117
  var IEstimateType = /* @__PURE__ */ ((IEstimateType2) => {
@@ -172,7 +172,9 @@ export interface IHermesSignalQuoteBestData {
172
172
  export declare enum DexType {
173
173
  FX = "f(x)",
174
174
  UNISWAPV2 = "uniswapv2",
175
+ SUSHIV2 = "sushiv2",
175
176
  UNISWAPV3 = "uniswapv3",
177
+ SUSHIV3 = "sushiv3",
176
178
  UNISWAPV4 = "uniswapv4",
177
179
  CURVE128 = "curve128",
178
180
  CURVE256 = "curve256",
@@ -193,7 +195,59 @@ export declare enum DexType {
193
195
  SHADOWV2 = "shadowv2",
194
196
  BLACKHOLEV3 = "blackholev3",
195
197
  BLACKHOLEV2 = "blackholev2",
196
- FLUID = "fluid"
198
+ FLUID = "fluid",
199
+ BANCOR = "bancor",
200
+ ERC4626 = "erc4626",
201
+ DODOV2 = "dodo-v2",
202
+ AERODROMEV3 = "aerodrome_v3",
203
+ ALGEBRAINTEGRAL = "algebra_integral",
204
+ AMBIENT = "ambient",
205
+ ANGSTROM = "angstrom",
206
+ APESWAP = "apeswap",
207
+ ARCHLYV2 = "archly_v2",
208
+ BALANCER = "balancer",
209
+ BALANCERV2 = "balancer_v2",
210
+ BALANCERV3 = "balancer_v3",
211
+ BANCORV2 = "bancor_v2",
212
+ BANCORV3 = "bancor_v3",
213
+ BASIN = "basin",
214
+ BUNNIV2 = "bunni_v2",
215
+ CURVELENDINGPOOLS = "curve_lending_pools",
216
+ CURVEMETAPOOL = "curve_metapool",
217
+ CURVESTABLESWAP = "curve_stable_swap",
218
+ CURVESTABLESWAPNG = "curve_stable_swap_ng",
219
+ CURVETRICRYPTO = "curve_tricrypto",
220
+ CURVETRICRYPTONG = "curve_tricrypto_ng",
221
+ CURVETWOCRYPTO = "curve_twocrypto",
222
+ CYPHERV2 = "cypher_v2",
223
+ DEFIPLAZA = "defiplaza",
224
+ DFXV2 = "dfx_v2",
225
+ DODOV1 = "dodo_v1",
226
+ EKUBO = "ekubo",
227
+ EMPIREDEX = "empiredex",
228
+ EULERSWAP = "eulerswap",
229
+ FLUIDDEXLITE = "fluid_dex_lite",
230
+ FLUIDDEXT1 = "fluid_dex_t1",
231
+ INTEGRAL = "integral",
232
+ JOEV2 = "joe_v2",
233
+ KYBERSWAPCLASSIC = "kyberswap_classic",
234
+ KYBERSWAPELASTIC = "kyberswap_elastic",
235
+ LISTADEX = "lista_dex",
236
+ LUASWAP = "luaswap",
237
+ MAVERICKV2 = "maverick_v2",
238
+ MOONISWAP = "mooniswap",
239
+ PENDLEV2 = "pendle_v2",
240
+ RINGSWAP = "ring_swap",
241
+ SADDLEFINANCE = "saddle_finance",
242
+ SHIBASWAPV1 = "shibaswap_v1",
243
+ SMARDEX = "smardex",
244
+ SOLIDLYV3 = "solidly_v3",
245
+ STABULL = "stabull",
246
+ SUPERNOVABASIC = "supernova_basic",
247
+ SWAPR = "swapr",
248
+ UNISWAPV1 = "uniswap_v1",
249
+ WOMBAT = "wombat",
250
+ YIELDBASIS = "yield_basis"
197
251
  }
198
252
  export declare enum IEstimateType {
199
253
  BRIDGE = "bridge",