@strkfarm/sdk 1.1.4 → 1.1.6
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/index.browser.global.js +541 -253
- package/dist/index.browser.mjs +364 -90
- package/dist/index.d.ts +10 -2
- package/dist/index.js +367 -95
- package/dist/index.mjs +367 -95
- package/package.json +2 -1
- package/src/global.ts +51 -1
- package/src/interfaces/common.tsx +2 -0
- package/src/interfaces/risks.ts +175 -0
- package/src/modules/harvests.ts +2 -1
- package/src/modules/pricer.ts +25 -8
- package/src/notifs/telegram.ts +3 -3
- package/src/strategies/constants.ts +5 -1
- package/src/strategies/ekubo-cl-vault.tsx +288 -81
- package/src/strategies/universal-adapters/vesu-adapter.ts +2 -1
- package/src/strategies/vesu-rebalance.tsx +3 -3
package/dist/index.browser.mjs
CHANGED
|
@@ -177,7 +177,7 @@ var defaultTokens = [{
|
|
|
177
177
|
name: "WBTC",
|
|
178
178
|
symbol: "WBTC",
|
|
179
179
|
logo: "https://assets.troves.fi/integrations/tokens/wbtc.svg",
|
|
180
|
-
address: ContractAddr.from("
|
|
180
|
+
address: ContractAddr.from("0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
|
|
181
181
|
decimals: 8,
|
|
182
182
|
coingeckId: void 0,
|
|
183
183
|
displayDecimals: 6,
|
|
@@ -193,6 +193,61 @@ var defaultTokens = [{
|
|
|
193
193
|
displayDecimals: 6,
|
|
194
194
|
priceCheckAmount: 1e-4
|
|
195
195
|
// 112000 * 0.0001 = $11.2
|
|
196
|
+
}, {
|
|
197
|
+
name: "solvBTC",
|
|
198
|
+
symbol: "solvBTC",
|
|
199
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/solvbtc.svg",
|
|
200
|
+
address: ContractAddr.from("0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"),
|
|
201
|
+
decimals: 18,
|
|
202
|
+
coingeckId: void 0,
|
|
203
|
+
priceProxySymbol: "WBTC",
|
|
204
|
+
displayDecimals: 6,
|
|
205
|
+
priceCheckAmount: 1e-4
|
|
206
|
+
// 112000 * 0.0001 = $11.2
|
|
207
|
+
}, {
|
|
208
|
+
name: "LBTC",
|
|
209
|
+
symbol: "LBTC",
|
|
210
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/lbtc.svg",
|
|
211
|
+
address: ContractAddr.from("0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4"),
|
|
212
|
+
decimals: 8,
|
|
213
|
+
coingeckId: void 0,
|
|
214
|
+
displayDecimals: 6,
|
|
215
|
+
priceProxySymbol: "WBTC",
|
|
216
|
+
priceCheckAmount: 1e-4
|
|
217
|
+
// 112000 * 0.0001 = $11.2
|
|
218
|
+
}, {
|
|
219
|
+
name: "xWBTC",
|
|
220
|
+
symbol: "xWBTC",
|
|
221
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
|
|
222
|
+
address: ContractAddr.from("0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"),
|
|
223
|
+
decimals: 8,
|
|
224
|
+
coingeckId: void 0,
|
|
225
|
+
displayDecimals: 6,
|
|
226
|
+
priceProxySymbol: "WBTC",
|
|
227
|
+
priceCheckAmount: 1e-4
|
|
228
|
+
// 112000 * 0.0001 = $11.2
|
|
229
|
+
}, {
|
|
230
|
+
name: "xsBTC",
|
|
231
|
+
symbol: "xsBTC",
|
|
232
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
|
|
233
|
+
address: ContractAddr.from("0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"),
|
|
234
|
+
decimals: 18,
|
|
235
|
+
coingeckId: void 0,
|
|
236
|
+
displayDecimals: 6,
|
|
237
|
+
priceProxySymbol: "WBTC",
|
|
238
|
+
priceCheckAmount: 1e-4
|
|
239
|
+
// 112000 * 0.0001 = $11.2
|
|
240
|
+
}, {
|
|
241
|
+
name: "xtBTC",
|
|
242
|
+
symbol: "xtBTC",
|
|
243
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
|
|
244
|
+
address: ContractAddr.from("0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"),
|
|
245
|
+
decimals: 8,
|
|
246
|
+
coingeckId: void 0,
|
|
247
|
+
displayDecimals: 6,
|
|
248
|
+
priceProxySymbol: "WBTC",
|
|
249
|
+
priceCheckAmount: 1e-4
|
|
250
|
+
// 112000 * 0.0001 = $11.2
|
|
196
251
|
}];
|
|
197
252
|
var tokens = defaultTokens;
|
|
198
253
|
var _Global = class _Global {
|
|
@@ -280,9 +335,11 @@ var PricerBase = class {
|
|
|
280
335
|
// src/modules/pricer.ts
|
|
281
336
|
var Pricer = class extends PricerBase {
|
|
282
337
|
// e.g. ETH/USDC
|
|
283
|
-
constructor(config, tokens2) {
|
|
338
|
+
constructor(config, tokens2, refreshInterval = 3e4, staleTime = 6e4) {
|
|
284
339
|
super(config, tokens2);
|
|
285
340
|
this.prices = {};
|
|
341
|
+
this.refreshInterval = 3e4;
|
|
342
|
+
this.staleTime = 6e4;
|
|
286
343
|
// code populates this map during runtime to determine which method to use for a given token
|
|
287
344
|
// The method set will be the first one to try after first attempt
|
|
288
345
|
this.methodToUse = {};
|
|
@@ -291,6 +348,8 @@ var Pricer = class extends PricerBase {
|
|
|
291
348
|
*/
|
|
292
349
|
this.PRICE_API = `https://api.coinbase.com/v2/prices/{{PRICER_KEY}}/buy`;
|
|
293
350
|
this.EKUBO_API = "https://quoter-mainnet-api.ekubo.org/{{AMOUNT}}/{{TOKEN_ADDRESS}}/0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8";
|
|
351
|
+
this.refreshInterval = refreshInterval;
|
|
352
|
+
this.staleTime = staleTime;
|
|
294
353
|
}
|
|
295
354
|
isReady() {
|
|
296
355
|
const allPricesExist = Object.keys(this.prices).length === this.tokens.length;
|
|
@@ -323,10 +382,10 @@ var Pricer = class extends PricerBase {
|
|
|
323
382
|
this._loadPrices();
|
|
324
383
|
setInterval(() => {
|
|
325
384
|
this._loadPrices();
|
|
326
|
-
},
|
|
385
|
+
}, this.refreshInterval);
|
|
327
386
|
}
|
|
328
387
|
isStale(timestamp, tokenName) {
|
|
329
|
-
const STALE_TIME =
|
|
388
|
+
const STALE_TIME = this.staleTime;
|
|
330
389
|
return (/* @__PURE__ */ new Date()).getTime() - timestamp.getTime() > STALE_TIME;
|
|
331
390
|
}
|
|
332
391
|
assertNotStale(timestamp, tokenName) {
|
|
@@ -352,13 +411,25 @@ var Pricer = class extends PricerBase {
|
|
|
352
411
|
onUpdate(token.symbol);
|
|
353
412
|
return;
|
|
354
413
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
414
|
+
if (token.priceProxySymbol) {
|
|
415
|
+
const proxyToken = this.tokens.find((t) => t.symbol === token.priceProxySymbol);
|
|
416
|
+
if (!proxyToken) {
|
|
417
|
+
throw new FatalError(`Price proxy token ${token.priceProxySymbol} not found`);
|
|
418
|
+
}
|
|
419
|
+
const price = await this._getPrice(proxyToken);
|
|
420
|
+
this.prices[token.symbol] = {
|
|
421
|
+
price,
|
|
422
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
423
|
+
};
|
|
424
|
+
} else {
|
|
425
|
+
const price = await this._getPrice(token);
|
|
426
|
+
this.prices[token.symbol] = {
|
|
427
|
+
price,
|
|
428
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
429
|
+
};
|
|
430
|
+
}
|
|
360
431
|
onUpdate(token.symbol);
|
|
361
|
-
logger.verbose(`Fetched price of ${token.name} as ${price}`);
|
|
432
|
+
logger.verbose(`Fetched price of ${token.name} as ${this.prices[token.symbol].price}`);
|
|
362
433
|
break;
|
|
363
434
|
} catch (error) {
|
|
364
435
|
if (retry < MAX_RETRIES) {
|
|
@@ -3790,6 +3861,18 @@ async function getAPIUsingHeadlessBrowser(url) {
|
|
|
3790
3861
|
|
|
3791
3862
|
// src/modules/harvests.ts
|
|
3792
3863
|
import { Contract as Contract4, num as num3 } from "starknet";
|
|
3864
|
+
|
|
3865
|
+
// src/strategies/constants.ts
|
|
3866
|
+
var COMMON_CONTRACTS = [{
|
|
3867
|
+
address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
|
|
3868
|
+
name: "Access Controller",
|
|
3869
|
+
sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
|
|
3870
|
+
}];
|
|
3871
|
+
var ENDPOINTS = {
|
|
3872
|
+
VESU_BASE: "https://cache-server-t2me.onrender.com/vesu"
|
|
3873
|
+
};
|
|
3874
|
+
|
|
3875
|
+
// src/modules/harvests.ts
|
|
3793
3876
|
var Harvests = class _Harvests {
|
|
3794
3877
|
constructor(config) {
|
|
3795
3878
|
this.config = config;
|
|
@@ -3849,7 +3932,7 @@ var EkuboHarvests = class extends Harvests {
|
|
|
3849
3932
|
var VESU_REWARDS_CONTRACT = ContractAddr.from("0x0387f3eb1d98632fbe3440a9f1385Aec9d87b6172491d3Dd81f1c35A7c61048F");
|
|
3850
3933
|
var VesuHarvests = class _VesuHarvests extends Harvests {
|
|
3851
3934
|
async getHarvests(addr) {
|
|
3852
|
-
const result = await fetch(
|
|
3935
|
+
const result = await fetch(`${ENDPOINTS.VESU_BASE}/users/${addr.address}/strk-rewards/calldata`);
|
|
3853
3936
|
const data = await result.json();
|
|
3854
3937
|
const rewardsContract = VESU_REWARDS_CONTRACT;
|
|
3855
3938
|
const cls = await this.config.provider.getClassAt(rewardsContract.address);
|
|
@@ -9327,13 +9410,6 @@ var vesu_pools_default = {
|
|
|
9327
9410
|
]
|
|
9328
9411
|
};
|
|
9329
9412
|
|
|
9330
|
-
// src/strategies/constants.ts
|
|
9331
|
-
var COMMON_CONTRACTS = [{
|
|
9332
|
-
address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
|
|
9333
|
-
name: "Access Controller",
|
|
9334
|
-
sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
|
|
9335
|
-
}];
|
|
9336
|
-
|
|
9337
9413
|
// src/strategies/vesu-rebalance.tsx
|
|
9338
9414
|
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
9339
9415
|
var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
@@ -9462,7 +9538,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
9462
9538
|
};
|
|
9463
9539
|
}
|
|
9464
9540
|
static async getAllPossibleVerifiedPools(asset) {
|
|
9465
|
-
const data = await getAPIUsingHeadlessBrowser(
|
|
9541
|
+
const data = await getAPIUsingHeadlessBrowser(`${ENDPOINTS.VESU_BASE}/pools`);
|
|
9466
9542
|
const verifiedPools = data.data.filter((d) => d.isVerified);
|
|
9467
9543
|
const pools = verifiedPools.map((p) => {
|
|
9468
9544
|
const hasMyAsset = p.assets.find((a) => asset.eqString(a.address));
|
|
@@ -9639,7 +9715,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
9639
9715
|
let pools = [];
|
|
9640
9716
|
try {
|
|
9641
9717
|
const data = await getAPIUsingHeadlessBrowser(
|
|
9642
|
-
|
|
9718
|
+
`${ENDPOINTS.VESU_BASE}/pools`
|
|
9643
9719
|
);
|
|
9644
9720
|
pools = data.data;
|
|
9645
9721
|
for (const pool of vesu_pools_default.data) {
|
|
@@ -16216,14 +16292,31 @@ var _protocol2 = {
|
|
|
16216
16292
|
name: "Ekubo",
|
|
16217
16293
|
logo: "https://app.ekubo.org/favicon.ico"
|
|
16218
16294
|
};
|
|
16219
|
-
var
|
|
16220
|
-
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value:
|
|
16221
|
-
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value:
|
|
16222
|
-
{ type: "Market Risk" /* MARKET_RISK */, value:
|
|
16295
|
+
var _corelatedPoolRiskFactors = [
|
|
16296
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
|
|
16297
|
+
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1 /* HIGHLY_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
|
|
16298
|
+
{ type: "Market Risk" /* MARKET_RISK */, value: 1 /* VERY_LOW_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
|
|
16299
|
+
];
|
|
16300
|
+
var mediumVolatilityPoolRiskFactors = [
|
|
16301
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
|
|
16302
|
+
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 3 /* NON_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
|
|
16303
|
+
{ type: "Market Risk" /* MARKET_RISK */, value: 3 /* MODERATE_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
|
|
16223
16304
|
];
|
|
16224
|
-
var
|
|
16225
|
-
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value:
|
|
16305
|
+
var highVolatilityPoolRiskFactors = [
|
|
16306
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
|
|
16307
|
+
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 3 /* NON_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
|
|
16308
|
+
{ type: "Market Risk" /* MARKET_RISK */, value: 4 /* HIGH_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
|
|
16226
16309
|
];
|
|
16310
|
+
var mediumRisk = {
|
|
16311
|
+
riskFactor: mediumVolatilityPoolRiskFactors,
|
|
16312
|
+
netRisk: mediumVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / mediumVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
|
|
16313
|
+
notARisks: getNoRiskTags(mediumVolatilityPoolRiskFactors)
|
|
16314
|
+
};
|
|
16315
|
+
var highRisk = {
|
|
16316
|
+
riskFactor: highVolatilityPoolRiskFactors,
|
|
16317
|
+
netRisk: highVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / highVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
|
|
16318
|
+
notARisks: getNoRiskTags(highVolatilityPoolRiskFactors)
|
|
16319
|
+
};
|
|
16227
16320
|
var AUDIT_URL2 = "https://assets.troves.fi/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
|
|
16228
16321
|
var faqs2 = [
|
|
16229
16322
|
{
|
|
@@ -16238,6 +16331,10 @@ var faqs2 = [
|
|
|
16238
16331
|
question: "What happens during withdrawal?",
|
|
16239
16332
|
answer: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices."
|
|
16240
16333
|
},
|
|
16334
|
+
{
|
|
16335
|
+
question: "Are there any deposit/withdrawal fees?",
|
|
16336
|
+
answer: "No, there are no deposit/withdrawal fees. However, there is a performance fee varying between 10-20% of the fees and rewards generated. The exact fee is determined by the strategy and the APY shown is net of this fee."
|
|
16337
|
+
},
|
|
16241
16338
|
{
|
|
16242
16339
|
question: "Is the strategy audited?",
|
|
16243
16340
|
answer: /* @__PURE__ */ jsxs2("div", { children: [
|
|
@@ -16255,6 +16352,15 @@ var faqs2 = [
|
|
|
16255
16352
|
] })
|
|
16256
16353
|
}
|
|
16257
16354
|
];
|
|
16355
|
+
function getLSTFAQs(lstSymbol) {
|
|
16356
|
+
return [
|
|
16357
|
+
...faqs2,
|
|
16358
|
+
{
|
|
16359
|
+
question: "Why might I see a negative APY?",
|
|
16360
|
+
answer: `A negative APY can occur when ${lstSymbol}'s price drops on DEXes. This is usually temporary and tends to recover within a few days or a week.`
|
|
16361
|
+
}
|
|
16362
|
+
];
|
|
16363
|
+
}
|
|
16258
16364
|
var xSTRKSTRK = {
|
|
16259
16365
|
name: "Ekubo xSTRK/STRK",
|
|
16260
16366
|
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
@@ -16272,9 +16378,9 @@ var xSTRKSTRK = {
|
|
|
16272
16378
|
auditUrl: AUDIT_URL2,
|
|
16273
16379
|
maxTVL: Web3Number.fromWei("0", 18),
|
|
16274
16380
|
risk: {
|
|
16275
|
-
riskFactor:
|
|
16276
|
-
netRisk:
|
|
16277
|
-
notARisks: getNoRiskTags(
|
|
16381
|
+
riskFactor: _corelatedPoolRiskFactors,
|
|
16382
|
+
netRisk: _corelatedPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _corelatedPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
|
|
16383
|
+
notARisks: getNoRiskTags(_corelatedPoolRiskFactors)
|
|
16278
16384
|
},
|
|
16279
16385
|
apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
|
|
16280
16386
|
additionalInfo: {
|
|
@@ -16290,15 +16396,10 @@ var xSTRKSTRK = {
|
|
|
16290
16396
|
customShouldRebalance: async (currentPrice) => true,
|
|
16291
16397
|
minWaitHours: 24,
|
|
16292
16398
|
direction: "uponly"
|
|
16293
|
-
}
|
|
16399
|
+
},
|
|
16400
|
+
quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "STRK")
|
|
16294
16401
|
},
|
|
16295
|
-
faqs:
|
|
16296
|
-
...faqs2,
|
|
16297
|
-
{
|
|
16298
|
-
question: "Why might I see a negative APY?",
|
|
16299
|
-
answer: "A negative APY can occur when xSTRK's price drops on DEXes. This is usually temporary and tends to recover within a few days or a week."
|
|
16300
|
-
}
|
|
16301
|
-
],
|
|
16402
|
+
faqs: getLSTFAQs("xSTRK"),
|
|
16302
16403
|
points: [{
|
|
16303
16404
|
multiplier: 1,
|
|
16304
16405
|
logo: "https://endur.fi/favicon.ico",
|
|
@@ -16307,68 +16408,237 @@ var xSTRKSTRK = {
|
|
|
16307
16408
|
contractDetails: [],
|
|
16308
16409
|
investmentSteps: []
|
|
16309
16410
|
};
|
|
16310
|
-
var
|
|
16411
|
+
var lstStrategies = [
|
|
16311
16412
|
xSTRKSTRK,
|
|
16312
16413
|
{
|
|
16313
16414
|
...xSTRKSTRK,
|
|
16415
|
+
name: "Ekubo xWBTC/WBTC",
|
|
16416
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16417
|
+
address: ContractAddr.from(
|
|
16418
|
+
"0x2ea99b4971d3c277fa4a9b4beb7d4d7d169e683393a29eef263d5d57b4380a"
|
|
16419
|
+
),
|
|
16420
|
+
launchBlock: 2338309,
|
|
16421
|
+
// must be same order as poolKey token0 and token1
|
|
16422
|
+
depositTokens: [
|
|
16423
|
+
Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
16424
|
+
Global.getDefaultTokens().find((t) => t.symbol === "xWBTC")
|
|
16425
|
+
],
|
|
16426
|
+
additionalInfo: {
|
|
16427
|
+
...xSTRKSTRK.additionalInfo,
|
|
16428
|
+
quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
16429
|
+
lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xWBTC").address
|
|
16430
|
+
},
|
|
16431
|
+
faqs: getLSTFAQs("xWBTC"),
|
|
16432
|
+
points: [],
|
|
16433
|
+
contractDetails: [],
|
|
16434
|
+
investmentSteps: []
|
|
16435
|
+
},
|
|
16436
|
+
{
|
|
16437
|
+
...xSTRKSTRK,
|
|
16438
|
+
name: "Ekubo xtBTC/tBTC",
|
|
16439
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16440
|
+
address: ContractAddr.from(
|
|
16441
|
+
"0x785dc3dfc4e80ef2690a99512481e3ed3a5266180adda5a47e856245d68a4af"
|
|
16442
|
+
),
|
|
16443
|
+
launchBlock: 2344809,
|
|
16444
|
+
// must be same order as poolKey token0 and token1
|
|
16445
|
+
depositTokens: [
|
|
16446
|
+
Global.getDefaultTokens().find((t) => t.symbol === "xtBTC"),
|
|
16447
|
+
Global.getDefaultTokens().find((t) => t.symbol === "tBTC")
|
|
16448
|
+
],
|
|
16449
|
+
additionalInfo: {
|
|
16450
|
+
...xSTRKSTRK.additionalInfo,
|
|
16451
|
+
quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
|
|
16452
|
+
lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xtBTC").address
|
|
16453
|
+
},
|
|
16454
|
+
faqs: getLSTFAQs("xtBTC"),
|
|
16455
|
+
points: [],
|
|
16456
|
+
contractDetails: [],
|
|
16457
|
+
investmentSteps: []
|
|
16458
|
+
},
|
|
16459
|
+
{
|
|
16460
|
+
...xSTRKSTRK,
|
|
16461
|
+
name: "Ekubo xsBTC/solvBTC",
|
|
16462
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16463
|
+
address: ContractAddr.from(
|
|
16464
|
+
"0x3af1c7faa7c464cf2c494e988972ad1939f1103dbfb6e47e9bf0c47e49b14ef"
|
|
16465
|
+
),
|
|
16466
|
+
launchBlock: 2344809,
|
|
16467
|
+
// must be same order as poolKey token0 and token1
|
|
16468
|
+
depositTokens: [
|
|
16469
|
+
Global.getDefaultTokens().find((t) => t.symbol === "xsBTC"),
|
|
16470
|
+
Global.getDefaultTokens().find((t) => t.symbol === "solvBTC")
|
|
16471
|
+
],
|
|
16472
|
+
additionalInfo: {
|
|
16473
|
+
...xSTRKSTRK.additionalInfo,
|
|
16474
|
+
quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "solvBTC"),
|
|
16475
|
+
lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xsBTC").address
|
|
16476
|
+
},
|
|
16477
|
+
faqs: getLSTFAQs("xsBTC"),
|
|
16478
|
+
points: [],
|
|
16479
|
+
contractDetails: [],
|
|
16480
|
+
investmentSteps: []
|
|
16481
|
+
}
|
|
16482
|
+
];
|
|
16483
|
+
var ETHUSDCRe7Strategy = {
|
|
16484
|
+
...xSTRKSTRK,
|
|
16485
|
+
name: "Ekubo ETH/USDC",
|
|
16486
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16487
|
+
address: ContractAddr.from(
|
|
16488
|
+
"0x160d8fa4569ef6a12e6bf47cb943d7b5ebba8a41a69a14c1d943050ba5ff947"
|
|
16489
|
+
),
|
|
16490
|
+
launchBlock: 1504232,
|
|
16491
|
+
// must be same order as poolKey token0 and token1
|
|
16492
|
+
depositTokens: [
|
|
16493
|
+
Global.getDefaultTokens().find((t) => t.symbol === "ETH"),
|
|
16494
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDC")
|
|
16495
|
+
],
|
|
16496
|
+
additionalInfo: {
|
|
16497
|
+
newBounds: "Managed by Re7",
|
|
16498
|
+
truePrice: 1,
|
|
16499
|
+
feeBps: 1e3,
|
|
16500
|
+
rebalanceConditions: {
|
|
16501
|
+
customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
|
|
16502
|
+
minWaitHours: 6,
|
|
16503
|
+
direction: "any"
|
|
16504
|
+
},
|
|
16505
|
+
quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "USDC")
|
|
16506
|
+
},
|
|
16507
|
+
faqs: [
|
|
16508
|
+
...faqs2,
|
|
16509
|
+
{
|
|
16510
|
+
question: "Who is the curator of this strategy?",
|
|
16511
|
+
answer: /* @__PURE__ */ jsxs2("div", { children: [
|
|
16512
|
+
"Re7 Labs is the curator of this strategy. Re7 Labs is a well-known Web3 asset management firm. This strategy is completely managed by them, including ownership of the vault. Troves is developer of the smart contracts and maintains infrastructure to help users access these strategies. You can find more information about them on their website ",
|
|
16513
|
+
/* @__PURE__ */ jsx3("a", { href: "https://www.re7labs.xyz", style: { textDecoration: "underline", marginLeft: "2px" }, target: "_blank", children: "here" }),
|
|
16514
|
+
"."
|
|
16515
|
+
] })
|
|
16516
|
+
}
|
|
16517
|
+
],
|
|
16518
|
+
risk: highRisk,
|
|
16519
|
+
points: [],
|
|
16520
|
+
curator: { name: "Re7 Labs", logo: "https://www.re7labs.xyz/favicon.ico" }
|
|
16521
|
+
};
|
|
16522
|
+
var RE7Strategies = [
|
|
16523
|
+
ETHUSDCRe7Strategy,
|
|
16524
|
+
{
|
|
16525
|
+
...ETHUSDCRe7Strategy,
|
|
16314
16526
|
name: "Ekubo USDC/USDT",
|
|
16315
16527
|
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16316
16528
|
address: ContractAddr.from(
|
|
16317
|
-
"
|
|
16529
|
+
"0x3a4f8debaf12af97bb911099bc011d63d6c208d4c5ba8e15d7f437785b0aaa2"
|
|
16318
16530
|
),
|
|
16319
|
-
launchBlock:
|
|
16531
|
+
launchBlock: 1506139,
|
|
16320
16532
|
// must be same order as poolKey token0 and token1
|
|
16321
16533
|
depositTokens: [
|
|
16322
16534
|
Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
16323
16535
|
Global.getDefaultTokens().find((t) => t.symbol === "USDT")
|
|
16324
16536
|
],
|
|
16325
|
-
|
|
16326
|
-
newBounds: {
|
|
16327
|
-
lower: -1,
|
|
16328
|
-
upper: 1
|
|
16329
|
-
},
|
|
16330
|
-
truePrice: 1,
|
|
16331
|
-
feeBps: 1e3,
|
|
16332
|
-
rebalanceConditions: {
|
|
16333
|
-
customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
|
|
16334
|
-
minWaitHours: 6,
|
|
16335
|
-
direction: "any"
|
|
16336
|
-
}
|
|
16337
|
-
}
|
|
16537
|
+
risk: xSTRKSTRK.risk
|
|
16338
16538
|
},
|
|
16339
16539
|
{
|
|
16340
|
-
...
|
|
16540
|
+
...ETHUSDCRe7Strategy,
|
|
16341
16541
|
name: "Ekubo STRK/USDC",
|
|
16342
16542
|
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16343
16543
|
address: ContractAddr.from(
|
|
16344
|
-
"
|
|
16544
|
+
"0x351b36d0d9d8b40010658825adeeddb1397436cd41acd0ff6c6e23aaa8b5b30"
|
|
16345
16545
|
),
|
|
16346
|
-
launchBlock:
|
|
16546
|
+
launchBlock: 1504079,
|
|
16347
16547
|
// must be same order as poolKey token0 and token1
|
|
16348
16548
|
depositTokens: [
|
|
16349
16549
|
Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
16350
16550
|
Global.getDefaultTokens().find((t) => t.symbol === "USDC")
|
|
16351
16551
|
],
|
|
16352
|
-
|
|
16353
|
-
|
|
16354
|
-
|
|
16355
|
-
|
|
16356
|
-
|
|
16357
|
-
|
|
16358
|
-
|
|
16359
|
-
|
|
16360
|
-
|
|
16361
|
-
|
|
16552
|
+
risk: highRisk
|
|
16553
|
+
},
|
|
16554
|
+
{
|
|
16555
|
+
...ETHUSDCRe7Strategy,
|
|
16556
|
+
name: "Ekubo STRK/ETH",
|
|
16557
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16558
|
+
address: ContractAddr.from(
|
|
16559
|
+
"0x4ce3024b0ee879009112d7b0e073f8a87153dd35b029347d4247ffe48d28f51"
|
|
16560
|
+
),
|
|
16561
|
+
launchBlock: 1504149,
|
|
16562
|
+
// must be same order as poolKey token0 and token1
|
|
16563
|
+
depositTokens: [
|
|
16564
|
+
Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
16565
|
+
Global.getDefaultTokens().find((t) => t.symbol === "ETH")
|
|
16566
|
+
],
|
|
16567
|
+
risk: highRisk
|
|
16568
|
+
},
|
|
16569
|
+
{
|
|
16570
|
+
...ETHUSDCRe7Strategy,
|
|
16571
|
+
name: "Ekubo WBTC/USDC",
|
|
16572
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16573
|
+
address: ContractAddr.from(
|
|
16574
|
+
"0x2bcaef2eb7706875a5fdc6853dd961a0590f850bc3a031c59887189b5e84ba1"
|
|
16575
|
+
),
|
|
16576
|
+
launchBlock: 1506144,
|
|
16577
|
+
// must be same order as poolKey token0 and token1
|
|
16578
|
+
depositTokens: [
|
|
16579
|
+
Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
16580
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDC")
|
|
16581
|
+
],
|
|
16582
|
+
risk: mediumRisk
|
|
16583
|
+
},
|
|
16584
|
+
{
|
|
16585
|
+
...ETHUSDCRe7Strategy,
|
|
16586
|
+
name: "Ekubo tBTC/USDC",
|
|
16587
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16588
|
+
address: ContractAddr.from(
|
|
16589
|
+
"0x4aad891a2d4432fba06b6558631bb13f6bbd7f6f33ab8c3111e344889ea4456"
|
|
16590
|
+
),
|
|
16591
|
+
launchBlock: 1501764,
|
|
16592
|
+
// must be same order as poolKey token0 and token1
|
|
16593
|
+
depositTokens: [
|
|
16594
|
+
Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
|
|
16595
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDC")
|
|
16596
|
+
],
|
|
16597
|
+
risk: mediumRisk
|
|
16598
|
+
},
|
|
16599
|
+
{
|
|
16600
|
+
...ETHUSDCRe7Strategy,
|
|
16601
|
+
name: "Ekubo WBTC/ETH",
|
|
16602
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16603
|
+
address: ContractAddr.from(
|
|
16604
|
+
"0x1c9232b8186d9317652f05055615f18a120c2ad9e5ee96c39e031c257fb945b"
|
|
16605
|
+
),
|
|
16606
|
+
launchBlock: 1506145,
|
|
16607
|
+
// must be same order as poolKey token0 and token1
|
|
16608
|
+
depositTokens: [
|
|
16609
|
+
Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
16610
|
+
Global.getDefaultTokens().find((t) => t.symbol === "ETH")
|
|
16611
|
+
],
|
|
16612
|
+
risk: mediumRisk
|
|
16613
|
+
},
|
|
16614
|
+
{
|
|
16615
|
+
...ETHUSDCRe7Strategy,
|
|
16616
|
+
name: "Ekubo WBTC/STRK",
|
|
16617
|
+
description: /* @__PURE__ */ jsx3(Fragment2, {}),
|
|
16618
|
+
address: ContractAddr.from(
|
|
16619
|
+
"0x1248e385c23a929a015ec298a26560fa7745bbd6e41a886550e337b02714b1b"
|
|
16620
|
+
),
|
|
16621
|
+
launchBlock: 1506147,
|
|
16622
|
+
// must be same order as poolKey token0 and token1
|
|
16623
|
+
depositTokens: [
|
|
16624
|
+
Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
16625
|
+
Global.getDefaultTokens().find((t) => t.symbol === "STRK")
|
|
16626
|
+
],
|
|
16627
|
+
risk: highRisk
|
|
16362
16628
|
}
|
|
16363
16629
|
];
|
|
16630
|
+
var EkuboCLVaultStrategies = [
|
|
16631
|
+
...[lstStrategies[0]],
|
|
16632
|
+
...RE7Strategies
|
|
16633
|
+
];
|
|
16364
16634
|
EkuboCLVaultStrategies.forEach((s) => {
|
|
16365
16635
|
s.contractDetails = [
|
|
16366
16636
|
{
|
|
16367
16637
|
address: s.address,
|
|
16368
16638
|
name: "Vault",
|
|
16369
16639
|
sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/tree/main/src/strategies/cl_vault"
|
|
16370
|
-
}
|
|
16371
|
-
...COMMON_CONTRACTS
|
|
16640
|
+
}
|
|
16641
|
+
// ...COMMON_CONTRACTS
|
|
16372
16642
|
];
|
|
16373
16643
|
s.docs = "https://docs.troves.fi/p/ekubo-cl-vaults";
|
|
16374
16644
|
s.description = /* @__PURE__ */ jsxs2("div", { children: [
|
|
@@ -16389,7 +16659,11 @@ EkuboCLVaultStrategies.forEach((s) => {
|
|
|
16389
16659
|
/* @__PURE__ */ jsx3("h4", { style: { fontWeight: "bold" }, children: "Key points to note:" }),
|
|
16390
16660
|
/* @__PURE__ */ jsxs2("div", { style: { display: "flex", flexDirection: "column", gap: "10px", color: "var(--chakra-colors-text_secondary)" }, children: [
|
|
16391
16661
|
/* @__PURE__ */ jsx3("p", { style: {}, children: "1. During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
|
|
16392
|
-
s.
|
|
16662
|
+
s.additionalInfo.lstContract && /* @__PURE__ */ jsxs2("p", { style: {}, children: [
|
|
16663
|
+
"2. Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when ",
|
|
16664
|
+
s.name.split(" ")[1].split("/")[0],
|
|
16665
|
+
"'s price drops on DEXes, but things typically bounce back within a few days or a week."
|
|
16666
|
+
] })
|
|
16393
16667
|
] })
|
|
16394
16668
|
] })
|
|
16395
16669
|
] });
|
|
@@ -18339,7 +18613,7 @@ var endurProtocol = {
|
|
|
18339
18613
|
name: "Endur",
|
|
18340
18614
|
logo: "https://app.endur.fi/logo.png"
|
|
18341
18615
|
};
|
|
18342
|
-
var
|
|
18616
|
+
var _riskFactor2 = [
|
|
18343
18617
|
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by CSC" },
|
|
18344
18618
|
{ type: "Depeg Risk" /* DEPEG_RISK */, value: 0.25, weight: 25, reason: "Depending on prevailing market conditions and trading activity, xSTRK may lose its peg to the underlying asset." },
|
|
18345
18619
|
{ type: "Liquidation Risk" /* LIQUIDATION_RISK */, value: 0.1, weight: 10, reason: "Liquidation risk is low due to the nature of the Re7 Pool on Vesu" },
|
|
@@ -18414,9 +18688,9 @@ var SenseiStrategies = [
|
|
|
18414
18688
|
protocols: [endurProtocol, vesuProtocol],
|
|
18415
18689
|
maxTVL: new Web3Number("1500000", 18),
|
|
18416
18690
|
risk: {
|
|
18417
|
-
riskFactor:
|
|
18418
|
-
netRisk:
|
|
18419
|
-
notARisks: getNoRiskTags(
|
|
18691
|
+
riskFactor: _riskFactor2,
|
|
18692
|
+
netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0),
|
|
18693
|
+
notARisks: getNoRiskTags(_riskFactor2)
|
|
18420
18694
|
},
|
|
18421
18695
|
additionalInfo: {
|
|
18422
18696
|
mainToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
@@ -21171,7 +21445,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
21171
21445
|
let pools = [];
|
|
21172
21446
|
try {
|
|
21173
21447
|
const data = await getAPIUsingHeadlessBrowser(
|
|
21174
|
-
|
|
21448
|
+
`${ENDPOINTS.VESU_BASE}/pools`
|
|
21175
21449
|
);
|
|
21176
21450
|
pools = data.data;
|
|
21177
21451
|
for (const pool of vesu_pools_default.data) {
|
|
@@ -24030,7 +24304,7 @@ function getLooperSettings(token1Symbol, token2Symbol, vaultSettings, pool1, poo
|
|
|
24030
24304
|
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, USDCToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS */).bind(commonAdapter));
|
|
24031
24305
|
return vaultSettings;
|
|
24032
24306
|
}
|
|
24033
|
-
var
|
|
24307
|
+
var _riskFactor3 = [
|
|
24034
24308
|
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by Zellic" },
|
|
24035
24309
|
{ type: "Liquidation Risk" /* LIQUIDATION_RISK */, value: 1.5, weight: 50, reason: "Liquidation risk is mitigated by stable price feed on Starknet" },
|
|
24036
24310
|
{ type: "Technical Risk" /* TECHNICAL_RISK */, value: 1, weight: 50, reason: "Technical failures like risk monitoring failures" }
|
|
@@ -24234,9 +24508,9 @@ var UniversalStrategies = [
|
|
|
24234
24508
|
depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "USDC")],
|
|
24235
24509
|
additionalInfo: getLooperSettings("USDC", "ETH", usdcVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
|
|
24236
24510
|
risk: {
|
|
24237
|
-
riskFactor:
|
|
24238
|
-
netRisk:
|
|
24239
|
-
notARisks: getNoRiskTags(
|
|
24511
|
+
riskFactor: _riskFactor3,
|
|
24512
|
+
netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
|
|
24513
|
+
notARisks: getNoRiskTags(_riskFactor3)
|
|
24240
24514
|
},
|
|
24241
24515
|
protocols: [Protocols.VESU],
|
|
24242
24516
|
maxTVL: Web3Number.fromWei(0, 6),
|
|
@@ -24253,9 +24527,9 @@ var UniversalStrategies = [
|
|
|
24253
24527
|
depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
|
|
24254
24528
|
additionalInfo: getLooperSettings("WBTC", "ETH", wbtcVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
|
|
24255
24529
|
risk: {
|
|
24256
|
-
riskFactor:
|
|
24257
|
-
netRisk:
|
|
24258
|
-
notARisks: getNoRiskTags(
|
|
24530
|
+
riskFactor: _riskFactor3,
|
|
24531
|
+
netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
|
|
24532
|
+
notARisks: getNoRiskTags(_riskFactor3)
|
|
24259
24533
|
},
|
|
24260
24534
|
protocols: [Protocols.VESU],
|
|
24261
24535
|
maxTVL: Web3Number.fromWei(0, 8),
|
|
@@ -24272,9 +24546,9 @@ var UniversalStrategies = [
|
|
|
24272
24546
|
depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "ETH")],
|
|
24273
24547
|
additionalInfo: getLooperSettings("ETH", "WBTC", ethVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
|
|
24274
24548
|
risk: {
|
|
24275
|
-
riskFactor:
|
|
24276
|
-
netRisk:
|
|
24277
|
-
notARisks: getNoRiskTags(
|
|
24549
|
+
riskFactor: _riskFactor3,
|
|
24550
|
+
netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
|
|
24551
|
+
notARisks: getNoRiskTags(_riskFactor3)
|
|
24278
24552
|
},
|
|
24279
24553
|
protocols: [Protocols.VESU],
|
|
24280
24554
|
maxTVL: Web3Number.fromWei(0, 18),
|
|
@@ -24291,9 +24565,9 @@ var UniversalStrategies = [
|
|
|
24291
24565
|
depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "STRK")],
|
|
24292
24566
|
additionalInfo: getLooperSettings("STRK", "ETH", strkVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
|
|
24293
24567
|
risk: {
|
|
24294
|
-
riskFactor:
|
|
24295
|
-
netRisk:
|
|
24296
|
-
notARisks: getNoRiskTags(
|
|
24568
|
+
riskFactor: _riskFactor3,
|
|
24569
|
+
netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
|
|
24570
|
+
notARisks: getNoRiskTags(_riskFactor3)
|
|
24297
24571
|
},
|
|
24298
24572
|
protocols: [Protocols.VESU],
|
|
24299
24573
|
maxTVL: Web3Number.fromWei(0, 18),
|
|
@@ -24310,9 +24584,9 @@ var UniversalStrategies = [
|
|
|
24310
24584
|
depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "USDT")],
|
|
24311
24585
|
additionalInfo: getLooperSettings("USDT", "ETH", usdtVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
|
|
24312
24586
|
risk: {
|
|
24313
|
-
riskFactor:
|
|
24314
|
-
netRisk:
|
|
24315
|
-
notARisks: getNoRiskTags(
|
|
24587
|
+
riskFactor: _riskFactor3,
|
|
24588
|
+
netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
|
|
24589
|
+
notARisks: getNoRiskTags(_riskFactor3)
|
|
24316
24590
|
},
|
|
24317
24591
|
protocols: [Protocols.VESU],
|
|
24318
24592
|
maxTVL: Web3Number.fromWei(0, 6),
|