@strkfarm/sdk 2.0.0-dev.5 → 2.0.0-dev.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/cli.js +190 -36
  2. package/dist/cli.mjs +188 -34
  3. package/dist/index.browser.global.js +118889 -92229
  4. package/dist/index.browser.mjs +13381 -11153
  5. package/dist/index.d.ts +2284 -1938
  6. package/dist/index.js +13794 -11360
  7. package/dist/index.mjs +14253 -11843
  8. package/package.json +59 -60
  9. package/src/data/avnu.abi.json +840 -0
  10. package/src/data/ekubo-price-fethcer.abi.json +265 -0
  11. package/src/data/redeem-request-nft.abi.json +752 -0
  12. package/src/data/universal-vault.abi.json +8 -7
  13. package/src/dataTypes/_bignumber.ts +13 -4
  14. package/src/dataTypes/bignumber.browser.ts +10 -1
  15. package/src/dataTypes/bignumber.node.ts +10 -1
  16. package/src/dataTypes/index.ts +3 -2
  17. package/src/dataTypes/mynumber.ts +141 -0
  18. package/src/global.ts +280 -233
  19. package/src/index.browser.ts +2 -1
  20. package/src/interfaces/common.tsx +229 -6
  21. package/src/modules/apollo-client-config.ts +28 -0
  22. package/src/modules/avnu.ts +21 -12
  23. package/src/modules/ekubo-pricer.ts +99 -0
  24. package/src/modules/ekubo-quoter.ts +48 -30
  25. package/src/modules/erc20.ts +17 -0
  26. package/src/modules/harvests.ts +43 -29
  27. package/src/modules/index.ts +2 -1
  28. package/src/modules/pragma.ts +23 -8
  29. package/src/modules/pricer-avnu-api.ts +114 -0
  30. package/src/modules/pricer-from-api.ts +159 -15
  31. package/src/modules/pricer-lst.ts +1 -1
  32. package/src/modules/pricer-quote-utils.ts +54 -0
  33. package/src/modules/pricer.ts +157 -54
  34. package/src/modules/pricerBase.ts +2 -1
  35. package/src/modules/zkLend.ts +3 -2
  36. package/src/node/deployer.ts +36 -1
  37. package/src/node/pricer-redis.ts +3 -1
  38. package/src/strategies/base-strategy.ts +168 -16
  39. package/src/strategies/constants.ts +8 -3
  40. package/src/strategies/ekubo-cl-vault.tsx +1048 -355
  41. package/src/strategies/factory.ts +199 -0
  42. package/src/strategies/index.ts +5 -3
  43. package/src/strategies/registry.ts +262 -0
  44. package/src/strategies/sensei.ts +354 -10
  45. package/src/strategies/svk-strategy.ts +292 -31
  46. package/src/strategies/token-boosted-xstrk-carry-strategy.tsx +1261 -0
  47. package/src/strategies/types.ts +4 -0
  48. package/src/strategies/universal-adapters/adapter-utils.ts +4 -1
  49. package/src/strategies/universal-adapters/avnu-adapter.ts +196 -272
  50. package/src/strategies/universal-adapters/baseAdapter.ts +263 -251
  51. package/src/strategies/universal-adapters/common-adapter.ts +206 -203
  52. package/src/strategies/universal-adapters/index.ts +10 -8
  53. package/src/strategies/universal-adapters/svk-troves-adapter.ts +511 -0
  54. package/src/strategies/universal-adapters/token-transfer-adapter.ts +200 -0
  55. package/src/strategies/universal-adapters/vesu-adapter.ts +120 -82
  56. package/src/strategies/universal-adapters/vesu-modify-position-adapter.ts +525 -0
  57. package/src/strategies/universal-adapters/vesu-multiply-adapter.ts +866 -860
  58. package/src/strategies/universal-adapters/vesu-position-common.ts +258 -0
  59. package/src/strategies/universal-adapters/vesu-supply-only-adapter.ts +18 -3
  60. package/src/strategies/universal-lst-muliplier-strategy.tsx +895 -416
  61. package/src/strategies/universal-strategy.tsx +1332 -1173
  62. package/src/strategies/vesu-rebalance.tsx +254 -153
  63. package/src/strategies/yoloVault.ts +1096 -0
  64. package/src/utils/cacheClass.ts +11 -2
  65. package/src/utils/health-factor-math.ts +33 -1
  66. package/src/utils/index.ts +3 -1
  67. package/src/utils/logger.browser.ts +22 -4
  68. package/src/utils/logger.node.ts +259 -24
  69. package/src/utils/starknet-call-parser.ts +1036 -0
  70. package/src/utils/strategy-utils.ts +61 -0
  71. package/src/modules/ExtendedWrapperSDk/index.ts +0 -62
  72. package/src/modules/ExtendedWrapperSDk/types.ts +0 -311
  73. package/src/modules/ExtendedWrapperSDk/wrapper.ts +0 -395
  74. package/src/strategies/universal-adapters/extended-adapter.ts +0 -662
  75. package/src/strategies/universal-adapters/unused-balance-adapter.ts +0 -109
  76. package/src/strategies/vesu-extended-strategy/services/operationService.ts +0 -34
  77. package/src/strategies/vesu-extended-strategy/utils/config.runtime.ts +0 -77
  78. package/src/strategies/vesu-extended-strategy/utils/constants.ts +0 -49
  79. package/src/strategies/vesu-extended-strategy/utils/helper.ts +0 -372
  80. package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +0 -1140
