@strkfarm/sdk 2.0.0-staging.6 → 2.0.0-staging.60

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "2.0.0-staging.6",
3
+ "version": "2.0.0-staging.60",
4
4
  "description": "STRKFarm TS SDK (Meant for our internal use, but feel free to use it)",
5
5
  "typings": "dist/index.d.ts",
6
6
  "types": "dist/index.d.ts",
@@ -25,9 +25,6 @@
25
25
  "dist",
26
26
  "src"
27
27
  ],
28
- "publishConfig": {
29
- "tag": "staging"
30
- },
31
28
  "scripts": {
32
29
  "test": "jest",
33
30
  "build": "tsup --clean && pnpm run build:esm && npm run build:dts && npm run build:iife && npm run build-cli && pnpm run build:iife-esm",
@@ -59,6 +56,9 @@
59
56
  "react": "19.1.2",
60
57
  "starknet": "9.2.1"
61
58
  },
59
+ "publishConfig": {
60
+ "tag": "staging"
61
+ },
62
62
  "dependencies": {
63
63
  "@apollo/client": "3.11.8",
64
64
  "@avnu/avnu-sdk": "3.0.2",
@@ -2,11 +2,11 @@
2
2
  {
3
3
  "type": "impl",
4
4
  "name": "UpgradeableImpl",
5
- "interface_name": "openzeppelin_upgrades::interface::IUpgradeable"
5
+ "interface_name": "openzeppelin_interfaces::upgrades::IUpgradeable"
6
6
  },
7
7
  {
8
8
  "type": "interface",
9
- "name": "openzeppelin_upgrades::interface::IUpgradeable",
9
+ "name": "openzeppelin_interfaces::upgrades::IUpgradeable",
10
10
  "items": [
11
11
  {
12
12
  "type": "function",
@@ -25,7 +25,7 @@
25
25
  {
26
26
  "type": "impl",
27
27
  "name": "VaultMetadataImpl",
28
- "interface_name": "openzeppelin_token::erc20::interface::IERC20Metadata"
28
+ "interface_name": "openzeppelin_interfaces::token::erc20::IERC20Metadata"
29
29
  },
30
30
  {
31
31
  "type": "struct",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  {
49
49
  "type": "interface",
50
- "name": "openzeppelin_token::erc20::interface::IERC20Metadata",
50
+ "name": "openzeppelin_interfaces::token::erc20::IERC20Metadata",
51
51
  "items": [
52
52
  {
53
53
  "type": "function",
@@ -431,17 +431,95 @@
431
431
  }
432
432
  ],
433
433
  "state_mutability": "view"
434
+ },
435
+ {
436
+ "type": "function",
437
+ "name": "due_assets_from_id",
438
+ "inputs": [
439
+ {
440
+ "name": "id",
441
+ "type": "core::integer::u256"
442
+ }
443
+ ],
444
+ "outputs": [
445
+ {
446
+ "type": "core::integer::u256"
447
+ }
448
+ ],
449
+ "state_mutability": "view"
450
+ },
451
+ {
452
+ "type": "function",
453
+ "name": "due_assets_from_owner",
454
+ "inputs": [
455
+ {
456
+ "name": "owner",
457
+ "type": "core::starknet::contract_address::ContractAddress"
458
+ }
459
+ ],
460
+ "outputs": [
461
+ {
462
+ "type": "core::integer::u256"
463
+ }
464
+ ],
465
+ "state_mutability": "view"
466
+ },
467
+ {
468
+ "type": "function",
469
+ "name": "set_deposit_limit",
470
+ "inputs": [
471
+ {
472
+ "name": "limit",
473
+ "type": "core::integer::u256"
474
+ }
475
+ ],
476
+ "outputs": [],
477
+ "state_mutability": "external"
478
+ },
479
+ {
480
+ "type": "function",
481
+ "name": "set_mint_limit",
482
+ "inputs": [
483
+ {
484
+ "name": "limit",
485
+ "type": "core::integer::u256"
486
+ }
487
+ ],
488
+ "outputs": [],
489
+ "state_mutability": "external"
490
+ },
491
+ {
492
+ "type": "function",
493
+ "name": "get_deposit_limit",
494
+ "inputs": [],
495
+ "outputs": [
496
+ {
497
+ "type": "core::integer::u256"
498
+ }
499
+ ],
500
+ "state_mutability": "view"
501
+ },
502
+ {
503
+ "type": "function",
504
+ "name": "get_mint_limit",
505
+ "inputs": [],
506
+ "outputs": [
507
+ {
508
+ "type": "core::integer::u256"
509
+ }
510
+ ],
511
+ "state_mutability": "view"
434
512
  }
435
513
  ]
436
514
  },
437
515
  {
438
516
  "type": "impl",
439
517
  "name": "ERC4626Impl",
440
- "interface_name": "openzeppelin_token::erc20::extensions::erc4626::interface::IERC4626"
518
+ "interface_name": "openzeppelin_interfaces::token::erc4626::IERC4626"
441
519
  },
442
520
  {
443
521
  "type": "interface",
444
- "name": "openzeppelin_token::erc20::extensions::erc4626::interface::IERC4626",
522
+ "name": "openzeppelin_interfaces::token::erc4626::IERC4626",
445
523
  "items": [
446
524
  {
447
525
  "type": "function",
@@ -718,7 +796,7 @@
718
796
  {
719
797
  "type": "impl",
720
798
  "name": "ERC20Impl",
721
- "interface_name": "openzeppelin_token::erc20::interface::IERC20"
799
+ "interface_name": "openzeppelin_interfaces::token::erc20::IERC20"
722
800
  },
723
801
  {
724
802
  "type": "enum",
@@ -736,7 +814,7 @@
736
814
  },
737
815
  {
738
816
  "type": "interface",
739
- "name": "openzeppelin_token::erc20::interface::IERC20",
817
+ "name": "openzeppelin_interfaces::token::erc20::IERC20",
740
818
  "items": [
741
819
  {
742
820
  "type": "function",
@@ -854,11 +932,11 @@
854
932
  {
855
933
  "type": "impl",
856
934
  "name": "ERC20CamelOnlyImpl",
857
- "interface_name": "openzeppelin_token::erc20::interface::IERC20CamelOnly"
935
+ "interface_name": "openzeppelin_interfaces::token::erc20::IERC20CamelOnly"
858
936
  },
859
937
  {
860
938
  "type": "interface",
861
- "name": "openzeppelin_token::erc20::interface::IERC20CamelOnly",
939
+ "name": "openzeppelin_interfaces::token::erc20::IERC20CamelOnly",
862
940
  "items": [
863
941
  {
864
942
  "type": "function",
@@ -916,11 +994,11 @@
916
994
  {
917
995
  "type": "impl",
918
996
  "name": "AccessControlImpl",
919
- "interface_name": "openzeppelin_access::accesscontrol::interface::IAccessControl"
997
+ "interface_name": "openzeppelin_interfaces::access::accesscontrol::IAccessControl"
920
998
  },
921
999
  {
922
1000
  "type": "interface",
923
- "name": "openzeppelin_access::accesscontrol::interface::IAccessControl",
1001
+ "name": "openzeppelin_interfaces::access::accesscontrol::IAccessControl",
924
1002
  "items": [
925
1003
  {
926
1004
  "type": "function",
@@ -1011,11 +1089,11 @@
1011
1089
  {
1012
1090
  "type": "impl",
1013
1091
  "name": "PausableImpl",
1014
- "interface_name": "openzeppelin_security::interface::IPausable"
1092
+ "interface_name": "openzeppelin_interfaces::security::pausable::IPausable"
1015
1093
  },
1016
1094
  {
1017
1095
  "type": "interface",
1018
- "name": "openzeppelin_security::interface::IPausable",
1096
+ "name": "openzeppelin_interfaces::security::pausable::IPausable",
1019
1097
  "items": [
1020
1098
  {
1021
1099
  "type": "function",
@@ -1139,7 +1217,7 @@
1139
1217
  },
1140
1218
  {
1141
1219
  "type": "event",
1142
- "name": "vault::oz_4626::ERC4626Component::Deposit",
1220
+ "name": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Deposit",
1143
1221
  "kind": "struct",
1144
1222
  "members": [
1145
1223
  {
@@ -1166,7 +1244,7 @@
1166
1244
  },
1167
1245
  {
1168
1246
  "type": "event",
1169
- "name": "vault::oz_4626::ERC4626Component::Withdraw",
1247
+ "name": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Withdraw",
1170
1248
  "kind": "struct",
1171
1249
  "members": [
1172
1250
  {
@@ -1198,17 +1276,17 @@
1198
1276
  },
1199
1277
  {
1200
1278
  "type": "event",
1201
- "name": "vault::oz_4626::ERC4626Component::Event",
1279
+ "name": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Event",
1202
1280
  "kind": "enum",
1203
1281
  "variants": [
1204
1282
  {
1205
1283
  "name": "Deposit",
1206
- "type": "vault::oz_4626::ERC4626Component::Deposit",
1284
+ "type": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Deposit",
1207
1285
  "kind": "nested"
1208
1286
  },
1209
1287
  {
1210
1288
  "name": "Withdraw",
1211
- "type": "vault::oz_4626::ERC4626Component::Withdraw",
1289
+ "type": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Withdraw",
1212
1290
  "kind": "nested"
1213
1291
  }
1214
1292
  ]
@@ -1510,6 +1588,38 @@
1510
1588
  }
1511
1589
  ]
1512
1590
  },
1591
+ {
1592
+ "type": "event",
1593
+ "name": "vault::vault::vault::Vault::BringLiquidity",
1594
+ "kind": "struct",
1595
+ "members": [
1596
+ {
1597
+ "name": "caller",
1598
+ "type": "core::starknet::contract_address::ContractAddress",
1599
+ "kind": "data"
1600
+ },
1601
+ {
1602
+ "name": "amount",
1603
+ "type": "core::integer::u256",
1604
+ "kind": "data"
1605
+ },
1606
+ {
1607
+ "name": "new_buffer",
1608
+ "type": "core::integer::u256",
1609
+ "kind": "data"
1610
+ },
1611
+ {
1612
+ "name": "new_aum",
1613
+ "type": "core::integer::u256",
1614
+ "kind": "data"
1615
+ },
1616
+ {
1617
+ "name": "epoch",
1618
+ "type": "core::integer::u256",
1619
+ "kind": "data"
1620
+ }
1621
+ ]
1622
+ },
1513
1623
  {
1514
1624
  "type": "event",
1515
1625
  "name": "vault::vault::vault::Vault::Event",
@@ -1518,32 +1628,32 @@
1518
1628
  {
1519
1629
  "name": "ERC20Event",
1520
1630
  "type": "openzeppelin_token::erc20::erc20::ERC20Component::Event",
1521
- "kind": "nested"
1631
+ "kind": "flat"
1522
1632
  },
1523
1633
  {
1524
1634
  "name": "ERC4626Event",
1525
- "type": "vault::oz_4626::ERC4626Component::Event",
1526
- "kind": "nested"
1635
+ "type": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Event",
1636
+ "kind": "flat"
1527
1637
  },
1528
1638
  {
1529
1639
  "name": "SRC5Event",
1530
1640
  "type": "openzeppelin_introspection::src5::SRC5Component::Event",
1531
- "kind": "nested"
1641
+ "kind": "flat"
1532
1642
  },
1533
1643
  {
1534
1644
  "name": "AccessControlEvent",
1535
1645
  "type": "openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::Event",
1536
- "kind": "nested"
1646
+ "kind": "flat"
1537
1647
  },
1538
1648
  {
1539
1649
  "name": "UpgradeableEvent",
1540
1650
  "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event",
1541
- "kind": "nested"
1651
+ "kind": "flat"
1542
1652
  },
1543
1653
  {
1544
1654
  "name": "PausableEvent",
1545
1655
  "type": "openzeppelin_security::pausable::PausableComponent::Event",
1546
- "kind": "nested"
1656
+ "kind": "flat"
1547
1657
  },
1548
1658
  {
1549
1659
  "name": "RedeemRequested",
@@ -1559,7 +1669,13 @@
1559
1669
  "name": "Report",
1560
1670
  "type": "vault::vault::vault::Vault::Report",
1561
1671
  "kind": "nested"
1672
+ },
1673
+ {
1674
+ "name": "BringLiquidity",
1675
+ "type": "vault::vault::vault::Vault::BringLiquidity",
1676
+ "kind": "nested"
1562
1677
  }
1563
1678
  ]
1564
1679
  }
1565
- ]
1680
+ ]
1681
+
@@ -1,5 +1,6 @@
1
1
  import { logger } from "@/utils/logger";
2
2
  import BigNumber from "bignumber.js";
3
+ import { uint256 } from "starknet";
3
4
 
4
5
  export class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
5
6
  decimals: number;
@@ -107,6 +108,10 @@ export class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
107
108
  sign: sign,
108
109
  }
109
110
  }
111
+
112
+ toUint256() {
113
+ return uint256.bnToUint256(this.toWei());
114
+ }
110
115
  }
111
116
 
112
117
  BigNumber.config({ DECIMAL_PLACES: 18, ROUNDING_MODE: BigNumber.ROUND_DOWN });
@@ -1,3 +1,4 @@
1
+ import { Uint256, uint256 } from "starknet";
1
2
  import { _Web3Number } from "./_bignumber";
2
3
 
3
4
  export class Web3Number extends _Web3Number<Web3Number> {
@@ -5,4 +6,8 @@ export class Web3Number extends _Web3Number<Web3Number> {
5
6
  const bn = (new Web3Number(weiNumber, decimals)).dividedBy(10 ** decimals)
6
7
  return new Web3Number(bn.toString(), decimals);
7
8
  }
9
+
10
+ static fromUint256(uint256Value: Uint256): Web3Number {
11
+ return this.fromWei(uint256.uint256ToBN(uint256Value).toString(), 18);
12
+ }
8
13
  }
@@ -1,5 +1,6 @@
1
1
  import util from 'util';
2
2
  import { _Web3Number } from "./_bignumber";
3
+ import { Uint256, uint256 } from 'starknet';
3
4
 
4
5
  export class Web3Number extends _Web3Number<Web3Number> {
5
6
 
@@ -8,6 +9,10 @@ export class Web3Number extends _Web3Number<Web3Number> {
8
9
  return new Web3Number(bn.toString(), decimals);
9
10
  }
10
11
 
12
+ static fromUint256(uint256Value: Uint256): Web3Number {
13
+ return this.fromWei(uint256.uint256ToBN(uint256Value).toString(), 18);
14
+ }
15
+
11
16
  [util.inspect.custom](depth: any, opts: any): string {
12
17
  return this.toString();
13
18
  }
package/src/global.ts CHANGED
@@ -165,7 +165,54 @@ const defaultTokens: TokenInfo[] = [{
165
165
  coingeckId: undefined,
166
166
  displayDecimals: 2,
167
167
  priceCheckAmount: 100,
168
- }]
168
+ }, {
169
+ name: "fyeWBTC",
170
+ symbol: "fyeWBTC",
171
+ logo: 'https://assets.strkfarm.com/integrations/tokens/wbtc.svg',
172
+ address: ContractAddr.from('0x04dd39de0a588f5e1c7a8377e1bef2c49caaee49a11433429d2c48f587b3a492'),
173
+ decimals: 8,
174
+ coingeckId: undefined,
175
+ displayDecimals: 6,
176
+ priceCheckAmount: 0.001, // 112000 * 0.0001 = $110.2
177
+ }, {
178
+ name: "fyETH",
179
+ symbol: "fyETH",
180
+ logo: 'https://assets.strkfarm.com/integrations/tokens/eth.svg',
181
+ address: ContractAddr.from('0x050707bC3b8730022F10530C2c6f6b9467644129C50C2868Ad0036c5e4E9e616'),
182
+ decimals: 18,
183
+ coingeckId: undefined,
184
+ displayDecimals: 4,
185
+ priceCheckAmount: 0.1,
186
+ }, {
187
+ name: "fyeUSDC",
188
+ symbol: "fyeUSDC",
189
+ logo: 'https://assets.strkfarm.com/integrations/tokens/usdc.svg',
190
+ address: ContractAddr.from('0x07fdcec0cef01294c9c3d52415215949805c77bae8003702a7928fd6d2c36bc1'),
191
+ decimals: 6,
192
+ coingeckId: undefined,
193
+ displayDecimals: 2,
194
+ priceCheckAmount: 100,
195
+ }, {
196
+ name: 'strkBTC',
197
+ symbol: 'strkBTC',
198
+ logo: 'https://assets.troves.fi/integrations/tokens/strkbtc.svg',
199
+ address: ContractAddr.from('0x0787150e306e6eae6e3f79dea881770e8bbff2c1b8eb490f969669ee945b3135'),
200
+ decimals: 8,
201
+ coingeckId: undefined,
202
+ displayDecimals: 6,
203
+ priceCheckAmount: 0.001, // 112000 * 0.0001 = $110.2
204
+ priceProxySymbol: 'WBTC',
205
+ }, {
206
+ name: 'xstrkBTC',
207
+ symbol: 'xstrkBTC',
208
+ logo: 'https://assets.troves.fi/integrations/tokens/xstrkbtc.svg',
209
+ address: ContractAddr.from('0x047751b3532fabca89b0f2e35ca1cb45e5a7b11d5e3d3663dfa1f4406b45fd88'),
210
+ decimals: 8,
211
+ coingeckId: undefined,
212
+ displayDecimals: 6,
213
+ priceCheckAmount: 0.001,
214
+ priceProxySymbol: 'WBTC',
215
+ },]
169
216
  const tokens: TokenInfo[] = defaultTokens;
170
217
 
171
218
  /** Contains globally useful functions.
@@ -55,21 +55,24 @@ export interface IProtocol {
55
55
  logo: string;
56
56
  }
57
57
 
58
- // Strategy-level enums
59
- export enum StrategyCategory {
60
- ALL = "all",
61
- BTC = "btc",
62
- META_VAULTS = "meta-vaults",
58
+ export interface ICurator {
59
+ name: string;
60
+ logo: string;
63
61
  }
64
62
 
65
63
  export enum StrategyTag {
66
- EKUBO = "Ekubo",
67
- EVERGREEN = "Evergreen",
68
- HYPER_LST = "Hyper-LST",
69
- VESU = "Vesu",
70
- SENSEI = "Sensei",
71
- ENDUR = "Endur",
72
- BTC = "BTC"
64
+ META_VAULT = "Meta Vaults",
65
+ LEVERED = "Maxx",
66
+ AUTOMATED_LP = "Ekubo",
67
+ BTC = "BTC"
68
+ }
69
+
70
+ export enum VaultType {
71
+ LOOPING = "Looping",
72
+ META_VAULT = "Meta Vault",
73
+ DELTA_NEUTRAL = "Delta Neutral",
74
+ AUTOMATED_LP = "Automated LP",
75
+ TVA = "Troves Value Averaging",
73
76
  }
74
77
 
75
78
  // Security metadata enums
@@ -86,6 +89,7 @@ export enum SourceCodeType {
86
89
  export enum AccessControlType {
87
90
  MULTISIG_ACCOUNT = "Multisig Account",
88
91
  STANDARD_ACCOUNT = "Standard Account",
92
+ ROLE_BASED_ACCESS = "Role Based Access",
89
93
  }
90
94
 
91
95
  export enum InstantWithdrawalVault {
@@ -102,7 +106,7 @@ export interface SourceCodeInfo {
102
106
  export interface AccessControlInfo {
103
107
  type: AccessControlType;
104
108
  addresses: ContractAddr[];
105
- timeLock: string;
109
+ timeLock?: string;
106
110
  }
107
111
 
108
112
  export interface SecurityMetadata {
@@ -111,16 +115,13 @@ export interface SecurityMetadata {
111
115
  accessControl: AccessControlInfo;
112
116
  }
113
117
 
114
- // Redemption metadata interfaces
115
- export interface RedemptionExpectedTime {
116
- upto1M: string;
117
- upto10M: string;
118
- above10M: string;
119
- }
120
-
121
118
  export interface RedemptionInfo {
122
119
  instantWithdrawalVault: InstantWithdrawalVault;
123
- expectedRedemptionTime?: RedemptionExpectedTime;
120
+ redemptionsInfo: {
121
+ title: string; // e.g. Upto $1M
122
+ description: string; // e.g. "1-2 hours"
123
+ }[],
124
+ alerts: StrategyAlert[];
124
125
  }
125
126
 
126
127
  export enum FlowChartColors {
@@ -138,7 +139,8 @@ export enum StrategyLiveStatus {
138
139
  ACTIVE = "Active",
139
140
  NEW = "New",
140
141
  COMING_SOON = "Coming Soon",
141
- RETIRED = "Retired",
142
+ DEPRECATED = "Deprecated", // active but not recommended
143
+ RETIRED = "Retired", // not active anymore
142
144
  HOT = "Hot & New 🔥"
143
145
  }
144
146
 
@@ -149,7 +151,6 @@ export interface StrategyAlert {
149
151
  }
150
152
 
151
153
  export interface StrategySettings {
152
- maxTVL?: Web3Number;
153
154
  liveStatus?: StrategyLiveStatus;
154
155
  isPaused?: boolean;
155
156
  isInMaintenance?: boolean;
@@ -165,6 +166,13 @@ export interface StrategySettings {
165
166
  tags?: StrategyTag[];
166
167
  }
167
168
 
169
+ export interface StrategyApyHistoryUIConfig {
170
+ // Defaults to true in UI if omitted.
171
+ showApyHistory?: boolean;
172
+ // Optional message shown when APY history is hidden.
173
+ noApyHistoryMessage?: string;
174
+ }
175
+
168
176
  /**
169
177
  * @property risk.riskFactor.factor - The risk factors that are considered for the strategy.
170
178
  * @property risk.riskFactor.factor - The value of the risk factor from 0 to 10, 0 being the lowest and 10 being the highest.
@@ -175,9 +183,26 @@ export interface IStrategyMetadata<T> {
175
183
  id: string;
176
184
  name: string;
177
185
  description: string | React.ReactNode;
186
+ /**
187
+ * Optional UI sort priority. Higher shows earlier.
188
+ * Intended for pinning flagship parent vaults (e.g. BTC above STRK).
189
+ */
190
+ priority?: number;
191
+ /**
192
+ * Optional UI config for the variant intro popup (strategy page).
193
+ * Should be identical across strategies that share the same `parentId`.
194
+ */
195
+ variantIntro?: {
196
+ title: string;
197
+ description: string;
198
+ };
178
199
  address: ContractAddr;
179
200
  launchBlock: number;
180
201
  type: "ERC4626" | "ERC721" | "Other";
202
+ vaultType: {
203
+ type: VaultType;
204
+ description: string;
205
+ };
181
206
  depositTokens: TokenInfo[];
182
207
  protocols: IProtocol[];
183
208
  auditUrl?: string;
@@ -187,6 +212,7 @@ export interface IStrategyMetadata<T> {
187
212
  notARisks: RiskType[];
188
213
  };
189
214
  apyMethodology?: string;
215
+ realizedApyMethodology?: string;
190
216
  additionalInfo: T;
191
217
  contractDetails: {
192
218
  address: ContractAddr;
@@ -197,13 +223,20 @@ export interface IStrategyMetadata<T> {
197
223
  points?: {multiplier: number, logo: string, toolTip?: string}[];
198
224
  docs?: string;
199
225
  investmentSteps: string[];
200
- curator?: { name: string, logo: string },
226
+ curator?: ICurator,
201
227
  isPreview?: boolean;
202
- category: StrategyCategory;
203
228
  tags?: StrategyTag[];
204
229
  security: SecurityMetadata;
205
230
  redemptionInfo: RedemptionInfo;
231
+ usualTimeToEarnings: null | string; // e.g. "2 weeks" // some strats grow like step functions
232
+ usualTimeToEarningsDescription: null | string; // e.g. "LSTs price on DEX goes up roughly every 2 weeks"
233
+ discontinuationInfo?: {
234
+ date?: Date;
235
+ reason?: React.ReactNode | string;
236
+ info?: React.ReactNode | string;
237
+ };
206
238
  settings?: StrategySettings;
239
+ apyHistoryUIConfig?: StrategyApyHistoryUIConfig;
207
240
  // Legacy field for multi-step strategies (deprecated, use investmentFlows instead)
208
241
  actions?: Array<{
209
242
  name?: string;
@@ -216,6 +249,8 @@ export interface IStrategyMetadata<T> {
216
249
  amount?: string | number;
217
250
  isDeposit?: boolean;
218
251
  }>;
252
+ parentId?: string;
253
+ parentName?: string;
219
254
  }
220
255
 
221
256
  export interface IInvestmentFlow {
@@ -242,6 +277,23 @@ export function getMainnetConfig(
242
277
  };
243
278
  }
244
279
 
280
+ export const getStrategyTagDesciption = (tag: StrategyTag): string => {
281
+ switch (tag) {
282
+ case StrategyTag.META_VAULT:
283
+ return "A meta vault is a vault that auto allocates funds to multiple vaults based on optimal yield opportunities";
284
+ case StrategyTag.LEVERED:
285
+ return "Looping vaults on Endur LSTs with leveraged borrowing of STRK or BTC to increase yield (2-4x higher yield than simply staking)";
286
+ case StrategyTag.AUTOMATED_LP:
287
+ return "Automated LP vaults on Ekubo that rebalance position automatically, ensuring you earn fees efficiently";
288
+ case StrategyTag.BTC:
289
+ return "BTC linked vaults";
290
+ }
291
+ }
292
+
293
+ export const getAllStrategyTags = (): StrategyTag[] => {
294
+ return Object.values(StrategyTag);
295
+ }
296
+
245
297
  export const getRiskExplaination = (riskType: RiskType) => {
246
298
  switch (riskType) {
247
299
  case RiskType.MARKET_RISK:
@@ -314,7 +366,7 @@ export function highlightTextWithLinks(
314
366
  {parts.map((part, i) => {
315
367
  const match = highlights.find(m => m.highlight.toLowerCase() === part.toLowerCase());
316
368
  return match ? (
317
- <a key={i} href={match.link} target="_blank" style={{ color: 'var(--chakra-colors-white)', background: 'var(--chakra-colors-highlight)' }}>
369
+ <a key={i} href={match.link} target="_blank" style={{ color: 'white', background: 'rgba(255, 255, 255, 0.04)' }}>
318
370
  {part}
319
371
  </a>
320
372
  ) : (
@@ -375,4 +427,9 @@ export const Protocols = {
375
427
  VESU: VesuProtocol,
376
428
  ENDUR: EndurProtocol,
377
429
  EXTENDED: ExtendedProtocol
430
+ }
431
+
432
+ export const UnwrapLabsCurator: ICurator = {
433
+ name: "Unwrap Labs",
434
+ logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
378
435
  }
@@ -37,7 +37,7 @@ export class AvnuWrapper {
37
37
  excludeSources = ['Haiko(Solvers)']
38
38
  ): Promise<Quote> {
39
39
  const MAX_RETRY = 5;
40
- // logger.verbose(`${AvnuWrapper.name}: getQuotes => Getting quotes for ${fromToken} -> ${toToken}, amount: ${amountWei}, taker: ${taker}, retry: ${retry}`);
40
+ logger.verbose(`${AvnuWrapper.name}: getQuotes => Getting quotes for ${fromToken} -> ${toToken}, amount: ${amountWei}, taker: ${taker}, retry: ${retry}`);
41
41
  const params: any = {
42
42
  sellTokenAddress: fromToken,
43
43
  buyTokenAddress: toToken,