@strkfarm/sdk 1.1.17 → 1.1.19

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.
@@ -28685,6 +28685,7 @@ ${r2}}` : "}", l2;
28685
28685
  getNoRiskTags: () => getNoRiskTags,
28686
28686
  getRiskColor: () => getRiskColor,
28687
28687
  getRiskExplaination: () => getRiskExplaination,
28688
+ getVesuSingletonAddress: () => getVesuSingletonAddress,
28688
28689
  highlightTextWithLinks: () => highlightTextWithLinks
28689
28690
  });
28690
28691
 
@@ -31217,23 +31218,27 @@ ${r2}}` : "}", l2;
31217
31218
  this.decimals = decimals;
31218
31219
  }
31219
31220
  toWei() {
31220
- return this.mul(10 ** this.decimals).toFixed(0);
31221
+ return super.mul(10 ** this.decimals).toFixed(0);
31221
31222
  }
31222
31223
  multipliedBy(value) {
31223
31224
  const _value = this.getStandardString(value);
31224
- return this.construct(this.mul(_value).toString(), this.decimals);
31225
+ return this.construct(super.mul(_value).toString(), this.decimals);
31225
31226
  }
31226
31227
  dividedBy(value) {
31227
31228
  const _value = this.getStandardString(value);
31228
- return this.construct(this.div(_value).toString(), this.decimals);
31229
+ return this.construct(super.dividedBy(_value).toString(), this.decimals);
31229
31230
  }
31230
31231
  plus(value) {
31231
- const _value = this.getStandardString(value);
31232
- return this.construct(this.add(_value).toString(), this.decimals);
31232
+ const rawValue = this.getStandardString(value);
31233
+ const thisBN = new import_bignumber.default(this.toString());
31234
+ const result = thisBN.plus(rawValue);
31235
+ return this.construct(result.toString(), this.decimals);
31233
31236
  }
31234
31237
  minus(n, base2) {
31235
- const _value = this.getStandardString(n);
31236
- return this.construct(super.minus(_value, base2).toString(), this.decimals);
31238
+ const rawValue = this.getStandardString(n);
31239
+ const thisBN = new import_bignumber.default(this.toString());
31240
+ const result = thisBN.minus(rawValue, base2);
31241
+ return this.construct(result.toString(), this.decimals);
31237
31242
  }
31238
31243
  construct(value, decimals) {
31239
31244
  return new this.constructor(value, decimals);
@@ -31251,10 +31256,13 @@ ${r2}}` : "}", l2;
31251
31256
  return Math.min(this.decimals, 18);
31252
31257
  }
31253
31258
  getStandardString(value) {
31254
- if (typeof value == "string") {
31259
+ if (typeof value === "string") {
31255
31260
  return value;
31256
31261
  }
31257
- return value.toFixed(this.maxToFixedDecimals());
31262
+ if (typeof value === "number") {
31263
+ return value.toString();
31264
+ }
31265
+ return import_bignumber.default.prototype.toString.call(value);
31258
31266
  }
31259
31267
  minimum(value) {
31260
31268
  const _value = new import_bignumber.default(value);
@@ -31265,12 +31273,10 @@ ${r2}}` : "}", l2;
31265
31273
  maximum(value) {
31266
31274
  const _value = new import_bignumber.default(value);
31267
31275
  const _valueMe = new import_bignumber.default(this.toString());
31268
- console.warn(`maximum: _value: ${_value.toString()}, _valueMe: ${_valueMe.toString()}`);
31269
31276
  const answer = _value.greaterThanOrEqualTo(_valueMe) ? _value : _valueMe;
31270
31277
  return this.construct(answer.toString(), this.decimals);
31271
31278
  }
31272
31279
  abs() {
31273
- console.warn(`abs: this: ${this}`);
31274
31280
  return this.construct(Math.abs(this.toNumber()).toFixed(12), this.decimals);
31275
31281
  }
31276
31282
  toI129() {
@@ -49759,7 +49765,7 @@ ${JSON.stringify(data, null, 2)}`;
49759
49765
  }
49760
49766
  async getPriceFromMyAPI(tokenSymbol) {
49761
49767
  logger2.verbose(`getPrice from redis: ${tokenSymbol}`);
49762
- const endpoint = "https://cache-server-t2me.onrender.com";
49768
+ const endpoint = "https://proxy.api.troves.fi";
49763
49769
  const url = `${endpoint}/api/price/${tokenSymbol}`;
49764
49770
  const priceInfoRes = await fetch(url);
49765
49771
  const priceInfo = await priceInfoRes.json();
@@ -55566,6 +55572,9 @@ ${JSON.stringify(data, null, 2)}`;
55566
55572
  async withdrawCall(amountInfo, receiver, owner) {
55567
55573
  throw new Error("Not implemented");
55568
55574
  }
55575
+ async getVaultPositions() {
55576
+ throw new Error("Not implemented");
55577
+ }
55569
55578
  };
55570
55579
 
55571
55580
  // src/node/headless.browser.ts
@@ -55581,7 +55590,7 @@ ${JSON.stringify(data, null, 2)}`;
55581
55590
  sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
55582
55591
  }];
55583
55592
  var ENDPOINTS = {
55584
- VESU_BASE: "https://cache-server-t2me.onrender.com/vesu"
55593
+ VESU_BASE: "https://proxy.api.troves.fi/vesu-staging"
55585
55594
  };
55586
55595
 
55587
55596
  // src/modules/harvests.ts
@@ -67297,6 +67306,49 @@ ${JSON.stringify(data, null, 2)}`;
67297
67306
  const tick = Math.floor(value / tickSpacing) * tickSpacing;
67298
67307
  return this.tickToi129(tick);
67299
67308
  }
67309
+ async getVaultPositions() {
67310
+ const tvlInfo = await this.getTVL();
67311
+ const fees = await this.getUncollectedFees();
67312
+ const unusedBalance = await this.unusedBalances();
67313
+ return [
67314
+ {
67315
+ amount: tvlInfo.token0.amount,
67316
+ usdValue: tvlInfo.token0.usdValue,
67317
+ token: tvlInfo.token0.tokenInfo,
67318
+ remarks: `Liquidity in Ekubo`
67319
+ },
67320
+ {
67321
+ amount: fees.token0.amount,
67322
+ usdValue: fees.token0.usdValue,
67323
+ token: fees.token0.tokenInfo,
67324
+ remarks: "Uncollected Fees in Ekubo"
67325
+ },
67326
+ {
67327
+ amount: unusedBalance.token0.amount,
67328
+ usdValue: unusedBalance.token0.usdValue,
67329
+ token: unusedBalance.token0.tokenInfo,
67330
+ remarks: "Unused Balance in the Vault"
67331
+ },
67332
+ {
67333
+ amount: tvlInfo.token1.amount,
67334
+ usdValue: tvlInfo.token1.usdValue,
67335
+ token: tvlInfo.token1.tokenInfo,
67336
+ remarks: "Liquidity in Ekubo"
67337
+ },
67338
+ {
67339
+ amount: fees.token1.amount,
67340
+ usdValue: fees.token1.usdValue,
67341
+ token: fees.token1.tokenInfo,
67342
+ remarks: "Uncollected Fees in Ekubo"
67343
+ },
67344
+ {
67345
+ amount: unusedBalance.token1.amount,
67346
+ usdValue: unusedBalance.token1.usdValue,
67347
+ token: unusedBalance.token1.tokenInfo,
67348
+ remarks: "Unused Balance in the Vault"
67349
+ }
67350
+ ];
67351
+ }
67300
67352
  async getPoolKey(blockIdentifier = "latest") {
67301
67353
  if (this.poolKey) {
67302
67354
  return this.poolKey;
@@ -70452,9 +70504,10 @@ ${JSON.stringify(data, null, 2)}`;
70452
70504
 
70453
70505
  // src/strategies/universal-adapters/adapter-utils.ts
70454
70506
  var SIMPLE_SANITIZER = ContractAddr.from("0x5a2e3ceb3da368b983a8717898427ab7b6daf04014b70f321e777f9aad940b4");
70455
- var SIMPLE_SANITIZER_V2 = ContractAddr.from("0x5643d54da70a471cd2b6fa37f52ea7a13cc3f3910689a839f8490a663d2208a");
70507
+ var SIMPLE_SANITIZER_V2 = ContractAddr.from("0x7b6f98311af8aa425278570e62abf523e6462eaa01a38c1feab9b2f416492e2");
70456
70508
  var PRICE_ROUTER = ContractAddr.from("0x05e83Fa38D791d2dba8E6f487758A9687FfEe191A6Cf8a6c5761ab0a110DB837");
70457
70509
  var AVNU_MIDDLEWARE = ContractAddr.from("0x4a7972ed3f5d1e74a6d6c4a8f467666953d081c8f2270390cc169d50d17cb0d");
70510
+ var VESU_SINGLETON = ContractAddr.from("0x000d8d6dfec4d33bfb6895de9f3852143a17c6f92fd2a21da3d6924d34870160");
70458
70511
  function toBigInt3(value) {
70459
70512
  if (typeof value === "string") {
70460
70513
  return BigInt(value);
@@ -73385,517 +73438,2403 @@ ${JSON.stringify(data, null, 2)}`;
73385
73438
  }
73386
73439
  ];
73387
73440
 
