@strkfarm/sdk 2.0.0-dev.9 → 2.0.0-staging.2

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 (64) hide show
  1. package/dist/index.browser.global.js +111371 -93151
  2. package/dist/index.browser.mjs +27815 -32690
  3. package/dist/index.d.ts +1095 -2011
  4. package/dist/index.js +27425 -32309
  5. package/dist/index.mjs +27590 -32452
  6. package/package.json +6 -5
  7. package/src/data/ekubo-price-fethcer.abi.json +265 -0
  8. package/src/data/universal-vault.abi.json +20 -135
  9. package/src/dataTypes/address.ts +0 -7
  10. package/src/dataTypes/index.ts +3 -2
  11. package/src/dataTypes/mynumber.ts +141 -0
  12. package/src/global.ts +296 -288
  13. package/src/index.browser.ts +6 -5
  14. package/src/interfaces/common.tsx +324 -184
  15. package/src/modules/apollo-client-config.ts +28 -0
  16. package/src/modules/avnu.ts +4 -17
  17. package/src/modules/ekubo-pricer.ts +79 -0
  18. package/src/modules/ekubo-quoter.ts +11 -88
  19. package/src/modules/erc20.ts +21 -67
  20. package/src/modules/harvests.ts +26 -15
  21. package/src/modules/index.ts +11 -13
  22. package/src/modules/lst-apr.ts +0 -36
  23. package/src/modules/pragma.ts +23 -8
  24. package/src/modules/pricer-from-api.ts +150 -14
  25. package/src/modules/pricer.ts +2 -1
  26. package/src/modules/pricerBase.ts +2 -1
  27. package/src/node/deployer.ts +36 -1
  28. package/src/node/pricer-redis.ts +2 -1
  29. package/src/strategies/autoCompounderStrk.ts +1 -1
  30. package/src/strategies/base-strategy.ts +5 -22
  31. package/src/strategies/ekubo-cl-vault.tsx +2904 -2175
  32. package/src/strategies/factory.ts +165 -0
  33. package/src/strategies/index.ts +10 -11
  34. package/src/strategies/registry.ts +268 -0
  35. package/src/strategies/sensei.ts +416 -292
  36. package/src/strategies/universal-adapters/adapter-utils.ts +1 -5
  37. package/src/strategies/universal-adapters/baseAdapter.ts +153 -181
  38. package/src/strategies/universal-adapters/common-adapter.ts +77 -98
  39. package/src/strategies/universal-adapters/index.ts +1 -5
  40. package/src/strategies/universal-adapters/vesu-adapter.ts +218 -220
  41. package/src/strategies/universal-adapters/vesu-supply-only-adapter.ts +51 -58
  42. package/src/strategies/universal-lst-muliplier-strategy.tsx +1952 -992
  43. package/src/strategies/universal-strategy.tsx +1713 -1150
  44. package/src/strategies/vesu-rebalance.tsx +1189 -986
  45. package/src/utils/health-factor-math.ts +5 -11
  46. package/src/utils/index.ts +8 -9
  47. package/src/utils/strategy-utils.ts +57 -0
  48. package/src/data/extended-deposit.abi.json +0 -3613
  49. package/src/modules/ExtendedWrapperSDk/index.ts +0 -62
  50. package/src/modules/ExtendedWrapperSDk/types.ts +0 -311
  51. package/src/modules/ExtendedWrapperSDk/wrapper.ts +0 -395
  52. package/src/modules/midas.ts +0 -159
  53. package/src/modules/token-market-data.ts +0 -202
  54. package/src/strategies/svk-strategy.ts +0 -247
  55. package/src/strategies/universal-adapters/adapter-optimizer.ts +0 -65
  56. package/src/strategies/universal-adapters/avnu-adapter.ts +0 -413
  57. package/src/strategies/universal-adapters/extended-adapter.ts +0 -972
  58. package/src/strategies/universal-adapters/unused-balance-adapter.ts +0 -109
  59. package/src/strategies/universal-adapters/vesu-multiply-adapter.ts +0 -1306
  60. package/src/strategies/vesu-extended-strategy/services/operationService.ts +0 -34
  61. package/src/strategies/vesu-extended-strategy/utils/config.runtime.ts +0 -77
  62. package/src/strategies/vesu-extended-strategy/utils/constants.ts +0 -49
  63. package/src/strategies/vesu-extended-strategy/utils/helper.ts +0 -370
  64. package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +0 -1379