@@ -9,10 +9,19 @@ import {
9
9
  IProtocol,
10
10
  IStrategyMetadata,
11
11
  RiskFactor,
12
- RiskType
12
+ RiskType,
13
+ StrategyTag,
14
+ AuditStatus,
15
+ SourceCodeType,
16
+ AccessControlType,
17
+ InstantWithdrawalVault,
18
+ StrategySettings,
19
+ StrategyLiveStatus,
20
+ VaultType,
21
+ UnwrapLabsCurator,
13
22
  } from "@/interfaces";
14
23
  import { AvnuWrapper, Pricer, SwapInfo } from "@/modules";
15
- import { Account, CairoCustomEnum, Contract, num, uint256 } from "starknet";
24
+ import { Account, CairoCustomEnum, Contract, num, uint256, BlockIdentifier } from "starknet";
16
25
  import VesuRebalanceAbi from "@/data/vesu-rebalance.abi.json";
17
26
  import { Global } from "@/global";
18
27
  import { assert } from "@/utils";
@@ -26,7 +35,7 @@ import {
26
35
  SingleTokenInfo
27
36
  } from "./base-strategy";
28
37
  import { getAPIUsingHeadlessBrowser } from "@/node/headless";
29
- import { VESU_REWARDS_ENDPOINT, VesuHarvests } from "@/modules/harvests";
38
+ import { VESU_REWARDS_ENDPOINT, VesuHarvests, HarvestInfo } from "@/modules/harvests";
30
39
  import VesuPoolIDs from "@/data/vesu_pools.json";
31
40
  import { COMMON_CONTRACTS, ENDPOINTS } from "./constants";
32
41
 
