@strkfarm/sdk 2.0.0-dev.36 → 2.0.0-dev.37
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 +163 -23
- package/dist/index.browser.mjs +163 -23
- package/dist/index.js +163 -23
- package/dist/index.mjs +163 -23
- package/package.json +1 -1
- package/src/strategies/token-boosted-xstrk-carry-strategy.tsx +190 -24
|
@@ -126416,6 +126416,7 @@ spurious results.`);
|
|
|
126416
126416
|
];
|
|
126417
126417
|
|
|
126418
126418
|
// src/strategies/token-boosted-xstrk-carry-strategy.tsx
|
|
126419
|
+
var import_jsx_runtime6 = __toESM(require_jsx_runtime());
|
|
126419
126420
|
var BoostedxSTRKCarryStrategy = class _BoostedxSTRKCarryStrategy extends SVKStrategy {
|
|
126420
126421
|
constructor(config3, pricer, metadata) {
|
|
126421
126422
|
super(config3, pricer, metadata);
|
|
@@ -127054,15 +127055,15 @@ spurious results.`);
|
|
|
127054
127055
|
leafAdapters: [],
|
|
127055
127056
|
adapters: [],
|
|
127056
127057
|
// Calc using the maxLTV / targetLTV (0.5)
|
|
127057
|
-
targetHealthFactor: 1.
|
|
127058
|
+
targetHealthFactor: 1.36,
|
|
127058
127059
|
// Calc using the maxLTV / maxAcceptableLTV (0.55)
|
|
127059
|
-
minHealthFactor: 1.
|
|
127060
|
+
minHealthFactor: 1.3,
|
|
127060
127061
|
vesuPoolId: VesuPools.Prime,
|
|
127061
127062
|
// New metadata-driven token configuration
|
|
127062
127063
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
127063
127064
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
127064
127065
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
127065
|
-
maxLTV: 0.
|
|
127066
|
+
maxLTV: 0.68,
|
|
127066
127067
|
targetLTV: 0.5,
|
|
127067
127068
|
// BTC.Fi rewards flag - false for USDC (uses old report flow)
|
|
127068
127069
|
hasBtcFiRewards: false,
|
|
@@ -127093,13 +127094,13 @@ spurious results.`);
|
|
|
127093
127094
|
),
|
|
127094
127095
|
leafAdapters: [],
|
|
127095
127096
|
adapters: [],
|
|
127096
|
-
targetHealthFactor: 1.
|
|
127097
|
-
minHealthFactor: 1.
|
|
127097
|
+
targetHealthFactor: 1.4,
|
|
127098
|
+
minHealthFactor: 1.35,
|
|
127098
127099
|
vesuPoolId: VesuPools.Prime,
|
|
127099
127100
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
127100
127101
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
127101
127102
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
127102
|
-
maxLTV: 0.
|
|
127103
|
+
maxLTV: 0.7,
|
|
127103
127104
|
targetLTV: 0.5,
|
|
127104
127105
|
hasBtcFiRewards: true,
|
|
127105
127106
|
hyperLstVaultAddress: ContractAddr.from(
|
|
@@ -127110,6 +127111,145 @@ spurious results.`);
|
|
|
127110
127111
|
),
|
|
127111
127112
|
trovesStrategyId: "hyper_xstrk"
|
|
127112
127113
|
};
|
|
127114
|
+
var boostedCarryRiskFactors = [
|
|
127115
|
+
{
|
|
127116
|
+
type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */,
|
|
127117
|
+
value: 2 /* WELL_AUDITED */,
|
|
127118
|
+
// 20% — core trust assumption; SVK is audited but still multi-contract (vault, manager, adapters).
|
|
127119
|
+
weight: 20,
|
|
127120
|
+
reason: "Built on the Starknet Vault Kit (SVK), with audits under the Sherlock-audited branch."
|
|
127121
|
+
},
|
|
127122
|
+
{
|
|
127123
|
+
type: "Liquidation Risk" /* LIQUIDATION_RISK */,
|
|
127124
|
+
value: 3 /* MODERATE_PROBABILITY */,
|
|
127125
|
+
// 20% — tied with smart contract; uncorrelated collateral/debt is the main principal risk here.
|
|
127126
|
+
weight: 20,
|
|
127127
|
+
reason: "Collateral (USDC or WBTC) and STRK debt are not price-correlated. We target ~50% LTV and rebalance above ~55%, with a health-factor buffer, but extreme moves or prolonged monitoring gaps can still trigger liquidation."
|
|
127128
|
+
},
|
|
127129
|
+
{
|
|
127130
|
+
type: "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */,
|
|
127131
|
+
value: 3 /* MODERATE_CONCERNS */,
|
|
127132
|
+
// 15% — below liquidation but above ops risks; every unwind/withdraw depends on xSTRK→STRK depth.
|
|
127133
|
+
weight: 15,
|
|
127134
|
+
reason: "Closing the loop requires selling xSTRK to STRK on DEXes to repay Vesu debt. xSTRK liquidity can be thin at fair prices; larger withdrawals or rebalances may take longer or complete in smaller chunks."
|
|
127135
|
+
},
|
|
127136
|
+
{
|
|
127137
|
+
type: "Technical Risk" /* TECHNICAL_RISK */,
|
|
127138
|
+
value: 3 /* SOME_COMPLEXITY */,
|
|
127139
|
+
// 13% — monitoring/rebalancing stack matters, but usually recoverable without instant loss.
|
|
127140
|
+
weight: 13,
|
|
127141
|
+
reason: "Yield routes across Vesu, Avnu, and Hyper xSTRK with automated monitoring. Technical failures can delay rebalancing."
|
|
127142
|
+
},
|
|
127143
|
+
{
|
|
127144
|
+
type: "Depeg Risk" /* DEPEG_RISK */,
|
|
127145
|
+
value: 3 /* OCCASIONAL_DEPEG */,
|
|
127146
|
+
// 12% — affects yield and swap notionals; USDC/WBTC depeg is rarer than xSTRK/STRK drift.
|
|
127147
|
+
weight: 12,
|
|
127148
|
+
reason: "xSTRK yield depends on its exchange rate vs STRK; USDC and WBTC carry standard stablecoin and BTC market risks."
|
|
127149
|
+
},
|
|
127150
|
+
{
|
|
127151
|
+
type: "Oracle Risk" /* ORACLE_RISK */,
|
|
127152
|
+
value: 2 /* SINGLE_RELIABLE */,
|
|
127153
|
+
// 10% — Vesu HF depends on feeds; Starknet oracles are established but not redundant here.
|
|
127154
|
+
weight: 10,
|
|
127155
|
+
reason: "Vesu collateral and debt valuations rely on Starknet price feeds."
|
|
127156
|
+
},
|
|
127157
|
+
{
|
|
127158
|
+
type: "Counterparty Risk" /* COUNTERPARTY_RISK */,
|
|
127159
|
+
value: 2 /* REPUTABLE_COUNTERPARTY */,
|
|
127160
|
+
// 10% — same tier as oracle; Vesu/Endur/Troves are mature but still protocol counterparty risk.
|
|
127161
|
+
weight: 10,
|
|
127162
|
+
reason: "Exposure to Vesu lending, Endur (xSTRK), and Troves Hyper vault infrastructure."
|
|
127163
|
+
},
|
|
127164
|
+
{
|
|
127165
|
+
type: "Market Risk" /* MARKET_RISK */,
|
|
127166
|
+
value: 3 /* MODERATE_VOLATILITY */,
|
|
127167
|
+
// 5% — largely captured by liquidation + depeg factors; kept small to avoid double-counting vol.
|
|
127168
|
+
weight: 5,
|
|
127169
|
+
reason: "STRK, BTC, and stablecoin volatility can move loan-to-value and swap costs."
|
|
127170
|
+
}
|
|
127171
|
+
];
|
|
127172
|
+
function getBoostedCarryRisk() {
|
|
127173
|
+
const netRisk = boostedCarryRiskFactors.reduce(
|
|
127174
|
+
(acc, curr) => acc + curr.value * curr.weight,
|
|
127175
|
+
0
|
|
127176
|
+
) / boostedCarryRiskFactors.reduce((acc, curr) => acc + curr.weight, 0);
|
|
127177
|
+
return {
|
|
127178
|
+
riskFactor: boostedCarryRiskFactors,
|
|
127179
|
+
netRisk,
|
|
127180
|
+
notARisks: getNoRiskTags(boostedCarryRiskFactors)
|
|
127181
|
+
};
|
|
127182
|
+
}
|
|
127183
|
+
function getBoostedCarryFAQs(depositSymbol, debtSymbol, lstSymbol) {
|
|
127184
|
+
return [
|
|
127185
|
+
{
|
|
127186
|
+
question: `What is ${depositSymbol} Boosted?`,
|
|
127187
|
+
answer: `${depositSymbol} Boosted is a carry-style vault: your ${depositSymbol} is supplied as collateral on Vesu, ${debtSymbol} is borrowed, swapped to ${lstSymbol}, and deposited into Hyper-${lstSymbol} for additional yield on top of the lending loop.`
|
|
127188
|
+
},
|
|
127189
|
+
{
|
|
127190
|
+
question: "How does this strategy generate yield?",
|
|
127191
|
+
answer: `Yield comes from several layers: ${lstSymbol} staking yield inside Hyper-${lstSymbol}, the spread between borrowing ${debtSymbol} and holding ${lstSymbol}, and efficient routing via Avnu. The vault targets about 50% loan-to-value and rebalances when LTV rises above ~55% so risk and yield stay in balance.`
|
|
127192
|
+
},
|
|
127193
|
+
{
|
|
127194
|
+
question: "Which protocols are used?",
|
|
127195
|
+
answer: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { children: [
|
|
127196
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("strong", { children: "Vesu" }),
|
|
127197
|
+
" for collateral and borrowing, ",
|
|
127198
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("strong", { children: "Avnu" }),
|
|
127199
|
+
" ",
|
|
127200
|
+
"for swaps, ",
|
|
127201
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("strong", { children: "Endur" }),
|
|
127202
|
+
" for ",
|
|
127203
|
+
lstSymbol,
|
|
127204
|
+
", and the Troves",
|
|
127205
|
+
" ",
|
|
127206
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("strong", { children: [
|
|
127207
|
+
"Hyper-",
|
|
127208
|
+
lstSymbol
|
|
127209
|
+
] }),
|
|
127210
|
+
" vault for the boosted leg."
|
|
127211
|
+
] })
|
|
127212
|
+
},
|
|
127213
|
+
{
|
|
127214
|
+
question: "Is there liquidation risk?",
|
|
127215
|
+
answer: `Yes. Your ${depositSymbol} collateral and ${debtSymbol} debt can move in different directions, which affects your health factor on Vesu. We actively monitor positions and rebalance automatically through our systems to keep loan-to-value near target. However, unexpected technical failures or very sharp market moves can still lead to liquidation. Under normal conditions we aim for a buffer of roughly 30% adverse price movement before liquidation becomes likely \u2014 but if monitoring is unavailable for many hours during a trending market, that buffer can be consumed. In extreme scenarios, liquidation remains possible.`
|
|
127216
|
+
},
|
|
127217
|
+
{
|
|
127218
|
+
question: "What do I receive when I deposit?",
|
|
127219
|
+
answer: "You receive vault tokens representing your share of the vault. They reflect both principal and accrued yield."
|
|
127220
|
+
},
|
|
127221
|
+
{
|
|
127222
|
+
question: "How long do withdrawals take?",
|
|
127223
|
+
answer: "Withdrawals typically take 1\u20132 hours. You receive an NFT for your request; funds are sent to the NFT owner once the vault unwinds its positions. The vault must sell xSTRK back to STRK to repay debt \u2014 if DEX liquidity is thin or your withdrawal is large, unwinding can take longer or happen in smaller steps to limit slippage."
|
|
127224
|
+
},
|
|
127225
|
+
{
|
|
127226
|
+
question: "Is this vault non-custodial?",
|
|
127227
|
+
answer: "Yes. The vault runs on-chain. You hold your vault tokens, and positions are transparent via on-chain contracts."
|
|
127228
|
+
},
|
|
127229
|
+
{
|
|
127230
|
+
question: "Are there any fees?",
|
|
127231
|
+
answer: "Troves charges a 10% performance fee on yield only \u2014 not on your deposited principal. The APY shown is already net of this fee. When you withdraw, a 0.1% redemption fee applies. That small fee helps keep the vault efficient for long-term depositors. This fee is sent back to the vault itself: very short stays create extra swap and rebalancing costs for everyone. If you stay for a reasonable period, your yield will typically far outweigh this one-time charge."
|
|
127232
|
+
},
|
|
127233
|
+
{
|
|
127234
|
+
question: "Is the vault audited?",
|
|
127235
|
+
answer: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { children: [
|
|
127236
|
+
"Yes. The strategy is built on the audited Starknet Vault Kit. See the security details beside the strategy name and the",
|
|
127237
|
+
" ",
|
|
127238
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
127239
|
+
"a",
|
|
127240
|
+
{
|
|
127241
|
+
href: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited",
|
|
127242
|
+
target: "_blank",
|
|
127243
|
+
rel: "noopener noreferrer",
|
|
127244
|
+
style: { textDecoration: "underline" },
|
|
127245
|
+
children: "open-source repo"
|
|
127246
|
+
}
|
|
127247
|
+
),
|
|
127248
|
+
"."
|
|
127249
|
+
] })
|
|
127250
|
+
}
|
|
127251
|
+
];
|
|
127252
|
+
}
|
|
127113
127253
|
function getStrategySettings2(settings2, meta) {
|
|
127114
127254
|
const depositToken = settings2.depositToken;
|
|
127115
127255
|
const debtToken = settings2.debtToken;
|
|
@@ -127117,7 +127257,7 @@ spurious results.`);
|
|
|
127117
127257
|
return {
|
|
127118
127258
|
id: meta.id,
|
|
127119
127259
|
name: meta.name,
|
|
127120
|
-
description: `Deposits ${depositToken.symbol} as collateral on Vesu, borrows ${debtToken.symbol}, swaps to ${lstToken.symbol}, and deposits into Hyper-${lstToken.symbol} for boosted yield
|
|
127260
|
+
description: `Deposits ${depositToken.symbol} as collateral on Vesu, borrows ${debtToken.symbol}, swaps to ${lstToken.symbol}, and deposits into Hyper-${lstToken.symbol} for boosted yield. Target LTV is about 50%, with rebalances happening when LTV is above 55%.`,
|
|
127121
127261
|
address: settings2.vaultAddress,
|
|
127122
127262
|
launchBlock: meta.launchBlock,
|
|
127123
127263
|
type: "ERC4626",
|
|
@@ -127127,13 +127267,8 @@ spurious results.`);
|
|
|
127127
127267
|
},
|
|
127128
127268
|
depositTokens: [depositToken],
|
|
127129
127269
|
additionalInfo: getBoostedxSTRKCarrySettings(settings2),
|
|
127130
|
-
|
|
127131
|
-
|
|
127132
|
-
riskFactor: [],
|
|
127133
|
-
netRisk: 0,
|
|
127134
|
-
notARisks: []
|
|
127135
|
-
},
|
|
127136
|
-
protocols: [Protocols.VESU, Protocols.TROVES],
|
|
127270
|
+
risk: getBoostedCarryRisk(),
|
|
127271
|
+
protocols: [Protocols.VESU, Protocols.ENDUR, Protocols.TROVES],
|
|
127137
127272
|
curator: {
|
|
127138
127273
|
name: "Unwrap Labs",
|
|
127139
127274
|
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
@@ -127141,7 +127276,7 @@ spurious results.`);
|
|
|
127141
127276
|
settings: {
|
|
127142
127277
|
maxTVL: Web3Number.fromWei(0, depositToken.decimals),
|
|
127143
127278
|
isPaused: false,
|
|
127144
|
-
isAudited:
|
|
127279
|
+
isAudited: true,
|
|
127145
127280
|
isInstantWithdrawal: false,
|
|
127146
127281
|
hideHarvestInfo: true,
|
|
127147
127282
|
quoteToken: depositToken,
|
|
@@ -127154,27 +127289,32 @@ spurious results.`);
|
|
|
127154
127289
|
]
|
|
127155
127290
|
},
|
|
127156
127291
|
contractDetails: getContractDetails(settings2),
|
|
127157
|
-
|
|
127158
|
-
|
|
127292
|
+
faqs: getBoostedCarryFAQs(
|
|
127293
|
+
depositToken.symbol,
|
|
127294
|
+
debtToken.symbol,
|
|
127295
|
+
lstToken.symbol
|
|
127296
|
+
),
|
|
127297
|
+
apyMethodology: "APY reflects net returns after a 10% performance fee on yield (not on principal). Underlying xSTRK appreciation and Vesu borrow costs can move over time; displayed APY is an estimate.",
|
|
127159
127298
|
investmentSteps: [
|
|
127160
127299
|
`Deposit ${depositToken.symbol} into the vault`,
|
|
127161
127300
|
`${depositToken.symbol} is supplied as collateral on Vesu, ${debtToken.symbol} is borrowed`,
|
|
127162
127301
|
`Borrowed ${debtToken.symbol} is swapped to ${lstToken.symbol} via Avnu`,
|
|
127163
127302
|
`${lstToken.symbol} is deposited into the Hyper-${lstToken.symbol} vault for additional yield`,
|
|
127164
|
-
`
|
|
127303
|
+
`Actively monitored and rebalanced to maintain optimal LTV and yield.`
|
|
127165
127304
|
],
|
|
127166
127305
|
// TODO: config later
|
|
127167
127306
|
tags: ["Meta Vaults" /* META_VAULT */],
|
|
127168
127307
|
security: {
|
|
127169
127308
|
auditStatus: "Audited" /* AUDITED */,
|
|
127170
127309
|
sourceCode: {
|
|
127171
|
-
type: "
|
|
127172
|
-
contractLink: "https://github.com/trovesfi/
|
|
127310
|
+
type: "Open Source" /* OPEN_SOURCE */,
|
|
127311
|
+
contractLink: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited"
|
|
127173
127312
|
},
|
|
127313
|
+
// TODO
|
|
127174
127314
|
accessControl: {
|
|
127175
127315
|
type: "Standard Account" /* STANDARD_ACCOUNT */,
|
|
127176
127316
|
addresses: [ContractAddr.from("0x0")],
|
|
127177
|
-
timeLock: "
|
|
127317
|
+
timeLock: "0 Days"
|
|
127178
127318
|
}
|
|
127179
127319
|
},
|
|
127180
127320
|
redemptionInfo: {
|
|
@@ -127193,8 +127333,8 @@ spurious results.`);
|
|
|
127193
127333
|
}
|
|
127194
127334
|
]
|
|
127195
127335
|
},
|
|
127196
|
-
usualTimeToEarnings:
|
|
127197
|
-
usualTimeToEarningsDescription:
|
|
127336
|
+
usualTimeToEarnings: "2 weeks",
|
|
127337
|
+
usualTimeToEarningsDescription: "This strategy depends on Hyper xSTRK's yield, which depends on the price of xSTRK on DEX appreciating. It may be possible the increase is not continuous and generally rebases atleast once every 2 weeks."
|
|
127198
127338
|
};
|
|
127199
127339
|
}
|
|
127200
127340
|
var BoostedxSTRKCarryStrategies = [
|
package/dist/index.browser.mjs
CHANGED
|
@@ -39015,6 +39015,7 @@ var HyperLSTStrategies = [
|
|
|
39015
39015
|
|
|
39016
39016
|
// src/strategies/token-boosted-xstrk-carry-strategy.tsx
|
|
39017
39017
|
import { uint256 as uint25624, num as num14 } from "starknet";
|
|
39018
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
39018
39019
|
var BoostedxSTRKCarryStrategy = class _BoostedxSTRKCarryStrategy extends SVKStrategy {
|
|
39019
39020
|
constructor(config, pricer, metadata) {
|
|
39020
39021
|
super(config, pricer, metadata);
|
|
@@ -39653,15 +39654,15 @@ var boostedxSTRKCarrySettings = {
|
|
|
39653
39654
|
leafAdapters: [],
|
|
39654
39655
|
adapters: [],
|
|
39655
39656
|
// Calc using the maxLTV / targetLTV (0.5)
|
|
39656
|
-
targetHealthFactor: 1.
|
|
39657
|
+
targetHealthFactor: 1.36,
|
|
39657
39658
|
// Calc using the maxLTV / maxAcceptableLTV (0.55)
|
|
39658
|
-
minHealthFactor: 1.
|
|
39659
|
+
minHealthFactor: 1.3,
|
|
39659
39660
|
vesuPoolId: VesuPools.Prime,
|
|
39660
39661
|
// New metadata-driven token configuration
|
|
39661
39662
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
39662
39663
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
39663
39664
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
39664
|
-
maxLTV: 0.
|
|
39665
|
+
maxLTV: 0.68,
|
|
39665
39666
|
targetLTV: 0.5,
|
|
39666
39667
|
// BTC.Fi rewards flag - false for USDC (uses old report flow)
|
|
39667
39668
|
hasBtcFiRewards: false,
|
|
@@ -39692,13 +39693,13 @@ var wbtcBoostedSettings = {
|
|
|
39692
39693
|
),
|
|
39693
39694
|
leafAdapters: [],
|
|
39694
39695
|
adapters: [],
|
|
39695
|
-
targetHealthFactor: 1.
|
|
39696
|
-
minHealthFactor: 1.
|
|
39696
|
+
targetHealthFactor: 1.4,
|
|
39697
|
+
minHealthFactor: 1.35,
|
|
39697
39698
|
vesuPoolId: VesuPools.Prime,
|
|
39698
39699
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
39699
39700
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
39700
39701
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
39701
|
-
maxLTV: 0.
|
|
39702
|
+
maxLTV: 0.7,
|
|
39702
39703
|
targetLTV: 0.5,
|
|
39703
39704
|
hasBtcFiRewards: true,
|
|
39704
39705
|
hyperLstVaultAddress: ContractAddr.from(
|
|
@@ -39709,6 +39710,145 @@ var wbtcBoostedSettings = {
|
|
|
39709
39710
|
),
|
|
39710
39711
|
trovesStrategyId: "hyper_xstrk"
|
|
39711
39712
|
};
|
|
39713
|
+
var boostedCarryRiskFactors = [
|
|
39714
|
+
{
|
|
39715
|
+
type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */,
|
|
39716
|
+
value: 2 /* WELL_AUDITED */,
|
|
39717
|
+
// 20% — core trust assumption; SVK is audited but still multi-contract (vault, manager, adapters).
|
|
39718
|
+
weight: 20,
|
|
39719
|
+
reason: "Built on the Starknet Vault Kit (SVK), with audits under the Sherlock-audited branch."
|
|
39720
|
+
},
|
|
39721
|
+
{
|
|
39722
|
+
type: "Liquidation Risk" /* LIQUIDATION_RISK */,
|
|
39723
|
+
value: 3 /* MODERATE_PROBABILITY */,
|
|
39724
|
+
// 20% — tied with smart contract; uncorrelated collateral/debt is the main principal risk here.
|
|
39725
|
+
weight: 20,
|
|
39726
|
+
reason: "Collateral (USDC or WBTC) and STRK debt are not price-correlated. We target ~50% LTV and rebalance above ~55%, with a health-factor buffer, but extreme moves or prolonged monitoring gaps can still trigger liquidation."
|
|
39727
|
+
},
|
|
39728
|
+
{
|
|
39729
|
+
type: "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */,
|
|
39730
|
+
value: 3 /* MODERATE_CONCERNS */,
|
|
39731
|
+
// 15% — below liquidation but above ops risks; every unwind/withdraw depends on xSTRK→STRK depth.
|
|
39732
|
+
weight: 15,
|
|
39733
|
+
reason: "Closing the loop requires selling xSTRK to STRK on DEXes to repay Vesu debt. xSTRK liquidity can be thin at fair prices; larger withdrawals or rebalances may take longer or complete in smaller chunks."
|
|
39734
|
+
},
|
|
39735
|
+
{
|
|
39736
|
+
type: "Technical Risk" /* TECHNICAL_RISK */,
|
|
39737
|
+
value: 3 /* SOME_COMPLEXITY */,
|
|
39738
|
+
// 13% — monitoring/rebalancing stack matters, but usually recoverable without instant loss.
|
|
39739
|
+
weight: 13,
|
|
39740
|
+
reason: "Yield routes across Vesu, Avnu, and Hyper xSTRK with automated monitoring. Technical failures can delay rebalancing."
|
|
39741
|
+
},
|
|
39742
|
+
{
|
|
39743
|
+
type: "Depeg Risk" /* DEPEG_RISK */,
|
|
39744
|
+
value: 3 /* OCCASIONAL_DEPEG */,
|
|
39745
|
+
// 12% — affects yield and swap notionals; USDC/WBTC depeg is rarer than xSTRK/STRK drift.
|
|
39746
|
+
weight: 12,
|
|
39747
|
+
reason: "xSTRK yield depends on its exchange rate vs STRK; USDC and WBTC carry standard stablecoin and BTC market risks."
|
|
39748
|
+
},
|
|
39749
|
+
{
|
|
39750
|
+
type: "Oracle Risk" /* ORACLE_RISK */,
|
|
39751
|
+
value: 2 /* SINGLE_RELIABLE */,
|
|
39752
|
+
// 10% — Vesu HF depends on feeds; Starknet oracles are established but not redundant here.
|
|
39753
|
+
weight: 10,
|
|
39754
|
+
reason: "Vesu collateral and debt valuations rely on Starknet price feeds."
|
|
39755
|
+
},
|
|
39756
|
+
{
|
|
39757
|
+
type: "Counterparty Risk" /* COUNTERPARTY_RISK */,
|
|
39758
|
+
value: 2 /* REPUTABLE_COUNTERPARTY */,
|
|
39759
|
+
// 10% — same tier as oracle; Vesu/Endur/Troves are mature but still protocol counterparty risk.
|
|
39760
|
+
weight: 10,
|
|
39761
|
+
reason: "Exposure to Vesu lending, Endur (xSTRK), and Troves Hyper vault infrastructure."
|
|
39762
|
+
},
|
|
39763
|
+
{
|
|
39764
|
+
type: "Market Risk" /* MARKET_RISK */,
|
|
39765
|
+
value: 3 /* MODERATE_VOLATILITY */,
|
|
39766
|
+
// 5% — largely captured by liquidation + depeg factors; kept small to avoid double-counting vol.
|
|
39767
|
+
weight: 5,
|
|
39768
|
+
reason: "STRK, BTC, and stablecoin volatility can move loan-to-value and swap costs."
|
|
39769
|
+
}
|
|
39770
|
+
];
|
|
39771
|
+
function getBoostedCarryRisk() {
|
|
39772
|
+
const netRisk = boostedCarryRiskFactors.reduce(
|
|
39773
|
+
(acc, curr) => acc + curr.value * curr.weight,
|
|
39774
|
+
0
|
|
39775
|
+
) / boostedCarryRiskFactors.reduce((acc, curr) => acc + curr.weight, 0);
|
|
39776
|
+
return {
|
|
39777
|
+
riskFactor: boostedCarryRiskFactors,
|
|
39778
|
+
netRisk,
|
|
39779
|
+
notARisks: getNoRiskTags(boostedCarryRiskFactors)
|
|
39780
|
+
};
|
|
39781
|
+
}
|
|
39782
|
+
function getBoostedCarryFAQs(depositSymbol, debtSymbol, lstSymbol) {
|
|
39783
|
+
return [
|
|
39784
|
+
{
|
|
39785
|
+
question: `What is ${depositSymbol} Boosted?`,
|
|
39786
|
+
answer: `${depositSymbol} Boosted is a carry-style vault: your ${depositSymbol} is supplied as collateral on Vesu, ${debtSymbol} is borrowed, swapped to ${lstSymbol}, and deposited into Hyper-${lstSymbol} for additional yield on top of the lending loop.`
|
|
39787
|
+
},
|
|
39788
|
+
{
|
|
39789
|
+
question: "How does this strategy generate yield?",
|
|
39790
|
+
answer: `Yield comes from several layers: ${lstSymbol} staking yield inside Hyper-${lstSymbol}, the spread between borrowing ${debtSymbol} and holding ${lstSymbol}, and efficient routing via Avnu. The vault targets about 50% loan-to-value and rebalances when LTV rises above ~55% so risk and yield stay in balance.`
|
|
39791
|
+
},
|
|
39792
|
+
{
|
|
39793
|
+
question: "Which protocols are used?",
|
|
39794
|
+
answer: /* @__PURE__ */ jsxs5("span", { children: [
|
|
39795
|
+
/* @__PURE__ */ jsx6("strong", { children: "Vesu" }),
|
|
39796
|
+
" for collateral and borrowing, ",
|
|
39797
|
+
/* @__PURE__ */ jsx6("strong", { children: "Avnu" }),
|
|
39798
|
+
" ",
|
|
39799
|
+
"for swaps, ",
|
|
39800
|
+
/* @__PURE__ */ jsx6("strong", { children: "Endur" }),
|
|
39801
|
+
" for ",
|
|
39802
|
+
lstSymbol,
|
|
39803
|
+
", and the Troves",
|
|
39804
|
+
" ",
|
|
39805
|
+
/* @__PURE__ */ jsxs5("strong", { children: [
|
|
39806
|
+
"Hyper-",
|
|
39807
|
+
lstSymbol
|
|
39808
|
+
] }),
|
|
39809
|
+
" vault for the boosted leg."
|
|
39810
|
+
] })
|
|
39811
|
+
},
|
|
39812
|
+
{
|
|
39813
|
+
question: "Is there liquidation risk?",
|
|
39814
|
+
answer: `Yes. Your ${depositSymbol} collateral and ${debtSymbol} debt can move in different directions, which affects your health factor on Vesu. We actively monitor positions and rebalance automatically through our systems to keep loan-to-value near target. However, unexpected technical failures or very sharp market moves can still lead to liquidation. Under normal conditions we aim for a buffer of roughly 30% adverse price movement before liquidation becomes likely \u2014 but if monitoring is unavailable for many hours during a trending market, that buffer can be consumed. In extreme scenarios, liquidation remains possible.`
|
|
39815
|
+
},
|
|
39816
|
+
{
|
|
39817
|
+
question: "What do I receive when I deposit?",
|
|
39818
|
+
answer: "You receive vault tokens representing your share of the vault. They reflect both principal and accrued yield."
|
|
39819
|
+
},
|
|
39820
|
+
{
|
|
39821
|
+
question: "How long do withdrawals take?",
|
|
39822
|
+
answer: "Withdrawals typically take 1\u20132 hours. You receive an NFT for your request; funds are sent to the NFT owner once the vault unwinds its positions. The vault must sell xSTRK back to STRK to repay debt \u2014 if DEX liquidity is thin or your withdrawal is large, unwinding can take longer or happen in smaller steps to limit slippage."
|
|
39823
|
+
},
|
|
39824
|
+
{
|
|
39825
|
+
question: "Is this vault non-custodial?",
|
|
39826
|
+
answer: "Yes. The vault runs on-chain. You hold your vault tokens, and positions are transparent via on-chain contracts."
|
|
39827
|
+
},
|
|
39828
|
+
{
|
|
39829
|
+
question: "Are there any fees?",
|
|
39830
|
+
answer: "Troves charges a 10% performance fee on yield only \u2014 not on your deposited principal. The APY shown is already net of this fee. When you withdraw, a 0.1% redemption fee applies. That small fee helps keep the vault efficient for long-term depositors. This fee is sent back to the vault itself: very short stays create extra swap and rebalancing costs for everyone. If you stay for a reasonable period, your yield will typically far outweigh this one-time charge."
|
|
39831
|
+
},
|
|
39832
|
+
{
|
|
39833
|
+
question: "Is the vault audited?",
|
|
39834
|
+
answer: /* @__PURE__ */ jsxs5("span", { children: [
|
|
39835
|
+
"Yes. The strategy is built on the audited Starknet Vault Kit. See the security details beside the strategy name and the",
|
|
39836
|
+
" ",
|
|
39837
|
+
/* @__PURE__ */ jsx6(
|
|
39838
|
+
"a",
|
|
39839
|
+
{
|
|
39840
|
+
href: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited",
|
|
39841
|
+
target: "_blank",
|
|
39842
|
+
rel: "noopener noreferrer",
|
|
39843
|
+
style: { textDecoration: "underline" },
|
|
39844
|
+
children: "open-source repo"
|
|
39845
|
+
}
|
|
39846
|
+
),
|
|
39847
|
+
"."
|
|
39848
|
+
] })
|
|
39849
|
+
}
|
|
39850
|
+
];
|
|
39851
|
+
}
|
|
39712
39852
|
function getStrategySettings2(settings, meta) {
|
|
39713
39853
|
const depositToken = settings.depositToken;
|
|
39714
39854
|
const debtToken = settings.debtToken;
|
|
@@ -39716,7 +39856,7 @@ function getStrategySettings2(settings, meta) {
|
|
|
39716
39856
|
return {
|
|
39717
39857
|
id: meta.id,
|
|
39718
39858
|
name: meta.name,
|
|
39719
|
-
description: `Deposits ${depositToken.symbol} as collateral on Vesu, borrows ${debtToken.symbol}, swaps to ${lstToken.symbol}, and deposits into Hyper-${lstToken.symbol} for boosted yield
|
|
39859
|
+
description: `Deposits ${depositToken.symbol} as collateral on Vesu, borrows ${debtToken.symbol}, swaps to ${lstToken.symbol}, and deposits into Hyper-${lstToken.symbol} for boosted yield. Target LTV is about 50%, with rebalances happening when LTV is above 55%.`,
|
|
39720
39860
|
address: settings.vaultAddress,
|
|
39721
39861
|
launchBlock: meta.launchBlock,
|
|
39722
39862
|
type: "ERC4626",
|
|
@@ -39726,13 +39866,8 @@ function getStrategySettings2(settings, meta) {
|
|
|
39726
39866
|
},
|
|
39727
39867
|
depositTokens: [depositToken],
|
|
39728
39868
|
additionalInfo: getBoostedxSTRKCarrySettings(settings),
|
|
39729
|
-
|
|
39730
|
-
|
|
39731
|
-
riskFactor: [],
|
|
39732
|
-
netRisk: 0,
|
|
39733
|
-
notARisks: []
|
|
39734
|
-
},
|
|
39735
|
-
protocols: [Protocols.VESU, Protocols.TROVES],
|
|
39869
|
+
risk: getBoostedCarryRisk(),
|
|
39870
|
+
protocols: [Protocols.VESU, Protocols.ENDUR, Protocols.TROVES],
|
|
39736
39871
|
curator: {
|
|
39737
39872
|
name: "Unwrap Labs",
|
|
39738
39873
|
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
@@ -39740,7 +39875,7 @@ function getStrategySettings2(settings, meta) {
|
|
|
39740
39875
|
settings: {
|
|
39741
39876
|
maxTVL: Web3Number.fromWei(0, depositToken.decimals),
|
|
39742
39877
|
isPaused: false,
|
|
39743
|
-
isAudited:
|
|
39878
|
+
isAudited: true,
|
|
39744
39879
|
isInstantWithdrawal: false,
|
|
39745
39880
|
hideHarvestInfo: true,
|
|
39746
39881
|
quoteToken: depositToken,
|
|
@@ -39753,27 +39888,32 @@ function getStrategySettings2(settings, meta) {
|
|
|
39753
39888
|
]
|
|
39754
39889
|
},
|
|
39755
39890
|
contractDetails: getContractDetails(settings),
|
|
39756
|
-
|
|
39757
|
-
|
|
39891
|
+
faqs: getBoostedCarryFAQs(
|
|
39892
|
+
depositToken.symbol,
|
|
39893
|
+
debtToken.symbol,
|
|
39894
|
+
lstToken.symbol
|
|
39895
|
+
),
|
|
39896
|
+
apyMethodology: "APY reflects net returns after a 10% performance fee on yield (not on principal). Underlying xSTRK appreciation and Vesu borrow costs can move over time; displayed APY is an estimate.",
|
|
39758
39897
|
investmentSteps: [
|
|
39759
39898
|
`Deposit ${depositToken.symbol} into the vault`,
|
|
39760
39899
|
`${depositToken.symbol} is supplied as collateral on Vesu, ${debtToken.symbol} is borrowed`,
|
|
39761
39900
|
`Borrowed ${debtToken.symbol} is swapped to ${lstToken.symbol} via Avnu`,
|
|
39762
39901
|
`${lstToken.symbol} is deposited into the Hyper-${lstToken.symbol} vault for additional yield`,
|
|
39763
|
-
`
|
|
39902
|
+
`Actively monitored and rebalanced to maintain optimal LTV and yield.`
|
|
39764
39903
|
],
|
|
39765
39904
|
// TODO: config later
|
|
39766
39905
|
tags: ["Meta Vaults" /* META_VAULT */],
|
|
39767
39906
|
security: {
|
|
39768
39907
|
auditStatus: "Audited" /* AUDITED */,
|
|
39769
39908
|
sourceCode: {
|
|
39770
|
-
type: "
|
|
39771
|
-
contractLink: "https://github.com/trovesfi/
|
|
39909
|
+
type: "Open Source" /* OPEN_SOURCE */,
|
|
39910
|
+
contractLink: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited"
|
|
39772
39911
|
},
|
|
39912
|
+
// TODO
|
|
39773
39913
|
accessControl: {
|
|
39774
39914
|
type: "Standard Account" /* STANDARD_ACCOUNT */,
|
|
39775
39915
|
addresses: [ContractAddr.from("0x0")],
|
|
39776
|
-
timeLock: "
|
|
39916
|
+
timeLock: "0 Days"
|
|
39777
39917
|
}
|
|
39778
39918
|
},
|
|
39779
39919
|
redemptionInfo: {
|
|
@@ -39792,8 +39932,8 @@ function getStrategySettings2(settings, meta) {
|
|
|
39792
39932
|
}
|
|
39793
39933
|
]
|
|
39794
39934
|
},
|
|
39795
|
-
usualTimeToEarnings:
|
|
39796
|
-
usualTimeToEarningsDescription:
|
|
39935
|
+
usualTimeToEarnings: "2 weeks",
|
|
39936
|
+
usualTimeToEarningsDescription: "This strategy depends on Hyper xSTRK's yield, which depends on the price of xSTRK on DEX appreciating. It may be possible the increase is not continuous and generally rebases atleast once every 2 weeks."
|
|
39797
39937
|
};
|
|
39798
39938
|
}
|
|
39799
39939
|
var BoostedxSTRKCarryStrategies = [
|