73388
- // src/strategies/universal-adapters/vesu-adapter.ts
73389
- var VesuAmountType = /* @__PURE__ */ ((VesuAmountType2) => {
73390
- VesuAmountType2[VesuAmountType2["Delta"] = 0] = "Delta";
73391
- VesuAmountType2[VesuAmountType2["Target"] = 1] = "Target";
73392
- return VesuAmountType2;
73393
- })(VesuAmountType || {});
73394
- var VesuAmountDenomination = /* @__PURE__ */ ((VesuAmountDenomination2) => {
73395
- VesuAmountDenomination2[VesuAmountDenomination2["Native"] = 0] = "Native";
73396
- VesuAmountDenomination2[VesuAmountDenomination2["Assets"] = 1] = "Assets";
73397
- return VesuAmountDenomination2;
73398
- })(VesuAmountDenomination || {});
73399
- function getVesuMultiplyParams(isIncrease, params) {
73400
- if (isIncrease) {
73401
- const _params2 = params;
73402
- return {
73403
- action: new CairoCustomEnum({ IncreaseLever: {
73404
- pool_id: _params2.pool_id.toBigInt(),
73405
- collateral_asset: _params2.collateral_asset.toBigInt(),
73406
- debt_asset: _params2.debt_asset.toBigInt(),
73407
- user: _params2.user.toBigInt(),
73408
- add_margin: BigInt(_params2.add_margin.toWei()),
73409
- margin_swap: _params2.margin_swap.map((swap) => ({
73410
- route: swap.route.map((route) => ({
73411
- pool_key: {
73412
- token0: route.pool_key.token0.toBigInt(),
73413
- token1: route.pool_key.token1.toBigInt(),
73414
- fee: route.pool_key.fee,
73415
- tick_spacing: route.pool_key.tick_spacing,
73416
- extension: BigInt(num_exports.hexToDecimalString(route.pool_key.extension))
73417
- },
73418
- sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
73419
- skip_ahead: BigInt(100)
73420
- })),
73421
- token_amount: {
73422
- token: swap.token_amount.token.toBigInt(),
73423
- amount: swap.token_amount.amount.toI129()
73424
- }
73425
- })),
73426
- margin_swap_limit_amount: BigInt(_params2.margin_swap_limit_amount.toWei()),
73427
- lever_swap: _params2.lever_swap.map((swap) => ({
73428
- route: swap.route.map((route) => ({
73429
- pool_key: {
73430
- token0: route.pool_key.token0.toBigInt(),
73431
- token1: route.pool_key.token1.toBigInt(),
73432
- fee: route.pool_key.fee,
73433
- tick_spacing: route.pool_key.tick_spacing,
73434
- extension: BigInt(num_exports.hexToDecimalString(route.pool_key.extension))
73435
- },
73436
- sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
73437
- skip_ahead: BigInt(100)
73438
- })),
73439
- token_amount: {
73440
- token: swap.token_amount.token.toBigInt(),
73441
- amount: swap.token_amount.amount.toI129()
73442
- }
73443
- })),
73444
- lever_swap_limit_amount: BigInt(_params2.lever_swap_limit_amount.toWei())
73445
- } })
73446
- };
73447
- }
73448
- const _params = params;
73449
- return {
73450
- action: new CairoCustomEnum({ DecreaseLever: {
73451
- pool_id: _params.pool_id.toBigInt(),
73452
- collateral_asset: _params.collateral_asset.toBigInt(),
73453
- debt_asset: _params.debt_asset.toBigInt(),
73454
- user: _params.user.toBigInt(),
73455
- sub_margin: BigInt(_params.sub_margin.toWei()),
73456
- recipient: _params.recipient.toBigInt(),
73457
- lever_swap: _params.lever_swap.map((swap) => ({
73458
- route: swap.route.map((route) => ({
73459
- pool_key: {
73460
- token0: route.pool_key.token0.toBigInt(),
73461
- token1: route.pool_key.token1.toBigInt(),
73462
- fee: route.pool_key.fee,
73463
- tick_spacing: route.pool_key.tick_spacing,
73464
- extension: ContractAddr.from(route.pool_key.extension).toBigInt()
73465
- },
73466
- sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
73467
- skip_ahead: BigInt(route.skip_ahead.toWei())
73468
- })),
73469
- token_amount: {
73470
- token: swap.token_amount.token.toBigInt(),
73471
- amount: swap.token_amount.amount.toI129()
73472
- }
73473
- })),
73474
- lever_swap_limit_amount: BigInt(_params.lever_swap_limit_amount.toWei()),
73475
- lever_swap_weights: _params.lever_swap_weights.map((weight) => BigInt(weight.toWei())),
73476
- withdraw_swap: _params.withdraw_swap.map((swap) => ({
73477
- route: swap.route.map((route) => ({
73478
- pool_key: {
73479
- token0: route.pool_key.token0.toBigInt(),
73480
- token1: route.pool_key.token1.toBigInt(),
73481
- fee: route.pool_key.fee,
73482
- tick_spacing: route.pool_key.tick_spacing,
73483
- extension: ContractAddr.from(route.pool_key.extension).toBigInt()
73484
- },
73485
- sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
73486
- skip_ahead: BigInt(route.skip_ahead.toWei())
73487
- })),
73488
- token_amount: {
73489
- token: swap.token_amount.token.toBigInt(),
73490
- amount: swap.token_amount.amount.toI129()
73491
- }
73492
- })),
73493
- withdraw_swap_limit_amount: BigInt(_params.withdraw_swap_limit_amount.toWei()),
73494
- withdraw_swap_weights: _params.withdraw_swap_weights.map((weight) => BigInt(weight.toWei())),
73495
- close_position: _params.close_position
73496
- } })
73497
- };
73498
- }
73499
- var VesuPools = {
73500
- Genesis: ContractAddr.from("0x4dc4f0ca6ea4961e4c8373265bfd5317678f4fe374d76f3fd7135f57763bf28"),
73501
- Re7xSTRK: ContractAddr.from("0x052fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161")
73502
- };
73503
- var VesuAdapter = class _VesuAdapter extends BaseAdapter {
73504
- constructor(config3) {
73505
- super();
73506
- this.VESU_SINGLETON = ContractAddr.from("0x000d8d6dfec4d33bfb6895de9f3852143a17c6f92fd2a21da3d6924d34870160");
73507
- this.VESU_MULTIPLY = ContractAddr.from("0x3630f1f8e5b8f5c4c4ae9b6620f8a570ae55cddebc0276c37550e7c118edf67");
73508
- this.getModifyPosition = () => {
73509
- const positionData = [0n];
73510
- const packedArguments = [
73511
- toBigInt3(this.config.poolId.toString()),
73512
- // pool id
73513
- toBigInt3(this.config.collateral.address.toString()),
73514
- // collateral
73515
- toBigInt3(this.config.debt.address.toString()),
73516
- // debt
73517
- toBigInt3(this.config.vaultAllocator.toString()),
73518
- // vault allocator
73519
- toBigInt3(positionData.length),
73520
- ...positionData
73521
- ];
73522
- const output = this.constructSimpleLeafData({
73523
- id: this.config.id,
73524
- target: this.VESU_SINGLETON,
73525
- method: "modify_position",
73526
- packedArguments
73527
- });
73528
- return { leaf: output, callConstructor: this.getModifyPositionCall.bind(this) };
73529
- };
73530
- this.getModifyPositionCall = (params) => {
73531
- const _collateral = {
73532
- amount_type: this.formatAmountTypeEnum(params.collateralAmount.amount_type),
73533
- denomination: this.formatAmountDenominationEnum(params.collateralAmount.denomination),
73534
- value: {
73535
- abs: uint256_exports.bnToUint256(params.collateralAmount.value.abs.toWei()),
73536
- is_negative: params.collateralAmount.value.abs.isZero() ? false : params.collateralAmount.value.is_negative
73537
- }
73538
- };
73539
- logger2.verbose(`VesuAdapter::ConstructingModify::Collateral::${JSON.stringify(_collateral)}`);
73540
- const _debt = {
73541
- amount_type: this.formatAmountTypeEnum(params.debtAmount.amount_type),
73542
- denomination: this.formatAmountDenominationEnum(params.debtAmount.denomination),
73543
- value: {
73544
- abs: uint256_exports.bnToUint256(params.debtAmount.value.abs.toWei()),
73545
- is_negative: params.debtAmount.value.abs.isZero() ? false : params.debtAmount.value.is_negative
73546
- }
73547
- };
73548
- logger2.verbose(`VesuAdapter::ConstructingModify::Debt::${JSON.stringify(_debt)}`);
73549
- const singletonContract = new Contract({ abi: vesu_singleton_abi_default, address: this.VESU_SINGLETON.toString(), providerOrAccount: new RpcProvider2({ nodeUrl: "" }) });
73550
- const call = singletonContract.populate("modify_position", {
73551
- params: {
73552
- pool_id: this.config.poolId.toBigInt(),
73553
- collateral_asset: this.config.collateral.address.toBigInt(),
73554
- debt_asset: this.config.debt.address.toBigInt(),
73555
- user: this.config.vaultAllocator.toBigInt(),
73556
- collateral: _collateral,
73557
- debt: _debt,
73558
- data: [0]
73559
- }
73560
- });
73561
- return {
73562
- sanitizer: SIMPLE_SANITIZER,
73563
- call: {
73564
- contractAddress: this.VESU_SINGLETON,
73565
- selector: hash_exports.getSelectorFromName("modify_position"),
73566
- calldata: [
73567
- ...call.calldata
73568
- ]
73569
- }
73570
- };
73571
- };
73572
- this.getMultiplyAdapter = () => {
73573
- const packedArguments = [
73574
- toBigInt3(this.config.poolId.toString()),
73575
- // pool id
73576
- toBigInt3(this.config.collateral.address.toString()),
73577
- // collateral
73578
- toBigInt3(this.config.debt.address.toString()),
73579
- // debt
73580
- toBigInt3(this.config.vaultAllocator.toString())
73581
- // vault allocator
73582
- ];
73583
- const output = this.constructSimpleLeafData({
73584
- id: this.config.id,
73585
- target: this.VESU_MULTIPLY,
73586
- method: "modify_lever",
73587
- packedArguments
73588
- }, SIMPLE_SANITIZER_V2);
73589
- return { leaf: output, callConstructor: this.getMultiplyCall.bind(this) };
73590
- };
73591
- this.getMultiplyCall = (params) => {
73592
- const isIncrease = params.isIncrease;
73593
- const multiplyParams = isIncrease ? params.increaseParams : params.decreaseParams;
73594
- if (!multiplyParams) {
73595
- throw new Error("Multiply params are not provided");
73596
- }
73597
- const multiplyContract = new Contract({ abi: vesu_multiple_abi_default, address: this.VESU_MULTIPLY.toString(), providerOrAccount: new RpcProvider2({ nodeUrl: "" }) });
73598
- const call = multiplyContract.populate("modify_lever", {
73599
- modify_lever_params: getVesuMultiplyParams(isIncrease, {
73600
- ...multiplyParams,
73601
- user: this.config.vaultAllocator,
73602
- pool_id: this.config.poolId,
73603
- collateral_asset: this.config.collateral.address,
73604
- debt_asset: this.config.debt.address,
73605
- recipient: this.config.vaultAllocator
73606
- })
73607
- });
73608
- return {
73609
- sanitizer: SIMPLE_SANITIZER_V2,
73610
- call: {
73611
- contractAddress: this.VESU_MULTIPLY,
73612
- selector: hash_exports.getSelectorFromName("modify_lever"),
73613
- calldata: [
73614
- ...call.calldata
73615
- ]
73616
- }
73617
- };
73618
- };
73619
- this.getVesuModifyDelegationAdapter = (id) => {
73620
- return () => {
73621
- const packedArguments = [
73622
- toBigInt3(this.config.poolId.toString()),
73623
- // pool id
73624
- toBigInt3(this.VESU_MULTIPLY.toString())
73625
- // vault allocator
73626
- ];
73627
- const output = this.constructSimpleLeafData({
73628
- id,
73629
- target: this.VESU_SINGLETON,
73630
- method: "modify_delegation",
73631
- packedArguments
73632
- }, SIMPLE_SANITIZER_V2);
73633
- return { leaf: output, callConstructor: this.getVesuModifyDelegationCall.bind(this) };
73634
- };
73635
- };
73636
- this.getVesuModifyDelegationCall = (params) => {
73637
- const singletonContract = new Contract({ abi: vesu_singleton_abi_default, address: this.VESU_SINGLETON.toString(), providerOrAccount: new RpcProvider2({ nodeUrl: "" }) });
73638
- const call = singletonContract.populate("modify_delegation", {
73639
- pool_id: this.config.poolId.toBigInt(),
73640
- delegatee: this.VESU_MULTIPLY.toBigInt(),
73641
- delegation: params.delegation
73642
- });
73643
- return {
73644
- sanitizer: SIMPLE_SANITIZER_V2,
73645
- call: {
73646
- contractAddress: this.VESU_SINGLETON,
73647
- selector: hash_exports.getSelectorFromName("modify_delegation"),
73648
- calldata: [
73649
- ...call.calldata
73650
- ]
73651
- }
73652
- };
73653
- };
73654
- this.getDefispringRewardsAdapter = (id) => {
73655
- return () => {
73656
- const packedArguments = [];
73657
- const output = {
73658
- id: BigInt(num_exports.getDecimalString(shortString_exports.encodeShortString(id))),
73659
- readableId: id,
73660
- data: [
73661
- SIMPLE_SANITIZER.toBigInt(),
73662
- // sanitizer address
73663
- VESU_REWARDS_CONTRACT.toBigInt(),
73664
- // contract
73665
- toBigInt3(hash_exports.getSelectorFromName("claim")),
73666
- // method name
73667
- BigInt(packedArguments.length),
73668
- ...packedArguments
73669
- ]
73670
- };
73671
- return { leaf: output, callConstructor: this.getDefiSpringClaimCall().bind(this) };
73672
- };
73673
- };
73674
- this.getDefiSpringClaimCall = () => {
73675
- return (params) => ({
73676
- sanitizer: SIMPLE_SANITIZER,
73677
- call: {
73678
- contractAddress: VESU_REWARDS_CONTRACT,
73679
- selector: hash_exports.getSelectorFromName("claim"),
73680
- calldata: [
73681
- BigInt(params.amount.toWei()),
73682
- BigInt(params.proofs.length),
73683
- ...params.proofs.map((proof) => BigInt(num_exports.hexToDecimalString(proof)))
73684
- ]
73685
- }
73686
- });
73687
- };
73688
- this.config = config3;
73689
- }
73690
- static getDefaultModifyPositionCallParams(params) {
73691
- return {
73692
- collateralAmount: {
73693
- amount_type: 0 /* Delta */,
73694
- denomination: 1 /* Assets */,
73695
- value: {
73696
- abs: params.collateralAmount,
73697
- is_negative: !params.isAddCollateral
73698
- }
73699
- },
73700
- debtAmount: {
73701
- amount_type: 0 /* Delta */,
73702
- denomination: 1 /* Assets */,
73703
- value: {
73704
- abs: params.debtAmount,
73705
- is_negative: !params.isBorrow
73706
- }
73707
- }
73708
- };
73709
- }
73710
- formatAmountTypeEnum(amountType) {
73711
- switch (amountType) {
73712
- case 0 /* Delta */:
73713
- return new CairoCustomEnum({ Delta: {} });
73714
- case 1 /* Target */:
73715
- return new CairoCustomEnum({ Target: {} });
73716
- }
73717
- throw new Error(`Unknown VesuAmountType: ${amountType}`);
73718
- }
73719
- formatAmountDenominationEnum(denomination) {
73720
- switch (denomination) {
73721
- case 0 /* Native */:
73722
- return new CairoCustomEnum({ Native: {} });
73723
- case 1 /* Assets */:
73724
- return new CairoCustomEnum({ Assets: {} });
73725
- }
73726
- throw new Error(`Unknown VesuAmountDenomination: ${denomination}`);
73727
- }
73728
- getVesuSingletonContract(config3) {
73729
- return new Contract({ abi: vesu_singleton_abi_default, address: this.VESU_SINGLETON.address, providerOrAccount: config3.provider });
73730
- }
73731
- async getLTVConfig(config3) {
73732
- const CACHE_KEY = "ltv_config";
73733
- const cacheData = this.getCache(CACHE_KEY);
73734
- if (cacheData) {
73735
- return cacheData;
73736
- }
73737
- const output = await this.getVesuSingletonContract(config3).call("ltv_config", [this.config.poolId.address, this.config.collateral.address.address, this.config.debt.address.address]);
73738
- this.setCache(CACHE_KEY, Number(output.max_ltv) / 1e18, 3e5);
73739
- return this.getCache(CACHE_KEY);
73740
- }
73741
- async getPositions(config3) {
73742
- if (!this.pricer) {
73743
- throw new Error("Pricer is not initialized");
73744
- }
73745
- const CACHE_KEY = "positions";
73746
- const cacheData = this.getCache(CACHE_KEY);
73747
- if (cacheData) {
73748
- return cacheData;
73749
- }
73750
- const output = await this.getVesuSingletonContract(config3).call("position_unsafe", [
73751
- this.config.poolId.address,
73752
- this.config.collateral.address.address,
73753
- this.config.debt.address.address,
73754
- this.config.vaultAllocator.address
73755
- ]);
73756
- const token1Price = await this.pricer.getPrice(this.config.collateral.symbol);
73757
- const token2Price = await this.pricer.getPrice(this.config.debt.symbol);
73758
- const collateralAmount = Web3Number.fromWei(output["1"].toString(), this.config.collateral.decimals);
73759
- const debtAmount = Web3Number.fromWei(output["2"].toString(), this.config.debt.decimals);
73760
- const value = [{
73761
- amount: collateralAmount,
73762
- token: this.config.collateral,
73763
- usdValue: collateralAmount.multipliedBy(token1Price.price).toNumber(),
73764
- remarks: "Collateral"
73765
- }, {
73766
- amount: debtAmount,
73767
- token: this.config.debt,
73768
- usdValue: debtAmount.multipliedBy(token2Price.price).toNumber(),
73769
- remarks: "Debt"
73770
- }];
73771
- this.setCache(CACHE_KEY, value, 6e4);
73772
- return value;
73773
- }
73774
- async getCollateralization(config3) {
73775
- if (!this.pricer) {
73776
- throw new Error("Pricer is not initialized");
73777
- }
73778
- const CACHE_KEY = "collateralization";
73779
- const cacheData = this.getCache(CACHE_KEY);
73780
- if (cacheData) {
73781
- return cacheData;
73782
- }
73783
- const output = await this.getVesuSingletonContract(config3).call("check_collateralization_unsafe", [
73784
- this.config.poolId.address,
73785
- this.config.collateral.address.address,
73786
- this.config.debt.address.address,
73787
- this.config.vaultAllocator.address
73788
- ]);
73789
- const collateralAmount = Web3Number.fromWei(output["1"].toString(), 18);
73790
- const debtAmount = Web3Number.fromWei(output["2"].toString(), 18);
73791
- const value = [{
73792
- token: this.config.collateral,
73793
- usdValue: collateralAmount.toNumber(),
73794
- remarks: "Collateral"
73795
- }, {
73796
- token: this.config.debt,
73797
- usdValue: debtAmount.toNumber(),
73798
- remarks: "Debt"
73799
- }];
73800
- this.setCache(CACHE_KEY, value, 6e4);
73801
- return value;
73802
- }
73803
- async getAssetPrices() {
73804
- const collateralizationProm = this.getCollateralization(this.networkConfig);
73805
- const positionsProm = this.getPositions(this.networkConfig);
73806
- const ltvProm = this.getLTVConfig(this.networkConfig);
73807
- const output = await Promise.all([collateralizationProm, positionsProm, ltvProm]);
73808
- const [collateralization, positions, ltv] = output;
73809
- const collateralTokenAmount = positions[0].amount;
73810
- const collateralUSDAmount = collateralization[0].usdValue;
73811
- const collateralPrice = collateralUSDAmount / collateralTokenAmount.toNumber();
73812
- const debtTokenAmount = positions[1].amount;
73813
- const debtUSDAmount = collateralization[1].usdValue;
73814
- const debtPrice = debtUSDAmount / debtTokenAmount.toNumber();
73815
- return {
73816
- collateralTokenAmount,
73817
- collateralUSDAmount,
73818
- collateralPrice,
73819
- debtTokenAmount,
73820
- debtUSDAmount,
73821
- debtPrice,
73822
- ltv
73823
- };
73824
- }
73825
- async getHealthFactor() {
73826
- const ltv = await this.getLTVConfig(this.networkConfig);
73827
- const collateralisation = await this.getCollateralization(this.networkConfig);
73828
- return collateralisation[0].usdValue * ltv / collateralisation[1].usdValue;
73829
- }
73830
- static async getVesuPools(retry = 0) {
73831
- const CACHE_KEY = "VESU_POOLS";
73832
- const cacheValue = Global.getGlobalCache(CACHE_KEY);
73833
- if (cacheValue) {
73834
- return cacheValue;
73835
- }
73836
- let isErrorPoolsAPI = false;
73837
- let pools = [];
73838
- try {
73839
- const data = await getAPIUsingHeadlessBrowser(
73840
- `${ENDPOINTS.VESU_BASE}/pools`
73841
- );
73842
- pools = data.data;
73843
- for (const pool of vesu_pools_default.data) {
73844
- const found = pools.find((d) => d.id === pool.id);
73845
- if (!found) {
73846
- logger2.verbose(`VesuRebalance: pools: ${JSON.stringify(pools)}`);
73847
- logger2.verbose(
73848
- `VesuRebalance: Pool ${pool.id} not found in Vesu API, using hardcoded data`
73849
- );
73850
- throw new Error(`pool not found [sanity check]: ${pool.id}`);
73851
- }
73852
- }
73853
- } catch (e) {
73854
- logger2.error(
73855
- `${_VesuAdapter.name}: Error fetching pools for retry ${retry}`,
73856
- e
73857
- );
73858
- isErrorPoolsAPI = true;
73859
- if (retry < 10) {
73860
- await new Promise((resolve) => setTimeout(resolve, 5e3 * (retry + 1)));
73861
- return await this.getVesuPools(retry + 1);
73862
- }
73863
- }
73864
- Global.setGlobalCache(CACHE_KEY, { pools, isErrorPoolsAPI }, 3e5);
73865
- return { pools, isErrorPoolsAPI };
73866
- }
73867
- };
73868
-
73869
- // src/data/universal-vault.abi.json
73870
- var universal_vault_abi_default = [
73441
+ // src/data/vesu-pool-v2.abi.json
73442
+ var vesu_pool_v2_abi_default = [
73871
73443
  {
73872
73444
  type: "impl",
73873
- name: "UpgradeableImpl",
73874
- interface_name: "openzeppelin_upgrades::interface::IUpgradeable"
73445
+ name: "PoolImpl",
73446
+ interface_name: "vesu::pool::IPool"
73875
73447
  },
73876
73448
  {
73877
- type: "interface",
73878
- name: "openzeppelin_upgrades::interface::IUpgradeable",
73879
- items: [
73449
+ type: "struct",
73450
+ name: "core::integer::u256",
73451
+ members: [
73880
73452
  {
73881
- type: "function",
73882
- name: "upgrade",
73883
- inputs: [
73884
- {
73885
- name: "new_class_hash",
73886
- type: "core::starknet::class_hash::ClassHash"
73887
- }
73888
- ],
73889
- outputs: [],
73890
- state_mutability: "external"
73453
+ name: "low",
73454
+ type: "core::integer::u128"
73455
+ },
73456
+ {
73457
+ name: "high",
73458
+ type: "core::integer::u128"
73891
73459
  }
73892
73460
  ]
73893
73461
  },
73894
73462
  {
73895
- type: "impl",
73896
- name: "VaultMetadataImpl",
73897
- interface_name: "openzeppelin_token::erc20::interface::IERC20Metadata"
73898
- },
73463
+ type: "enum",
73464
+ name: "core::bool",
73465
+ variants: [
73466
+ {
73467
+ name: "False",
73468
+ type: "()"
73469
+ },
73470
+ {
73471
+ name: "True",
73472
+ type: "()"
73473
+ }
73474
+ ]
73475
+ },
73476
+ {
73477
+ type: "struct",
73478
+ name: "vesu::data_model::AssetConfig",
73479
+ members: [
73480
+ {
73481
+ name: "total_collateral_shares",
73482
+ type: "core::integer::u256"
73483
+ },
73484
+ {
73485
+ name: "total_nominal_debt",
73486
+ type: "core::integer::u256"
73487
+ },
73488
+ {
73489
+ name: "reserve",
73490
+ type: "core::integer::u256"
73491
+ },
73492
+ {
73493
+ name: "max_utilization",
73494
+ type: "core::integer::u256"
73495
+ },
73496
+ {
73497
+ name: "floor",
73498
+ type: "core::integer::u256"
73499
+ },
73500
+ {
73501
+ name: "scale",
73502
+ type: "core::integer::u256"
73503
+ },
73504
+ {
73505
+ name: "is_legacy",
73506
+ type: "core::bool"
73507
+ },
73508
+ {
73509
+ name: "last_updated",
73510
+ type: "core::integer::u64"
73511
+ },
73512
+ {
73513
+ name: "last_rate_accumulator",
73514
+ type: "core::integer::u256"
73515
+ },
73516
+ {
73517
+ name: "last_full_utilization_rate",
73518
+ type: "core::integer::u256"
73519
+ },
73520
+ {
73521
+ name: "fee_rate",
73522
+ type: "core::integer::u256"
73523
+ },
73524
+ {
73525
+ name: "fee_shares",
73526
+ type: "core::integer::u256"
73527
+ }
73528
+ ]
73529
+ },
73530
+ {
73531
+ type: "struct",
73532
+ name: "vesu::data_model::AssetPrice",
73533
+ members: [
73534
+ {
73535
+ name: "value",
73536
+ type: "core::integer::u256"
73537
+ },
73538
+ {
73539
+ name: "is_valid",
73540
+ type: "core::bool"
73541
+ }
73542
+ ]
73543
+ },
73544
+ {
73545
+ type: "struct",
73546
+ name: "vesu::data_model::Position",
73547
+ members: [
73548
+ {
73549
+ name: "collateral_shares",
73550
+ type: "core::integer::u256"
73551
+ },
73552
+ {
73553
+ name: "nominal_debt",
73554
+ type: "core::integer::u256"
73555
+ }
73556
+ ]
73557
+ },
73558
+ {
73559
+ type: "struct",
73560
+ name: "vesu::data_model::Context",
73561
+ members: [
73562
+ {
73563
+ name: "collateral_asset",
73564
+ type: "core::starknet::contract_address::ContractAddress"
73565
+ },
73566
+ {
73567
+ name: "debt_asset",
73568
+ type: "core::starknet::contract_address::ContractAddress"
73569
+ },
73570
+ {
73571
+ name: "collateral_asset_config",
73572
+ type: "vesu::data_model::AssetConfig"
73573
+ },
73574
+ {
73575
+ name: "debt_asset_config",
73576
+ type: "vesu::data_model::AssetConfig"
73577
+ },
73578
+ {
73579
+ name: "collateral_asset_price",
73580
+ type: "vesu::data_model::AssetPrice"
73581
+ },
73582
+ {
73583
+ name: "debt_asset_price",
73584
+ type: "vesu::data_model::AssetPrice"
73585
+ },
73586
+ {
73587
+ name: "max_ltv",
73588
+ type: "core::integer::u64"
73589
+ },
73590
+ {
73591
+ name: "user",
73592
+ type: "core::starknet::contract_address::ContractAddress"
73593
+ },
73594
+ {
73595
+ name: "position",
73596
+ type: "vesu::data_model::Position"
73597
+ }
73598
+ ]
73599
+ },
73600
+ {
73601
+ type: "struct",
73602
+ name: "alexandria_math::i257::i257",
73603
+ members: [
73604
+ {
73605
+ name: "abs",
73606
+ type: "core::integer::u256"
73607
+ },
73608
+ {
73609
+ name: "is_negative",
73610
+ type: "core::bool"
73611
+ }
73612
+ ]
73613
+ },
73614
+ {
73615
+ type: "enum",
73616
+ name: "vesu::data_model::AmountDenomination",
73617
+ variants: [
73618
+ {
73619
+ name: "Native",
73620
+ type: "()"
73621
+ },
73622
+ {
73623
+ name: "Assets",
73624
+ type: "()"
73625
+ }
73626
+ ]
73627
+ },
73628
+ {
73629
+ type: "struct",
73630
+ name: "vesu::data_model::Amount",
73631
+ members: [
73632
+ {
73633
+ name: "denomination",
73634
+ type: "vesu::data_model::AmountDenomination"
73635
+ },
73636
+ {
73637
+ name: "value",
73638
+ type: "alexandria_math::i257::i257"
73639
+ }
73640
+ ]
73641
+ },
73642
+ {
73643
+ type: "struct",
73644
+ name: "vesu::data_model::ModifyPositionParams",
73645
+ members: [
73646
+ {
73647
+ name: "collateral_asset",
73648
+ type: "core::starknet::contract_address::ContractAddress"
73649
+ },
73650
+ {
73651
+ name: "debt_asset",
73652
+ type: "core::starknet::contract_address::ContractAddress"
73653
+ },
73654
+ {
73655
+ name: "user",
73656
+ type: "core::starknet::contract_address::ContractAddress"
73657
+ },
73658
+ {
73659
+ name: "collateral",
73660
+ type: "vesu::data_model::Amount"
73661
+ },
73662
+ {
73663
+ name: "debt",
73664
+ type: "vesu::data_model::Amount"
73665
+ }
73666
+ ]
73667
+ },
73668
+ {
73669
+ type: "struct",
73670
+ name: "vesu::data_model::UpdatePositionResponse",
73671
+ members: [
73672
+ {
73673
+ name: "collateral_delta",
73674
+ type: "alexandria_math::i257::i257"
73675
+ },
73676
+ {
73677
+ name: "collateral_shares_delta",
73678
+ type: "alexandria_math::i257::i257"
73679
+ },
73680
+ {
73681
+ name: "debt_delta",
73682
+ type: "alexandria_math::i257::i257"
73683
+ },
73684
+ {
73685
+ name: "nominal_debt_delta",
73686
+ type: "alexandria_math::i257::i257"
73687
+ },
73688
+ {
73689
+ name: "bad_debt",
73690
+ type: "core::integer::u256"
73691
+ }
73692
+ ]
73693
+ },
73694
+ {
73695
+ type: "struct",
73696
+ name: "vesu::data_model::LiquidatePositionParams",
73697
+ members: [
73698
+ {
73699
+ name: "collateral_asset",
73700
+ type: "core::starknet::contract_address::ContractAddress"
73701
+ },
73702
+ {
73703
+ name: "debt_asset",
73704
+ type: "core::starknet::contract_address::ContractAddress"
73705
+ },
73706
+ {
73707
+ name: "user",
73708
+ type: "core::starknet::contract_address::ContractAddress"
73709
+ },
73710
+ {
73711
+ name: "min_collateral_to_receive",
73712
+ type: "core::integer::u256"
73713
+ },
73714
+ {
73715
+ name: "debt_to_repay",
73716
+ type: "core::integer::u256"
73717
+ }
73718
+ ]
73719
+ },
73720
+ {
73721
+ type: "struct",
73722
+ name: "core::array::Span::<core::felt252>",
73723
+ members: [
73724
+ {
73725
+ name: "snapshot",
73726
+ type: "@core::array::Array::<core::felt252>"
73727
+ }
73728
+ ]
73729
+ },
73730
+ {
73731
+ type: "struct",
73732
+ name: "vesu::data_model::AssetParams",
73733
+ members: [
73734
+ {
73735
+ name: "asset",
73736
+ type: "core::starknet::contract_address::ContractAddress"
73737
+ },
73738
+ {
73739
+ name: "floor",
73740
+ type: "core::integer::u256"
73741
+ },
73742
+ {
73743
+ name: "initial_full_utilization_rate",
73744
+ type: "core::integer::u256"
73745
+ },
73746
+ {
73747
+ name: "max_utilization",
73748
+ type: "core::integer::u256"
73749
+ },
73750
+ {
73751
+ name: "is_legacy",
73752
+ type: "core::bool"
73753
+ },
73754
+ {
73755
+ name: "fee_rate",
73756
+ type: "core::integer::u256"
73757
+ }
73758
+ ]
73759
+ },
73760
+ {
73761
+ type: "struct",
73762
+ name: "vesu::interest_rate_model::InterestRateConfig",
73763
+ members: [
73764
+ {
73765
+ name: "min_target_utilization",
73766
+ type: "core::integer::u256"
73767
+ },
73768
+ {
73769
+ name: "max_target_utilization",
73770
+ type: "core::integer::u256"
73771
+ },
73772
+ {
73773
+ name: "target_utilization",
73774
+ type: "core::integer::u256"
73775
+ },
73776
+ {
73777
+ name: "min_full_utilization_rate",
73778
+ type: "core::integer::u256"
73779
+ },
73780
+ {
73781
+ name: "max_full_utilization_rate",
73782
+ type: "core::integer::u256"
73783
+ },
73784
+ {
73785
+ name: "zero_utilization_rate",
73786
+ type: "core::integer::u256"
73787
+ },
73788
+ {
73789
+ name: "rate_half_life",
73790
+ type: "core::integer::u256"
73791
+ },
73792
+ {
73793
+ name: "target_rate_percent",
73794
+ type: "core::integer::u256"
73795
+ }
73796
+ ]
73797
+ },
73798
+ {
73799
+ type: "struct",
73800
+ name: "vesu::data_model::Pair",
73801
+ members: [
73802
+ {
73803
+ name: "total_collateral_shares",
73804
+ type: "core::integer::u256"
73805
+ },
73806
+ {
73807
+ name: "total_nominal_debt",
73808
+ type: "core::integer::u256"
73809
+ }
73810
+ ]
73811
+ },
73812
+ {
73813
+ type: "struct",
73814
+ name: "vesu::data_model::PairConfig",
73815
+ members: [
73816
+ {
73817
+ name: "max_ltv",
73818
+ type: "core::integer::u64"
73819
+ },
73820
+ {
73821
+ name: "liquidation_factor",
73822
+ type: "core::integer::u64"
73823
+ },
73824
+ {
73825
+ name: "debt_cap",
73826
+ type: "core::integer::u128"
73827
+ }
73828
+ ]
73829
+ },
73830
+ {
73831
+ type: "enum",
73832
+ name: "core::option::Option::<(core::starknet::class_hash::ClassHash, core::array::Span::<core::felt252>)>",
73833
+ variants: [
73834
+ {
73835
+ name: "Some",
73836
+ type: "(core::starknet::class_hash::ClassHash, core::array::Span::<core::felt252>)"
73837
+ },
73838
+ {
73839
+ name: "None",
73840
+ type: "()"
73841
+ }
73842
+ ]
73843
+ },
73844
+ {
73845
+ type: "interface",
73846
+ name: "vesu::pool::IPool",
73847
+ items: [
73848
+ {
73849
+ type: "function",
73850
+ name: "pool_name",
73851
+ inputs: [],
73852
+ outputs: [
73853
+ {
73854
+ type: "core::felt252"
73855
+ }
73856
+ ],
73857
+ state_mutability: "view"
73858
+ },
73859
+ {
73860
+ type: "function",
73861
+ name: "context",
73862
+ inputs: [
73863
+ {
73864
+ name: "collateral_asset",
73865
+ type: "core::starknet::contract_address::ContractAddress"
73866
+ },
73867
+ {
73868
+ name: "debt_asset",
73869
+ type: "core::starknet::contract_address::ContractAddress"
73870
+ },
73871
+ {
73872
+ name: "user",
73873
+ type: "core::starknet::contract_address::ContractAddress"
73874
+ }
73875
+ ],
73876
+ outputs: [
73877
+ {
73878
+ type: "vesu::data_model::Context"
73879
+ }
73880
+ ],
73881
+ state_mutability: "view"
73882
+ },
73883
+ {
73884
+ type: "function",
73885
+ name: "position",
73886
+ inputs: [
73887
+ {
73888
+ name: "collateral_asset",
73889
+ type: "core::starknet::contract_address::ContractAddress"
73890
+ },
73891
+ {
73892
+ name: "debt_asset",
73893
+ type: "core::starknet::contract_address::ContractAddress"
73894
+ },
73895
+ {
73896
+ name: "user",
73897
+ type: "core::starknet::contract_address::ContractAddress"
73898
+ }
73899
+ ],
73900
+ outputs: [
73901
+ {
73902
+ type: "(vesu::data_model::Position, core::integer::u256, core::integer::u256)"
73903
+ }
73904
+ ],
73905
+ state_mutability: "view"
73906
+ },
73907
+ {
73908
+ type: "function",
73909
+ name: "check_collateralization",
73910
+ inputs: [
73911
+ {
73912
+ name: "collateral_asset",
73913
+ type: "core::starknet::contract_address::ContractAddress"
73914
+ },
73915
+ {
73916
+ name: "debt_asset",
73917
+ type: "core::starknet::contract_address::ContractAddress"
73918
+ },
73919
+ {
73920
+ name: "user",
73921
+ type: "core::starknet::contract_address::ContractAddress"
73922
+ }
73923
+ ],
73924
+ outputs: [
73925
+ {
73926
+ type: "(core::bool, core::integer::u256, core::integer::u256)"
73927
+ }
73928
+ ],
73929
+ state_mutability: "view"
73930
+ },
73931
+ {
73932
+ type: "function",
73933
+ name: "check_invariants",
73934
+ inputs: [
73935
+ {
73936
+ name: "collateral_asset",
73937
+ type: "core::starknet::contract_address::ContractAddress"
73938
+ },
73939
+ {
73940
+ name: "debt_asset",
73941
+ type: "core::starknet::contract_address::ContractAddress"
73942
+ },
73943
+ {
73944
+ name: "user",
73945
+ type: "core::starknet::contract_address::ContractAddress"
73946
+ },
73947
+ {
73948
+ name: "collateral_delta",
73949
+ type: "alexandria_math::i257::i257"
73950
+ },
73951
+ {
73952
+ name: "collateral_shares_delta",
73953
+ type: "alexandria_math::i257::i257"
73954
+ },
73955
+ {
73956
+ name: "debt_delta",
73957
+ type: "alexandria_math::i257::i257"
73958
+ },
73959
+ {
73960
+ name: "nominal_debt_delta",
73961
+ type: "alexandria_math::i257::i257"
73962
+ },
73963
+ {
73964
+ name: "is_liquidation",
73965
+ type: "core::bool"
73966
+ }
73967
+ ],
73968
+ outputs: [],
73969
+ state_mutability: "view"
73970
+ },
73971
+ {
73972
+ type: "function",
73973
+ name: "modify_position",
73974
+ inputs: [
73975
+ {
73976
+ name: "params",
73977
+ type: "vesu::data_model::ModifyPositionParams"
73978
+ }
73979
+ ],
73980
+ outputs: [
73981
+ {
73982
+ type: "vesu::data_model::UpdatePositionResponse"
73983
+ }
73984
+ ],
73985
+ state_mutability: "external"
73986
+ },
73987
+ {
73988
+ type: "function",
73989
+ name: "liquidate_position",
73990
+ inputs: [
73991
+ {
73992
+ name: "params",
73993
+ type: "vesu::data_model::LiquidatePositionParams"
73994
+ }
73995
+ ],
73996
+ outputs: [
73997
+ {
73998
+ type: "vesu::data_model::UpdatePositionResponse"
73999
+ }
74000
+ ],
74001
+ state_mutability: "external"
74002
+ },
74003
+ {
74004
+ type: "function",
74005
+ name: "flash_loan",
74006
+ inputs: [
74007
+ {
74008
+ name: "receiver",
74009
+ type: "core::starknet::contract_address::ContractAddress"
74010
+ },
74011
+ {
74012
+ name: "asset",
74013
+ type: "core::starknet::contract_address::ContractAddress"
74014
+ },
74015
+ {
74016
+ name: "amount",
74017
+ type: "core::integer::u256"
74018
+ },
74019
+ {
74020
+ name: "is_legacy",
74021
+ type: "core::bool"
74022
+ },
74023
+ {
74024
+ name: "data",
74025
+ type: "core::array::Span::<core::felt252>"
74026
+ }
74027
+ ],
74028
+ outputs: [],
74029
+ state_mutability: "external"
74030
+ },
74031
+ {
74032
+ type: "function",
74033
+ name: "modify_delegation",
74034
+ inputs: [
74035
+ {
74036
+ name: "delegatee",
74037
+ type: "core::starknet::contract_address::ContractAddress"
74038
+ },
74039
+ {
74040
+ name: "delegation",
74041
+ type: "core::bool"
74042
+ }
74043
+ ],
74044
+ outputs: [],
74045
+ state_mutability: "external"
74046
+ },
74047
+ {
74048
+ type: "function",
74049
+ name: "delegation",
74050
+ inputs: [
74051
+ {
74052
+ name: "delegator",
74053
+ type: "core::starknet::contract_address::ContractAddress"
74054
+ },
74055
+ {
74056
+ name: "delegatee",
74057
+ type: "core::starknet::contract_address::ContractAddress"
74058
+ }
74059
+ ],
74060
+ outputs: [
74061
+ {
74062
+ type: "core::bool"
74063
+ }
74064
+ ],
74065
+ state_mutability: "view"
74066
+ },
74067
+ {
74068
+ type: "function",
74069
+ name: "donate_to_reserve",
74070
+ inputs: [
74071
+ {
74072
+ name: "asset",
74073
+ type: "core::starknet::contract_address::ContractAddress"
74074
+ },
74075
+ {
74076
+ name: "amount",
74077
+ type: "core::integer::u256"
74078
+ }
74079
+ ],
74080
+ outputs: [],
74081
+ state_mutability: "external"
74082
+ },
74083
+ {
74084
+ type: "function",
74085
+ name: "add_asset",
74086
+ inputs: [
74087
+ {
74088
+ name: "params",
74089
+ type: "vesu::data_model::AssetParams"
74090
+ },
74091
+ {
74092
+ name: "interest_rate_config",
74093
+ type: "vesu::interest_rate_model::InterestRateConfig"
74094
+ }
74095
+ ],
74096
+ outputs: [],
74097
+ state_mutability: "external"
74098
+ },
74099
+ {
74100
+ type: "function",
74101
+ name: "set_asset_parameter",
74102
+ inputs: [
74103
+ {
74104
+ name: "asset",
74105
+ type: "core::starknet::contract_address::ContractAddress"
74106
+ },
74107
+ {
74108
+ name: "parameter",
74109
+ type: "core::felt252"
74110
+ },
74111
+ {
74112
+ name: "value",
74113
+ type: "core::integer::u256"
74114
+ }
74115
+ ],
74116
+ outputs: [],
74117
+ state_mutability: "external"
74118
+ },
74119
+ {
74120
+ type: "function",
74121
+ name: "asset_config",
74122
+ inputs: [
74123
+ {
74124
+ name: "asset",
74125
+ type: "core::starknet::contract_address::ContractAddress"
74126
+ }
74127
+ ],
74128
+ outputs: [
74129
+ {
74130
+ type: "vesu::data_model::AssetConfig"
74131
+ }
74132
+ ],
74133
+ state_mutability: "view"
74134
+ },
74135
+ {
74136
+ type: "function",
74137
+ name: "set_oracle",
74138
+ inputs: [
74139
+ {
74140
+ name: "oracle",
74141
+ type: "core::starknet::contract_address::ContractAddress"
74142
+ }
74143
+ ],
74144
+ outputs: [],
74145
+ state_mutability: "external"
74146
+ },
74147
+ {
74148
+ type: "function",
74149
+ name: "oracle",
74150
+ inputs: [],
74151
+ outputs: [
74152
+ {
74153
+ type: "core::starknet::contract_address::ContractAddress"
74154
+ }
74155
+ ],
74156
+ state_mutability: "view"
74157
+ },
74158
+ {
74159
+ type: "function",
74160
+ name: "price",
74161
+ inputs: [
74162
+ {
74163
+ name: "asset",
74164
+ type: "core::starknet::contract_address::ContractAddress"
74165
+ }
74166
+ ],
74167
+ outputs: [
74168
+ {
74169
+ type: "vesu::data_model::AssetPrice"
74170
+ }
74171
+ ],
74172
+ state_mutability: "view"
74173
+ },
74174
+ {
74175
+ type: "function",
74176
+ name: "set_fee_recipient",
74177
+ inputs: [
74178
+ {
74179
+ name: "fee_recipient",
74180
+ type: "core::starknet::contract_address::ContractAddress"
74181
+ }
74182
+ ],
74183
+ outputs: [],
74184
+ state_mutability: "external"
74185
+ },
74186
+ {
74187
+ type: "function",
74188
+ name: "fee_recipient",
74189
+ inputs: [],
74190
+ outputs: [
74191
+ {
74192
+ type: "core::starknet::contract_address::ContractAddress"
74193
+ }
74194
+ ],
74195
+ state_mutability: "view"
74196
+ },
74197
+ {
74198
+ type: "function",
74199
+ name: "claim_fees",
74200
+ inputs: [
74201
+ {
74202
+ name: "asset",
74203
+ type: "core::starknet::contract_address::ContractAddress"
74204
+ },
74205
+ {
74206
+ name: "fee_shares",
74207
+ type: "core::integer::u256"
74208
+ }
74209
+ ],
74210
+ outputs: [],
74211
+ state_mutability: "external"
74212
+ },
74213
+ {
74214
+ type: "function",
74215
+ name: "get_fees",
74216
+ inputs: [
74217
+ {
74218
+ name: "asset",
74219
+ type: "core::starknet::contract_address::ContractAddress"
74220
+ }
74221
+ ],
74222
+ outputs: [
74223
+ {
74224
+ type: "(core::integer::u256, core::integer::u256)"
74225
+ }
74226
+ ],
74227
+ state_mutability: "view"
74228
+ },
74229
+ {
74230
+ type: "function",
74231
+ name: "rate_accumulator",
74232
+ inputs: [
74233
+ {
74234
+ name: "asset",
74235
+ type: "core::starknet::contract_address::ContractAddress"
74236
+ }
74237
+ ],
74238
+ outputs: [
74239
+ {
74240
+ type: "core::integer::u256"
74241
+ }
74242
+ ],
74243
+ state_mutability: "view"
74244
+ },
74245
+ {
74246
+ type: "function",
74247
+ name: "utilization",
74248
+ inputs: [
74249
+ {
74250
+ name: "asset",
74251
+ type: "core::starknet::contract_address::ContractAddress"
74252
+ }
74253
+ ],
74254
+ outputs: [
74255
+ {
74256
+ type: "core::integer::u256"
74257
+ }
74258
+ ],
74259
+ state_mutability: "view"
74260
+ },
74261
+ {
74262
+ type: "function",
74263
+ name: "interest_rate",
74264
+ inputs: [
74265
+ {
74266
+ name: "asset",
74267
+ type: "core::starknet::contract_address::ContractAddress"
74268
+ },
74269
+ {
74270
+ name: "utilization",
74271
+ type: "core::integer::u256"
74272
+ },
74273
+ {
74274
+ name: "last_updated",
74275
+ type: "core::integer::u64"
74276
+ },
74277
+ {
74278
+ name: "last_full_utilization_rate",
74279
+ type: "core::integer::u256"
74280
+ }
74281
+ ],
74282
+ outputs: [
74283
+ {
74284
+ type: "core::integer::u256"
74285
+ }
74286
+ ],
74287
+ state_mutability: "view"
74288
+ },
74289
+ {
74290
+ type: "function",
74291
+ name: "set_interest_rate_parameter",
74292
+ inputs: [
74293
+ {
74294
+ name: "asset",
74295
+ type: "core::starknet::contract_address::ContractAddress"
74296
+ },
74297
+ {
74298
+ name: "parameter",
74299
+ type: "core::felt252"
74300
+ },
74301
+ {
74302
+ name: "value",
74303
+ type: "core::integer::u256"
74304
+ }
74305
+ ],
74306
+ outputs: [],
74307
+ state_mutability: "external"
74308
+ },
74309
+ {
74310
+ type: "function",
74311
+ name: "interest_rate_config",
74312
+ inputs: [
74313
+ {
74314
+ name: "asset",
74315
+ type: "core::starknet::contract_address::ContractAddress"
74316
+ }
74317
+ ],
74318
+ outputs: [
74319
+ {
74320
+ type: "vesu::interest_rate_model::InterestRateConfig"
74321
+ }
74322
+ ],
74323
+ state_mutability: "view"
74324
+ },
74325
+ {
74326
+ type: "function",
74327
+ name: "pairs",
74328
+ inputs: [
74329
+ {
74330
+ name: "collateral_asset",
74331
+ type: "core::starknet::contract_address::ContractAddress"
74332
+ },
74333
+ {
74334
+ name: "debt_asset",
74335
+ type: "core::starknet::contract_address::ContractAddress"
74336
+ }
74337
+ ],
74338
+ outputs: [
74339
+ {
74340
+ type: "vesu::data_model::Pair"
74341
+ }
74342
+ ],
74343
+ state_mutability: "view"
74344
+ },
74345
+ {
74346
+ type: "function",
74347
+ name: "set_pair_config",
74348
+ inputs: [
74349
+ {
74350
+ name: "collateral_asset",
74351
+ type: "core::starknet::contract_address::ContractAddress"
74352
+ },
74353
+ {
74354
+ name: "debt_asset",
74355
+ type: "core::starknet::contract_address::ContractAddress"
74356
+ },
74357
+ {
74358
+ name: "pair_config",
74359
+ type: "vesu::data_model::PairConfig"
74360
+ }
74361
+ ],
74362
+ outputs: [],
74363
+ state_mutability: "external"
74364
+ },
74365
+ {
74366
+ type: "function",
74367
+ name: "set_pair_parameter",
74368
+ inputs: [
74369
+ {
74370
+ name: "collateral_asset",
74371
+ type: "core::starknet::contract_address::ContractAddress"
74372
+ },
74373
+ {
74374
+ name: "debt_asset",
74375
+ type: "core::starknet::contract_address::ContractAddress"
74376
+ },
74377
+ {
74378
+ name: "parameter",
74379
+ type: "core::felt252"
74380
+ },
74381
+ {
74382
+ name: "value",
74383
+ type: "core::integer::u128"
74384
+ }
74385
+ ],
74386
+ outputs: [],
74387
+ state_mutability: "external"
74388
+ },
74389
+ {
74390
+ type: "function",
74391
+ name: "pair_config",
74392
+ inputs: [
74393
+ {
74394
+ name: "collateral_asset",
74395
+ type: "core::starknet::contract_address::ContractAddress"
74396
+ },
74397
+ {
74398
+ name: "debt_asset",
74399
+ type: "core::starknet::contract_address::ContractAddress"
74400
+ }
74401
+ ],
74402
+ outputs: [
74403
+ {
74404
+ type: "vesu::data_model::PairConfig"
74405
+ }
74406
+ ],
74407
+ state_mutability: "view"
74408
+ },
74409
+ {
74410
+ type: "function",
74411
+ name: "calculate_debt",
74412
+ inputs: [
74413
+ {
74414
+ name: "nominal_debt",
74415
+ type: "alexandria_math::i257::i257"
74416
+ },
74417
+ {
74418
+ name: "rate_accumulator",
74419
+ type: "core::integer::u256"
74420
+ },
74421
+ {
74422
+ name: "asset_scale",
74423
+ type: "core::integer::u256"
74424
+ }
74425
+ ],
74426
+ outputs: [
74427
+ {
74428
+ type: "core::integer::u256"
74429
+ }
74430
+ ],
74431
+ state_mutability: "view"
74432
+ },
74433
+ {
74434
+ type: "function",
74435
+ name: "calculate_nominal_debt",
74436
+ inputs: [
74437
+ {
74438
+ name: "debt",
74439
+ type: "alexandria_math::i257::i257"
74440
+ },
74441
+ {
74442
+ name: "rate_accumulator",
74443
+ type: "core::integer::u256"
74444
+ },
74445
+ {
74446
+ name: "asset_scale",
74447
+ type: "core::integer::u256"
74448
+ }
74449
+ ],
74450
+ outputs: [
74451
+ {
74452
+ type: "core::integer::u256"
74453
+ }
74454
+ ],
74455
+ state_mutability: "view"
74456
+ },
74457
+ {
74458
+ type: "function",
74459
+ name: "calculate_collateral_shares",
74460
+ inputs: [
74461
+ {
74462
+ name: "asset",
74463
+ type: "core::starknet::contract_address::ContractAddress"
74464
+ },
74465
+ {
74466
+ name: "collateral",
74467
+ type: "alexandria_math::i257::i257"
74468
+ }
74469
+ ],
74470
+ outputs: [
74471
+ {
74472
+ type: "core::integer::u256"
74473
+ }
74474
+ ],
74475
+ state_mutability: "view"
74476
+ },
74477
+ {
74478
+ type: "function",
74479
+ name: "calculate_collateral",
74480
+ inputs: [
74481
+ {
74482
+ name: "asset",
74483
+ type: "core::starknet::contract_address::ContractAddress"
74484
+ },
74485
+ {
74486
+ name: "collateral_shares",
74487
+ type: "alexandria_math::i257::i257"
74488
+ }
74489
+ ],
74490
+ outputs: [
74491
+ {
74492
+ type: "core::integer::u256"
74493
+ }
74494
+ ],
74495
+ state_mutability: "view"
74496
+ },
74497
+ {
74498
+ type: "function",
74499
+ name: "deconstruct_collateral_amount",
74500
+ inputs: [
74501
+ {
74502
+ name: "collateral_asset",
74503
+ type: "core::starknet::contract_address::ContractAddress"
74504
+ },
74505
+ {
74506
+ name: "debt_asset",
74507
+ type: "core::starknet::contract_address::ContractAddress"
74508
+ },
74509
+ {
74510
+ name: "user",
74511
+ type: "core::starknet::contract_address::ContractAddress"
74512
+ },
74513
+ {
74514
+ name: "collateral",
74515
+ type: "vesu::data_model::Amount"
74516
+ }
74517
+ ],
74518
+ outputs: [
74519
+ {
74520
+ type: "(alexandria_math::i257::i257, alexandria_math::i257::i257)"
74521
+ }
74522
+ ],
74523
+ state_mutability: "view"
74524
+ },
74525
+ {
74526
+ type: "function",
74527
+ name: "deconstruct_debt_amount",
74528
+ inputs: [
74529
+ {
74530
+ name: "collateral_asset",
74531
+ type: "core::starknet::contract_address::ContractAddress"
74532
+ },
74533
+ {
74534
+ name: "debt_asset",
74535
+ type: "core::starknet::contract_address::ContractAddress"
74536
+ },
74537
+ {
74538
+ name: "user",
74539
+ type: "core::starknet::contract_address::ContractAddress"
74540
+ },
74541
+ {
74542
+ name: "debt",
74543
+ type: "vesu::data_model::Amount"
74544
+ }
74545
+ ],
74546
+ outputs: [
74547
+ {
74548
+ type: "(alexandria_math::i257::i257, alexandria_math::i257::i257)"
74549
+ }
74550
+ ],
74551
+ state_mutability: "view"
74552
+ },
74553
+ {
74554
+ type: "function",
74555
+ name: "curator",
74556
+ inputs: [],
74557
+ outputs: [
74558
+ {
74559
+ type: "core::starknet::contract_address::ContractAddress"
74560
+ }
74561
+ ],
74562
+ state_mutability: "view"
74563
+ },
74564
+ {
74565
+ type: "function",
74566
+ name: "pending_curator",
74567
+ inputs: [],
74568
+ outputs: [
74569
+ {
74570
+ type: "core::starknet::contract_address::ContractAddress"
74571
+ }
74572
+ ],
74573
+ state_mutability: "view"
74574
+ },
74575
+ {
74576
+ type: "function",
74577
+ name: "nominate_curator",
74578
+ inputs: [
74579
+ {
74580
+ name: "pending_curator",
74581
+ type: "core::starknet::contract_address::ContractAddress"
74582
+ }
74583
+ ],
74584
+ outputs: [],
74585
+ state_mutability: "external"
74586
+ },
74587
+ {
74588
+ type: "function",
74589
+ name: "accept_curator_ownership",
74590
+ inputs: [],
74591
+ outputs: [],
74592
+ state_mutability: "external"
74593
+ },
74594
+ {
74595
+ type: "function",
74596
+ name: "set_pausing_agent",
74597
+ inputs: [
74598
+ {
74599
+ name: "pausing_agent",
74600
+ type: "core::starknet::contract_address::ContractAddress"
74601
+ }
74602
+ ],
74603
+ outputs: [],
74604
+ state_mutability: "external"
74605
+ },
74606
+ {
74607
+ type: "function",
74608
+ name: "pausing_agent",
74609
+ inputs: [],
74610
+ outputs: [
74611
+ {
74612
+ type: "core::starknet::contract_address::ContractAddress"
74613
+ }
74614
+ ],
74615
+ state_mutability: "view"
74616
+ },
74617
+ {
74618
+ type: "function",
74619
+ name: "pause",
74620
+ inputs: [],
74621
+ outputs: [],
74622
+ state_mutability: "external"
74623
+ },
74624
+ {
74625
+ type: "function",
74626
+ name: "unpause",
74627
+ inputs: [],
74628
+ outputs: [],
74629
+ state_mutability: "external"
74630
+ },
74631
+ {
74632
+ type: "function",
74633
+ name: "is_paused",
74634
+ inputs: [],
74635
+ outputs: [
74636
+ {
74637
+ type: "core::bool"
74638
+ }
74639
+ ],
74640
+ state_mutability: "view"
74641
+ },
74642
+ {
74643
+ type: "function",
74644
+ name: "upgrade_name",
74645
+ inputs: [],
74646
+ outputs: [
74647
+ {
74648
+ type: "core::felt252"
74649
+ }
74650
+ ],
74651
+ state_mutability: "view"
74652
+ },
74653
+ {
74654
+ type: "function",
74655
+ name: "upgrade",
74656
+ inputs: [
74657
+ {
74658
+ name: "new_implementation",
74659
+ type: "core::starknet::class_hash::ClassHash"
74660
+ },
74661
+ {
74662
+ name: "eic_implementation_data",
74663
+ type: "core::option::Option::<(core::starknet::class_hash::ClassHash, core::array::Span::<core::felt252>)>"
74664
+ }
74665
+ ],
74666
+ outputs: [],
74667
+ state_mutability: "external"
74668
+ }
74669
+ ]
74670
+ },
74671
+ {
74672
+ type: "impl",
74673
+ name: "OwnableTwoStepImpl",
74674
+ interface_name: "openzeppelin_access::ownable::interface::IOwnableTwoStep"
74675
+ },
74676
+ {
74677
+ type: "interface",
74678
+ name: "openzeppelin_access::ownable::interface::IOwnableTwoStep",
74679
+ items: [
74680
+ {
74681
+ type: "function",
74682
+ name: "owner",
74683
+ inputs: [],
74684
+ outputs: [
74685
+ {
74686
+ type: "core::starknet::contract_address::ContractAddress"
74687
+ }
74688
+ ],
74689
+ state_mutability: "view"
74690
+ },
74691
+ {
74692
+ type: "function",
74693
+ name: "pending_owner",
74694
+ inputs: [],
74695
+ outputs: [
74696
+ {
74697
+ type: "core::starknet::contract_address::ContractAddress"
74698
+ }
74699
+ ],
74700
+ state_mutability: "view"
74701
+ },
74702
+ {
74703
+ type: "function",
74704
+ name: "accept_ownership",
74705
+ inputs: [],
74706
+ outputs: [],
74707
+ state_mutability: "external"
74708
+ },
74709
+ {
74710
+ type: "function",
74711
+ name: "transfer_ownership",
74712
+ inputs: [
74713
+ {
74714
+ name: "new_owner",
74715
+ type: "core::starknet::contract_address::ContractAddress"
74716
+ }
74717
+ ],
74718
+ outputs: [],
74719
+ state_mutability: "external"
74720
+ },
74721
+ {
74722
+ type: "function",
74723
+ name: "renounce_ownership",
74724
+ inputs: [],
74725
+ outputs: [],
74726
+ state_mutability: "external"
74727
+ }
74728
+ ]
74729
+ },
74730
+ {
74731
+ type: "constructor",
74732
+ name: "constructor",
74733
+ inputs: [
74734
+ {
74735
+ name: "name",
74736
+ type: "core::felt252"
74737
+ },
74738
+ {
74739
+ name: "owner",
74740
+ type: "core::starknet::contract_address::ContractAddress"
74741
+ },
74742
+ {
74743
+ name: "curator",
74744
+ type: "core::starknet::contract_address::ContractAddress"
74745
+ },
74746
+ {
74747
+ name: "oracle",
74748
+ type: "core::starknet::contract_address::ContractAddress"
74749
+ }
74750
+ ]
74751
+ },
74752
+ {
74753
+ type: "event",
74754
+ name: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred",
74755
+ kind: "struct",
74756
+ members: [
74757
+ {
74758
+ name: "previous_owner",
74759
+ type: "core::starknet::contract_address::ContractAddress",
74760
+ kind: "key"
74761
+ },
74762
+ {
74763
+ name: "new_owner",
74764
+ type: "core::starknet::contract_address::ContractAddress",
74765
+ kind: "key"
74766
+ }
74767
+ ]
74768
+ },
74769
+ {
74770
+ type: "event",
74771
+ name: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted",
74772
+ kind: "struct",
74773
+ members: [
74774
+ {
74775
+ name: "previous_owner",
74776
+ type: "core::starknet::contract_address::ContractAddress",
74777
+ kind: "key"
74778
+ },
74779
+ {
74780
+ name: "new_owner",
74781
+ type: "core::starknet::contract_address::ContractAddress",
74782
+ kind: "key"
74783
+ }
74784
+ ]
74785
+ },
74786
+ {
74787
+ type: "event",
74788
+ name: "openzeppelin_access::ownable::ownable::OwnableComponent::Event",
74789
+ kind: "enum",
74790
+ variants: [
74791
+ {
74792
+ name: "OwnershipTransferred",
74793
+ type: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred",
74794
+ kind: "nested"
74795
+ },
74796
+ {
74797
+ name: "OwnershipTransferStarted",
74798
+ type: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted",
74799
+ kind: "nested"
74800
+ }
74801
+ ]
74802
+ },
74803
+ {
74804
+ type: "event",
74805
+ name: "vesu::interest_rate_model::interest_rate_model_component::SetInterestRateConfig",
74806
+ kind: "struct",
74807
+ members: [
74808
+ {
74809
+ name: "asset",
74810
+ type: "core::starknet::contract_address::ContractAddress",
74811
+ kind: "data"
74812
+ },
74813
+ {
74814
+ name: "interest_rate_config",
74815
+ type: "vesu::interest_rate_model::InterestRateConfig",
74816
+ kind: "data"
74817
+ }
74818
+ ]
74819
+ },
74820
+ {
74821
+ type: "event",
74822
+ name: "vesu::interest_rate_model::interest_rate_model_component::Event",
74823
+ kind: "enum",
74824
+ variants: [
74825
+ {
74826
+ name: "SetInterestRateConfig",
74827
+ type: "vesu::interest_rate_model::interest_rate_model_component::SetInterestRateConfig",
74828
+ kind: "nested"
74829
+ }
74830
+ ]
74831
+ },
74832
+ {
74833
+ type: "event",
74834
+ name: "vesu::pool::Pool::UpdateContext",
74835
+ kind: "struct",
74836
+ members: [
74837
+ {
74838
+ name: "collateral_asset",
74839
+ type: "core::starknet::contract_address::ContractAddress",
74840
+ kind: "key"
74841
+ },
74842
+ {
74843
+ name: "debt_asset",
74844
+ type: "core::starknet::contract_address::ContractAddress",
74845
+ kind: "key"
74846
+ },
74847
+ {
74848
+ name: "collateral_asset_config",
74849
+ type: "vesu::data_model::AssetConfig",
74850
+ kind: "data"
74851
+ },
74852
+ {
74853
+ name: "debt_asset_config",
74854
+ type: "vesu::data_model::AssetConfig",
74855
+ kind: "data"
74856
+ },
74857
+ {
74858
+ name: "collateral_asset_price",
74859
+ type: "vesu::data_model::AssetPrice",
74860
+ kind: "data"
74861
+ },
74862
+ {
74863
+ name: "debt_asset_price",
74864
+ type: "vesu::data_model::AssetPrice",
74865
+ kind: "data"
74866
+ }
74867
+ ]
74868
+ },
74869
+ {
74870
+ type: "event",
74871
+ name: "vesu::pool::Pool::ModifyPosition",
74872
+ kind: "struct",
74873
+ members: [
74874
+ {
74875
+ name: "collateral_asset",
74876
+ type: "core::starknet::contract_address::ContractAddress",
74877
+ kind: "key"
74878
+ },
74879
+ {
74880
+ name: "debt_asset",
74881
+ type: "core::starknet::contract_address::ContractAddress",
74882
+ kind: "key"
74883
+ },
74884
+ {
74885
+ name: "user",
74886
+ type: "core::starknet::contract_address::ContractAddress",
74887
+ kind: "key"
74888
+ },
74889
+ {
74890
+ name: "collateral_delta",
74891
+ type: "alexandria_math::i257::i257",
74892
+ kind: "data"
74893
+ },
74894
+ {
74895
+ name: "collateral_shares_delta",
74896
+ type: "alexandria_math::i257::i257",
74897
+ kind: "data"
74898
+ },
74899
+ {
74900
+ name: "debt_delta",
74901
+ type: "alexandria_math::i257::i257",
74902
+ kind: "data"
74903
+ },
74904
+ {
74905
+ name: "nominal_debt_delta",
74906
+ type: "alexandria_math::i257::i257",
74907
+ kind: "data"
74908
+ }
74909
+ ]
74910
+ },
74911
+ {
74912
+ type: "event",
74913
+ name: "vesu::pool::Pool::LiquidatePosition",
74914
+ kind: "struct",
74915
+ members: [
74916
+ {
74917
+ name: "collateral_asset",
74918
+ type: "core::starknet::contract_address::ContractAddress",
74919
+ kind: "key"
74920
+ },
74921
+ {
74922
+ name: "debt_asset",
74923
+ type: "core::starknet::contract_address::ContractAddress",
74924
+ kind: "key"
74925
+ },
74926
+ {
74927
+ name: "user",
74928
+ type: "core::starknet::contract_address::ContractAddress",
74929
+ kind: "key"
74930
+ },
74931
+ {
74932
+ name: "liquidator",
74933
+ type: "core::starknet::contract_address::ContractAddress",
74934
+ kind: "key"
74935
+ },
74936
+ {
74937
+ name: "collateral_delta",
74938
+ type: "alexandria_math::i257::i257",
74939
+ kind: "data"
74940
+ },
74941
+ {
74942
+ name: "collateral_shares_delta",
74943
+ type: "alexandria_math::i257::i257",
74944
+ kind: "data"
74945
+ },
74946
+ {
74947
+ name: "debt_delta",
74948
+ type: "alexandria_math::i257::i257",
74949
+ kind: "data"
74950
+ },
74951
+ {
74952
+ name: "nominal_debt_delta",
74953
+ type: "alexandria_math::i257::i257",
74954
+ kind: "data"
74955
+ },
74956
+ {
74957
+ name: "bad_debt",
74958
+ type: "core::integer::u256",
74959
+ kind: "data"
74960
+ }
74961
+ ]
74962
+ },
74963
+ {
74964
+ type: "event",
74965
+ name: "vesu::pool::Pool::Flashloan",
74966
+ kind: "struct",
74967
+ members: [
74968
+ {
74969
+ name: "sender",
74970
+ type: "core::starknet::contract_address::ContractAddress",
74971
+ kind: "key"
74972
+ },
74973
+ {
74974
+ name: "receiver",
74975
+ type: "core::starknet::contract_address::ContractAddress",
74976
+ kind: "key"
74977
+ },
74978
+ {
74979
+ name: "asset",
74980
+ type: "core::starknet::contract_address::ContractAddress",
74981
+ kind: "key"
74982
+ },
74983
+ {
74984
+ name: "amount",
74985
+ type: "core::integer::u256",
74986
+ kind: "data"
74987
+ }
74988
+ ]
74989
+ },
74990
+ {
74991
+ type: "event",
74992
+ name: "vesu::pool::Pool::ModifyDelegation",
74993
+ kind: "struct",
74994
+ members: [
74995
+ {
74996
+ name: "delegator",
74997
+ type: "core::starknet::contract_address::ContractAddress",
74998
+ kind: "key"
74999
+ },
75000
+ {
75001
+ name: "delegatee",
75002
+ type: "core::starknet::contract_address::ContractAddress",
75003
+ kind: "key"
75004
+ },
75005
+ {
75006
+ name: "delegation",
75007
+ type: "core::bool",
75008
+ kind: "data"
75009
+ }
75010
+ ]
75011
+ },
75012
+ {
75013
+ type: "event",
75014
+ name: "vesu::pool::Pool::Donate",
75015
+ kind: "struct",
75016
+ members: [
75017
+ {
75018
+ name: "asset",
75019
+ type: "core::starknet::contract_address::ContractAddress",
75020
+ kind: "key"
75021
+ },
75022
+ {
75023
+ name: "amount",
75024
+ type: "core::integer::u256",
75025
+ kind: "data"
75026
+ }
75027
+ ]
75028
+ },
75029
+ {
75030
+ type: "event",
75031
+ name: "vesu::pool::Pool::SetAssetConfig",
75032
+ kind: "struct",
75033
+ members: [
75034
+ {
75035
+ name: "asset",
75036
+ type: "core::starknet::contract_address::ContractAddress",
75037
+ kind: "key"
75038
+ },
75039
+ {
75040
+ name: "asset_config",
75041
+ type: "vesu::data_model::AssetConfig",
75042
+ kind: "data"
75043
+ }
75044
+ ]
75045
+ },
75046
+ {
75047
+ type: "event",
75048
+ name: "vesu::pool::Pool::SetOracle",
75049
+ kind: "struct",
75050
+ members: [
75051
+ {
75052
+ name: "oracle",
75053
+ type: "core::starknet::contract_address::ContractAddress",
75054
+ kind: "data"
75055
+ }
75056
+ ]
75057
+ },
75058
+ {
75059
+ type: "event",
75060
+ name: "vesu::pool::Pool::SetPairConfig",
75061
+ kind: "struct",
75062
+ members: [
75063
+ {
75064
+ name: "collateral_asset",
75065
+ type: "core::starknet::contract_address::ContractAddress",
75066
+ kind: "key"
75067
+ },
75068
+ {
75069
+ name: "debt_asset",
75070
+ type: "core::starknet::contract_address::ContractAddress",
75071
+ kind: "key"
75072
+ },
75073
+ {
75074
+ name: "pair_config",
75075
+ type: "vesu::data_model::PairConfig",
75076
+ kind: "data"
75077
+ }
75078
+ ]
75079
+ },
75080
+ {
75081
+ type: "event",
75082
+ name: "vesu::pool::Pool::ClaimFees",
75083
+ kind: "struct",
75084
+ members: [
75085
+ {
75086
+ name: "asset",
75087
+ type: "core::starknet::contract_address::ContractAddress",
75088
+ kind: "key"
75089
+ },
75090
+ {
75091
+ name: "recipient",
75092
+ type: "core::starknet::contract_address::ContractAddress",
75093
+ kind: "data"
75094
+ },
75095
+ {
75096
+ name: "fee_shares",
75097
+ type: "core::integer::u256",
75098
+ kind: "data"
75099
+ },
75100
+ {
75101
+ name: "fee_amount",
75102
+ type: "core::integer::u256",
75103
+ kind: "data"
75104
+ }
75105
+ ]
75106
+ },
75107
+ {
75108
+ type: "event",
75109
+ name: "vesu::pool::Pool::SetFeeRecipient",
75110
+ kind: "struct",
75111
+ members: [
75112
+ {
75113
+ name: "fee_recipient",
75114
+ type: "core::starknet::contract_address::ContractAddress",
75115
+ kind: "key"
75116
+ }
75117
+ ]
75118
+ },
75119
+ {
75120
+ type: "event",
75121
+ name: "vesu::pool::Pool::SetPausingAgent",
75122
+ kind: "struct",
75123
+ members: [
75124
+ {
75125
+ name: "agent",
75126
+ type: "core::starknet::contract_address::ContractAddress",
75127
+ kind: "key"
75128
+ }
75129
+ ]
75130
+ },
75131
+ {
75132
+ type: "event",
75133
+ name: "vesu::pool::Pool::SetCurator",
75134
+ kind: "struct",
75135
+ members: [
75136
+ {
75137
+ name: "curator",
75138
+ type: "core::starknet::contract_address::ContractAddress",
75139
+ kind: "key"
75140
+ }
75141
+ ]
75142
+ },
75143
+ {
75144
+ type: "event",
75145
+ name: "vesu::pool::Pool::NominateCurator",
75146
+ kind: "struct",
75147
+ members: [
75148
+ {
75149
+ name: "pending_curator",
75150
+ type: "core::starknet::contract_address::ContractAddress",
75151
+ kind: "key"
75152
+ }
75153
+ ]
75154
+ },
75155
+ {
75156
+ type: "event",
75157
+ name: "vesu::pool::Pool::ContractPaused",
75158
+ kind: "struct",
75159
+ members: [
75160
+ {
75161
+ name: "account",
75162
+ type: "core::starknet::contract_address::ContractAddress",
75163
+ kind: "data"
75164
+ }
75165
+ ]
75166
+ },
75167
+ {
75168
+ type: "event",
75169
+ name: "vesu::pool::Pool::ContractUnpaused",
75170
+ kind: "struct",
75171
+ members: [
75172
+ {
75173
+ name: "account",
75174
+ type: "core::starknet::contract_address::ContractAddress",
75175
+ kind: "data"
75176
+ }
75177
+ ]
75178
+ },
75179
+ {
75180
+ type: "event",
75181
+ name: "vesu::pool::Pool::ContractUpgraded",
75182
+ kind: "struct",
75183
+ members: [
75184
+ {
75185
+ name: "new_implementation",
75186
+ type: "core::starknet::class_hash::ClassHash",
75187
+ kind: "data"
75188
+ }
75189
+ ]
75190
+ },
75191
+ {
75192
+ type: "event",
75193
+ name: "vesu::pool::Pool::Event",
75194
+ kind: "enum",
75195
+ variants: [
75196
+ {
75197
+ name: "OwnableEvent",
75198
+ type: "openzeppelin_access::ownable::ownable::OwnableComponent::Event",
75199
+ kind: "flat"
75200
+ },
75201
+ {
75202
+ name: "InterestRateModelEvents",
75203
+ type: "vesu::interest_rate_model::interest_rate_model_component::Event",
75204
+ kind: "nested"
75205
+ },
75206
+ {
75207
+ name: "UpdateContext",
75208
+ type: "vesu::pool::Pool::UpdateContext",
75209
+ kind: "nested"
75210
+ },
75211
+ {
75212
+ name: "ModifyPosition",
75213
+ type: "vesu::pool::Pool::ModifyPosition",
75214
+ kind: "nested"
75215
+ },
75216
+ {
75217
+ name: "LiquidatePosition",
75218
+ type: "vesu::pool::Pool::LiquidatePosition",
75219
+ kind: "nested"
75220
+ },
75221
+ {
75222
+ name: "Flashloan",
75223
+ type: "vesu::pool::Pool::Flashloan",
75224
+ kind: "nested"
75225
+ },
75226
+ {
75227
+ name: "ModifyDelegation",
75228
+ type: "vesu::pool::Pool::ModifyDelegation",
75229
+ kind: "nested"
75230
+ },
75231
+ {
75232
+ name: "Donate",
75233
+ type: "vesu::pool::Pool::Donate",
75234
+ kind: "nested"
75235
+ },
75236
+ {
75237
+ name: "SetAssetConfig",
75238
+ type: "vesu::pool::Pool::SetAssetConfig",
75239
+ kind: "nested"
75240
+ },
75241
+ {
75242
+ name: "SetOracle",
75243
+ type: "vesu::pool::Pool::SetOracle",
75244
+ kind: "nested"
75245
+ },
75246
+ {
75247
+ name: "SetPairConfig",
75248
+ type: "vesu::pool::Pool::SetPairConfig",
75249
+ kind: "nested"
75250
+ },
75251
+ {
75252
+ name: "ClaimFees",
75253
+ type: "vesu::pool::Pool::ClaimFees",
75254
+ kind: "nested"
75255
+ },
75256
+ {
75257
+ name: "SetFeeRecipient",
75258
+ type: "vesu::pool::Pool::SetFeeRecipient",
75259
+ kind: "nested"
75260
+ },
75261
+ {
75262
+ name: "SetPausingAgent",
75263
+ type: "vesu::pool::Pool::SetPausingAgent",
75264
+ kind: "nested"
75265
+ },
75266
+ {
75267
+ name: "SetCurator",
75268
+ type: "vesu::pool::Pool::SetCurator",
75269
+ kind: "nested"
75270
+ },
75271
+ {
75272
+ name: "NominateCurator",
75273
+ type: "vesu::pool::Pool::NominateCurator",
75274
+ kind: "nested"
75275
+ },
75276
+ {
75277
+ name: "ContractPaused",
75278
+ type: "vesu::pool::Pool::ContractPaused",
75279
+ kind: "nested"
75280
+ },
75281
+ {
75282
+ name: "ContractUnpaused",
75283
+ type: "vesu::pool::Pool::ContractUnpaused",
75284
+ kind: "nested"
75285
+ },
75286
+ {
75287
+ name: "ContractUpgraded",
75288
+ type: "vesu::pool::Pool::ContractUpgraded",
75289
+ kind: "nested"
75290
+ }
75291
+ ]
75292
+ }
75293
+ ];
75294
+
75295
+ // src/strategies/universal-adapters/vesu-adapter.ts
75296
+ var VesuAmountType = /* @__PURE__ */ ((VesuAmountType2) => {
75297
+ VesuAmountType2[VesuAmountType2["Delta"] = 0] = "Delta";
75298
+ VesuAmountType2[VesuAmountType2["Target"] = 1] = "Target";
75299
+ return VesuAmountType2;
75300
+ })(VesuAmountType || {});
75301
+ var VesuAmountDenomination = /* @__PURE__ */ ((VesuAmountDenomination2) => {
75302
+ VesuAmountDenomination2[VesuAmountDenomination2["Native"] = 0] = "Native";
75303
+ VesuAmountDenomination2[VesuAmountDenomination2["Assets"] = 1] = "Assets";
75304
+ return VesuAmountDenomination2;
75305
+ })(VesuAmountDenomination || {});
75306
+ function getVesuMultiplyParams(isIncrease, params) {
75307
+ if (isIncrease) {
75308
+ const _params2 = params;
75309
+ return {
75310
+ action: new CairoCustomEnum({ IncreaseLever: {
75311
+ pool_id: _params2.pool_id.toBigInt(),
75312
+ collateral_asset: _params2.collateral_asset.toBigInt(),
75313
+ debt_asset: _params2.debt_asset.toBigInt(),
75314
+ user: _params2.user.toBigInt(),
75315
+ add_margin: BigInt(_params2.add_margin.toWei()),
75316
+ margin_swap: _params2.margin_swap.map((swap) => ({
75317
+ route: swap.route.map((route) => ({
75318
+ pool_key: {
75319
+ token0: route.pool_key.token0.toBigInt(),
75320
+ token1: route.pool_key.token1.toBigInt(),
75321
+ fee: route.pool_key.fee,
75322
+ tick_spacing: route.pool_key.tick_spacing,
75323
+ extension: BigInt(num_exports.hexToDecimalString(route.pool_key.extension))
75324
+ },
75325
+ sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
75326
+ skip_ahead: BigInt(100)
75327
+ })),
75328
+ token_amount: {
75329
+ token: swap.token_amount.token.toBigInt(),
75330
+ amount: swap.token_amount.amount.toI129()
75331
+ }
75332
+ })),
75333
+ margin_swap_limit_amount: BigInt(_params2.margin_swap_limit_amount.toWei()),
75334
+ lever_swap: _params2.lever_swap.map((swap) => ({
75335
+ route: swap.route.map((route) => ({
75336
+ pool_key: {
75337
+ token0: route.pool_key.token0.toBigInt(),
75338
+ token1: route.pool_key.token1.toBigInt(),
75339
+ fee: route.pool_key.fee,
75340
+ tick_spacing: route.pool_key.tick_spacing,
75341
+ extension: BigInt(num_exports.hexToDecimalString(route.pool_key.extension))
75342
+ },
75343
+ sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
75344
+ skip_ahead: BigInt(100)
75345
+ })),
75346
+ token_amount: {
75347
+ token: swap.token_amount.token.toBigInt(),
75348
+ amount: swap.token_amount.amount.toI129()
75349
+ }
75350
+ })),
75351
+ lever_swap_limit_amount: BigInt(_params2.lever_swap_limit_amount.toWei())
75352
+ } })
75353
+ };
75354
+ }
75355
+ const _params = params;
75356
+ return {
75357
+ action: new CairoCustomEnum({ DecreaseLever: {
75358
+ pool_id: _params.pool_id.toBigInt(),
75359
+ collateral_asset: _params.collateral_asset.toBigInt(),
75360
+ debt_asset: _params.debt_asset.toBigInt(),
75361
+ user: _params.user.toBigInt(),
75362
+ sub_margin: BigInt(_params.sub_margin.toWei()),
75363
+ recipient: _params.recipient.toBigInt(),
75364
+ lever_swap: _params.lever_swap.map((swap) => ({
75365
+ route: swap.route.map((route) => ({
75366
+ pool_key: {
75367
+ token0: route.pool_key.token0.toBigInt(),
75368
+ token1: route.pool_key.token1.toBigInt(),
75369
+ fee: route.pool_key.fee,
75370
+ tick_spacing: route.pool_key.tick_spacing,
75371
+ extension: ContractAddr.from(route.pool_key.extension).toBigInt()
75372
+ },
75373
+ sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
75374
+ skip_ahead: BigInt(route.skip_ahead.toWei())
75375
+ })),
75376
+ token_amount: {
75377
+ token: swap.token_amount.token.toBigInt(),
75378
+ amount: swap.token_amount.amount.toI129()
75379
+ }
75380
+ })),
75381
+ lever_swap_limit_amount: BigInt(_params.lever_swap_limit_amount.toWei()),
75382
+ lever_swap_weights: _params.lever_swap_weights.map((weight) => BigInt(weight.toWei())),
75383
+ withdraw_swap: _params.withdraw_swap.map((swap) => ({
75384
+ route: swap.route.map((route) => ({
75385
+ pool_key: {
75386
+ token0: route.pool_key.token0.toBigInt(),
75387
+ token1: route.pool_key.token1.toBigInt(),
75388
+ fee: route.pool_key.fee,
75389
+ tick_spacing: route.pool_key.tick_spacing,
75390
+ extension: ContractAddr.from(route.pool_key.extension).toBigInt()
75391
+ },
75392
+ sqrt_ratio_limit: uint256_exports.bnToUint256(route.sqrt_ratio_limit.toWei()),
75393
+ skip_ahead: BigInt(route.skip_ahead.toWei())
75394
+ })),
75395
+ token_amount: {
75396
+ token: swap.token_amount.token.toBigInt(),
75397
+ amount: swap.token_amount.amount.toI129()
75398
+ }
75399
+ })),
75400
+ withdraw_swap_limit_amount: BigInt(_params.withdraw_swap_limit_amount.toWei()),
75401
+ withdraw_swap_weights: _params.withdraw_swap_weights.map((weight) => BigInt(weight.toWei())),
75402
+ close_position: _params.close_position
75403
+ } })
75404
+ };
75405
+ }
75406
+ var VesuPools = {
75407
+ Genesis: ContractAddr.from("0x4dc4f0ca6ea4961e4c8373265bfd5317678f4fe374d76f3fd7135f57763bf28"),
75408
+ Re7xSTRK: ContractAddr.from("0x052fb52363939c3aa848f8f4ac28f0a51379f8d1b971d8444de25fbd77d8f161"),
75409
+ Re7xBTC: ContractAddr.from("0x3a8416bf20d036df5b1cf3447630a2e1cb04685f6b0c3a70ed7fb1473548ecf")
75410
+ };
75411
+ function getVesuSingletonAddress(vesuPool) {
75412
+ if (vesuPool.eq(VesuPools.Genesis) || vesuPool.eq(VesuPools.Re7xSTRK)) {
75413
+ return { addr: VESU_SINGLETON, isV2: false };
75414
+ }
75415
+ return { addr: vesuPool, isV2: true };
75416
+ }
75417
+ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
75418
+ constructor(config3) {
75419
+ super();
75420
+ this.VESU_MULTIPLY = ContractAddr.from("0x027fef272d0a9a3844767c851a64b36fe4f0115141d81134baade95d2b27b781");
75421
+ this.getModifyPosition = () => {
75422
+ const positionData = [0n];
75423
+ const packedArguments = [
75424
+ toBigInt3(this.config.poolId.toString()),
75425
+ // pool id
75426
+ toBigInt3(this.config.collateral.address.toString()),
75427
+ // collateral
75428
+ toBigInt3(this.config.debt.address.toString()),
75429
+ // debt
75430
+ toBigInt3(this.config.vaultAllocator.toString()),
75431
+ // vault allocator
75432
+ toBigInt3(positionData.length),
75433
+ ...positionData
75434
+ ];
75435
+ const output = this.constructSimpleLeafData({
75436
+ id: this.config.id,
75437
+ target: getVesuSingletonAddress(this.config.poolId).addr,
75438
+ method: "modify_position",
75439
+ packedArguments
75440
+ });
75441
+ return { leaf: output, callConstructor: this.getModifyPositionCall.bind(this) };
75442
+ };
75443
+ this.getModifyPositionCall = (params) => {
75444
+ const _collateral = {
75445
+ amount_type: this.formatAmountTypeEnum(params.collateralAmount.amount_type),
75446
+ denomination: this.formatAmountDenominationEnum(params.collateralAmount.denomination),
75447
+ value: {
75448
+ abs: uint256_exports.bnToUint256(params.collateralAmount.value.abs.toWei()),
75449
+ is_negative: params.collateralAmount.value.abs.isZero() ? false : params.collateralAmount.value.is_negative
75450
+ }
75451
+ };
75452
+ logger2.verbose(`VesuAdapter::ConstructingModify::Collateral::${JSON.stringify(_collateral)}`);
75453
+ const _debt = {
75454
+ amount_type: this.formatAmountTypeEnum(params.debtAmount.amount_type),
75455
+ denomination: this.formatAmountDenominationEnum(params.debtAmount.denomination),
75456
+ value: {
75457
+ abs: uint256_exports.bnToUint256(params.debtAmount.value.abs.toWei()),
75458
+ is_negative: params.debtAmount.value.abs.isZero() ? false : params.debtAmount.value.is_negative
75459
+ }
75460
+ };
75461
+ logger2.verbose(`VesuAdapter::ConstructingModify::Debt::${JSON.stringify(_debt)}`);
75462
+ const { contract, isV2 } = this.getVesuSingletonContract(getMainnetConfig(), this.config.poolId);
75463
+ const call = contract.populate("modify_position", {
75464
+ params: isV2 ? {
75465
+ collateral_asset: this.config.collateral.address.toBigInt(),
75466
+ debt_asset: this.config.debt.address.toBigInt(),
75467
+ user: this.config.vaultAllocator.toBigInt(),
75468
+ collateral: _collateral,
75469
+ debt: _debt
75470
+ } : {
75471
+ pool_id: this.config.poolId.toBigInt(),
75472
+ collateral_asset: this.config.collateral.address.toBigInt(),
75473
+ debt_asset: this.config.debt.address.toBigInt(),
75474
+ user: this.config.vaultAllocator.toBigInt(),
75475
+ collateral: _collateral,
75476
+ debt: _debt,
75477
+ data: [0]
75478
+ }
75479
+ });
75480
+ return {
75481
+ sanitizer: SIMPLE_SANITIZER,
75482
+ call: {
75483
+ contractAddress: ContractAddr.from(contract.address),
75484
+ selector: hash_exports.getSelectorFromName("modify_position"),
75485
+ calldata: [
75486
+ ...call.calldata
75487
+ ]
75488
+ }
75489
+ };
75490
+ };
75491
+ this.getMultiplyAdapter = () => {
75492
+ const packedArguments = [
75493
+ toBigInt3(this.config.poolId.toString()),
75494
+ // pool id
75495
+ toBigInt3(this.config.collateral.address.toString()),
75496
+ // collateral
75497
+ toBigInt3(this.config.debt.address.toString()),
75498
+ // debt
75499
+ toBigInt3(this.config.vaultAllocator.toString())
75500
+ // vault allocator
75501
+ ];
75502
+ const output = this.constructSimpleLeafData({
75503
+ id: this.config.id,
75504
+ target: this.VESU_MULTIPLY,
75505
+ method: "modify_lever",
75506
+ packedArguments
75507
+ }, SIMPLE_SANITIZER_V2);
75508
+ return { leaf: output, callConstructor: this.getMultiplyCall.bind(this) };
75509
+ };
75510
+ this.getMultiplyCall = (params) => {
75511
+ const isIncrease = params.isIncrease;
75512
+ const multiplyParams = isIncrease ? params.increaseParams : params.decreaseParams;
75513
+ if (!multiplyParams) {
75514
+ throw new Error("Multiply params are not provided");
75515
+ }
75516
+ const multiplyContract = new Contract({ abi: vesu_multiple_abi_default, address: this.VESU_MULTIPLY.toString(), providerOrAccount: new RpcProvider2({ nodeUrl: "" }) });
75517
+ const call = multiplyContract.populate("modify_lever", {
75518
+ modify_lever_params: getVesuMultiplyParams(isIncrease, {
75519
+ ...multiplyParams,
75520
+ user: this.config.vaultAllocator,
75521
+ pool_id: this.config.poolId,
75522
+ collateral_asset: this.config.collateral.address,
75523
+ debt_asset: this.config.debt.address,
75524
+ recipient: this.config.vaultAllocator
75525
+ })
75526
+ });
75527
+ return {
75528
+ sanitizer: SIMPLE_SANITIZER_V2,
75529
+ call: {
75530
+ contractAddress: this.VESU_MULTIPLY,
75531
+ selector: hash_exports.getSelectorFromName("modify_lever"),
75532
+ calldata: [
75533
+ ...call.calldata
75534
+ ]
75535
+ }
75536
+ };
75537
+ };
75538
+ this.getVesuModifyDelegationAdapter = (id) => {
75539
+ return () => {
75540
+ const packedArguments = [
75541
+ toBigInt3(this.VESU_MULTIPLY.toString())
75542
+ // vault allocator
75543
+ ];
75544
+ const output = this.constructSimpleLeafData({
75545
+ id,
75546
+ target: getVesuSingletonAddress(this.config.poolId).addr,
75547
+ method: "modify_delegation",
75548
+ packedArguments
75549
+ }, SIMPLE_SANITIZER_V2);
75550
+ return { leaf: output, callConstructor: this.getVesuModifyDelegationCall.bind(this) };
75551
+ };
75552
+ };
75553
+ this.getVesuModifyDelegationCall = (params) => {
75554
+ const VESU_SINGLETON2 = getVesuSingletonAddress(this.config.poolId).addr;
75555
+ const { contract, isV2 } = this.getVesuSingletonContract(getMainnetConfig(), this.config.poolId);
75556
+ const call = contract.populate("modify_delegation", isV2 ? {
75557
+ delegatee: this.VESU_MULTIPLY.toBigInt(),
75558
+ delegation: params.delegation
75559
+ } : {
75560
+ pool_id: this.config.poolId.toBigInt(),
75561
+ delegatee: this.VESU_MULTIPLY.toBigInt(),
75562
+ delegation: params.delegation
75563
+ });
75564
+ return {
75565
+ sanitizer: SIMPLE_SANITIZER_V2,
75566
+ call: {
75567
+ contractAddress: VESU_SINGLETON2,
75568
+ selector: hash_exports.getSelectorFromName("modify_delegation"),
75569
+ calldata: [
75570
+ ...call.calldata
75571
+ ]
75572
+ }
75573
+ };
75574
+ };
75575
+ this.getDefispringRewardsAdapter = (id) => {
75576
+ return () => {
75577
+ const packedArguments = [];
75578
+ const output = {
75579
+ id: BigInt(num_exports.getDecimalString(shortString_exports.encodeShortString(id))),
75580
+ readableId: id,
75581
+ data: [
75582
+ SIMPLE_SANITIZER.toBigInt(),
75583
+ // sanitizer address
75584
+ VESU_REWARDS_CONTRACT.toBigInt(),
75585
+ // contract
75586
+ toBigInt3(hash_exports.getSelectorFromName("claim")),
75587
+ // method name
75588
+ BigInt(packedArguments.length),
75589
+ ...packedArguments
75590
+ ]
75591
+ };
75592
+ return { leaf: output, callConstructor: this.getDefiSpringClaimCall().bind(this) };
75593
+ };
75594
+ };
75595
+ this.getDefiSpringClaimCall = () => {
75596
+ return (params) => ({
75597
+ sanitizer: SIMPLE_SANITIZER,
75598
+ call: {
75599
+ contractAddress: VESU_REWARDS_CONTRACT,
75600
+ selector: hash_exports.getSelectorFromName("claim"),
75601
+ calldata: [
75602
+ BigInt(params.amount.toWei()),
75603
+ BigInt(params.proofs.length),
75604
+ ...params.proofs.map((proof) => BigInt(num_exports.hexToDecimalString(proof)))
75605
+ ]
75606
+ }
75607
+ });
75608
+ };
75609
+ this.config = config3;
75610
+ }
75611
+ static getDefaultModifyPositionCallParams(params) {
75612
+ return {
75613
+ collateralAmount: {
75614
+ amount_type: 0 /* Delta */,
75615
+ denomination: 1 /* Assets */,
75616
+ value: {
75617
+ abs: params.collateralAmount,
75618
+ is_negative: !params.isAddCollateral
75619
+ }
75620
+ },
75621
+ debtAmount: {
75622
+ amount_type: 0 /* Delta */,
75623
+ denomination: 1 /* Assets */,
75624
+ value: {
75625
+ abs: params.debtAmount,
75626
+ is_negative: !params.isBorrow
75627
+ }
75628
+ }
75629
+ };
75630
+ }
75631
+ formatAmountTypeEnum(amountType) {
75632
+ switch (amountType) {
75633
+ case 0 /* Delta */:
75634
+ return new CairoCustomEnum({ Delta: {} });
75635
+ case 1 /* Target */:
75636
+ return new CairoCustomEnum({ Target: {} });
75637
+ }
75638
+ throw new Error(`Unknown VesuAmountType: ${amountType}`);
75639
+ }
75640
+ formatAmountDenominationEnum(denomination) {
75641
+ switch (denomination) {
75642
+ case 0 /* Native */:
75643
+ return new CairoCustomEnum({ Native: {} });
75644
+ case 1 /* Assets */:
75645
+ return new CairoCustomEnum({ Assets: {} });
75646
+ }
75647
+ throw new Error(`Unknown VesuAmountDenomination: ${denomination}`);
75648
+ }
75649
+ getVesuSingletonContract(config3, poolId) {
75650
+ const { addr: VESU_SINGLETON2, isV2 } = getVesuSingletonAddress(poolId);
75651
+ const ABI = isV2 ? vesu_pool_v2_abi_default : vesu_singleton_abi_default;
75652
+ return {
75653
+ contract: new Contract({ abi: ABI, address: VESU_SINGLETON2.address, providerOrAccount: config3.provider }),
75654
+ isV2
75655
+ };
75656
+ }
75657
+ async getLTVConfig(config3) {
75658
+ const CACHE_KEY = "ltv_config";
75659
+ const cacheData = this.getCache(CACHE_KEY);
75660
+ if (cacheData) {
75661
+ return cacheData;
75662
+ }
75663
+ const { contract, isV2 } = await this.getVesuSingletonContract(config3, this.config.poolId);
75664
+ let ltv = 0;
75665
+ if (isV2) {
75666
+ const output = await contract.call("pair_config", [this.config.collateral.address.address, this.config.debt.address.address]);
75667
+ ltv = Number(output.max_ltv) / 1e18;
75668
+ } else {
75669
+ const output = await contract.call("ltv_config", [this.config.poolId.address, this.config.collateral.address.address, this.config.debt.address.address]);
75670
+ ltv = Number(output.max_ltv) / 1e18;
75671
+ }
75672
+ this.setCache(CACHE_KEY, ltv, 3e5);
75673
+ return this.getCache(CACHE_KEY);
75674
+ }
75675
+ async getPositions(config3) {
75676
+ if (!this.pricer) {
75677
+ throw new Error("Pricer is not initialized");
75678
+ }
75679
+ const CACHE_KEY = "positions";
75680
+ const cacheData = this.getCache(CACHE_KEY);
75681
+ if (cacheData) {
75682
+ return cacheData;
75683
+ }
75684
+ const { contract, isV2 } = this.getVesuSingletonContract(config3, this.config.poolId);
75685
+ const output = await contract.call(isV2 ? "position" : "position_unsafe", [
75686
+ ...isV2 ? [] : [this.config.poolId.address],
75687
+ // exclude pool id in v2
75688
+ this.config.collateral.address.address,
75689
+ this.config.debt.address.address,
75690
+ this.config.vaultAllocator.address
75691
+ ]);
75692
+ const token1Price = await this.pricer.getPrice(this.config.collateral.symbol);
75693
+ const token2Price = await this.pricer.getPrice(this.config.debt.symbol);
75694
+ logger2.verbose(`VesuAdapter::getPositions token1Price: ${token1Price.price}, token2Price: ${token2Price.price}`);
75695
+ const collateralAmount = Web3Number.fromWei(output["1"].toString(), this.config.collateral.decimals);
75696
+ const debtAmount = Web3Number.fromWei(output["2"].toString(), this.config.debt.decimals);
75697
+ const value = [{
75698
+ amount: collateralAmount,
75699
+ token: this.config.collateral,
75700
+ usdValue: collateralAmount.multipliedBy(token1Price.price).toNumber(),
75701
+ remarks: "Collateral"
75702
+ }, {
75703
+ amount: debtAmount,
75704
+ token: this.config.debt,
75705
+ usdValue: debtAmount.multipliedBy(token2Price.price).toNumber(),
75706
+ remarks: "Debt"
75707
+ }];
75708
+ this.setCache(CACHE_KEY, value, 6e4);
75709
+ return value;
75710
+ }
75711
+ async getCollateralization(config3) {
75712
+ if (!this.pricer) {
75713
+ throw new Error("Pricer is not initialized");
75714
+ }
75715
+ const CACHE_KEY = "collateralization";
75716
+ const cacheData = this.getCache(CACHE_KEY);
75717
+ if (cacheData) {
75718
+ return cacheData;
75719
+ }
75720
+ const { contract, isV2 } = this.getVesuSingletonContract(config3, this.config.poolId);
75721
+ const output = await contract.call(isV2 ? "check_collateralization" : "check_collateralization_unsafe", [
75722
+ ...isV2 ? [] : [this.config.poolId.address],
75723
+ // exclude pool id in v2
75724
+ this.config.collateral.address.address,
75725
+ this.config.debt.address.address,
75726
+ this.config.vaultAllocator.address
75727
+ ]);
75728
+ const collateralAmount = Web3Number.fromWei(output["1"].toString(), 18);
75729
+ const debtAmount = Web3Number.fromWei(output["2"].toString(), 18);
75730
+ const value = [{
75731
+ token: this.config.collateral,
75732
+ usdValue: collateralAmount.toNumber(),
75733
+ remarks: "Collateral"
75734
+ }, {
75735
+ token: this.config.debt,
75736
+ usdValue: debtAmount.toNumber(),
75737
+ remarks: "Debt"
75738
+ }];
75739
+ this.setCache(CACHE_KEY, value, 6e4);
75740
+ return value;
75741
+ }
75742
+ async getAssetPrices() {
75743
+ const collateralizationProm = this.getCollateralization(this.networkConfig);
75744
+ const positionsProm = this.getPositions(this.networkConfig);
75745
+ const ltvProm = this.getLTVConfig(this.networkConfig);
75746
+ const output = await Promise.all([collateralizationProm, positionsProm, ltvProm]);
75747
+ const [collateralization, positions, ltv] = output;
75748
+ const collateralTokenAmount = positions[0].amount;
75749
+ const collateralUSDAmount = collateralization[0].usdValue;
75750
+ const collateralPrice = collateralUSDAmount / collateralTokenAmount.toNumber();
75751
+ const debtTokenAmount = positions[1].amount;
75752
+ const debtUSDAmount = collateralization[1].usdValue;
75753
+ const debtPrice = debtUSDAmount / debtTokenAmount.toNumber();
75754
+ return {
75755
+ collateralTokenAmount,
75756
+ collateralUSDAmount,
75757
+ collateralPrice,
75758
+ debtTokenAmount,
75759
+ debtUSDAmount,
75760
+ debtPrice,
75761
+ ltv
75762
+ };
75763
+ }
75764
+ async getHealthFactor() {
75765
+ const ltv = await this.getLTVConfig(this.networkConfig);
75766
+ const collateralisation = await this.getCollateralization(this.networkConfig);
75767
+ return collateralisation[0].usdValue * ltv / collateralisation[1].usdValue;
75768
+ }
75769
+ static async getVesuPools(retry = 0) {
75770
+ const CACHE_KEY = "VESU_POOLS";
75771
+ const cacheValue = Global.getGlobalCache(CACHE_KEY);
75772
+ if (cacheValue) {
75773
+ return cacheValue;
75774
+ }
75775
+ let isErrorPoolsAPI = false;
75776
+ let pools = [];
75777
+ try {
75778
+ const data = await getAPIUsingHeadlessBrowser(
75779
+ `${ENDPOINTS.VESU_BASE}/pools`
75780
+ );
75781
+ pools = data.data;
75782
+ for (const pool of vesu_pools_default.data) {
75783
+ const found = pools.find((d) => ContractAddr.from(d.id).eqString(pool.id));
75784
+ if (!found) {
75785
+ logger2.verbose(`VesuRebalance: pools: ${JSON.stringify(pools)}`);
75786
+ logger2.verbose(
75787
+ `VesuRebalance: Pool ${pool.id} not found in Vesu API, using hardcoded data`
75788
+ );
75789
+ throw new Error(`pool not found [sanity check]: ${pool.id}`);
75790
+ }
75791
+ }
75792
+ } catch (e) {
75793
+ logger2.error(
75794
+ `${_VesuAdapter.name}: Error fetching pools for retry ${retry}`,
75795
+ e
75796
+ );
75797
+ isErrorPoolsAPI = true;
75798
+ if (retry < 10) {
75799
+ await new Promise((resolve) => setTimeout(resolve, 5e3 * (retry + 1)));
75800
+ return await this.getVesuPools(retry + 1);
75801
+ }
75802
+ }
75803
+ Global.setGlobalCache(CACHE_KEY, { pools, isErrorPoolsAPI }, 3e5);
75804
+ return { pools, isErrorPoolsAPI };
75805
+ }
75806
+ };
75807
+
75808
+ // src/data/universal-vault.abi.json
75809
+ var universal_vault_abi_default = [
75810
+ {
75811
+ type: "impl",
75812
+ name: "UpgradeableImpl",
75813
+ interface_name: "openzeppelin_upgrades::interface::IUpgradeable"
75814
+ },
75815
+ {
75816
+ type: "interface",
75817
+ name: "openzeppelin_upgrades::interface::IUpgradeable",
75818
+ items: [
75819
+ {
75820
+ type: "function",
75821
+ name: "upgrade",
75822
+ inputs: [
75823
+ {
75824
+ name: "new_class_hash",
75825
+ type: "core::starknet::class_hash::ClassHash"
75826
+ }
75827
+ ],
75828
+ outputs: [],
75829
+ state_mutability: "external"
75830
+ }
75831
+ ]
75832
+ },
75833
+ {
75834
+ type: "impl",
75835
+ name: "VaultMetadataImpl",
75836
+ interface_name: "openzeppelin_token::erc20::interface::IERC20Metadata"
75837
+ },
73899
75838
  {
73900
75839
  type: "struct",
73901
75840
  name: "core::byte_array::ByteArray",
@@ -76228,12 +78167,12 @@ ${JSON.stringify(data, null, 2)}`;
76228
78167
  const rewardAPYs = [];
76229
78168
  for (const [index, pool] of pools.entries()) {
76230
78169
  const vesuAdapter = vesuAdapters[index];
76231
- const collateralAsset = pool.assets.find((a) => a.symbol === vesuAdapter.config.collateral.symbol)?.stats;
76232
- const debtAsset = pool.assets.find((a) => a.symbol === vesuAdapter.config.debt.symbol)?.stats;
78170
+ const collateralAsset = pool.assets.find((a) => a.symbol.toLowerCase() === vesuAdapter.config.collateral.symbol.toLowerCase())?.stats;
78171
+ const debtAsset = pool.assets.find((a) => a.symbol.toLowerCase() === vesuAdapter.config.debt.symbol.toLowerCase())?.stats;
76233
78172
  const supplyApy = Number(collateralAsset.supplyApy.value || 0) / 1e18;
76234
78173
  const lstAPY = Number(collateralAsset.lstApr?.value || 0) / 1e18;
76235
78174
  baseAPYs.push(...[supplyApy + lstAPY, Number(debtAsset.borrowApr.value) / 1e18]);
76236
- rewardAPYs.push(...[Number(collateralAsset.defiSpringSupplyApr.value || "0") / 1e18, 0]);
78175
+ rewardAPYs.push(...[Number(collateralAsset.defiSpringSupplyApr?.value || "0") / 1e18, 0]);
76237
78176
  }
76238
78177
  logger2.verbose(`${this.metadata.name}::netAPY: baseAPYs: ${JSON.stringify(baseAPYs)}`);
76239
78178
  logger2.verbose(`${this.metadata.name}::netAPY: rewardAPYs: ${JSON.stringify(rewardAPYs)}`);
@@ -76303,6 +78242,7 @@ ${JSON.stringify(data, null, 2)}`;
76303
78242
  const underlying = this.asset();
76304
78243
  let vesuAum = Web3Number.fromWei("0", underlying.decimals);
76305
78244
  let tokenUnderlyingPrice = await this.pricer.getPrice(this.asset().symbol);
78245
+ logger2.verbose(`${this.getTag()} tokenUnderlyingPrice: ${tokenUnderlyingPrice.price}`);
76306
78246
  if (legAUM[0].token.address.eq(underlying.address)) {
76307
78247
  vesuAum = vesuAum.plus(legAUM[0].amount);
76308
78248
  } else {
@@ -76403,7 +78343,7 @@ ${JSON.stringify(data, null, 2)}`;
76403
78343
  amount: unusedBalance.amount,
76404
78344
  usdValue: unusedBalance.usdValue,
76405
78345
  token: this.asset(),
76406
- remarks: "Unused Balance"
78346
+ remarks: "Unused Balance (may not include recent deposits)"
76407
78347
  }];
76408
78348
  }
76409
78349
  getSetManagerCall(strategist, root = this.getMerkleRoot()) {
@@ -76741,8 +78681,8 @@ ${JSON.stringify(data, null, 2)}`;
76741
78681
  vaultSettings.leafAdapters.push(commonAdapter.getFlashloanAdapter.bind(commonAdapter));
76742
78682
  vaultSettings.leafAdapters.push(vesuAdapterUSDCETH.getModifyPosition.bind(vesuAdapterUSDCETH));
76743
78683
  vaultSettings.leafAdapters.push(vesuAdapterETHUSDC.getModifyPosition.bind(vesuAdapterETHUSDC));
76744
- vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(USDCToken.address, vesuAdapterUSDCETH.VESU_SINGLETON, "approve_token1" /* APPROVE_TOKEN1 */).bind(commonAdapter));
76745
- vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(ETHToken.address, vesuAdapterETHUSDC.VESU_SINGLETON, "approve_token2" /* APPROVE_TOKEN2 */).bind(commonAdapter));
78684
+ vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(USDCToken.address, VESU_SINGLETON, "approve_token1" /* APPROVE_TOKEN1 */).bind(commonAdapter));
78685
+ vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(ETHToken.address, VESU_SINGLETON, "approve_token2" /* APPROVE_TOKEN2 */).bind(commonAdapter));
76746
78686
  vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(USDCToken.address, vaultSettings.vaultAddress, "approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */).bind(commonAdapter));
76747
78687
  vaultSettings.leafAdapters.push(commonAdapter.getBringLiquidityAdapter("bring_liquidity" /* BRING_LIQUIDITY */).bind(commonAdapter));
76748
78688
  vaultSettings.leafAdapters.push(vesuAdapterUSDCETH.getDefispringRewardsAdapter("defispring_rewards" /* DEFISPRING_REWARDS */).bind(vesuAdapterUSDCETH));
@@ -77045,7 +78985,7 @@ ${JSON.stringify(data, null, 2)}`;
77045
78985
 
77046
78986
  // src/strategies/universal-lst-muliplier-strategy.tsx
77047
78987
  var import_jsx_runtime5 = __toESM(require_jsx_runtime());
77048
- var UniversalLstMultiplierStrategy = class extends UniversalStrategy {
78988
+ var UniversalLstMultiplierStrategy = class _UniversalLstMultiplierStrategy extends UniversalStrategy {
77049
78989
  constructor(config3, pricer, metadata) {
77050
78990
  super(config3, pricer, metadata);
77051
78991
  this.quoteAmountToFetchPrice = new Web3Number(1, 18);
@@ -77057,8 +78997,15 @@ ${JSON.stringify(data, null, 2)}`;
77057
78997
  this.quoteAmountToFetchPrice = new Web3Number(0.01, this.asset().decimals);
77058
78998
  }