@@ -150,7 +159,8 @@ export class VesuRebalance extends BaseStrategy<
150
159
  async withdrawCall(
151
160
  amountInfo: SingleActionAmount,
152
161
  receiver: ContractAddr,
153
- owner: ContractAddr
162
+ owner: ContractAddr,
163
+ _isMaxWithdraw: boolean = false
154
164
  ) {
155
165
  return [
156
166
  this.contract.populate("withdraw", [
@@ -177,22 +187,26 @@ export class VesuRebalance extends BaseStrategy<
177
187
  return this.metadata.depositTokens[0].decimals; // same as underlying token
178
188
  }
179
189
 
180
- /**
181
- * Calculates the Total Value Locked (TVL) for a specific user.
182
- * @param user - Address of the user
183
- * @returns Object containing the amount in token units and USD value
184
- */
185
- async getUserTVL(user: ContractAddr) {
186
- const shares = await this.contract.balance_of(user.address);
187
- const assets = await this.contract.convert_to_assets(
188
- uint256.bnToUint256(shares)
190
+ async getUserTVL(user: ContractAddr, blockIdentifier: BlockIdentifier = "latest") {
191
+ const shares: any = await this.contract.call("balanceOf", [user.address], { blockIdentifier });
192
+ const assets: any = await this.contract.call(
193
+ "convert_to_assets",
194
+ [uint256.bnToUint256(shares)],
195
+ { blockIdentifier }
189
196
  );
190
197
  const amount = Web3Number.fromWei(
191
198
  assets.toString(),
192
199
  this.metadata.depositTokens[0].decimals
193
200
  );
201
+
202
+ // Convert blockIdentifier to block number for pricer if it's a number
203
+ const blockNumber = typeof blockIdentifier === 'number' || typeof blockIdentifier === 'bigint'
204
+ ? Number(blockIdentifier)
205
+ : undefined;
206
+
194
207
  let price = await this.pricer.getPrice(
195
- this.metadata.depositTokens[0].symbol
208
+ this.metadata.depositTokens[0].symbol,
209
+ blockNumber
196
210
  );
197
211
  const usdValue = Number(amount.toFixed(6)) * price.price;
198
212
  return {
@@ -202,6 +216,105 @@ export class VesuRebalance extends BaseStrategy<
202
216
  };
203
217
  }
204
218
 
219
+ /**
220
+ * Calculates user realized APY based on trueSharesBasedAPY method.
221
+ * Returns the APY as a number.
222
+ */
223
+ async getUserRealizedAPY(
224
+ blockIdentifier: BlockIdentifier = "latest",
225
+ sinceBlocks = 600000
226
+ ): Promise<number> {
227
+ logger.verbose(
228
+ `${VesuRebalance.name}: getUserRealizedAPY => starting with blockIdentifier=${blockIdentifier}, sinceBlocks=${sinceBlocks}`
229
+ );
230
+
231
+ // Determine current block number and timestamp
232
+ let blockNow =
233
+ typeof blockIdentifier === "number" || typeof blockIdentifier === "bigint"
234
+ ? Number(blockIdentifier)
235
+ : (await this.config.provider.getBlockLatestAccepted()).block_number;
236
+ const blockNowTime =
237
+ typeof blockIdentifier === "number" || typeof blockIdentifier === "bigint"
238
+ ? (await this.config.provider.getBlockWithTxs(blockIdentifier)).timestamp
239
+ : new Date().getTime() / 1000;
240
+
241
+ // Look back window, but never before launch block
242
+ const blockBefore = Math.max(
243
+ blockNow - sinceBlocks,
244
+ this.metadata.launchBlock
245
+ );
246
+
247
+ // TVL amounts (in underlying token units) and supply at current reference block
248
+ const assetsNowRaw: bigint = await this.contract.call("total_assets", [], {
249
+ blockIdentifier,
250
+ }) as bigint;
251
+ const amountNow = Web3Number.fromWei(
252
+ assetsNowRaw.toString(),
253
+ this.metadata.depositTokens[0].decimals
254
+ );
255
+
256
+ const supplyNowRaw: bigint = await this.contract.call("total_supply", [], {
257
+ blockIdentifier,
258
+ }) as bigint;
259
+ const supplyNow = Web3Number.fromWei(
260
+ supplyNowRaw.toString(),
261
+ this.metadata.depositTokens[0].decimals
262
+ );
263
+
264
+ // Historical TVL and supply
265
+ const assetsBeforeRaw: bigint = await this.contract.call(
266
+ "total_assets",
267
+ [],
268
+ { blockIdentifier: blockBefore }
269
+ ) as bigint;
270
+ const amountBefore = Web3Number.fromWei(
271
+ assetsBeforeRaw.toString(),
272
+ this.metadata.depositTokens[0].decimals
273
+ );
274
+
275
+ const supplyBeforeRaw: bigint = await this.contract.call(
276
+ "total_supply",
277
+ [],
278
+ { blockIdentifier: blockBefore }
279
+ ) as bigint;
280
+ const supplyBefore = Web3Number.fromWei(
281
+ supplyBeforeRaw.toString(),
282
+ this.metadata.depositTokens[0].decimals
283
+ );
284
+
285
+ const blockBeforeInfo = await this.config.provider.getBlockWithTxs(
286
+ blockBefore
287
+ );
288
+
289
+ const assetsPerShareNow = amountNow
290
+ .multipliedBy(1e18)
291
+ .dividedBy(supplyNow.toString());
292
+
293
+ const assetsPerShareBf = amountBefore
294
+ .multipliedBy(1e18)
295
+ .dividedBy(supplyBefore.toString());
296
+
297
+ const timeDiffSeconds = blockNowTime - blockBeforeInfo.timestamp;
298
+
299
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] assetsNow: ${amountNow.toString()}`);
300
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] assetsBefore: ${amountBefore.toString()}`);
301
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] assetsPerShareNow: ${assetsPerShareNow.toString()}`);
302
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] assetsPerShareBf: ${assetsPerShareBf.toString()}`);
303
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] Supply before: ${supplyBefore.toString()}`);
304
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] Supply now: ${supplyNow.toString()}`);
305
+ logger.verbose(`${VesuRebalance.name}:${this.metadata.name} [getUserRealizedAPY] Time diff in seconds: ${timeDiffSeconds}`);
306
+
307
+ const apyForGivenBlocks =
308
+ Number(
309
+ assetsPerShareNow
310
+ .minus(assetsPerShareBf)
311
+ .multipliedBy(10000)
312
+ .dividedBy(assetsPerShareBf)
313
+ ) / 10000;
314
+
315
+ return (apyForGivenBlocks * (365 * 24 * 3600)) / timeDiffSeconds;
316
+ }
317
+
205
318
  /**
206
319
  * Calculates the total TVL of the strategy.
207
320
  * @returns Object containing the total amount in token units and USD value
@@ -224,7 +337,7 @@ export class VesuRebalance extends BaseStrategy<
224
337
  }
225
338
 
226
339
  static async getAllPossibleVerifiedPools(asset: ContractAddr) {
227
- const data = await getAPIUsingHeadlessBrowser(`${ENDPOINTS.VESU_BASE_STAGING}/pools`);
340
+ const data = await getAPIUsingHeadlessBrowser(`${ENDPOINTS.VESU_BASE}/pools`);
228
341
  const verifiedPools = data.data.filter((d: any) => d.isVerified);
229
342
  const pools = verifiedPools
230
343
  .map((p: any) => {
@@ -490,7 +603,7 @@ export class VesuRebalance extends BaseStrategy<
490
603
  let pools: any[] = [];
491
604
  try {
492
605
  const data = await getAPIUsingHeadlessBrowser(
493
- `${ENDPOINTS.VESU_BASE_STAGING}/pools`
606
+ `${ENDPOINTS.VESU_BASE}/pools`
494
607
  );
495
608
  pools = data.data;
496
609
 
@@ -767,10 +880,17 @@ export class VesuRebalance extends BaseStrategy<
767
880
  return [baseFlow];
768
881
  }
769
882
 
770
- async harvest(acc: Account, endpoint = VESU_REWARDS_ENDPOINT) {
771
- const vesuHarvest = new VesuHarvests(this.config);
772
- const harvests = await vesuHarvest.getUnHarvestedRewards(this.address, endpoint);
773
- const harvest = harvests[0];
883
+ async getPendingRewards(): Promise<HarvestInfo[]> {
884
+ const vesuHarvests = new VesuHarvests(this.config);
885
+ return await vesuHarvests.getUnHarvestedRewards(this.address);
886
+ }
887
+
888
+ async harvest(acc: Account) {
889
+ const pendingRewards = await this.getPendingRewards();
890
+ if (pendingRewards.length == 0) {
891
+ throw new Error(`No pending rewards found`);
892
+ }
893
+ const harvest = pendingRewards[0];
774
894
  const avnu = new AvnuWrapper();
775
895
  let swapInfo: SwapInfo = {
776
896
  token_from_address: harvest.token.address,
@@ -902,6 +1022,91 @@ const _riskFactor: RiskFactor[] = [
902
1022
  const AUDIT_URL =
903
1023
  "https://assets.troves.fi/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
904
1024
 
1025
+ // Helper to create common risk object
1026
+ const getVesuRebalanceRisk = () => ({
1027
+ riskFactor: _riskFactor,
1028
+ netRisk:
1029
+ _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) /
1030
+ _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
1031
+ notARisks: getNoRiskTags(_riskFactor)
1032
+ });
1033
+
1034
+ // Helper to create Vesu Rebalance strategy settings
1035
+ const createVesuRebalanceSettings = (tokenSymbol: string): StrategySettings => {
1036
+ const depositToken = Global.getDefaultTokens().find(
1037
+ (t) => t.symbol === tokenSymbol
1038
+ )!;
1039
+ return {
1040
+ isPaused: false,
1041
+ liveStatus: StrategyLiveStatus.DEPRECATED,
1042
+ isAudited: true,
1043
+ isInstantWithdrawal: true,
1044
+ quoteToken: depositToken,
1045
+ alerts: []
1046
+ };
1047
+ };
1048
+
1049
+ // Helper to create a Vesu Rebalance strategy
1050
+ const createVesuRebalanceStrategy = (
1051
+ idSymbol: string,
1052
+ name: string,
1053
+ tokenSymbol: string,
1054
+ address: string
1055
+ ): IStrategyMetadata<VesuRebalanceSettings> => ({
1056
+ id: `vesu_fusion_${idSymbol.toLowerCase()}`,
1057
+ name,
1058
+ description: _description.replace("{{TOKEN}}", tokenSymbol),
1059
+ address: ContractAddr.from(address),
1060
+ launchBlock: 0,
1061
+ type: "ERC4626" as const,
1062
+ vaultType: {
1063
+ type: VaultType.META_VAULT,
1064
+ description: `Automatically diversify ${tokenSymbol} holdings into different Vesu pools while reducing risk and maximizing yield. Defi spring ${tokenSymbol} Rewards are auto-compounded as well.`
1065
+ },
1066
+ depositTokens: [
1067
+ Global.getDefaultTokens().find((t) => t.symbol === tokenSymbol)!
1068
+ ],
1069
+ protocols: [_protocol],
1070
+ auditUrl: AUDIT_URL,
1071
+ curator: UnwrapLabsCurator,
1072
+ settings: createVesuRebalanceSettings(tokenSymbol),
1073
+ risk: getVesuRebalanceRisk(),
1074
+ additionalInfo: {
1075
+ feeBps: 1000
1076
+ },
1077
+ faqs,
1078
+ contractDetails: [],
1079
+ investmentSteps: [],
1080
+ tags: [],
1081
+ security: VESU_SECURITY,
1082
+ redemptionInfo: VESU_REDEMPTION_INFO,
1083
+ discontinuationInfo: {
1084
+ info: "This strategy has been deprecated and is no longer accepting new deposits."
1085
+ },
1086
+ usualTimeToEarnings: null,
1087
+ usualTimeToEarningsDescription: null,
1088
+ });
1089
+
1090
+ // Shared security & redemption metadata for all Vesu strategies
1091
+ const VESU_SECURITY = {
1092
+ auditStatus: AuditStatus.AUDITED,
1093
+ sourceCode: {
1094
+ type: SourceCodeType.OPEN_SOURCE,
1095
+ contractLink: "https://github.com/trovesfi/troves-contracts",
1096
+ },
1097
+ accessControl: {
1098
+ type: AccessControlType.ROLE_BASED_ACCESS,
1099
+ addresses: [ContractAddr.from("0x0")],
1100
+ timeLock: "2 Days",
1101
+ },
1102
+ };
1103
+
1104
+ const VESU_REDEMPTION_INFO = {
1105
+ instantWithdrawalVault: InstantWithdrawalVault.YES,
1106
+ redemptionsInfo: [],
1107
+ alerts: [],
1108
+ };
1109
+
905
1110
  const faqs: FAQ[] = [
906
1111
  {
907
1112
  question: "What is the Vesu Rebalancing Strategy?",
@@ -953,137 +1158,32 @@ const faqs: FAQ[] = [
953
1158
  * Represents the Vesu Rebalance Strategies.
954
1159
  */