@@ -1,27 +1,30 @@
1
1
  import { ContractAddr, Web3Number } from "@/dataTypes";
2
- import { IConfig, Protocols, TokenInfo } from "@/interfaces";
2
+ import { IConfig, TokenInfo } from "@/interfaces";
3
3
  import { PricerBase } from "@/modules/pricerBase";
4
- import { BaseAdapter, BaseAdapterConfig, SupportedPosition, PositionInfo, PositionAPY, APYType, ManageCall, AdapterLeafType, GenerateCallFn, DepositParams, WithdrawParams, PositionAmount } from "./baseAdapter";
4
+ import { BaseAdapter, BaseAdapterConfig, SupportedPosition, PositionInfo, PositionAPY, APYType, ManageCall, AdapterLeafType, GenerateCallFn } from "./baseAdapter";
5
5
  import { SIMPLE_SANITIZER, toBigInt } from "./adapter-utils";
6
6
  import { hash, uint256, Contract } from "starknet";
7
7
  import { VesuAdapter } from "./vesu-adapter";
8
8
  import { logger } from "@/utils";
9
- import ERC4626Abi from "@/data/erc4626.abi.json";
10
- import { TokenMarketData } from "@/modules";
11
9
 
12
10
  export interface VesuSupplyOnlyAdapterConfig extends BaseAdapterConfig {
13
11
  vTokenContract: ContractAddr;
14
12
  }
15
13
 
14
+ export interface DepositParams {
15
+ amount: Web3Number;
16
+ }
17
+
18
+ export interface WithdrawParams {
19
+ amount: Web3Number;
20
+ }
16
21
 