77059
78999
  }
79000
+ asset() {
79001
+ const vesuAdapter1 = this.getAdapter("vesu_leg1_adapter" /* VESU_LEG1 */);
79002
+ return vesuAdapter1.config.collateral;
79003
+ }
79004
+ getTag() {
79005
+ return `${_UniversalLstMultiplierStrategy.name}:${this.metadata.name}`;
79006
+ }
77060
79007
  // only one leg is used
77061
- // todo support lending assets of underlying as well
79008
+ // todo support lending assets of underlying as well (like if xSTRK looping is not viable, simply supply STRK)
77062
79009
  getVesuAdapters() {
77063
79010
  const vesuAdapter1 = this.getAdapter("vesu_leg1_adapter" /* VESU_LEG1 */);
77064
79011
  vesuAdapter1.pricer = this.pricer;
@@ -77067,9 +79014,13 @@ ${JSON.stringify(data, null, 2)}`;
77067
79014
  }
77068
79015
  // not applicable for this strategy
77069
79016
  // No rewards on collateral or borrowing of LST assets
77070
- // protected async getRewardsAUM(prevAum: Web3Number): Promise<Web3Number> {
77071
- // return Web3Number.fromWei("0", this.asset().decimals);
77072
- // }
79017
+ async getRewardsAUM(prevAum) {
79018
+ const lstToken = this.asset();
79019
+ if (lstToken.symbol === "xSTRK") {
79020
+ return super.getRewardsAUM(prevAum);
79021
+ }
79022
+ return Web3Number.fromWei("0", lstToken.decimals);
79023
+ }
77073
79024
  async getLSTDexPrice() {
77074
79025
  const ekuboQuoter = new EkuboQuoter(this.config);
77075
79026
  const lstTokenInfo = this.asset();
@@ -77092,6 +79043,7 @@ ${JSON.stringify(data, null, 2)}`;
77092
79043
  async getVesuMultiplyCall(params) {
77093
79044
  const [vesuAdapter1] = this.getVesuAdapters();
77094
79045
  const legLTV = await vesuAdapter1.getLTVConfig(this.config);
79046
+ logger2.verbose(`${this.getTag()}::getVesuMultiplyCall legLTV: ${legLTV}`);
77095
79047
  const existingPositions = await vesuAdapter1.getPositions(this.config);
77096
79048
  const collateralisation = await vesuAdapter1.getCollateralization(this.config);
77097
79049
  const existingCollateralInfo = existingPositions[0];
@@ -77105,8 +79057,11 @@ ${JSON.stringify(data, null, 2)}`;
77105
79057
  const addedCollateral = params.leg1DepositAmount.multipliedBy(params.isDeposit ? 1 : -1);
77106
79058
  logger2.verbose(`${this.getTag()}::getVesuMultiplyCall addedCollateral: ${addedCollateral}`);
77107
79059
  const numeratorPart1 = existingCollateralInfo.amount.plus(addedCollateral).multipliedBy(collateralPrice).multipliedBy(legLTV);
79060
+ logger2.verbose(`${this.getTag()}::getVesuMultiplyCall numeratorPart1: ${numeratorPart1}`);
77108
79061
  const numeratorPart2 = existingDebtInfo.amount.multipliedBy(debtPrice).multipliedBy(this.metadata.additionalInfo.targetHealthFactor);
79062
+ logger2.verbose(`${this.getTag()}::getVesuMultiplyCall numeratorPart2: ${numeratorPart2}`);
77109
79063
  const denominatorPart = this.metadata.additionalInfo.targetHealthFactor - legLTV / dexPrice;
79064
+ logger2.verbose(`${this.getTag()}::getVesuMultiplyCall denominatorPart: ${denominatorPart}`);
77110
79065
  const x_debt_usd = numeratorPart1.minus(numeratorPart2).dividedBy(denominatorPart);
77111
79066
  logger2.verbose(`${this.getTag()}::getVesuMultiplyCall x_debt_usd: ${x_debt_usd}`);
77112
79067
  logger2.debug(`${this.getTag()}::getVesuMultiplyCall numeratorPart1: ${numeratorPart1}, numeratorPart2: ${numeratorPart2}, denominatorPart: ${denominatorPart}`);
@@ -77142,10 +79097,15 @@ ${JSON.stringify(data, null, 2)}`;
77142
79097
  * @param params marginAmount is in LST, debtAmount is in underlying
77143
79098
  */
77144
79099
  async getModifyLeverCall(params) {
79100
+ logger2.verbose(`${this.getTag()}::getModifyLeverCall marginAmount: ${params.marginAmount}, debtAmount: ${params.debtAmount}, lstDexPriceInUnderlying: ${params.lstDexPriceInUnderlying}, isIncrease: ${params.isIncrease}`);
77145
79101
  assert3(!params.marginAmount.isZero() || !params.debtAmount.isZero(), "Deposit/debt must be non-0");
77146
79102
  const [vesuAdapter1] = this.getVesuAdapters();
77147
79103
  const lstTokenInfo = this.asset();
77148
79104
  const lstUnderlyingTokenInfo = vesuAdapter1.config.debt;
79105
+ const maxAmounts = lstTokenInfo.symbol == "xSTRK" ? 5e5 : 0.5;
79106
+ if (params.marginAmount.greaterThan(maxAmounts)) {
79107
+ throw new Error(`Margin amount is greater than max amount: ${params.marginAmount.toNumber()} > ${maxAmounts}`);
79108
+ }
77149
79109
  const proofsIDs = [];
77150
79110
  const manageCalls = [];
77151
79111
  if (params.marginAmount.greaterThan(0)) {
@@ -77159,9 +79119,9 @@ ${JSON.stringify(data, null, 2)}`;
77159
79119
  manageCalls.push(manageCall1);
77160
79120
  }
77161
79121
  const lstDexPriceInUnderlying = params.lstDexPriceInUnderlying;
79122
+ const lstTrueExchangeRate = await this.getLSTExchangeRate();
77162
79123
  const ekuboQuoter = new EkuboQuoter(this.config);
77163
- const marginSwap = [];
77164
- const MAX_SLIPPAGE = 0.01;
79124
+ const MAX_SLIPPAGE = 2e-3;
77165
79125
  const fromToken = params.isIncrease ? lstUnderlyingTokenInfo : lstTokenInfo;
77166
79126
  const toToken = params.isIncrease ? lstTokenInfo : lstUnderlyingTokenInfo;
77167
79127
  const leverSwapQuote = await ekuboQuoter.getQuote(
@@ -77170,10 +79130,22 @@ ${JSON.stringify(data, null, 2)}`;
77170
79130
  params.debtAmount
77171
79131
  // negative for exact amount out
77172
79132
  );
77173
- assert3(leverSwapQuote.price_impact < MAX_SLIPPAGE, "getIncreaseLeverCall: Price impact is too high [Debt swap]");
79133
+ logger2.verbose(`${this.getTag()}::getModifyLeverCall leverSwapQuote: ${JSON.stringify(leverSwapQuote)}`);
79134
+ assert3(leverSwapQuote.price_impact < 0.01, "getIncreaseLeverCall: Price impact is too high [Debt swap]");
77174
79135
  const leverSwap = ekuboQuoter.getVesuMultiplyQuote(leverSwapQuote, fromToken, toToken);
77175
- const minExpectedDebt = params.debtAmount.dividedBy(lstDexPriceInUnderlying).multipliedBy(1 - MAX_SLIPPAGE);
77176
- const maxUsedCollateral = params.debtAmount.abs().dividedBy(lstDexPriceInUnderlying).multipliedBy(1 + MAX_SLIPPAGE);
79136
+ logger2.verbose(`${this.getTag()}::getModifyLeverCall leverSwap: ${JSON.stringify(leverSwap)}`);
79137
+ let minLSTReceived = params.debtAmount.dividedBy(lstDexPriceInUnderlying).multipliedBy(1 - MAX_SLIPPAGE);
79138
+ const minLSTReceivedAsPerTruePrice = params.debtAmount.dividedBy(lstTrueExchangeRate);
79139
+ if (minLSTReceived < minLSTReceivedAsPerTruePrice) {
79140
+ minLSTReceived = minLSTReceivedAsPerTruePrice;
79141
+ }
79142
+ logger2.verbose(`${this.getTag()}::getModifyLeverCall minLSTReceivedAsPerTruePrice: ${minLSTReceivedAsPerTruePrice}, minLSTReceived: ${minLSTReceived}`);
79143
+ let maxUsedCollateral = params.debtAmount.abs().dividedBy(lstDexPriceInUnderlying).multipliedBy(1 + MAX_SLIPPAGE);
79144
+ const maxUsedCollateralInLST = params.debtAmount.abs().dividedBy(lstTrueExchangeRate).multipliedBy(1.005);
79145
+ logger2.verbose(`${this.getTag()}::getModifyLeverCall maxUsedCollateralInLST: ${maxUsedCollateralInLST}, maxUsedCollateral: ${maxUsedCollateral}`);
79146
+ if (maxUsedCollateralInLST > maxUsedCollateral) {
79147
+ maxUsedCollateral = maxUsedCollateralInLST;
79148
+ }
77177
79149
  const STEP2_ID = "switch_delegation_on" /* SWITCH_DELEGATION_ON */;
77178
79150
  const manage2Info = this.getProofs(STEP2_ID);
77179
79151
  const manageCall2 = manage2Info.callConstructor({
@@ -77185,10 +79157,10 @@ ${JSON.stringify(data, null, 2)}`;
77185
79157
  isIncrease: true,
77186
79158
  increaseParams: {
77187
79159
  add_margin: params.marginAmount,
77188
- margin_swap: marginSwap,
79160
+ margin_swap: [],
77189
79161
  margin_swap_limit_amount: Web3Number.fromWei(0, this.asset().decimals),
77190
79162
  lever_swap: leverSwap,
77191
- lever_swap_limit_amount: minExpectedDebt
79163
+ lever_swap_limit_amount: minLSTReceived
77192
79164
  }
77193
79165
  } : {
77194
79166
  isIncrease: false,
@@ -77343,7 +79315,7 @@ ${JSON.stringify(data, null, 2)}`;
77343
79315
  manager: ContractAddr.from("0x75866db44c81e6986f06035206ee9c7d15833ddb22d6a22c016cfb5c866a491"),
77344
79316
  vaultAllocator: ContractAddr.from("0x57b5c1bb457b5e840a2714ae53ada87d77be2f3fd33a59b4fe709ef20c020c1"),
77345
79317
  redeemRequestNFT: ContractAddr.from("0x7a5dc288325456f05e70e9616e16bc02ffbe448f4b89f80b47c0970b989c7c"),
77346
- aumOracle: ContractAddr.from(""),
79318
+ aumOracle: ContractAddr.from("0x258f8a0ca0d21f542e48ad89d00e92dc4d9db4999084f50ef9c22dfb1e83023"),
77347
79319
  leafAdapters: [],
77348
79320
  adapters: [],
77349
79321
  targetHealthFactor: 1.1,
@@ -77354,7 +79326,7 @@ ${JSON.stringify(data, null, 2)}`;
77354
79326
  manager: ContractAddr.from("0xc4cc3e08029a0ae076f5fdfca70575abb78d23c5cd1c49a957f7e697885401"),
77355
79327
  vaultAllocator: ContractAddr.from("0x50bbd4fe69f841ecb13b2619fe50ebfa4e8944671b5d0ebf7868fd80c61b31e"),
77356
79328
  redeemRequestNFT: ContractAddr.from("0xeac9032f02057779816e38a6cb9185d12d86b3aacc9949b96b36de359c1e3"),
77357
- aumOracle: ContractAddr.from(""),
79329
+ aumOracle: ContractAddr.from("0x7e0d05cb7ba3f7db77a36c21c21583b5a524c2e685c08c24b3554911fb4a039"),
77358
79330
  leafAdapters: [],
77359
79331
  adapters: [],
77360
79332
  targetHealthFactor: 1.1,
@@ -77365,7 +79337,7 @@ ${JSON.stringify(data, null, 2)}`;
77365
79337
  manager: ContractAddr.from("0xc9ac023090625b0be3f6532ca353f086746f9c09f939dbc1b2613f09e5f821"),
77366
79338
  vaultAllocator: ContractAddr.from("0x60c2d856936b975459a5b4eb28b8672d91f757bd76cebb6241f8d670185dc01"),
77367
79339
  redeemRequestNFT: ContractAddr.from("0x429e8ee8bc7ecd1ade72630d350a2e0f10f9a2507c45f188ba17fe8f2ab4cf3"),
77368
- aumOracle: ContractAddr.from(""),
79340
+ aumOracle: ContractAddr.from("0x149298ade3e79ec6cbdac6cfad289c57504eaf54e590939136ed1ceca60c345"),
77369
79341
  leafAdapters: [],
77370
79342
  adapters: [],
77371
79343
  targetHealthFactor: 1.1,
@@ -77400,7 +79372,7 @@ ${JSON.stringify(data, null, 2)}`;
77400
79372
  launchBlock: 0,
77401
79373
  type: "Other",
77402
79374
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === lstSymbol)],
77403
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7xSTRK),
79375
+ additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, lstSymbol === "xSTRK" ? VesuPools.Re7xSTRK : VesuPools.Re7xBTC),
77404
79376
  risk: {
77405
79377
  riskFactor: _riskFactor4,
77406
79378
  netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
@@ -77416,10 +79388,10 @@ ${JSON.stringify(data, null, 2)}`;
77416
79388
  }
77417
79389
  var HyperLSTStrategies = [
77418
79390
  getStrategySettings("xSTRK", "STRK", hyperxSTRK, false),
77419
- getStrategySettings("xWBTC", "WBTC", hyperxWBTC, true),
77420
- getStrategySettings("xtBTC", "tBTC", hyperxtBTC, true),
77421
- getStrategySettings("xsBTC", "solvBTC", hyperxsBTC, true),
77422
- getStrategySettings("xLBTC", "LBTC", hyperxLBTC, true)
79391
+ getStrategySettings("xWBTC", "WBTC", hyperxWBTC, false),
79392
+ getStrategySettings("xtBTC", "tBTC", hyperxtBTC, false),
79393
+ getStrategySettings("xsBTC", "solvBTC", hyperxsBTC, false),
79394
+ getStrategySettings("xLBTC", "LBTC", hyperxLBTC, false)
77423
79395
  ];
77424
79396
  return __toCommonJS(index_browser_exports);
77425
79397
  })();