@strkfarm/sdk 2.0.0-dev.28 → 2.0.0-dev.29

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.
@@ -2,8 +2,10 @@ import { Web3Number } from "@/dataTypes";
2
2
  import { ExtendedAdapter } from "@/strategies/universal-adapters/extended-adapter";
3
3
  import { VesuMultiplyAdapter } from "../../universal-adapters/vesu-multiply-adapter";
4
4
  import { CycleType, TransactionResult } from "../types/transaction-metadata";
5
- import { UsdcToUsdceAdapter } from "@/strategies/universal-adapters/usdc<>usdce-adapter";
6
- import { AssetMovementPlan } from "../vesu-extended-strategy";
5
+
6
+ /** Planned asset routing between protocols (concrete `Operations` subclasses define shape). */
7
+ export interface AssetMovementPlan {}
8
+
7
9
  export abstract class Operations {
8
10
 
9
11
  abstract computeAssetMovements(
@@ -38,7 +40,6 @@ export abstract class Operations {
38
40
  params: { from: string; to: string; amount: Web3Number, cycleType: CycleType },
39
41
  extendedAdapter: ExtendedAdapter,
40
42
  vesuAdapter: VesuMultiplyAdapter,
41
- usdcToUsdceAdapter: UsdcToUsdceAdapter,
42
43
  ): Promise<TransactionResult>;
43
44
  /**
44
45
  * Handle deposit operation.
@@ -63,7 +63,6 @@ import { ExtendedAdapter } from "../universal-adapters/extended-adapter";
63
63
  import { SVKStrategy } from "../svk-strategy";
64
64
  import { AvnuAdapter } from "../universal-adapters/avnu-adapter";
65
65
  import { SingleTokenInfo } from "../base-strategy";
66
- import { UsdcToUsdceAdapter } from "../universal-adapters/usdc<>usdce-adapter";
67
66
  import { VesuConfig } from "./utils/config.runtime";
68
67
 
69
68
  export interface VesuExtendedStrategySettings extends UniversalStrategySettings {
@@ -82,7 +81,6 @@ export class VesuExtendedMultiplierStrategy<
82
81
  > extends SVKStrategy<S> {
83
82
  public wbtcToken: TokenInfo;
84
83
  public usdcToken: TokenInfo;
85
- public usdceToken: TokenInfo;
86
84
  public readonly stateManager: ExtendedSVKVesuStateManager;
87
85
 
88
86
  constructor(
@@ -104,10 +102,6 @@ export class VesuExtendedMultiplierStrategy<
104
102
  // todo check if this can be generalized
105
103
  this.wbtcToken = Global.getDefaultTokens().find((token) => token.symbol === "WBTC")!;
106
104
  this.usdcToken = this.metadata.additionalInfo.borrowable_assets[0]!;
107
- this.usdceToken = Global.getDefaultTokens().find(
108
- (token) => token.symbol === "USDC.e",
109
- )!;
110
-
111
105
  this.stateManager = this._initializeStateManager();
112
106
  }
113
107
 
@@ -136,8 +130,8 @@ export class VesuExtendedMultiplierStrategy<
136
130
  extendedAdapter: extendedAdapterEntry.adapter as ExtendedAdapter,
137
131
  vaultAllocator: this.metadata.additionalInfo.vaultAllocator,
138
132
  walletAddress: this.metadata.additionalInfo.walletAddress,
139
- assetToken: Global.getDefaultTokens().find((token) => token.symbol === 'USDC')!, // ! TODO change to asset() latest
140
- usdceToken: this.usdceToken,
133
+ assetToken: this.asset(),
134
+ usdcToken: this.usdcToken,
141
135
  collateralToken: this.wbtcToken,
142
136
  limitBalanceBufferFactor: LIMIT_BALANCE,
143
137
  };
@@ -177,7 +171,7 @@ export class VesuExtendedMultiplierStrategy<
177
171
  return { collateralPrice, debtPrice };
178
172
  }
179
173
 
180
- async getVesuAdapter(): Promise<VesuMultiplyAdapter> {
174
+ async getVesuMultiplyAdapter(): Promise<VesuMultiplyAdapter> {
181
175
  const vesuAdapter = this.metadata.additionalInfo.adapters.find(
182
176
  (adapter) => adapter.adapter.name === VesuMultiplyAdapter.name,
183
177
  );
@@ -201,16 +195,16 @@ export class VesuExtendedMultiplierStrategy<
201
195
  return vesuModifyPositionAdapter.adapter as VesuModifyPositionAdapter;
202
196
  }
203
197
 
204
- async getUsdceTransferAdapter(): Promise<TokenTransferAdapter> {
205
- const usdceTransferAdapter = this.metadata.additionalInfo.adapters.find(
198
+ async getUsdcTransferAdapter(): Promise<TokenTransferAdapter> {
199
+ const usdcTransferAdapter = this.metadata.additionalInfo.adapters.find(
206
200
  (adapter) => adapter.adapter.name === TokenTransferAdapter.name,
207
201
  );
208
- if (!usdceTransferAdapter) {
202
+ if (!usdcTransferAdapter) {
209
203
  throw new Error(
210
- `${this.getTag()} Usdce transfer adapter not configured in metadata.`
204
+ `${this.getTag()} Usdc transfer adapter not configured in metadata.`
211
205
  );
212
206
  }
213
- return usdceTransferAdapter.adapter as TokenTransferAdapter;
207
+ return usdcTransferAdapter.adapter as TokenTransferAdapter;
214
208
  }
215
209
 
216
210
  async getAvnuAdapter(): Promise<AvnuAdapter> {
@@ -242,18 +236,6 @@ export class VesuExtendedMultiplierStrategy<
242
236
  return extendedAdapter.adapter as ExtendedAdapter;
243
237
  }
244
238
 
245
- async getUsdcToUsdceAdapter(): Promise<UsdcToUsdceAdapter> {
246
- const usdcToUsdceAdapter = this.metadata.additionalInfo.adapters.find(
247
- (adapter) => adapter.adapter.name === UsdcToUsdceAdapter.name,
248
- );
249
- if (!usdcToUsdceAdapter) {
250
- throw new Error(
251
- `${this.getTag()} UsdcToUsdce adapter not configured in metadata.`
252
- );
253
- }
254
- return usdcToUsdceAdapter.adapter as UsdcToUsdceAdapter;
255
- }
256
-
257
239
  /**
258
240
  * Creates an ExecutionService wired to this strategy's adapters and config.
259
241
  * Use with `stateManager.solve()` to get a SolveResult, then pass it to
@@ -269,36 +251,32 @@ export class VesuExtendedMultiplierStrategy<
269
251
  maxPriceDivergenceBps?: number;
270
252
  }): Promise<ExecutionService> {
271
253
  const [
272
- vesuAdapter,
254
+ vesuMultiplyAdapter,
273
255
  vesuModifyPositionAdapter,
274
- usdceTransferAdapter,
275
256
  extendedAdapter,
276
257
  avnuAdapter,
277
- usdcToUsdceAdapter,
258
+ usdcTransferAdapter,
278
259
  ] =
279
260
  await Promise.all([
280
- this.getVesuAdapter(),
261
+ this.getVesuMultiplyAdapter(),
281
262
  this.getVesuModifyPositionAdapter(),
282
- this.getUsdceTransferAdapter(),
283
263
  this.getExtendedAdapter(),
284
264
  this.getAvnuAdapter(),
285
- this.getUsdcToUsdceAdapter(),
265
+ this.getUsdcTransferAdapter(),
286
266
  ]);
287
267
 
288
268
  const executionConfig: ExecutionConfig = {
289
269
  networkConfig: this.config,
290
270
  pricer: this.pricer,
291
- vesuAdapter,
271
+ vesuMultiplyAdapter,
292
272
  vesuModifyPositionAdapter,
293
273
  extendedAdapter,
294
274
  avnuAdapter,
295
- usdcToUsdceAdapter,
275
+ usdcTransferAdapter,
296
276
  vaultAllocator: this.metadata.additionalInfo.vaultAllocator,
297
277
  walletAddress: this.metadata.additionalInfo.walletAddress,
298
- usdceTransferAdapter,
299
278
  wbtcToken: this.wbtcToken,
300
279
  usdcToken: this.usdcToken,
301
- usdceToken: this.usdceToken,
302
280
  getMerkleTree: () => this.getMerkleTree(),
303
281
  getManageCall: (proofs, manageCalls) => this.getManageCall(proofs, manageCalls),
304
282
  getBringLiquidityCall: (params) => this.getBringLiquidityCall(params),
@@ -325,9 +303,7 @@ export class VesuExtendedMultiplierStrategy<
325
303
  for (let adapter of this.metadata.additionalInfo.adapters) {
326
304
  let positions = await adapter.adapter.getPositions();
327
305
  if (positions && positions.length > 0) {
328
- const filteredPositions = positions.filter((position) => {
329
- return position.tokenInfo.address !== this.usdceToken.address;
330
- });
306
+ const filteredPositions = positions;
331
307
  allPositions.push(...filteredPositions);
332
308
  }
333
309
  }
@@ -539,7 +515,7 @@ export class VesuExtendedMultiplierStrategy<
539
515
  }
540
516
 
541
517
  /**
542
- * Fetches the operator wallet's current holdings for USDC.e, USDC, and WBTC,
518
+ * Fetches the operator wallet's current holdings for USDC and WBTC,
543
519
  * returning each token's balance and USD value.
544
520
  */
545
521
  async getWalletHoldings(): Promise<
@@ -549,33 +525,19 @@ export class VesuExtendedMultiplierStrategy<
549
525
  usdValue: number;
550
526
  }[]
551
527
  > {
552
- if (!this.usdceToken || !this.wbtcToken || !this.usdcToken) {
528
+ if (!this.wbtcToken || !this.usdcToken) {
553
529
  return [];
554
530
  }
555
531
  const walletAddress = this.metadata.additionalInfo.walletAddress;
556
- const usdceWalletBalance = await new ERC20(this.config).balanceOf(
557
- this.usdceToken.address,
558
- walletAddress,
559
- this.usdceToken.decimals,
560
- );
561
532
  const usdcWalletBalance = await new ERC20(this.config).balanceOf(
562
533
  this.usdcToken.address,
563
534
  walletAddress,
564
535
  this.usdcToken.decimals,
565
536
  );
566
- const price = await this.pricer.getPrice(this.usdceToken.symbol);
567
- const wbtcPrice = await this.pricer.getPrice(this.wbtcToken.symbol);
568
- const usdceUsdValue =
569
- Number(usdceWalletBalance.toFixed(this.usdceToken.decimals)) *
570
- price.price;
537
+ const price = await this.pricer.getPrice(this.usdcToken.symbol);
571
538
  const usdcUsdValue =
572
539
  Number(usdcWalletBalance.toFixed(this.usdcToken.decimals)) * price.price;
573
540
  return [
574
- {
575
- tokenInfo: this.usdceToken,
576
- amount: usdceWalletBalance,
577
- usdValue: usdceUsdValue,
578
- },
579
541
  {
580
542
  tokenInfo: this.usdcToken,
581
543
  amount: usdcWalletBalance,
@@ -586,7 +548,7 @@ export class VesuExtendedMultiplierStrategy<
586
548
  }
587
549
 
588
550
  /**
589
- * Configures all adapters (Vesu, Extended, Avnu, UsdcToUsdce, TokenTransfer)
551
+ * Configures all adapters (Vesu, Extended, Avnu, TokenTransfer)
590
552
  * and registers their leaf adapters on the vault settings. This is the central
591
553
  * wiring function that connects the strategy to its underlying protocol adapters.
592
554
  */
@@ -612,9 +574,6 @@ function getLooperSettings(
612
574
  const usdcToken = Global.getDefaultTokens().find(
613
575
  (token) => token.symbol === underlyingSymbol,
614
576
  )!;
615
- const usdceToken = Global.getDefaultTokens().find(
616
- (token) => token.symbol === "USDC.e",
617
- )!;
618
577
 
619
578
  const baseAdapterConfig: BaseAdapterConfig = {
620
579
  baseToken: wbtcToken,
@@ -640,18 +599,10 @@ function getLooperSettings(
640
599
  maximumExtendedPriceDifferenceForSwapClosing,
641
600
  });
642
601
 
643
- const usdcToUsdceAdapter = new UsdcToUsdceAdapter({
644
- ...baseAdapterConfig,
645
- supportedPositions: [
646
- { asset: usdcToken, isDebt: true },
647
- { asset: usdceToken, isDebt: false },
648
- ],
649
- });
650
-
651
602
  const extendedAdapter = new ExtendedAdapter({
652
603
  ...baseAdapterConfig,
653
604
  supportedPositions: [
654
- { asset: usdceToken, isDebt: false },
605
+ { asset: usdcToken, isDebt: false },
655
606
  ],
656
607
  vaultIdExtended: vaultIdExtended,
657
608
  extendedContract: EXTENDED_CONTRACT,
@@ -699,10 +650,10 @@ function getLooperSettings(
699
650
  });
700
651
 
701
652
  // Transfers USDC between the vault allocator (fromAddress) and the operator wallet (toAddress)
702
- const usdceTransferAdapter = new TokenTransferAdapter({
653
+ const usdcTransferAdapter = new TokenTransferAdapter({
703
654
  ...baseAdapterConfig,
704
- baseToken: usdceToken,
705
- supportedPositions: [{ asset: usdceToken, isDebt: false }],
655
+ baseToken: usdcToken,
656
+ supportedPositions: [{ asset: usdcToken, isDebt: false }],
706
657
  fromAddress: vaultSettings.vaultAllocator,
707
658
  toAddress: ContractAddr.from(vaultSettings.walletAddress),
708
659
  });
@@ -718,13 +669,8 @@ function getLooperSettings(
718
669
  });
719
670
 
720
671
  vaultSettings.adapters.push({
721
- id: `${usdceTransferAdapter.name}_${usdceToken.symbol}`,
722
- adapter: usdceTransferAdapter,
723
- });
724
-
725
- vaultSettings.adapters.push({
726
- id: `${usdcToUsdceAdapter.name}_${usdceToken.symbol}_${usdcToken.symbol}`,
727
- adapter: usdcToUsdceAdapter,
672
+ id: `${usdcTransferAdapter.name}_${usdcToken.symbol}`,
673
+ adapter: usdcTransferAdapter,
728
674
  });
729
675
 
730
676
  vaultSettings.adapters.push({
@@ -750,12 +696,10 @@ function getLooperSettings(
750
696
  vaultSettings.leafAdapters.push(() => vesuModifyPositionAdapter.getDepositLeaf());
751
697
  vaultSettings.leafAdapters.push(() => vesuModifyPositionAdapter.getWithdrawLeaf());
752
698
  vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
753
- vaultSettings.leafAdapters.push(() => usdcToUsdceAdapter.getDepositLeaf());
754
- vaultSettings.leafAdapters.push(() => usdcToUsdceAdapter.getWithdrawLeaf());
755
699
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
756
700
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
757
- vaultSettings.leafAdapters.push(() => usdceTransferAdapter.getDepositLeaf());
758
- vaultSettings.leafAdapters.push(() => usdceTransferAdapter.getWithdrawLeaf());
701
+ vaultSettings.leafAdapters.push(() => usdcTransferAdapter.getDepositLeaf());
702
+ vaultSettings.leafAdapters.push(() => usdcTransferAdapter.getWithdrawLeaf());
759
703
  vaultSettings.leafAdapters.push(
760
704
  commonAdapter
761
705
  .getApproveAdapter(
@@ -2,6 +2,7 @@ export * from '@/utils/logger';
2
2
  export * from './oz-merkle';
3
3
  export * from "./strategy-utils";
4
4
  export * from "./starknet-call-parser";
5
+ export * from "./health-factor-math";
5
6
 
6
7
  // Utility type to make all optional properties required
7
8
  export type RequiredFields<T> = {