17
- export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
22
+ export class VesuSupplyOnlyAdapter extends BaseAdapter<any, any> {
18
23
  readonly config: VesuSupplyOnlyAdapterConfig;
19
- readonly tokenMarketData: TokenMarketData;
20
24
 
21
25
  constructor(config: VesuSupplyOnlyAdapterConfig) {
22
- super(config, VesuSupplyOnlyAdapter.name, Protocols.VESU);
26
+ super(config);
23
27
  this.config = config;
24
- this.tokenMarketData = new TokenMarketData(this.config.pricer, this.config.networkConfig);
25
28
  }
26
29
 
27
30
  protected async getAPY(supportedPosition: SupportedPosition): Promise<PositionAPY> {
@@ -68,14 +71,14 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
68
71
  const supplyApy = Number(assetStats.supplyApy?.value || 0) / 1e18;
69
72
 
70
73
  // Get LST APR if applicable (for LST tokens)
71
- const isSupported = this.tokenMarketData.isAPYSupported(baseToken);
72
- const lstAPY = isSupported ? await this.tokenMarketData.getAPY(baseToken) : 0;
73
-
74
- const rewardAPY = Number(assetStats.defiSpringSupplyApr?.value || "0") / 1e18;
74
+ let lstAPY = 0;
75
+ if (baseToken.symbol === 'STRK' || baseToken.symbol === 'ETH') {
76
+ // This would need to be implemented based on your LST APR service
77
+ // For now, using a placeholder
78
+ lstAPY = 0;
79
+ }
75
80
 
76
- // only account lstAPY if rewardAPY is positive
77
- // bcz, without rewards, no point in simply depositing LST in vesu
78
- const totalAPY = rewardAPY > 0 ? rewardAPY + supplyApy + lstAPY : supplyApy;
81
+ const totalAPY = supplyApy + lstAPY;
79
82
 
80
83
  const result = {
81
84
  apy: totalAPY,
@@ -86,13 +89,16 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
86
89
  return result;
87
90
  } catch (error) {
88
91
  logger.error(`VesuSupplyOnlyAdapter: Error getting APY for ${supportedPosition.asset.symbol}:`, error);
89
- throw error;
92
+ return {
93
+ apy: 0,
94
+ type: APYType.BASE
95
+ };
90
96
  }
91
97
  }
92
98
 
93
- protected async getPosition(supportedPosition: SupportedPosition): Promise<PositionAmount> {
99
+ protected async getPosition(supportedPosition: SupportedPosition): Promise<Web3Number> {
94
100
  const CACHE_KEY = `position_${this.config.vTokenContract.address}`;
95
- const cacheData = this.getCache<PositionAmount>(CACHE_KEY);
101
+ const cacheData = this.getCache<Web3Number>(CACHE_KEY);
96
102
  if (cacheData) {
97
103
  return cacheData;
98
104
  }
@@ -100,78 +106,69 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
100
106
  try {
101
107
  // Create contract instance for the vToken
102
108
  const vTokenContract = new Contract({
103
- abi: ERC4626Abi, // We only need basic ERC20 methods
109
+ abi: [], // We only need basic ERC20 methods
104
110
  address: this.config.vTokenContract.address,
105
111
  providerOrAccount: this.config.networkConfig.provider
106
112
  });
107
113
 
108
114
  // Get the vault allocator's balance (shares) in the vToken contract
109
- const shares = await vTokenContract.balance_of(this.config.vaultAllocator.address);
115
+ const shares = await vTokenContract.balanceOf(this.config.vaultAllocator.address);
110
116
 
111
117
  // Convert shares to assets using convert_to_assets
112
118
  const assets = await vTokenContract.convert_to_assets(
113
119
  uint256.bnToUint256(shares)
114
120
  );
115
121
 
116
- const result = {
117
- amount: Web3Number.fromWei(
118
- assets.toString(),
119
- supportedPosition.asset.decimals
120
- ),
121
- remarks: "Vesu Earn"
122
- };
122
+ const result = Web3Number.fromWei(
123
+ assets.toString(),
124
+ supportedPosition.asset.decimals
125
+ );
123
126
 
124
127
  this.setCache(CACHE_KEY, result, 60000); // Cache for 1 minute
125
128
  return result;
126
129
  } catch (error) {
127
130
  logger.error(`VesuSupplyOnlyAdapter: Error getting position for ${supportedPosition.asset.symbol}:`, error);
128
- throw error;
131
+ return new Web3Number('0', supportedPosition.asset.decimals);
129
132
  }
130
133
  }
131
134
 
132
- async maxDeposit(amount?: Web3Number): Promise<PositionInfo> {
135
+ protected async maxDeposit(amount?: Web3Number): Promise<PositionInfo[]> {
133
136
  const baseToken = this.config.baseToken;
134
137
  // todo for assets with some borrowing on Vesu, the yield wont
135
138
  // remain same as supply increases. So need to account for that.
136
139
 
137
140
  if (!amount) {
138
141
  // Return infinity for max deposit when no amount specified
139
- return {
140
- tokenInfo: baseToken,
142
+ return [{
141
143
  amount: new Web3Number('999999999999999999999999999', baseToken.decimals),
142
144
  usdValue: 999999999999999999999999999,
143
145
  remarks: "Max deposit (infinity)",
144
- apy: await this.getAPY({ asset: baseToken, isDebt: false }),
145
- protocol: this.protocol
146
- };
146
+ apy: await this.getAPY({ asset: baseToken, isDebt: false })
147
+ }];
147
148
  }
148
149
 
149
150
  // Return position info based on input amount
150
151
  const usdValue = await this.getUSDValue(baseToken, amount);
151
- return {
152
- tokenInfo: baseToken,
152
+ return [{
153
153
  amount,
154
154
  usdValue,
155
155
  remarks: "Deposit amount",
156
- apy: await this.getAPY({ asset: baseToken, isDebt: false }),
157
- protocol: this.protocol
158
- };
156
+ apy: await this.getAPY({ asset: baseToken, isDebt: false })
157
+ }];
159
158
  }
160
159
 
161
- async maxWithdraw(): Promise<PositionInfo> {
160
+ protected async maxWithdraw(): Promise<PositionInfo[]> {
162
161
  const baseToken = this.config.baseToken;
163
162
  const currentPosition = await this.getPosition({ asset: baseToken, isDebt: false });
164
163
 
165
164
  // Return the current position as max withdraw
166
- const usdValue = await this.getUSDValue(baseToken, currentPosition.amount);
167
- return {
168
- tokenInfo: baseToken,
169
- amount: currentPosition.amount,
165
+ const usdValue = await this.getUSDValue(baseToken, currentPosition);
166
+ return [{
167
+ amount: currentPosition,
170
168
  usdValue,
171
169
  remarks: "Max withdraw",
172
- apy: await this.getAPY({ asset: baseToken, isDebt: false }),
173
- protocol: this.protocol
174
- };
170
+ apy: await this.getAPY({ asset: baseToken, isDebt: false })
171
+ }];
175
172
  }
176
173
 
177
174
  protected _getDepositLeaf(): {
@@ -193,7 +190,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
193
190
  vTokenContract.toBigInt(), // spender
194
191
  ],
195
192
  sanitizer: SIMPLE_SANITIZER,
196
- id: `appr_dep_vtkn_${this.config.vTokenContract.shortString()}`
193
+ id: `approve_deposit_vtoken_${this.config.vTokenContract.address}`
197
194
  },
198
195
  // Deposit step
199
196
  {
@@ -203,7 +200,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
203
200
  this.config.vaultAllocator.toBigInt(),
204
201
  ],
205
202
  sanitizer: SIMPLE_SANITIZER,
206
- id: `deposit_vtoken_${this.config.vTokenContract.shortString()}`
203
+ id: `deposit_vtoken_${this.config.vTokenContract.address}`
207
204
  }
208
205
  ];
209
206
  }
