@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
package/dist/index.js
CHANGED
|
@@ -39343,6 +39343,7 @@ var HyperLSTStrategies = [
|
|
|
39343
39343
|
|
|
39344
39344
|
// src/strategies/token-boosted-xstrk-carry-strategy.tsx
|
|
39345
39345
|
var import_starknet37 = require("starknet");
|
|
39346
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
39346
39347
|
var BoostedxSTRKCarryStrategy = class _BoostedxSTRKCarryStrategy extends SVKStrategy {
|
|
39347
39348
|
constructor(config, pricer, metadata) {
|
|
39348
39349
|
super(config, pricer, metadata);
|
|
@@ -39981,15 +39982,15 @@ var boostedxSTRKCarrySettings = {
|
|
|
39981
39982
|
leafAdapters: [],
|
|
39982
39983
|
adapters: [],
|
|
39983
39984
|
// Calc using the maxLTV / targetLTV (0.5)
|
|
39984
|
-
targetHealthFactor: 1.
|
|
39985
|
+
targetHealthFactor: 1.36,
|
|
39985
39986
|
// Calc using the maxLTV / maxAcceptableLTV (0.55)
|
|
39986
|
-
minHealthFactor: 1.
|
|
39987
|
+
minHealthFactor: 1.3,
|
|
39987
39988
|
vesuPoolId: VesuPools.Prime,
|
|
39988
39989
|
// New metadata-driven token configuration
|
|
39989
39990
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
39990
39991
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
39991
39992
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
39992
|
-
maxLTV: 0.
|
|
39993
|
+
maxLTV: 0.68,
|
|
39993
39994
|
targetLTV: 0.5,
|
|
39994
39995
|
// BTC.Fi rewards flag - false for USDC (uses old report flow)
|
|
39995
39996
|
hasBtcFiRewards: false,
|
|
@@ -40020,13 +40021,13 @@ var wbtcBoostedSettings = {
|
|
|
40020
40021
|
),
|
|
40021
40022
|
leafAdapters: [],
|
|
40022
40023
|
adapters: [],
|
|
40023
|
-
targetHealthFactor: 1.
|
|
40024
|
-
minHealthFactor: 1.
|
|
40024
|
+
targetHealthFactor: 1.4,
|
|
40025
|
+
minHealthFactor: 1.35,
|
|
40025
40026
|
vesuPoolId: VesuPools.Prime,
|
|
40026
40027
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
40027
40028
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
40028
40029
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
40029
|
-
maxLTV: 0.
|
|
40030
|
+
maxLTV: 0.7,
|
|
40030
40031
|
targetLTV: 0.5,
|
|
40031
40032
|
hasBtcFiRewards: true,
|
|
40032
40033
|
hyperLstVaultAddress: ContractAddr.from(
|
|
@@ -40037,6 +40038,145 @@ var wbtcBoostedSettings = {
|
|
|
40037
40038
|
),
|
|
40038
40039
|
trovesStrategyId: "hyper_xstrk"
|
|
40039
40040
|
};
|
|
40041
|
+
var boostedCarryRiskFactors = [
|
|
40042
|
+
{
|
|
40043
|
+
type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */,
|
|
40044
|
+
value: 2 /* WELL_AUDITED */,
|
|
40045
|
+
// 20% — core trust assumption; SVK is audited but still multi-contract (vault, manager, adapters).
|
|
40046
|
+
weight: 20,
|
|
40047
|
+
reason: "Built on the Starknet Vault Kit (SVK), with audits under the Sherlock-audited branch."
|
|
40048
|
+
},
|
|
40049
|
+
{
|
|
40050
|
+
type: "Liquidation Risk" /* LIQUIDATION_RISK */,
|
|
40051
|
+
value: 3 /* MODERATE_PROBABILITY */,
|
|
40052
|
+
// 20% — tied with smart contract; uncorrelated collateral/debt is the main principal risk here.
|
|
40053
|
+
weight: 20,
|
|
40054
|
+
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."
|
|
40055
|
+
},
|
|
40056
|
+
{
|
|
40057
|
+
type: "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */,
|
|
40058
|
+
value: 3 /* MODERATE_CONCERNS */,
|
|
40059
|
+
// 15% — below liquidation but above ops risks; every unwind/withdraw depends on xSTRK→STRK depth.
|
|
40060
|
+
weight: 15,
|
|
40061
|
+
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."
|
|
40062
|
+
},
|
|
40063
|
+
{
|
|
40064
|
+
type: "Technical Risk" /* TECHNICAL_RISK */,
|
|
40065
|
+
value: 3 /* SOME_COMPLEXITY */,
|
|
40066
|
+
// 13% — monitoring/rebalancing stack matters, but usually recoverable without instant loss.
|
|
40067
|
+
weight: 13,
|
|
40068
|
+
reason: "Yield routes across Vesu, Avnu, and Hyper xSTRK with automated monitoring. Technical failures can delay rebalancing."
|
|
40069
|
+
},
|
|
40070
|
+
{
|
|
40071
|
+
type: "Depeg Risk" /* DEPEG_RISK */,
|
|
40072
|
+
value: 3 /* OCCASIONAL_DEPEG */,
|
|
40073
|
+
// 12% — affects yield and swap notionals; USDC/WBTC depeg is rarer than xSTRK/STRK drift.
|
|
40074
|
+
weight: 12,
|
|
40075
|
+
reason: "xSTRK yield depends on its exchange rate vs STRK; USDC and WBTC carry standard stablecoin and BTC market risks."
|
|
40076
|
+
},
|
|
40077
|
+
{
|
|
40078
|
+
type: "Oracle Risk" /* ORACLE_RISK */,
|
|
40079
|
+
value: 2 /* SINGLE_RELIABLE */,
|
|
40080
|
+
// 10% — Vesu HF depends on feeds; Starknet oracles are established but not redundant here.
|
|
40081
|
+
weight: 10,
|
|
40082
|
+
reason: "Vesu collateral and debt valuations rely on Starknet price feeds."
|
|
40083
|
+
},
|
|
40084
|
+
{
|
|
40085
|
+
type: "Counterparty Risk" /* COUNTERPARTY_RISK */,
|
|
40086
|
+
value: 2 /* REPUTABLE_COUNTERPARTY */,
|
|
40087
|
+
// 10% — same tier as oracle; Vesu/Endur/Troves are mature but still protocol counterparty risk.
|
|
40088
|
+
weight: 10,
|
|
40089
|
+
reason: "Exposure to Vesu lending, Endur (xSTRK), and Troves Hyper vault infrastructure."
|
|
40090
|
+
},
|
|
40091
|
+
{
|
|
40092
|
+
type: "Market Risk" /* MARKET_RISK */,
|
|
40093
|
+
value: 3 /* MODERATE_VOLATILITY */,
|
|
40094
|
+
// 5% — largely captured by liquidation + depeg factors; kept small to avoid double-counting vol.
|
|
40095
|
+
weight: 5,
|
|
40096
|
+
reason: "STRK, BTC, and stablecoin volatility can move loan-to-value and swap costs."
|
|
40097
|
+
}
|
|
40098
|
+
];
|
|
40099
|
+
function getBoostedCarryRisk() {
|
|
40100
|
+
const netRisk = boostedCarryRiskFactors.reduce(
|
|
40101
|
+
(acc, curr) => acc + curr.value * curr.weight,
|
|
40102
|
+
0
|
|
40103
|
+
) / boostedCarryRiskFactors.reduce((acc, curr) => acc + curr.weight, 0);
|
|
40104
|
+
return {
|
|
40105
|
+
riskFactor: boostedCarryRiskFactors,
|
|
40106
|
+
netRisk,
|
|
40107
|
+
notARisks: getNoRiskTags(boostedCarryRiskFactors)
|
|
40108
|
+
};
|
|
40109
|
+
}
|
|
40110
|
+
function getBoostedCarryFAQs(depositSymbol, debtSymbol, lstSymbol) {
|
|
40111
|
+
return [
|
|
40112
|
+
{
|
|
40113
|
+
question: `What is ${depositSymbol} Boosted?`,
|
|
40114
|
+
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.`
|
|
40115
|
+
},
|
|
40116
|
+
{
|
|
40117
|
+
question: "How does this strategy generate yield?",
|
|
40118
|
+
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.`
|
|
40119
|
+
},
|
|
40120
|
+
{
|
|
40121
|
+
question: "Which protocols are used?",
|
|
40122
|
+
answer: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { children: [
|
|
40123
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("strong", { children: "Vesu" }),
|
|
40124
|
+
" for collateral and borrowing, ",
|
|
40125
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("strong", { children: "Avnu" }),
|
|
40126
|
+
" ",
|
|
40127
|
+
"for swaps, ",
|
|
40128
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("strong", { children: "Endur" }),
|
|
40129
|
+
" for ",
|
|
40130
|
+
lstSymbol,
|
|
40131
|
+
", and the Troves",
|
|
40132
|
+
" ",
|
|
40133
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("strong", { children: [
|
|
40134
|
+
"Hyper-",
|
|
40135
|
+
lstSymbol
|
|
40136
|
+
] }),
|
|
40137
|
+
" vault for the boosted leg."
|
|
40138
|
+
] })
|
|
40139
|
+
},
|
|
40140
|
+
{
|
|
40141
|
+
question: "Is there liquidation risk?",
|
|
40142
|
+
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.`
|
|
40143
|
+
},
|
|
40144
|
+
{
|
|
40145
|
+
question: "What do I receive when I deposit?",
|
|
40146
|
+
answer: "You receive vault tokens representing your share of the vault. They reflect both principal and accrued yield."
|
|
40147
|
+
},
|
|
40148
|
+
{
|
|
40149
|
+
question: "How long do withdrawals take?",
|
|
40150
|
+
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."
|
|
40151
|
+
},
|
|
40152
|
+
{
|
|
40153
|
+
question: "Is this vault non-custodial?",
|
|
40154
|
+
answer: "Yes. The vault runs on-chain. You hold your vault tokens, and positions are transparent via on-chain contracts."
|
|
40155
|
+
},
|
|
40156
|
+
{
|
|
40157
|
+
question: "Are there any fees?",
|
|
40158
|
+
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."
|
|
40159
|
+
},
|
|
40160
|
+
{
|
|
40161
|
+
question: "Is the vault audited?",
|
|
40162
|
+
answer: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { children: [
|
|
40163
|
+
"Yes. The strategy is built on the audited Starknet Vault Kit. See the security details beside the strategy name and the",
|
|
40164
|
+
" ",
|
|
40165
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
40166
|
+
"a",
|
|
40167
|
+
{
|
|
40168
|
+
href: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited",
|
|
40169
|
+
target: "_blank",
|
|
40170
|
+
rel: "noopener noreferrer",
|
|
40171
|
+
style: { textDecoration: "underline" },
|
|
40172
|
+
children: "open-source repo"
|
|
40173
|
+
}
|
|
40174
|
+
),
|
|
40175
|
+
"."
|
|
40176
|
+
] })
|
|
40177
|
+
}
|
|
40178
|
+
];
|
|
40179
|
+
}
|
|
40040
40180
|
function getStrategySettings2(settings, meta) {
|
|
40041
40181
|
const depositToken = settings.depositToken;
|
|
40042
40182
|
const debtToken = settings.debtToken;
|
|
@@ -40044,7 +40184,7 @@ function getStrategySettings2(settings, meta) {
|
|
|
40044
40184
|
return {
|
|
40045
40185
|
id: meta.id,
|
|
40046
40186
|
name: meta.name,
|
|
40047
|
-
description: `Deposits ${depositToken.symbol} as collateral on Vesu, borrows ${debtToken.symbol}, swaps to ${lstToken.symbol}, and deposits into Hyper-${lstToken.symbol} for boosted yield
|
|
40187
|
+
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%.`,
|
|
40048
40188
|
address: settings.vaultAddress,
|
|
40049
40189
|
launchBlock: meta.launchBlock,
|
|
40050
40190
|
type: "ERC4626",
|
|
@@ -40054,13 +40194,8 @@ function getStrategySettings2(settings, meta) {
|
|
|
40054
40194
|
},
|
|
40055
40195
|
depositTokens: [depositToken],
|
|
40056
40196
|
additionalInfo: getBoostedxSTRKCarrySettings(settings),
|
|
40057
|
-
|
|
40058
|
-
|
|
40059
|
-
riskFactor: [],
|
|
40060
|
-
netRisk: 0,
|
|
40061
|
-
notARisks: []
|
|
40062
|
-
},
|
|
40063
|
-
protocols: [Protocols.VESU, Protocols.TROVES],
|
|
40197
|
+
risk: getBoostedCarryRisk(),
|
|
40198
|
+
protocols: [Protocols.VESU, Protocols.ENDUR, Protocols.TROVES],
|
|
40064
40199
|
curator: {
|
|
40065
40200
|
name: "Unwrap Labs",
|
|
40066
40201
|
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
@@ -40068,7 +40203,7 @@ function getStrategySettings2(settings, meta) {
|
|
|
40068
40203
|
settings: {
|
|
40069
40204
|
maxTVL: Web3Number.fromWei(0, depositToken.decimals),
|
|
40070
40205
|
isPaused: false,
|
|
40071
|
-
isAudited:
|
|
40206
|
+
isAudited: true,
|
|
40072
40207
|
isInstantWithdrawal: false,
|
|
40073
40208
|
hideHarvestInfo: true,
|
|
40074
40209
|
quoteToken: depositToken,
|
|
@@ -40081,27 +40216,32 @@ function getStrategySettings2(settings, meta) {
|
|
|
40081
40216
|
]
|
|
40082
40217
|
},
|
|
40083
40218
|
contractDetails: getContractDetails(settings),
|
|
40084
|
-
|
|
40085
|
-
|
|
40219
|
+
faqs: getBoostedCarryFAQs(
|
|
40220
|
+
depositToken.symbol,
|
|
40221
|
+
debtToken.symbol,
|
|
40222
|
+
lstToken.symbol
|
|
40223
|
+
),
|
|
40224
|
+
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.",
|
|
40086
40225
|
investmentSteps: [
|
|
40087
40226
|
`Deposit ${depositToken.symbol} into the vault`,
|
|
40088
40227
|
`${depositToken.symbol} is supplied as collateral on Vesu, ${debtToken.symbol} is borrowed`,
|
|
40089
40228
|
`Borrowed ${debtToken.symbol} is swapped to ${lstToken.symbol} via Avnu`,
|
|
40090
40229
|
`${lstToken.symbol} is deposited into the Hyper-${lstToken.symbol} vault for additional yield`,
|
|
40091
|
-
`
|
|
40230
|
+
`Actively monitored and rebalanced to maintain optimal LTV and yield.`
|
|
40092
40231
|
],
|
|
40093
40232
|
// TODO: config later
|
|
40094
40233
|
tags: ["Meta Vaults" /* META_VAULT */],
|
|
40095
40234
|
security: {
|
|
40096
40235
|
auditStatus: "Audited" /* AUDITED */,
|
|
40097
40236
|
sourceCode: {
|
|
40098
|
-
type: "
|
|
40099
|
-
contractLink: "https://github.com/trovesfi/
|
|
40237
|
+
type: "Open Source" /* OPEN_SOURCE */,
|
|
40238
|
+
contractLink: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited"
|
|
40100
40239
|
},
|
|
40240
|
+
// TODO
|
|
40101
40241
|
accessControl: {
|
|
40102
40242
|
type: "Standard Account" /* STANDARD_ACCOUNT */,
|
|
40103
40243
|
addresses: [ContractAddr.from("0x0")],
|
|
40104
|
-
timeLock: "
|
|
40244
|
+
timeLock: "0 Days"
|
|
40105
40245
|
}
|
|
40106
40246
|
},
|
|
40107
40247
|
redemptionInfo: {
|
|
@@ -40120,8 +40260,8 @@ function getStrategySettings2(settings, meta) {
|
|
|
40120
40260
|
}
|
|
40121
40261
|
]
|
|
40122
40262
|
},
|
|
40123
|
-
usualTimeToEarnings:
|
|
40124
|
-
usualTimeToEarningsDescription:
|
|
40263
|
+
usualTimeToEarnings: "2 weeks",
|
|
40264
|
+
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."
|
|
40125
40265
|
};
|
|
40126
40266
|
}
|
|
40127
40267
|
var BoostedxSTRKCarryStrategies = [
|
package/dist/index.mjs
CHANGED
|
@@ -39180,6 +39180,7 @@ var HyperLSTStrategies = [
|
|
|
39180
39180
|
|
|
39181
39181
|
// src/strategies/token-boosted-xstrk-carry-strategy.tsx
|
|
39182
39182
|
import { uint256 as uint25625, num as num14 } from "starknet";
|
|
39183
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
39183
39184
|
var BoostedxSTRKCarryStrategy = class _BoostedxSTRKCarryStrategy extends SVKStrategy {
|
|
39184
39185
|
constructor(config, pricer, metadata) {
|
|
39185
39186
|
super(config, pricer, metadata);
|
|
@@ -39818,15 +39819,15 @@ var boostedxSTRKCarrySettings = {
|
|
|
39818
39819
|
leafAdapters: [],
|
|
39819
39820
|
adapters: [],
|
|
39820
39821
|
// Calc using the maxLTV / targetLTV (0.5)
|
|
39821
|
-
targetHealthFactor: 1.
|
|
39822
|
+
targetHealthFactor: 1.36,
|
|
39822
39823
|
// Calc using the maxLTV / maxAcceptableLTV (0.55)
|
|
39823
|
-
minHealthFactor: 1.
|
|
39824
|
+
minHealthFactor: 1.3,
|
|
39824
39825
|
vesuPoolId: VesuPools.Prime,
|
|
39825
39826
|
// New metadata-driven token configuration
|
|
39826
39827
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
39827
39828
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
39828
39829
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
39829
|
-
maxLTV: 0.
|
|
39830
|
+
maxLTV: 0.68,
|
|
39830
39831
|
targetLTV: 0.5,
|
|
39831
39832
|
// BTC.Fi rewards flag - false for USDC (uses old report flow)
|
|
39832
39833
|
hasBtcFiRewards: false,
|
|
@@ -39857,13 +39858,13 @@ var wbtcBoostedSettings = {
|
|
|
39857
39858
|
),
|
|
39858
39859
|
leafAdapters: [],
|
|
39859
39860
|
adapters: [],
|
|
39860
|
-
targetHealthFactor: 1.
|
|
39861
|
-
minHealthFactor: 1.
|
|
39861
|
+
targetHealthFactor: 1.4,
|
|
39862
|
+
minHealthFactor: 1.35,
|
|
39862
39863
|
vesuPoolId: VesuPools.Prime,
|
|
39863
39864
|
depositToken: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
|
|
39864
39865
|
debtToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
|
|
39865
39866
|
lstHyperToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
39866
|
-
maxLTV: 0.
|
|
39867
|
+
maxLTV: 0.7,
|
|
39867
39868
|
targetLTV: 0.5,
|
|
39868
39869
|
hasBtcFiRewards: true,
|
|
39869
39870
|
hyperLstVaultAddress: ContractAddr.from(
|
|
@@ -39874,6 +39875,145 @@ var wbtcBoostedSettings = {
|
|
|
39874
39875
|
),
|
|
39875
39876
|
trovesStrategyId: "hyper_xstrk"
|
|
39876
39877
|
};
|
|
39878
|
+
var boostedCarryRiskFactors = [
|
|
39879
|
+
{
|
|
39880
|
+
type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */,
|
|
39881
|
+
value: 2 /* WELL_AUDITED */,
|
|
39882
|
+
// 20% — core trust assumption; SVK is audited but still multi-contract (vault, manager, adapters).
|
|
39883
|
+
weight: 20,
|
|
39884
|
+
reason: "Built on the Starknet Vault Kit (SVK), with audits under the Sherlock-audited branch."
|
|
39885
|
+
},
|
|
39886
|
+
{
|
|
39887
|
+
type: "Liquidation Risk" /* LIQUIDATION_RISK */,
|
|
39888
|
+
value: 3 /* MODERATE_PROBABILITY */,
|
|
39889
|
+
// 20% — tied with smart contract; uncorrelated collateral/debt is the main principal risk here.
|
|
39890
|
+
weight: 20,
|
|
39891
|
+
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."
|
|
39892
|
+
},
|
|
39893
|
+
{
|
|
39894
|
+
type: "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */,
|
|
39895
|
+
value: 3 /* MODERATE_CONCERNS */,
|
|
39896
|
+
// 15% — below liquidation but above ops risks; every unwind/withdraw depends on xSTRK→STRK depth.
|
|
39897
|
+
weight: 15,
|
|
39898
|
+
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."
|
|
39899
|
+
},
|
|
39900
|
+
{
|
|
39901
|
+
type: "Technical Risk" /* TECHNICAL_RISK */,
|
|
39902
|
+
value: 3 /* SOME_COMPLEXITY */,
|
|
39903
|
+
// 13% — monitoring/rebalancing stack matters, but usually recoverable without instant loss.
|
|
39904
|
+
weight: 13,
|
|
39905
|
+
reason: "Yield routes across Vesu, Avnu, and Hyper xSTRK with automated monitoring. Technical failures can delay rebalancing."
|
|
39906
|
+
},
|
|
39907
|
+
{
|
|
39908
|
+
type: "Depeg Risk" /* DEPEG_RISK */,
|
|
39909
|
+
value: 3 /* OCCASIONAL_DEPEG */,
|
|
39910
|
+
// 12% — affects yield and swap notionals; USDC/WBTC depeg is rarer than xSTRK/STRK drift.
|
|
39911
|
+
weight: 12,
|
|
39912
|
+
reason: "xSTRK yield depends on its exchange rate vs STRK; USDC and WBTC carry standard stablecoin and BTC market risks."
|
|
39913
|
+
},
|
|
39914
|
+
{
|
|
39915
|
+
type: "Oracle Risk" /* ORACLE_RISK */,
|
|
39916
|
+
value: 2 /* SINGLE_RELIABLE */,
|
|
39917
|
+
// 10% — Vesu HF depends on feeds; Starknet oracles are established but not redundant here.
|
|
39918
|
+
weight: 10,
|
|
39919
|
+
reason: "Vesu collateral and debt valuations rely on Starknet price feeds."
|
|
39920
|
+
},
|
|
39921
|
+
{
|
|
39922
|
+
type: "Counterparty Risk" /* COUNTERPARTY_RISK */,
|
|
39923
|
+
value: 2 /* REPUTABLE_COUNTERPARTY */,
|
|
39924
|
+
// 10% — same tier as oracle; Vesu/Endur/Troves are mature but still protocol counterparty risk.
|
|
39925
|
+
weight: 10,
|
|
39926
|
+
reason: "Exposure to Vesu lending, Endur (xSTRK), and Troves Hyper vault infrastructure."
|
|
39927
|
+
},
|
|
39928
|
+
{
|
|
39929
|
+
type: "Market Risk" /* MARKET_RISK */,
|
|
39930
|
+
value: 3 /* MODERATE_VOLATILITY */,
|
|
39931
|
+
// 5% — largely captured by liquidation + depeg factors; kept small to avoid double-counting vol.
|
|
39932
|
+
weight: 5,
|
|
39933
|
+
reason: "STRK, BTC, and stablecoin volatility can move loan-to-value and swap costs."
|
|
39934
|
+
}
|
|
39935
|
+
];
|
|
39936
|
+
function getBoostedCarryRisk() {
|
|
39937
|
+
const netRisk = boostedCarryRiskFactors.reduce(
|
|
39938
|
+
(acc, curr) => acc + curr.value * curr.weight,
|
|
39939
|
+
0
|
|
39940
|
+
) / boostedCarryRiskFactors.reduce((acc, curr) => acc + curr.weight, 0);
|
|
39941
|
+
return {
|
|
39942
|
+
riskFactor: boostedCarryRiskFactors,
|
|
39943
|
+
netRisk,
|
|
39944
|
+
notARisks: getNoRiskTags(boostedCarryRiskFactors)
|
|
39945
|
+
};
|
|
39946
|
+
}
|
|
39947
|
+
function getBoostedCarryFAQs(depositSymbol, debtSymbol, lstSymbol) {
|
|
39948
|
+
return [
|
|
39949
|
+
{
|
|
39950
|
+
question: `What is ${depositSymbol} Boosted?`,
|
|
39951
|
+
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.`
|
|
39952
|
+
},
|
|
39953
|
+
{
|
|
39954
|
+
question: "How does this strategy generate yield?",
|
|
39955
|
+
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.`
|
|
39956
|
+
},
|
|
39957
|
+
{
|
|
39958
|
+
question: "Which protocols are used?",
|
|
39959
|
+
answer: /* @__PURE__ */ jsxs5("span", { children: [
|
|
39960
|
+
/* @__PURE__ */ jsx6("strong", { children: "Vesu" }),
|
|
39961
|
+
" for collateral and borrowing, ",
|
|
39962
|
+
/* @__PURE__ */ jsx6("strong", { children: "Avnu" }),
|
|
39963
|
+
" ",
|
|
39964
|
+
"for swaps, ",
|
|
39965
|
+
/* @__PURE__ */ jsx6("strong", { children: "Endur" }),
|
|
39966
|
+
" for ",
|
|
39967
|
+
lstSymbol,
|
|
39968
|
+
", and the Troves",
|
|
39969
|
+
" ",
|
|
39970
|
+
/* @__PURE__ */ jsxs5("strong", { children: [
|
|
39971
|
+
"Hyper-",
|
|
39972
|
+
lstSymbol
|
|
39973
|
+
] }),
|
|
39974
|
+
" vault for the boosted leg."
|
|
39975
|
+
] })
|
|
39976
|
+
},
|
|
39977
|
+
{
|
|
39978
|
+
question: "Is there liquidation risk?",
|
|
39979
|
+
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.`
|
|
39980
|
+
},
|
|
39981
|
+
{
|
|
39982
|
+
question: "What do I receive when I deposit?",
|
|
39983
|
+
answer: "You receive vault tokens representing your share of the vault. They reflect both principal and accrued yield."
|
|
39984
|
+
},
|
|
39985
|
+
{
|
|
39986
|
+
question: "How long do withdrawals take?",
|
|
39987
|
+
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."
|
|
39988
|
+
},
|
|
39989
|
+
{
|
|
39990
|
+
question: "Is this vault non-custodial?",
|
|
39991
|
+
answer: "Yes. The vault runs on-chain. You hold your vault tokens, and positions are transparent via on-chain contracts."
|
|
39992
|
+
},
|
|
39993
|
+
{
|
|
39994
|
+
question: "Are there any fees?",
|
|
39995
|
+
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."
|
|
39996
|
+
},
|
|
39997
|
+
{
|
|
39998
|
+
question: "Is the vault audited?",
|
|
39999
|
+
answer: /* @__PURE__ */ jsxs5("span", { children: [
|
|
40000
|
+
"Yes. The strategy is built on the audited Starknet Vault Kit. See the security details beside the strategy name and the",
|
|
40001
|
+
" ",
|
|
40002
|
+
/* @__PURE__ */ jsx6(
|
|
40003
|
+
"a",
|
|
40004
|
+
{
|
|
40005
|
+
href: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited",
|
|
40006
|
+
target: "_blank",
|
|
40007
|
+
rel: "noopener noreferrer",
|
|
40008
|
+
style: { textDecoration: "underline" },
|
|
40009
|
+
children: "open-source repo"
|
|
40010
|
+
}
|
|
40011
|
+
),
|
|
40012
|
+
"."
|
|
40013
|
+
] })
|
|
40014
|
+
}
|
|
40015
|
+
];
|
|
40016
|
+
}
|
|
39877
40017
|
function getStrategySettings2(settings, meta) {
|
|
39878
40018
|
const depositToken = settings.depositToken;
|
|
39879
40019
|
const debtToken = settings.debtToken;
|
|
@@ -39881,7 +40021,7 @@ function getStrategySettings2(settings, meta) {
|
|
|
39881
40021
|
return {
|
|
39882
40022
|
id: meta.id,
|
|
39883
40023
|
name: meta.name,
|
|
39884
|
-
description: `Deposits ${depositToken.symbol} as collateral on Vesu, borrows ${debtToken.symbol}, swaps to ${lstToken.symbol}, and deposits into Hyper-${lstToken.symbol} for boosted yield
|
|
40024
|
+
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%.`,
|
|
39885
40025
|
address: settings.vaultAddress,
|
|
39886
40026
|
launchBlock: meta.launchBlock,
|
|
39887
40027
|
type: "ERC4626",
|
|
@@ -39891,13 +40031,8 @@ function getStrategySettings2(settings, meta) {
|
|
|
39891
40031
|
},
|
|
39892
40032
|
depositTokens: [depositToken],
|
|
39893
40033
|
additionalInfo: getBoostedxSTRKCarrySettings(settings),
|
|
39894
|
-
|
|
39895
|
-
|
|
39896
|
-
riskFactor: [],
|
|
39897
|
-
netRisk: 0,
|
|
39898
|
-
notARisks: []
|
|
39899
|
-
},
|
|
39900
|
-
protocols: [Protocols.VESU, Protocols.TROVES],
|
|
40034
|
+
risk: getBoostedCarryRisk(),
|
|
40035
|
+
protocols: [Protocols.VESU, Protocols.ENDUR, Protocols.TROVES],
|
|
39901
40036
|
curator: {
|
|
39902
40037
|
name: "Unwrap Labs",
|
|
39903
40038
|
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
@@ -39905,7 +40040,7 @@ function getStrategySettings2(settings, meta) {
|
|
|
39905
40040
|
settings: {
|
|
39906
40041
|
maxTVL: Web3Number.fromWei(0, depositToken.decimals),
|
|
39907
40042
|
isPaused: false,
|
|
39908
|
-
isAudited:
|
|
40043
|
+
isAudited: true,
|
|
39909
40044
|
isInstantWithdrawal: false,
|
|
39910
40045
|
hideHarvestInfo: true,
|
|
39911
40046
|
quoteToken: depositToken,
|
|
@@ -39918,27 +40053,32 @@ function getStrategySettings2(settings, meta) {
|
|
|
39918
40053
|
]
|
|
39919
40054
|
},
|
|
39920
40055
|
contractDetails: getContractDetails(settings),
|
|
39921
|
-
|
|
39922
|
-
|
|
40056
|
+
faqs: getBoostedCarryFAQs(
|
|
40057
|
+
depositToken.symbol,
|
|
40058
|
+
debtToken.symbol,
|
|
40059
|
+
lstToken.symbol
|
|
40060
|
+
),
|
|
40061
|
+
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.",
|
|
39923
40062
|
investmentSteps: [
|
|
39924
40063
|
`Deposit ${depositToken.symbol} into the vault`,
|
|
39925
40064
|
`${depositToken.symbol} is supplied as collateral on Vesu, ${debtToken.symbol} is borrowed`,
|
|
39926
40065
|
`Borrowed ${debtToken.symbol} is swapped to ${lstToken.symbol} via Avnu`,
|
|
39927
40066
|
`${lstToken.symbol} is deposited into the Hyper-${lstToken.symbol} vault for additional yield`,
|
|
39928
|
-
`
|
|
40067
|
+
`Actively monitored and rebalanced to maintain optimal LTV and yield.`
|
|
39929
40068
|
],
|
|
39930
40069
|
// TODO: config later
|
|
39931
40070
|
tags: ["Meta Vaults" /* META_VAULT */],
|
|
39932
40071
|
security: {
|
|
39933
40072
|
auditStatus: "Audited" /* AUDITED */,
|
|
39934
40073
|
sourceCode: {
|
|
39935
|
-
type: "
|
|
39936
|
-
contractLink: "https://github.com/trovesfi/
|
|
40074
|
+
type: "Open Source" /* OPEN_SOURCE */,
|
|
40075
|
+
contractLink: "https://github.com/trovesfi/starknet_vault_kit/tree/sherlock-audited"
|
|
39937
40076
|
},
|
|
40077
|
+
// TODO
|
|
39938
40078
|
accessControl: {
|
|
39939
40079
|
type: "Standard Account" /* STANDARD_ACCOUNT */,
|
|
39940
40080
|
addresses: [ContractAddr.from("0x0")],
|
|
39941
|
-
timeLock: "
|
|
40081
|
+
timeLock: "0 Days"
|
|
39942
40082
|
}
|
|
39943
40083
|
},
|
|
39944
40084
|
redemptionInfo: {
|
|
@@ -39957,8 +40097,8 @@ function getStrategySettings2(settings, meta) {
|
|
|
39957
40097
|
}
|
|
39958
40098
|
]
|
|
39959
40099
|
},
|
|
39960
|
-
usualTimeToEarnings:
|
|
39961
|
-
usualTimeToEarningsDescription:
|
|
40100
|
+
usualTimeToEarnings: "2 weeks",
|
|
40101
|
+
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."
|
|
39962
40102
|
};
|
|
39963
40103
|
}
|
|
39964
40104
|
var BoostedxSTRKCarryStrategies = [
|