955
1160
  export const VesuRebalanceStrategies: IStrategyMetadata<VesuRebalanceSettings>[] =
956
- [
957
- {
958
- name: "Vesu Fusion STRK",
959
- description: _description,
960
- address: ContractAddr.from(
961
- "0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
962
- ),
963
- launchBlock: 0,
964
- type: "ERC4626",
965
- depositTokens: [
966
- Global.getDefaultTokens().find((t) => t.symbol === "STRK")!
967
- ],
968
- protocols: [_protocol],
969
- auditUrl: AUDIT_URL,
970
- maxTVL: Web3Number.fromWei("0", 18),
971
- risk: {
972
- riskFactor: _riskFactor,
973
- netRisk:
974
- _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) /
975
- _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
976
- notARisks: getNoRiskTags(_riskFactor)
977
- },
978
- additionalInfo: {
979
- feeBps: 1000
980
- },
981
- faqs,
982
- contractDetails: [],
983
- investmentSteps: []
984
- },
985
- {
986
- name: "Vesu Fusion ETH",
987
- description: _description.replace("{{TOKEN}}", "ETH"),
988
- address: ContractAddr.from(
989
- "0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca"
990
- ),
991
- launchBlock: 0,
992
- type: "ERC4626",
993
- auditUrl: AUDIT_URL,
994
- depositTokens: [
995
- Global.getDefaultTokens().find((t) => t.symbol === "ETH")!
996
- ],
997
- protocols: [_protocol],
998
- maxTVL: Web3Number.fromWei("0", 18),
999
- risk: {
1000
- riskFactor: _riskFactor,
1001
- netRisk:
1002
- _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) /
1003
- _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
1004
- notARisks: getNoRiskTags(_riskFactor)
1005
- },
1006
- additionalInfo: {
1007
- feeBps: 1000
1008
- },
1009
- faqs,
1010
- contractDetails: [],
1011
- investmentSteps: []
1012
- },
1013
- {
1014
- name: "Vesu Fusion USDC",
1015
- description: _description.replace("{{TOKEN}}", "USDC"),
1016
- address: ContractAddr.from(
1017
- "0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c"
1018
- ),
1019
- launchBlock: 0,
1020
- type: "ERC4626",
1021
- auditUrl: AUDIT_URL,
1022
- depositTokens: [
1023
- Global.getDefaultTokens().find((t) => t.symbol === "USDC")!
1024
- ],
1025
- protocols: [_protocol],
1026
- maxTVL: Web3Number.fromWei("0", 6),
1027
- risk: {
1028
- riskFactor: _riskFactor,
1029
- netRisk:
1030
- _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) /
1031
- _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
1032
- notARisks: getNoRiskTags(_riskFactor)
1033
- },
1034
- additionalInfo: {
1035
- feeBps: 1000
1036
- },
1037
- faqs,
1038
- contractDetails: [],
1039
- investmentSteps: []
1040
- },
1041
- {
1042
- name: "Vesu Fusion USDT",
1043
- description: _description.replace("{{TOKEN}}", "USDT"),
1044
- address: ContractAddr.from(
1045
- "0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c"
1046
- ),
1047
- launchBlock: 0,
1048
- type: "ERC4626",
1049
- depositTokens: [
1050
- Global.getDefaultTokens().find((t) => t.symbol === "USDT")!
1051
- ],
1052
- auditUrl: AUDIT_URL,
1053
- protocols: [_protocol],
1054
- maxTVL: Web3Number.fromWei("0", 6),
1055
- risk: {
1056
- riskFactor: _riskFactor,
1057
- netRisk:
1058
- _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) /
1059
- _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
1060
- notARisks: getNoRiskTags(_riskFactor)
1061
- },
1062
- additionalInfo: {
1063
- feeBps: 1000
1064
- },
1065
- faqs,
1066
- contractDetails: [],
1067
- investmentSteps: []
1068
- // }, {
1069
- // name: 'Vesu Fusion WBTC',
1070
- // description: _description.replace('{{TOKEN}}', 'WBTC'),
1071
- // address: ContractAddr.from('0x778007f8136a5b827325d21613803e796bda4d676fbe1e34aeab0b2a2ec027f'),
1072
- // type: 'ERC4626',
1073
- // depositTokens: [Global.getDefaultTokens().find(t => t.symbol === 'WBTC')!],
1074
- // auditUrl: AUDIT_URL,
1075
- // protocols: [_protocol],
1076
- // maxTVL: Web3Number.fromWei('0', 8),
1077
- // risk: {
1078
- // riskFactor: _riskFactor,
1079
- // netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
1080
- // },
1081
- // additionalInfo: {
1082
- // feeBps: 1000,
1083
- // },
1084
-
1085
- }
1086
- ];
1161
+ [
1162
+ createVesuRebalanceStrategy(
1163
+ 'strk',
1164
+ "Vesu Fusion STRK",
1165
+ "STRK",
1166
+ "0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
1167
+ ),
1168
+ createVesuRebalanceStrategy(
1169
+ 'eth',
1170
+ "Vesu Fusion ETH",
1171
+ "ETH",
1172
+ "0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca"
1173
+ ),
1174
+ createVesuRebalanceStrategy(
1175
+ 'usdc',
1176
+ "Vesu Fusion USDC.e",
1177
+ "USDC.e",
1178
+ "0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c"
1179
+ ),
1180
+ createVesuRebalanceStrategy(
1181
+ 'usdt',
1182
+ "Vesu Fusion USDT",
1183
+ "USDT",
1184
+ "0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c"
1185
+ )
1186
+ ];
1087
1187
 
1088
1188
  // auto assign contract details to each strategy
1089
1189
  VesuRebalanceStrategies.forEach((s) => {
@@ -1092,7 +1192,7 @@ VesuRebalanceStrategies.forEach((s) => {
1092
1192
  address: s.address,
1093
1193
  name: "Vault",
1094
1194
  sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/tree/main/src/strategies/vesu_rebalance"
1095
- },
1195
+ },
1096
1196
  ...COMMON_CONTRACTS];
1097
1197
  // set docs link
1098
1198
  s.docs = "https://docs.troves.fi/p/strategies/vesu-fusion-rebalancing-vaults"
@@ -1115,4 +1215,5 @@ VesuRebalanceStrategies.forEach((s) => {
1115
1215
  "Monitor and Rebalance funds across multiple Vesu pools to maximize yield",
1116
1216
  "Harvest and supply Defi Spring STRK rewards every week (Auto-compound)",
1117
1217
  ]
1118
- });
1218
+
1219
+ });