@@ -227,7 +224,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
227
224
  this.config.vaultAllocator.toBigInt(),
228
225
  ],
229
226
  sanitizer: SIMPLE_SANITIZER,
230
- id: `withdraw_vtoken_${this.config.vTokenContract.shortString()}`
227
+ id: `withdraw_vtoken_${this.config.vTokenContract.address}`
231
228
  }
232
229
  ];
233
230
  }
@@ -244,7 +241,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
244
241
  }, sanitizer);
245
242
  return leaf;
246
243
  });
247
- return { leaves, callConstructor: this.getDepositCall.bind(this) as unknown as GenerateCallFn<DepositParams> };
244
+ return { leaves, callConstructor: this.createDepositCall.bind(this) as unknown as GenerateCallFn<DepositParams> };
248
245
  }
249
246
 
250
247
  getWithdrawAdapter(): AdapterLeafType<WithdrawParams> {
@@ -259,10 +256,10 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
259
256
  }, sanitizer);
260
257
  return leaf;
261
258
  });
262
- return { leaves, callConstructor: this.getWithdrawCall.bind(this) as unknown as GenerateCallFn<WithdrawParams> };
259
+ return { leaves, callConstructor: this.createWithdrawCall.bind(this) as unknown as GenerateCallFn<WithdrawParams> };
263
260
  }
264
261
 
265
- async getDepositCall(params: DepositParams): Promise<ManageCall[]> {
262
+ private createDepositCall(params: DepositParams): ManageCall[] {
266
263
  const baseToken = this.config.baseToken;
267
264
  const vTokenContract = this.config.vTokenContract;
268
265
 
@@ -299,7 +296,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
299
296
  ];
300
297
  }
301
298
 
302
- async getWithdrawCall(params: WithdrawParams): Promise<ManageCall[]> {
299
+ private createWithdrawCall(params: WithdrawParams): ManageCall[] {
303
300
  const vTokenContract = this.config.vTokenContract;
304
301
 
305
302
  const amount = params.amount;
@@ -322,8 +319,4 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
322
319
  }
323
320
  ];
324
321
  }
325
-
326
- getHealthFactor(): Promise<number> {
327
- return Promise.resolve(10);
328
- }
329
322
  }