@strkfarm/sdk 1.0.53 → 1.0.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -54,6 +54,19 @@ var _Web3Number = class extends BigNumber {
54
54
  }
55
55
  return value.toFixed(this.maxToFixedDecimals());
56
56
  }
57
+ minimum(value) {
58
+ const _value = new BigNumber(value);
59
+ const _valueMe = new BigNumber(this.toString());
60
+ const answer = _value.lessThanOrEqualTo(_valueMe) ? _value : _valueMe;
61
+ return this.construct(answer.toString(), this.decimals);
62
+ }
63
+ maximum(value) {
64
+ const _value = new BigNumber(value);
65
+ const _valueMe = new BigNumber(this.toString());
66
+ console.warn(`maximum: _value: ${_value.toString()}, _valueMe: ${_valueMe.toString()}`);
67
+ const answer = _value.greaterThanOrEqualTo(_valueMe) ? _value : _valueMe;
68
+ return this.construct(answer.toString(), this.decimals);
69
+ }
57
70
  };
58
71
  BigNumber.config({ DECIMAL_PLACES: 18, ROUNDING_MODE: BigNumber.ROUND_DOWN });
59
72
  _Web3Number.config({ DECIMAL_PLACES: 18, ROUNDING_MODE: BigNumber.ROUND_DOWN });
@@ -1935,6 +1948,9 @@ function assert(condition, message) {
1935
1948
  throw new Error(message);
1936
1949
  }
1937
1950
  }
1951
+ function getTrovesEndpoint() {
1952
+ return process.env.TROVES_ENDPOINT || "https://app.troves.fi";
1953
+ }
1938
1954
 
1939
1955
  // src/modules/avnu.ts
1940
1956
  var AvnuWrapper = class _AvnuWrapper {
@@ -1960,7 +1976,6 @@ var AvnuWrapper = class _AvnuWrapper {
1960
1976
  }
1961
1977
  throw new Error("no quotes found");
1962
1978
  }
1963
- logger.verbose(`${_AvnuWrapper.name}: getQuotes => Found ${JSON.stringify(filteredQuotes[0])}`);
1964
1979
  return filteredQuotes[0];
1965
1980
  }
1966
1981
  async getSwapInfo(quote, taker, integratorFeeBps, integratorFeeRecipient, minAmount) {
@@ -2027,6 +2042,7 @@ var RiskType = /* @__PURE__ */ ((RiskType2) => {
2027
2042
  RiskType2["ORACLE_RISK"] = "Oracle Risk";
2028
2043
  RiskType2["TECHNICAL_RISK"] = "Technical Risk";
2029
2044
  RiskType2["COUNTERPARTY_RISK"] = "Counterparty Risk";
2045
+ RiskType2["DEPEG_RISK"] = "Depeg Risk";
2030
2046
  return RiskType2;
2031
2047
  })(RiskType || {});
2032
2048
  var Network = /* @__PURE__ */ ((Network2) => {
@@ -2041,7 +2057,7 @@ var FlowChartColors = /* @__PURE__ */ ((FlowChartColors2) => {
2041
2057
  FlowChartColors2["Purple"] = "#6e53dc";
2042
2058
  return FlowChartColors2;
2043
2059
  })(FlowChartColors || {});
2044
- function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier = "pending") {
2060
+ function getMainnetConfig(rpcUrl, blockIdentifier = "pending") {
2045
2061
  return {
2046
2062
  provider: new RpcProvider2({
2047
2063
  nodeUrl: rpcUrl,
@@ -2069,6 +2085,8 @@ var getRiskExplaination = (riskType) => {
2069
2085
  return "The risk of technical issues e.g. backend failure.";
2070
2086
  case "Counterparty Risk" /* COUNTERPARTY_RISK */:
2071
2087
  return "The risk of the counterparty defaulting e.g. bad debt on lending platforms.";
2088
+ case "Depeg Risk" /* DEPEG_RISK */:
2089
+ return "The risk of a token losing its peg to the underlying asset, leading to potential losses for holders.";
2072
2090
  }
2073
2091
  };
2074
2092
  var getRiskColor = (risk) => {
@@ -3657,6 +3675,7 @@ var vesu_rebalance_abi_default = [
3657
3675
  // src/strategies/base-strategy.ts
3658
3676
  var BaseStrategy = class {
3659
3677
  constructor(config) {
3678
+ this.cache = /* @__PURE__ */ new Map();
3660
3679
  this.config = config;
3661
3680
  }
3662
3681
  async getUserTVL(user) {
@@ -3671,6 +3690,23 @@ var BaseStrategy = class {
3671
3690
  async withdrawCall(amountInfo, receiver, owner) {
3672
3691
  throw new Error("Not implemented");
3673
3692
  }
3693
+ setCache(key, data, ttl = 6e4) {
3694
+ const timestamp = Date.now();
3695
+ this.cache.set(key, { timestamp, ttl, data });
3696
+ }
3697
+ getCache(key) {
3698
+ const cachedData = this.cache.get(key);
3699
+ if (!cachedData || !this.isCacheValid(key)) {
3700
+ return null;
3701
+ }
3702
+ return cachedData.data;
3703
+ }
3704
+ isCacheValid(key) {
3705
+ const cachedData = this.cache.get(key);
3706
+ if (!cachedData) return false;
3707
+ const { timestamp, ttl } = cachedData;
3708
+ return Date.now() - timestamp <= ttl;
3709
+ }
3674
3710
  };
3675
3711
 
3676
3712
  // src/node/headless.browser.ts
@@ -15992,11 +16028,19 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
15992
16028
  uint2564.uint256ToBN(swapInfo1.token_from_amount).toString(),
15993
16029
  18
15994
16030
  // cause its always STRK?
16031
+ ).minimum(
16032
+ postFeeAmount.toFixed(18)
16033
+ // cause always strk
16034
+ );
16035
+ swapInfo.token_from_amount = uint2564.bnToUint256(swap1Amount.toWei());
16036
+ swapInfo.token_to_min_amount = uint2564.bnToUint256(
16037
+ swap1Amount.multipliedBy(0).toWei()
16038
+ // placeholder
15995
16039
  );
15996
16040
  logger.verbose(
15997
16041
  `${_EkuboCLVault.name}: harvest => swap1Amount: ${swap1Amount}`
15998
16042
  );
15999
- const remainingAmount = postFeeAmount.minus(swap1Amount);
16043
+ const remainingAmount = postFeeAmount.minus(swap1Amount).maximum(0);
16000
16044
  logger.verbose(
16001
16045
  `${_EkuboCLVault.name}: harvest => remainingAmount: ${remainingAmount}`
16002
16046
  );
@@ -16036,7 +16080,12 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16036
16080
  const _callsFinal = await this.rebalanceIter(
16037
16081
  swapInfo,
16038
16082
  acc,
16039
- harvestEstimateCall
16083
+ harvestEstimateCall,
16084
+ claim.token.eq(poolKey.token0),
16085
+ 0,
16086
+ 0n,
16087
+ BigInt(postFeeAmount.toWei())
16088
+ // upper limit is the post fee amount
16040
16089
  );
16041
16090
  logger.verbose(
16042
16091
  `${_EkuboCLVault.name}: harvest => _callsFinal: ${JSON.stringify(
@@ -16278,6 +16327,2047 @@ EkuboCLVaultStrategies.forEach((s) => {
16278
16327
  ];
16279
16328
  });
16280
16329
 
16330
+ // src/strategies/sensei.ts
16331
+ import { Contract as Contract7, uint256 as uint2565 } from "starknet";
16332
+
16333
+ // src/data/sensei.abi.json
16334
+ var sensei_abi_default = [
16335
+ {
16336
+ type: "impl",
16337
+ name: "IStrategyCustomImpl",
16338
+ interface_name: "strkfarm::interfaces::ERC721Strategy::IStrategyCustom"
16339
+ },
16340
+ {
16341
+ type: "struct",
16342
+ name: "core::integer::u256",
16343
+ members: [
16344
+ {
16345
+ name: "low",
16346
+ type: "core::integer::u128"
16347
+ },
16348
+ {
16349
+ name: "high",
16350
+ type: "core::integer::u128"
16351
+ }
16352
+ ]
16353
+ },
16354
+ {
16355
+ type: "struct",
16356
+ name: "strkfarm::interfaces::IEkuboDistributor::Claim",
16357
+ members: [
16358
+ {
16359
+ name: "id",
16360
+ type: "core::integer::u64"
16361
+ },
16362
+ {
16363
+ name: "claimee",
16364
+ type: "core::starknet::contract_address::ContractAddress"
16365
+ },
16366
+ {
16367
+ name: "amount",
16368
+ type: "core::integer::u128"
16369
+ }
16370
+ ]
16371
+ },
16372
+ {
16373
+ type: "struct",
16374
+ name: "core::array::Span::<core::felt252>",
16375
+ members: [
16376
+ {
16377
+ name: "snapshot",
16378
+ type: "@core::array::Array::<core::felt252>"
16379
+ }
16380
+ ]
16381
+ },
16382
+ {
16383
+ type: "struct",
16384
+ name: "strkfarm::components::swap::Route",
16385
+ members: [
16386
+ {
16387
+ name: "token_from",
16388
+ type: "core::starknet::contract_address::ContractAddress"
16389
+ },
16390
+ {
16391
+ name: "token_to",
16392
+ type: "core::starknet::contract_address::ContractAddress"
16393
+ },
16394
+ {
16395
+ name: "exchange_address",
16396
+ type: "core::starknet::contract_address::ContractAddress"
16397
+ },
16398
+ {
16399
+ name: "percent",
16400
+ type: "core::integer::u128"
16401
+ },
16402
+ {
16403
+ name: "additional_swap_params",
16404
+ type: "core::array::Array::<core::felt252>"
16405
+ }
16406
+ ]
16407
+ },
16408
+ {
16409
+ type: "struct",
16410
+ name: "strkfarm::components::swap::AvnuMultiRouteSwap",
16411
+ members: [
16412
+ {
16413
+ name: "token_from_address",
16414
+ type: "core::starknet::contract_address::ContractAddress"
16415
+ },
16416
+ {
16417
+ name: "token_from_amount",
16418
+ type: "core::integer::u256"
16419
+ },
16420
+ {
16421
+ name: "token_to_address",
16422
+ type: "core::starknet::contract_address::ContractAddress"
16423
+ },
16424
+ {
16425
+ name: "token_to_amount",
16426
+ type: "core::integer::u256"
16427
+ },
16428
+ {
16429
+ name: "token_to_min_amount",
16430
+ type: "core::integer::u256"
16431
+ },
16432
+ {
16433
+ name: "beneficiary",
16434
+ type: "core::starknet::contract_address::ContractAddress"
16435
+ },
16436
+ {
16437
+ name: "integrator_fee_amount_bps",
16438
+ type: "core::integer::u128"
16439
+ },
16440
+ {
16441
+ name: "integrator_fee_recipient",
16442
+ type: "core::starknet::contract_address::ContractAddress"
16443
+ },
16444
+ {
16445
+ name: "routes",
16446
+ type: "core::array::Array::<strkfarm::components::swap::Route>"
16447
+ }
16448
+ ]
16449
+ },
16450
+ {
16451
+ type: "struct",
16452
+ name: "strkfarm::interfaces::ERC721Strategy::Position",
16453
+ members: [
16454
+ {
16455
+ name: "acc1_supply_shares",
16456
+ type: "core::integer::u256"
16457
+ },
16458
+ {
16459
+ name: "acc1_borrow_shares",
16460
+ type: "core::integer::u256"
16461
+ },
16462
+ {
16463
+ name: "acc2_supply_shares",
16464
+ type: "core::integer::u256"
16465
+ },
16466
+ {
16467
+ name: "acc2_borrow_shares",
16468
+ type: "core::integer::u256"
16469
+ }
16470
+ ]
16471
+ },
16472
+ {
16473
+ type: "enum",
16474
+ name: "core::bool",
16475
+ variants: [
16476
+ {
16477
+ name: "False",
16478
+ type: "()"
16479
+ },
16480
+ {
16481
+ name: "True",
16482
+ type: "()"
16483
+ }
16484
+ ]
16485
+ },
16486
+ {
16487
+ type: "struct",
16488
+ name: "strkfarm::interfaces::ERC721Strategy::PositionDescription",
16489
+ members: [
16490
+ {
16491
+ name: "estimated_size",
16492
+ type: "core::integer::u256"
16493
+ },
16494
+ {
16495
+ name: "deposit1",
16496
+ type: "core::integer::u256"
16497
+ },
16498
+ {
16499
+ name: "borrow1",
16500
+ type: "core::integer::u256"
16501
+ },
16502
+ {
16503
+ name: "deposit2",
16504
+ type: "core::integer::u256"
16505
+ },
16506
+ {
16507
+ name: "borrow2",
16508
+ type: "core::integer::u256"
16509
+ }
16510
+ ]
16511
+ },
16512
+ {
16513
+ type: "struct",
16514
+ name: "strkfarm::interfaces::oracle::IPriceOracleDispatcher",
16515
+ members: [
16516
+ {
16517
+ name: "contract_address",
16518
+ type: "core::starknet::contract_address::ContractAddress"
16519
+ }
16520
+ ]
16521
+ },
16522
+ {
16523
+ type: "struct",
16524
+ name: "ekubo::interfaces::core::ICoreDispatcher",
16525
+ members: [
16526
+ {
16527
+ name: "contract_address",
16528
+ type: "core::starknet::contract_address::ContractAddress"
16529
+ }
16530
+ ]
16531
+ },
16532
+ {
16533
+ type: "struct",
16534
+ name: "strkfarm::components::ekuboSwap::IRouterDispatcher",
16535
+ members: [
16536
+ {
16537
+ name: "contract_address",
16538
+ type: "core::starknet::contract_address::ContractAddress"
16539
+ }
16540
+ ]
16541
+ },
16542
+ {
16543
+ type: "struct",
16544
+ name: "strkfarm::components::ekuboSwap::EkuboSwapStruct",
16545
+ members: [
16546
+ {
16547
+ name: "core",
16548
+ type: "ekubo::interfaces::core::ICoreDispatcher"
16549
+ },
16550
+ {
16551
+ name: "router",
16552
+ type: "strkfarm::components::ekuboSwap::IRouterDispatcher"
16553
+ }
16554
+ ]
16555
+ },
16556
+ {
16557
+ type: "struct",
16558
+ name: "ekubo::types::keys::PoolKey",
16559
+ members: [
16560
+ {
16561
+ name: "token0",
16562
+ type: "core::starknet::contract_address::ContractAddress"
16563
+ },
16564
+ {
16565
+ name: "token1",
16566
+ type: "core::starknet::contract_address::ContractAddress"
16567
+ },
16568
+ {
16569
+ name: "fee",
16570
+ type: "core::integer::u128"
16571
+ },
16572
+ {
16573
+ name: "tick_spacing",
16574
+ type: "core::integer::u128"
16575
+ },
16576
+ {
16577
+ name: "extension",
16578
+ type: "core::starknet::contract_address::ContractAddress"
16579
+ }
16580
+ ]
16581
+ },
16582
+ {
16583
+ type: "struct",
16584
+ name: "ekubo::interfaces::router::RouteNode",
16585
+ members: [
16586
+ {
16587
+ name: "pool_key",
16588
+ type: "ekubo::types::keys::PoolKey"
16589
+ },
16590
+ {
16591
+ name: "sqrt_ratio_limit",
16592
+ type: "core::integer::u256"
16593
+ },
16594
+ {
16595
+ name: "skip_ahead",
16596
+ type: "core::integer::u128"
16597
+ }
16598
+ ]
16599
+ },
16600
+ {
16601
+ type: "struct",
16602
+ name: "strkfarm::interfaces::ERC721Strategy::Settings",
16603
+ members: [
16604
+ {
16605
+ name: "base_fee_percent",
16606
+ type: "core::integer::u128"
16607
+ },
16608
+ {
16609
+ name: "reward_fee_percent",
16610
+ type: "core::integer::u128"
16611
+ },
16612
+ {
16613
+ name: "fee_receiver",
16614
+ type: "core::starknet::contract_address::ContractAddress"
16615
+ },
16616
+ {
16617
+ name: "min_health_factor",
16618
+ type: "core::integer::u32"
16619
+ },
16620
+ {
16621
+ name: "target_health_factor",
16622
+ type: "core::integer::u32"
16623
+ },
16624
+ {
16625
+ name: "coefs_sum1",
16626
+ type: "core::integer::u128"
16627
+ },
16628
+ {
16629
+ name: "coefs_sum2",
16630
+ type: "core::integer::u128"
16631
+ },
16632
+ {
16633
+ name: "oracle",
16634
+ type: "strkfarm::interfaces::oracle::IPriceOracleDispatcher"
16635
+ },
16636
+ {
16637
+ name: "ekubo_swap",
16638
+ type: "strkfarm::components::ekuboSwap::EkuboSwapStruct"
16639
+ },
16640
+ {
16641
+ name: "swap_routes1",
16642
+ type: "core::array::Array::<ekubo::interfaces::router::RouteNode>"
16643
+ },
16644
+ {
16645
+ name: "swap_routes2",
16646
+ type: "core::array::Array::<ekubo::interfaces::router::RouteNode>"
16647
+ },
16648
+ {
16649
+ name: "additional_shares_action_id",
16650
+ type: "core::integer::u8"
16651
+ }
16652
+ ]
16653
+ },
16654
+ {
16655
+ type: "interface",
16656
+ name: "strkfarm::interfaces::ERC721Strategy::IStrategyCustom",
16657
+ items: [
16658
+ {
16659
+ type: "function",
16660
+ name: "deposit",
16661
+ inputs: [
16662
+ {
16663
+ name: "amount",
16664
+ type: "core::integer::u256"
16665
+ },
16666
+ {
16667
+ name: "receiver",
16668
+ type: "core::starknet::contract_address::ContractAddress"
16669
+ }
16670
+ ],
16671
+ outputs: [
16672
+ {
16673
+ type: "core::integer::u256"
16674
+ }
16675
+ ],
16676
+ state_mutability: "external"
16677
+ },
16678
+ {
16679
+ type: "function",
16680
+ name: "health_factors",
16681
+ inputs: [],
16682
+ outputs: [
16683
+ {
16684
+ type: "(core::integer::u32, core::integer::u32)"
16685
+ }
16686
+ ],
16687
+ state_mutability: "view"
16688
+ },
16689
+ {
16690
+ type: "function",
16691
+ name: "harvest",
16692
+ inputs: [
16693
+ {
16694
+ name: "protocol1_rewards_contract",
16695
+ type: "core::starknet::contract_address::ContractAddress"
16696
+ },
16697
+ {
16698
+ name: "claim1",
16699
+ type: "strkfarm::interfaces::IEkuboDistributor::Claim"
16700
+ },
16701
+ {
16702
+ name: "proof1",
16703
+ type: "core::array::Span::<core::felt252>"
16704
+ },
16705
+ {
16706
+ name: "protocol2_rewards_contract",
16707
+ type: "core::starknet::contract_address::ContractAddress"
16708
+ },
16709
+ {
16710
+ name: "claim2",
16711
+ type: "strkfarm::interfaces::IEkuboDistributor::Claim"
16712
+ },
16713
+ {
16714
+ name: "proof2",
16715
+ type: "core::array::Span::<core::felt252>"
16716
+ },
16717
+ {
16718
+ name: "swapInfo",
16719
+ type: "strkfarm::components::swap::AvnuMultiRouteSwap"
16720
+ }
16721
+ ],
16722
+ outputs: [],
16723
+ state_mutability: "external"
16724
+ },
16725
+ {
16726
+ type: "function",
16727
+ name: "withdraw",
16728
+ inputs: [
16729
+ {
16730
+ name: "amount",
16731
+ type: "core::integer::u256"
16732
+ },
16733
+ {
16734
+ name: "receiver",
16735
+ type: "core::starknet::contract_address::ContractAddress"
16736
+ },
16737
+ {
16738
+ name: "max_slippage_bps",
16739
+ type: "core::integer::u32"
16740
+ }
16741
+ ],
16742
+ outputs: [],
16743
+ state_mutability: "external"
16744
+ },
16745
+ {
16746
+ type: "function",
16747
+ name: "get_all_shares",
16748
+ inputs: [],
16749
+ outputs: [
16750
+ {
16751
+ type: "strkfarm::interfaces::ERC721Strategy::Position"
16752
+ }
16753
+ ],
16754
+ state_mutability: "view"
16755
+ },
16756
+ {
16757
+ type: "function",
16758
+ name: "rebalance",
16759
+ inputs: [
16760
+ {
16761
+ name: "amount",
16762
+ type: "core::integer::u256"
16763
+ },
16764
+ {
16765
+ name: "shouldRepay",
16766
+ type: "core::bool"
16767
+ }
16768
+ ],
16769
+ outputs: [],
16770
+ state_mutability: "external"
16771
+ },
16772
+ {
16773
+ type: "function",
16774
+ name: "describe_position",
16775
+ inputs: [
16776
+ {
16777
+ name: "token_id",
16778
+ type: "core::felt252"
16779
+ }
16780
+ ],
16781
+ outputs: [
16782
+ {
16783
+ type: "(strkfarm::interfaces::ERC721Strategy::Position, strkfarm::interfaces::ERC721Strategy::PositionDescription)"
16784
+ }
16785
+ ],
16786
+ state_mutability: "view"
16787
+ },
16788
+ {
16789
+ type: "function",
16790
+ name: "set_settings",
16791
+ inputs: [
16792
+ {
16793
+ name: "settings",
16794
+ type: "strkfarm::interfaces::ERC721Strategy::Settings"
16795
+ }
16796
+ ],
16797
+ outputs: [],
16798
+ state_mutability: "external"
16799
+ },
16800
+ {
16801
+ type: "function",
16802
+ name: "initialize",
16803
+ inputs: [],
16804
+ outputs: [],
16805
+ state_mutability: "external"
16806
+ }
16807
+ ]
16808
+ },
16809
+ {
16810
+ type: "impl",
16811
+ name: "MMSettingsImpl",
16812
+ interface_name: "strkfarm::strats::dnmm_vesu::DeltaNeutralLoopingVesuXSTRK::IMMSettings"
16813
+ },
16814
+ {
16815
+ type: "struct",
16816
+ name: "strkfarm::components::endur::EndurSettings",
16817
+ members: [
16818
+ {
16819
+ name: "lst",
16820
+ type: "core::starknet::contract_address::ContractAddress"
16821
+ }
16822
+ ]
16823
+ },
16824
+ {
16825
+ type: "struct",
16826
+ name: "strkfarm::interfaces::IVesu::IStonDispatcher",
16827
+ members: [
16828
+ {
16829
+ name: "contract_address",
16830
+ type: "core::starknet::contract_address::ContractAddress"
16831
+ }
16832
+ ]
16833
+ },
16834
+ {
16835
+ type: "struct",
16836
+ name: "strkfarm::components::vesu::vesuStruct",
16837
+ members: [
16838
+ {
16839
+ name: "singleton",
16840
+ type: "strkfarm::interfaces::IVesu::IStonDispatcher"
16841
+ },
16842
+ {
16843
+ name: "pool_id",
16844
+ type: "core::felt252"
16845
+ },
16846
+ {
16847
+ name: "debt",
16848
+ type: "core::starknet::contract_address::ContractAddress"
16849
+ },
16850
+ {
16851
+ name: "col",
16852
+ type: "core::starknet::contract_address::ContractAddress"
16853
+ },
16854
+ {
16855
+ name: "oracle",
16856
+ type: "core::starknet::contract_address::ContractAddress"
16857
+ }
16858
+ ]
16859
+ },
16860
+ {
16861
+ type: "interface",
16862
+ name: "strkfarm::strats::dnmm_vesu::DeltaNeutralLoopingVesuXSTRK::IMMSettings",
16863
+ items: [
16864
+ {
16865
+ type: "function",
16866
+ name: "set_mm_settings",
16867
+ inputs: [
16868
+ {
16869
+ name: "lend_settings1",
16870
+ type: "strkfarm::components::endur::EndurSettings"
16871
+ },
16872
+ {
16873
+ name: "lend_settings2",
16874
+ type: "strkfarm::components::vesu::vesuStruct"
16875
+ }
16876
+ ],
16877
+ outputs: [],
16878
+ state_mutability: "external"
16879
+ }
16880
+ ]
16881
+ },
16882
+ {
16883
+ type: "impl",
16884
+ name: "DNMMImpl",
16885
+ interface_name: "strkfarm::interfaces::ERC721Strategy::IStrategy"
16886
+ },
16887
+ {
16888
+ type: "struct",
16889
+ name: "strkfarm::interfaces::ERC721Strategy::StrategyConfig",
16890
+ members: [
16891
+ {
16892
+ name: "main_token",
16893
+ type: "core::starknet::contract_address::ContractAddress"
16894
+ },
16895
+ {
16896
+ name: "main_offset",
16897
+ type: "core::integer::u128"
16898
+ },
16899
+ {
16900
+ name: "secondary_token",
16901
+ type: "core::starknet::contract_address::ContractAddress"
16902
+ },
16903
+ {
16904
+ name: "secondary_offset",
16905
+ type: "core::integer::u128"
16906
+ }
16907
+ ]
16908
+ },
16909
+ {
16910
+ type: "interface",
16911
+ name: "strkfarm::interfaces::ERC721Strategy::IStrategy",
16912
+ items: [
16913
+ {
16914
+ type: "function",
16915
+ name: "config",
16916
+ inputs: [],
16917
+ outputs: [
16918
+ {
16919
+ type: "strkfarm::interfaces::ERC721Strategy::StrategyConfig"
16920
+ }
16921
+ ],
16922
+ state_mutability: "view"
16923
+ },
16924
+ {
16925
+ type: "function",
16926
+ name: "get_settings",
16927
+ inputs: [],
16928
+ outputs: [
16929
+ {
16930
+ type: "strkfarm::interfaces::ERC721Strategy::Settings"
16931
+ }
16932
+ ],
16933
+ state_mutability: "view"
16934
+ }
16935
+ ]
16936
+ },
16937
+ {
16938
+ type: "impl",
16939
+ name: "EkuboLockedImpl",
16940
+ interface_name: "ekubo::interfaces::core::ILocker"
16941
+ },
16942
+ {
16943
+ type: "interface",
16944
+ name: "ekubo::interfaces::core::ILocker",
16945
+ items: [
16946
+ {
16947
+ type: "function",
16948
+ name: "locked",
16949
+ inputs: [
16950
+ {
16951
+ name: "id",
16952
+ type: "core::integer::u32"
16953
+ },
16954
+ {
16955
+ name: "data",
16956
+ type: "core::array::Span::<core::felt252>"
16957
+ }
16958
+ ],
16959
+ outputs: [
16960
+ {
16961
+ type: "core::array::Span::<core::felt252>"
16962
+ }
16963
+ ],
16964
+ state_mutability: "external"
16965
+ }
16966
+ ]
16967
+ },
16968
+ {
16969
+ type: "impl",
16970
+ name: "ERC721MixinImpl",
16971
+ interface_name: "openzeppelin_token::erc721::interface::ERC721ABI"
16972
+ },
16973
+ {
16974
+ type: "struct",
16975
+ name: "core::byte_array::ByteArray",
16976
+ members: [
16977
+ {
16978
+ name: "data",
16979
+ type: "core::array::Array::<core::bytes_31::bytes31>"
16980
+ },
16981
+ {
16982
+ name: "pending_word",
16983
+ type: "core::felt252"
16984
+ },
16985
+ {
16986
+ name: "pending_word_len",
16987
+ type: "core::integer::u32"
16988
+ }
16989
+ ]
16990
+ },
16991
+ {
16992
+ type: "interface",
16993
+ name: "openzeppelin_token::erc721::interface::ERC721ABI",
16994
+ items: [
16995
+ {
16996
+ type: "function",
16997
+ name: "balance_of",
16998
+ inputs: [
16999
+ {
17000
+ name: "account",
17001
+ type: "core::starknet::contract_address::ContractAddress"
17002
+ }
17003
+ ],
17004
+ outputs: [
17005
+ {
17006
+ type: "core::integer::u256"
17007
+ }
17008
+ ],
17009
+ state_mutability: "view"
17010
+ },
17011
+ {
17012
+ type: "function",
17013
+ name: "owner_of",
17014
+ inputs: [
17015
+ {
17016
+ name: "token_id",
17017
+ type: "core::integer::u256"
17018
+ }
17019
+ ],
17020
+ outputs: [
17021
+ {
17022
+ type: "core::starknet::contract_address::ContractAddress"
17023
+ }
17024
+ ],
17025
+ state_mutability: "view"
17026
+ },
17027
+ {
17028
+ type: "function",
17029
+ name: "safe_transfer_from",
17030
+ inputs: [
17031
+ {
17032
+ name: "from",
17033
+ type: "core::starknet::contract_address::ContractAddress"
17034
+ },
17035
+ {
17036
+ name: "to",
17037
+ type: "core::starknet::contract_address::ContractAddress"
17038
+ },
17039
+ {
17040
+ name: "token_id",
17041
+ type: "core::integer::u256"
17042
+ },
17043
+ {
17044
+ name: "data",
17045
+ type: "core::array::Span::<core::felt252>"
17046
+ }
17047
+ ],
17048
+ outputs: [],
17049
+ state_mutability: "external"
17050
+ },
17051
+ {
17052
+ type: "function",
17053
+ name: "transfer_from",
17054
+ inputs: [
17055
+ {
17056
+ name: "from",
17057
+ type: "core::starknet::contract_address::ContractAddress"
17058
+ },
17059
+ {
17060
+ name: "to",
17061
+ type: "core::starknet::contract_address::ContractAddress"
17062
+ },
17063
+ {
17064
+ name: "token_id",
17065
+ type: "core::integer::u256"
17066
+ }
17067
+ ],
17068
+ outputs: [],
17069
+ state_mutability: "external"
17070
+ },
17071
+ {
17072
+ type: "function",
17073
+ name: "approve",
17074
+ inputs: [
17075
+ {
17076
+ name: "to",
17077
+ type: "core::starknet::contract_address::ContractAddress"
17078
+ },
17079
+ {
17080
+ name: "token_id",
17081
+ type: "core::integer::u256"
17082
+ }
17083
+ ],
17084
+ outputs: [],
17085
+ state_mutability: "external"
17086
+ },
17087
+ {
17088
+ type: "function",
17089
+ name: "set_approval_for_all",
17090
+ inputs: [
17091
+ {
17092
+ name: "operator",
17093
+ type: "core::starknet::contract_address::ContractAddress"
17094
+ },
17095
+ {
17096
+ name: "approved",
17097
+ type: "core::bool"
17098
+ }
17099
+ ],
17100
+ outputs: [],
17101
+ state_mutability: "external"
17102
+ },
17103
+ {
17104
+ type: "function",
17105
+ name: "get_approved",
17106
+ inputs: [
17107
+ {
17108
+ name: "token_id",
17109
+ type: "core::integer::u256"
17110
+ }
17111
+ ],
17112
+ outputs: [
17113
+ {
17114
+ type: "core::starknet::contract_address::ContractAddress"
17115
+ }
17116
+ ],
17117
+ state_mutability: "view"
17118
+ },
17119
+ {
17120
+ type: "function",
17121
+ name: "is_approved_for_all",
17122
+ inputs: [
17123
+ {
17124
+ name: "owner",
17125
+ type: "core::starknet::contract_address::ContractAddress"
17126
+ },
17127
+ {
17128
+ name: "operator",
17129
+ type: "core::starknet::contract_address::ContractAddress"
17130
+ }
17131
+ ],
17132
+ outputs: [
17133
+ {
17134
+ type: "core::bool"
17135
+ }
17136
+ ],
17137
+ state_mutability: "view"
17138
+ },
17139
+ {
17140
+ type: "function",
17141
+ name: "supports_interface",
17142
+ inputs: [
17143
+ {
17144
+ name: "interface_id",
17145
+ type: "core::felt252"
17146
+ }
17147
+ ],
17148
+ outputs: [
17149
+ {
17150
+ type: "core::bool"
17151
+ }
17152
+ ],
17153
+ state_mutability: "view"
17154
+ },
17155
+ {
17156
+ type: "function",
17157
+ name: "name",
17158
+ inputs: [],
17159
+ outputs: [
17160
+ {
17161
+ type: "core::byte_array::ByteArray"
17162
+ }
17163
+ ],
17164
+ state_mutability: "view"
17165
+ },
17166
+ {
17167
+ type: "function",
17168
+ name: "symbol",
17169
+ inputs: [],
17170
+ outputs: [
17171
+ {
17172
+ type: "core::byte_array::ByteArray"
17173
+ }
17174
+ ],
17175
+ state_mutability: "view"
17176
+ },
17177
+ {
17178
+ type: "function",
17179
+ name: "token_uri",
17180
+ inputs: [
17181
+ {
17182
+ name: "token_id",
17183
+ type: "core::integer::u256"
17184
+ }
17185
+ ],
17186
+ outputs: [
17187
+ {
17188
+ type: "core::byte_array::ByteArray"
17189
+ }
17190
+ ],
17191
+ state_mutability: "view"
17192
+ },
17193
+ {
17194
+ type: "function",
17195
+ name: "balanceOf",
17196
+ inputs: [
17197
+ {
17198
+ name: "account",
17199
+ type: "core::starknet::contract_address::ContractAddress"
17200
+ }
17201
+ ],
17202
+ outputs: [
17203
+ {
17204
+ type: "core::integer::u256"
17205
+ }
17206
+ ],
17207
+ state_mutability: "view"
17208
+ },
17209
+ {
17210
+ type: "function",
17211
+ name: "ownerOf",
17212
+ inputs: [
17213
+ {
17214
+ name: "tokenId",
17215
+ type: "core::integer::u256"
17216
+ }
17217
+ ],
17218
+ outputs: [
17219
+ {
17220
+ type: "core::starknet::contract_address::ContractAddress"
17221
+ }
17222
+ ],
17223
+ state_mutability: "view"
17224
+ },
17225
+ {
17226
+ type: "function",
17227
+ name: "safeTransferFrom",
17228
+ inputs: [
17229
+ {
17230
+ name: "from",
17231
+ type: "core::starknet::contract_address::ContractAddress"
17232
+ },
17233
+ {
17234
+ name: "to",
17235
+ type: "core::starknet::contract_address::ContractAddress"
17236
+ },
17237
+ {
17238
+ name: "tokenId",
17239
+ type: "core::integer::u256"
17240
+ },
17241
+ {
17242
+ name: "data",
17243
+ type: "core::array::Span::<core::felt252>"
17244
+ }
17245
+ ],
17246
+ outputs: [],
17247
+ state_mutability: "external"
17248
+ },
17249
+ {
17250
+ type: "function",
17251
+ name: "transferFrom",
17252
+ inputs: [
17253
+ {
17254
+ name: "from",
17255
+ type: "core::starknet::contract_address::ContractAddress"
17256
+ },
17257
+ {
17258
+ name: "to",
17259
+ type: "core::starknet::contract_address::ContractAddress"
17260
+ },
17261
+ {
17262
+ name: "tokenId",
17263
+ type: "core::integer::u256"
17264
+ }
17265
+ ],
17266
+ outputs: [],
17267
+ state_mutability: "external"
17268
+ },
17269
+ {
17270
+ type: "function",
17271
+ name: "setApprovalForAll",
17272
+ inputs: [
17273
+ {
17274
+ name: "operator",
17275
+ type: "core::starknet::contract_address::ContractAddress"
17276
+ },
17277
+ {
17278
+ name: "approved",
17279
+ type: "core::bool"
17280
+ }
17281
+ ],
17282
+ outputs: [],
17283
+ state_mutability: "external"
17284
+ },
17285
+ {
17286
+ type: "function",
17287
+ name: "getApproved",
17288
+ inputs: [
17289
+ {
17290
+ name: "tokenId",
17291
+ type: "core::integer::u256"
17292
+ }
17293
+ ],
17294
+ outputs: [
17295
+ {
17296
+ type: "core::starknet::contract_address::ContractAddress"
17297
+ }
17298
+ ],
17299
+ state_mutability: "view"
17300
+ },
17301
+ {
17302
+ type: "function",
17303
+ name: "isApprovedForAll",
17304
+ inputs: [
17305
+ {
17306
+ name: "owner",
17307
+ type: "core::starknet::contract_address::ContractAddress"
17308
+ },
17309
+ {
17310
+ name: "operator",
17311
+ type: "core::starknet::contract_address::ContractAddress"
17312
+ }
17313
+ ],
17314
+ outputs: [
17315
+ {
17316
+ type: "core::bool"
17317
+ }
17318
+ ],
17319
+ state_mutability: "view"
17320
+ },
17321
+ {
17322
+ type: "function",
17323
+ name: "tokenURI",
17324
+ inputs: [
17325
+ {
17326
+ name: "tokenId",
17327
+ type: "core::integer::u256"
17328
+ }
17329
+ ],
17330
+ outputs: [
17331
+ {
17332
+ type: "core::byte_array::ByteArray"
17333
+ }
17334
+ ],
17335
+ state_mutability: "view"
17336
+ }
17337
+ ]
17338
+ },
17339
+ {
17340
+ type: "impl",
17341
+ name: "RewardShareImpl",
17342
+ interface_name: "strkfarm::components::harvester::reward_shares::IRewardShare"
17343
+ },
17344
+ {
17345
+ type: "struct",
17346
+ name: "strkfarm::components::harvester::reward_shares::UserRewardsInfo",
17347
+ members: [
17348
+ {
17349
+ name: "pending_round_points",
17350
+ type: "core::felt252"
17351
+ },
17352
+ {
17353
+ name: "shares_owned",
17354
+ type: "core::felt252"
17355
+ },
17356
+ {
17357
+ name: "block_number",
17358
+ type: "core::integer::u64"
17359
+ },
17360
+ {
17361
+ name: "index",
17362
+ type: "core::integer::u32"
17363
+ }
17364
+ ]
17365
+ },
17366
+ {
17367
+ type: "struct",
17368
+ name: "strkfarm::components::harvester::reward_shares::RewardsInfo",
17369
+ members: [
17370
+ {
17371
+ name: "amount",
17372
+ type: "core::felt252"
17373
+ },
17374
+ {
17375
+ name: "shares",
17376
+ type: "core::felt252"
17377
+ },
17378
+ {
17379
+ name: "total_round_points",
17380
+ type: "core::felt252"
17381
+ },
17382
+ {
17383
+ name: "block_number",
17384
+ type: "core::integer::u64"
17385
+ }
17386
+ ]
17387
+ },
17388
+ {
17389
+ type: "interface",
17390
+ name: "strkfarm::components::harvester::reward_shares::IRewardShare",
17391
+ items: [
17392
+ {
17393
+ type: "function",
17394
+ name: "get_user_reward_info",
17395
+ inputs: [
17396
+ {
17397
+ name: "user",
17398
+ type: "core::starknet::contract_address::ContractAddress"
17399
+ }
17400
+ ],
17401
+ outputs: [
17402
+ {
17403
+ type: "strkfarm::components::harvester::reward_shares::UserRewardsInfo"
17404
+ }
17405
+ ],
17406
+ state_mutability: "view"
17407
+ },
17408
+ {
17409
+ type: "function",
17410
+ name: "get_rewards_info",
17411
+ inputs: [
17412
+ {
17413
+ name: "index",
17414
+ type: "core::integer::u32"
17415
+ }
17416
+ ],
17417
+ outputs: [
17418
+ {
17419
+ type: "strkfarm::components::harvester::reward_shares::RewardsInfo"
17420
+ }
17421
+ ],
17422
+ state_mutability: "view"
17423
+ },
17424
+ {
17425
+ type: "function",
17426
+ name: "get_total_rewards",
17427
+ inputs: [],
17428
+ outputs: [
17429
+ {
17430
+ type: "core::integer::u32"
17431
+ }
17432
+ ],
17433
+ state_mutability: "view"
17434
+ },
17435
+ {
17436
+ type: "function",
17437
+ name: "get_total_unminted_shares",
17438
+ inputs: [],
17439
+ outputs: [
17440
+ {
17441
+ type: "core::felt252"
17442
+ }
17443
+ ],
17444
+ state_mutability: "view"
17445
+ },
17446
+ {
17447
+ type: "function",
17448
+ name: "get_additional_shares",
17449
+ inputs: [
17450
+ {
17451
+ name: "user",
17452
+ type: "core::starknet::contract_address::ContractAddress"
17453
+ }
17454
+ ],
17455
+ outputs: [
17456
+ {
17457
+ type: "(core::felt252, core::integer::u64, core::felt252)"
17458
+ }
17459
+ ],
17460
+ state_mutability: "view"
17461
+ }
17462
+ ]
17463
+ },
17464
+ {
17465
+ type: "impl",
17466
+ name: "CommonCompImpl",
17467
+ interface_name: "strkfarm::interfaces::common::ICommon"
17468
+ },
17469
+ {
17470
+ type: "interface",
17471
+ name: "strkfarm::interfaces::common::ICommon",
17472
+ items: [
17473
+ {
17474
+ type: "function",
17475
+ name: "upgrade",
17476
+ inputs: [
17477
+ {
17478
+ name: "new_class",
17479
+ type: "core::starknet::class_hash::ClassHash"
17480
+ }
17481
+ ],
17482
+ outputs: [],
17483
+ state_mutability: "external"
17484
+ },
17485
+ {
17486
+ type: "function",
17487
+ name: "pause",
17488
+ inputs: [],
17489
+ outputs: [],
17490
+ state_mutability: "external"
17491
+ },
17492
+ {
17493
+ type: "function",
17494
+ name: "unpause",
17495
+ inputs: [],
17496
+ outputs: [],
17497
+ state_mutability: "external"
17498
+ },
17499
+ {
17500
+ type: "function",
17501
+ name: "is_paused",
17502
+ inputs: [],
17503
+ outputs: [
17504
+ {
17505
+ type: "core::bool"
17506
+ }
17507
+ ],
17508
+ state_mutability: "view"
17509
+ },
17510
+ {
17511
+ type: "function",
17512
+ name: "owner",
17513
+ inputs: [],
17514
+ outputs: [
17515
+ {
17516
+ type: "core::starknet::contract_address::ContractAddress"
17517
+ }
17518
+ ],
17519
+ state_mutability: "view"
17520
+ },
17521
+ {
17522
+ type: "function",
17523
+ name: "transfer_ownership",
17524
+ inputs: [
17525
+ {
17526
+ name: "new_owner",
17527
+ type: "core::starknet::contract_address::ContractAddress"
17528
+ }
17529
+ ],
17530
+ outputs: [],
17531
+ state_mutability: "external"
17532
+ },
17533
+ {
17534
+ type: "function",
17535
+ name: "renounce_ownership",
17536
+ inputs: [],
17537
+ outputs: [],
17538
+ state_mutability: "external"
17539
+ }
17540
+ ]
17541
+ },
17542
+ {
17543
+ type: "constructor",
17544
+ name: "constructor",
17545
+ inputs: [
17546
+ {
17547
+ name: "name",
17548
+ type: "core::byte_array::ByteArray"
17549
+ },
17550
+ {
17551
+ name: "symbol",
17552
+ type: "core::byte_array::ByteArray"
17553
+ },
17554
+ {
17555
+ name: "base_uri",
17556
+ type: "core::byte_array::ByteArray"
17557
+ },
17558
+ {
17559
+ name: "owner",
17560
+ type: "core::starknet::contract_address::ContractAddress"
17561
+ },
17562
+ {
17563
+ name: "main_token",
17564
+ type: "core::starknet::contract_address::ContractAddress"
17565
+ },
17566
+ {
17567
+ name: "main_offset",
17568
+ type: "core::integer::u128"
17569
+ },
17570
+ {
17571
+ name: "secondary_token",
17572
+ type: "core::starknet::contract_address::ContractAddress"
17573
+ },
17574
+ {
17575
+ name: "secondary_offset",
17576
+ type: "core::integer::u128"
17577
+ },
17578
+ {
17579
+ name: "settings",
17580
+ type: "strkfarm::interfaces::ERC721Strategy::Settings"
17581
+ },
17582
+ {
17583
+ name: "lend_settings1",
17584
+ type: "strkfarm::components::endur::EndurSettings"
17585
+ },
17586
+ {
17587
+ name: "lend_settings2",
17588
+ type: "strkfarm::components::vesu::vesuStruct"
17589
+ }
17590
+ ]
17591
+ },
17592
+ {
17593
+ type: "event",
17594
+ name: "openzeppelin_token::erc721::erc721::ERC721Component::Transfer",
17595
+ kind: "struct",
17596
+ members: [
17597
+ {
17598
+ name: "from",
17599
+ type: "core::starknet::contract_address::ContractAddress",
17600
+ kind: "key"
17601
+ },
17602
+ {
17603
+ name: "to",
17604
+ type: "core::starknet::contract_address::ContractAddress",
17605
+ kind: "key"
17606
+ },
17607
+ {
17608
+ name: "token_id",
17609
+ type: "core::integer::u256",
17610
+ kind: "key"
17611
+ }
17612
+ ]
17613
+ },
17614
+ {
17615
+ type: "event",
17616
+ name: "openzeppelin_token::erc721::erc721::ERC721Component::Approval",
17617
+ kind: "struct",
17618
+ members: [
17619
+ {
17620
+ name: "owner",
17621
+ type: "core::starknet::contract_address::ContractAddress",
17622
+ kind: "key"
17623
+ },
17624
+ {
17625
+ name: "approved",
17626
+ type: "core::starknet::contract_address::ContractAddress",
17627
+ kind: "key"
17628
+ },
17629
+ {
17630
+ name: "token_id",
17631
+ type: "core::integer::u256",
17632
+ kind: "key"
17633
+ }
17634
+ ]
17635
+ },
17636
+ {
17637
+ type: "event",
17638
+ name: "openzeppelin_token::erc721::erc721::ERC721Component::ApprovalForAll",
17639
+ kind: "struct",
17640
+ members: [
17641
+ {
17642
+ name: "owner",
17643
+ type: "core::starknet::contract_address::ContractAddress",
17644
+ kind: "key"
17645
+ },
17646
+ {
17647
+ name: "operator",
17648
+ type: "core::starknet::contract_address::ContractAddress",
17649
+ kind: "key"
17650
+ },
17651
+ {
17652
+ name: "approved",
17653
+ type: "core::bool",
17654
+ kind: "data"
17655
+ }
17656
+ ]
17657
+ },
17658
+ {
17659
+ type: "event",
17660
+ name: "openzeppelin_token::erc721::erc721::ERC721Component::Event",
17661
+ kind: "enum",
17662
+ variants: [
17663
+ {
17664
+ name: "Transfer",
17665
+ type: "openzeppelin_token::erc721::erc721::ERC721Component::Transfer",
17666
+ kind: "nested"
17667
+ },
17668
+ {
17669
+ name: "Approval",
17670
+ type: "openzeppelin_token::erc721::erc721::ERC721Component::Approval",
17671
+ kind: "nested"
17672
+ },
17673
+ {
17674
+ name: "ApprovalForAll",
17675
+ type: "openzeppelin_token::erc721::erc721::ERC721Component::ApprovalForAll",
17676
+ kind: "nested"
17677
+ }
17678
+ ]
17679
+ },
17680
+ {
17681
+ type: "event",
17682
+ name: "openzeppelin_introspection::src5::SRC5Component::Event",
17683
+ kind: "enum",
17684
+ variants: []
17685
+ },
17686
+ {
17687
+ type: "event",
17688
+ name: "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded",
17689
+ kind: "struct",
17690
+ members: [
17691
+ {
17692
+ name: "class_hash",
17693
+ type: "core::starknet::class_hash::ClassHash",
17694
+ kind: "data"
17695
+ }
17696
+ ]
17697
+ },
17698
+ {
17699
+ type: "event",
17700
+ name: "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event",
17701
+ kind: "enum",
17702
+ variants: [
17703
+ {
17704
+ name: "Upgraded",
17705
+ type: "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded",
17706
+ kind: "nested"
17707
+ }
17708
+ ]
17709
+ },
17710
+ {
17711
+ type: "event",
17712
+ name: "openzeppelin_security::pausable::PausableComponent::Paused",
17713
+ kind: "struct",
17714
+ members: [
17715
+ {
17716
+ name: "account",
17717
+ type: "core::starknet::contract_address::ContractAddress",
17718
+ kind: "data"
17719
+ }
17720
+ ]
17721
+ },
17722
+ {
17723
+ type: "event",
17724
+ name: "openzeppelin_security::pausable::PausableComponent::Unpaused",
17725
+ kind: "struct",
17726
+ members: [
17727
+ {
17728
+ name: "account",
17729
+ type: "core::starknet::contract_address::ContractAddress",
17730
+ kind: "data"
17731
+ }
17732
+ ]
17733
+ },
17734
+ {
17735
+ type: "event",
17736
+ name: "openzeppelin_security::pausable::PausableComponent::Event",
17737
+ kind: "enum",
17738
+ variants: [
17739
+ {
17740
+ name: "Paused",
17741
+ type: "openzeppelin_security::pausable::PausableComponent::Paused",
17742
+ kind: "nested"
17743
+ },
17744
+ {
17745
+ name: "Unpaused",
17746
+ type: "openzeppelin_security::pausable::PausableComponent::Unpaused",
17747
+ kind: "nested"
17748
+ }
17749
+ ]
17750
+ },
17751
+ {
17752
+ type: "event",
17753
+ name: "openzeppelin_security::reentrancyguard::ReentrancyGuardComponent::Event",
17754
+ kind: "enum",
17755
+ variants: []
17756
+ },
17757
+ {
17758
+ type: "event",
17759
+ name: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred",
17760
+ kind: "struct",
17761
+ members: [
17762
+ {
17763
+ name: "previous_owner",
17764
+ type: "core::starknet::contract_address::ContractAddress",
17765
+ kind: "key"
17766
+ },
17767
+ {
17768
+ name: "new_owner",
17769
+ type: "core::starknet::contract_address::ContractAddress",
17770
+ kind: "key"
17771
+ }
17772
+ ]
17773
+ },
17774
+ {
17775
+ type: "event",
17776
+ name: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted",
17777
+ kind: "struct",
17778
+ members: [
17779
+ {
17780
+ name: "previous_owner",
17781
+ type: "core::starknet::contract_address::ContractAddress",
17782
+ kind: "key"
17783
+ },
17784
+ {
17785
+ name: "new_owner",
17786
+ type: "core::starknet::contract_address::ContractAddress",
17787
+ kind: "key"
17788
+ }
17789
+ ]
17790
+ },
17791
+ {
17792
+ type: "event",
17793
+ name: "openzeppelin_access::ownable::ownable::OwnableComponent::Event",
17794
+ kind: "enum",
17795
+ variants: [
17796
+ {
17797
+ name: "OwnershipTransferred",
17798
+ type: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred",
17799
+ kind: "nested"
17800
+ },
17801
+ {
17802
+ name: "OwnershipTransferStarted",
17803
+ type: "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted",
17804
+ kind: "nested"
17805
+ }
17806
+ ]
17807
+ },
17808
+ {
17809
+ type: "event",
17810
+ name: "strkfarm::components::common::CommonComp::Event",
17811
+ kind: "enum",
17812
+ variants: []
17813
+ },
17814
+ {
17815
+ type: "event",
17816
+ name: "strkfarm::components::harvester::reward_shares::RewardShareComponent::Rewards",
17817
+ kind: "struct",
17818
+ members: [
17819
+ {
17820
+ name: "index",
17821
+ type: "core::integer::u32",
17822
+ kind: "data"
17823
+ },
17824
+ {
17825
+ name: "info",
17826
+ type: "strkfarm::components::harvester::reward_shares::RewardsInfo",
17827
+ kind: "data"
17828
+ },
17829
+ {
17830
+ name: "total_reward_shares",
17831
+ type: "core::felt252",
17832
+ kind: "data"
17833
+ },
17834
+ {
17835
+ name: "timestamp",
17836
+ type: "core::integer::u64",
17837
+ kind: "data"
17838
+ }
17839
+ ]
17840
+ },
17841
+ {
17842
+ type: "event",
17843
+ name: "strkfarm::components::harvester::reward_shares::RewardShareComponent::UserRewards",
17844
+ kind: "struct",
17845
+ members: [
17846
+ {
17847
+ name: "user",
17848
+ type: "core::starknet::contract_address::ContractAddress",
17849
+ kind: "key"
17850
+ },
17851
+ {
17852
+ name: "info",
17853
+ type: "strkfarm::components::harvester::reward_shares::UserRewardsInfo",
17854
+ kind: "data"
17855
+ },
17856
+ {
17857
+ name: "total_reward_shares",
17858
+ type: "core::felt252",
17859
+ kind: "data"
17860
+ },
17861
+ {
17862
+ name: "timestamp",
17863
+ type: "core::integer::u64",
17864
+ kind: "data"
17865
+ }
17866
+ ]
17867
+ },
17868
+ {
17869
+ type: "event",
17870
+ name: "strkfarm::components::harvester::reward_shares::RewardShareComponent::Event",
17871
+ kind: "enum",
17872
+ variants: [
17873
+ {
17874
+ name: "Rewards",
17875
+ type: "strkfarm::components::harvester::reward_shares::RewardShareComponent::Rewards",
17876
+ kind: "nested"
17877
+ },
17878
+ {
17879
+ name: "UserRewards",
17880
+ type: "strkfarm::components::harvester::reward_shares::RewardShareComponent::UserRewards",
17881
+ kind: "nested"
17882
+ }
17883
+ ]
17884
+ },
17885
+ {
17886
+ type: "event",
17887
+ name: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Deposit",
17888
+ kind: "struct",
17889
+ members: [
17890
+ {
17891
+ name: "sender",
17892
+ type: "core::starknet::contract_address::ContractAddress",
17893
+ kind: "key"
17894
+ },
17895
+ {
17896
+ name: "owner",
17897
+ type: "core::starknet::contract_address::ContractAddress",
17898
+ kind: "key"
17899
+ },
17900
+ {
17901
+ name: "assets",
17902
+ type: "core::integer::u256",
17903
+ kind: "data"
17904
+ },
17905
+ {
17906
+ name: "net_position",
17907
+ type: "strkfarm::interfaces::ERC721Strategy::Position",
17908
+ kind: "data"
17909
+ }
17910
+ ]
17911
+ },
17912
+ {
17913
+ type: "event",
17914
+ name: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Withdraw",
17915
+ kind: "struct",
17916
+ members: [
17917
+ {
17918
+ name: "sender",
17919
+ type: "core::starknet::contract_address::ContractAddress",
17920
+ kind: "key"
17921
+ },
17922
+ {
17923
+ name: "receiver",
17924
+ type: "core::starknet::contract_address::ContractAddress",
17925
+ kind: "key"
17926
+ },
17927
+ {
17928
+ name: "owner",
17929
+ type: "core::starknet::contract_address::ContractAddress",
17930
+ kind: "key"
17931
+ },
17932
+ {
17933
+ name: "assets",
17934
+ type: "core::integer::u256",
17935
+ kind: "data"
17936
+ },
17937
+ {
17938
+ name: "net_position",
17939
+ type: "strkfarm::interfaces::ERC721Strategy::Position",
17940
+ kind: "data"
17941
+ }
17942
+ ]
17943
+ },
17944
+ {
17945
+ type: "event",
17946
+ name: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Rebalance",
17947
+ kind: "struct",
17948
+ members: [
17949
+ {
17950
+ name: "caller",
17951
+ type: "core::starknet::contract_address::ContractAddress",
17952
+ kind: "key"
17953
+ },
17954
+ {
17955
+ name: "amount",
17956
+ type: "core::integer::u256",
17957
+ kind: "data"
17958
+ },
17959
+ {
17960
+ name: "shouldRepay",
17961
+ type: "core::bool",
17962
+ kind: "data"
17963
+ },
17964
+ {
17965
+ name: "pre_hf1",
17966
+ type: "core::integer::u32",
17967
+ kind: "data"
17968
+ },
17969
+ {
17970
+ name: "pre_hf2",
17971
+ type: "core::integer::u32",
17972
+ kind: "data"
17973
+ },
17974
+ {
17975
+ name: "hf1",
17976
+ type: "core::integer::u32",
17977
+ kind: "data"
17978
+ },
17979
+ {
17980
+ name: "hf2",
17981
+ type: "core::integer::u32",
17982
+ kind: "data"
17983
+ }
17984
+ ]
17985
+ },
17986
+ {
17987
+ type: "event",
17988
+ name: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::ShareUpdate",
17989
+ kind: "struct",
17990
+ members: [
17991
+ {
17992
+ name: "token_id",
17993
+ type: "core::felt252",
17994
+ kind: "key"
17995
+ },
17996
+ {
17997
+ name: "action_id",
17998
+ type: "core::integer::u8",
17999
+ kind: "key"
18000
+ },
18001
+ {
18002
+ name: "user_shares",
18003
+ type: "core::felt252",
18004
+ kind: "data"
18005
+ },
18006
+ {
18007
+ name: "total_shares",
18008
+ type: "core::felt252",
18009
+ kind: "data"
18010
+ }
18011
+ ]
18012
+ },
18013
+ {
18014
+ type: "event",
18015
+ name: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Event",
18016
+ kind: "enum",
18017
+ variants: [
18018
+ {
18019
+ name: "Deposit",
18020
+ type: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Deposit",
18021
+ kind: "nested"
18022
+ },
18023
+ {
18024
+ name: "Withdraw",
18025
+ type: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Withdraw",
18026
+ kind: "nested"
18027
+ },
18028
+ {
18029
+ name: "Rebalance",
18030
+ type: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Rebalance",
18031
+ kind: "nested"
18032
+ },
18033
+ {
18034
+ name: "ShareUpdate",
18035
+ type: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::ShareUpdate",
18036
+ kind: "nested"
18037
+ }
18038
+ ]
18039
+ },
18040
+ {
18041
+ type: "event",
18042
+ name: "strkfarm::strats::dnmm_vesu::DeltaNeutralLoopingVesuXSTRK::Event",
18043
+ kind: "enum",
18044
+ variants: [
18045
+ {
18046
+ name: "ERC721Event",
18047
+ type: "openzeppelin_token::erc721::erc721::ERC721Component::Event",
18048
+ kind: "flat"
18049
+ },
18050
+ {
18051
+ name: "SRC5Event",
18052
+ type: "openzeppelin_introspection::src5::SRC5Component::Event",
18053
+ kind: "flat"
18054
+ },
18055
+ {
18056
+ name: "UpgradeableEvent",
18057
+ type: "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event",
18058
+ kind: "flat"
18059
+ },
18060
+ {
18061
+ name: "PausableEvent",
18062
+ type: "openzeppelin_security::pausable::PausableComponent::Event",
18063
+ kind: "flat"
18064
+ },
18065
+ {
18066
+ name: "ReentrancyGuardEvent",
18067
+ type: "openzeppelin_security::reentrancyguard::ReentrancyGuardComponent::Event",
18068
+ kind: "flat"
18069
+ },
18070
+ {
18071
+ name: "OwnableEvent",
18072
+ type: "openzeppelin_access::ownable::ownable::OwnableComponent::Event",
18073
+ kind: "flat"
18074
+ },
18075
+ {
18076
+ name: "CommonCompEvent",
18077
+ type: "strkfarm::components::common::CommonComp::Event",
18078
+ kind: "flat"
18079
+ },
18080
+ {
18081
+ name: "RewardShareEvent",
18082
+ type: "strkfarm::components::harvester::reward_shares::RewardShareComponent::Event",
18083
+ kind: "flat"
18084
+ },
18085
+ {
18086
+ name: "DeltaNeutralLoopingEvent",
18087
+ type: "strkfarm::components::delta_neutral_component::DeltaNeutralLoopingCom::Event",
18088
+ kind: "flat"
18089
+ }
18090
+ ]
18091
+ }
18092
+ ];
18093
+
18094
+ // src/strategies/sensei.ts
18095
+ var SenseiVault = class extends BaseStrategy {
18096
+ constructor(config, pricer, metadata) {
18097
+ super(config);
18098
+ this.getSettings = async () => {
18099
+ const settings = await this.contract.call("get_settings", []);
18100
+ logger.verbose("getSettings", settings);
18101
+ return settings;
18102
+ };
18103
+ this.address = metadata.address;
18104
+ this.pricer = pricer;
18105
+ this.metadata = metadata;
18106
+ this.contract = new Contract7(sensei_abi_default, this.address.address, this.config.provider);
18107
+ if (metadata.depositTokens.length === 0) {
18108
+ throw new Error("Deposit tokens are not defined in metadata");
18109
+ }
18110
+ }
18111
+ async getUserTVL(user) {
18112
+ const result = await this.contract.call(
18113
+ "describe_position",
18114
+ [user.address]
18115
+ );
18116
+ const amount = Web3Number.fromWei(
18117
+ uint2565.uint256ToBN(result[1].estimated_size).toString(),
18118
+ this.metadata.depositTokens[0].decimals
18119
+ );
18120
+ const price = await this.pricer.getPrice(
18121
+ this.metadata.depositTokens[0].symbol
18122
+ );
18123
+ return {
18124
+ usdValue: Number(amount.toFixed(6)) * price.price,
18125
+ amount,
18126
+ tokenInfo: this.metadata.depositTokens[0]
18127
+ };
18128
+ }
18129
+ async getTVL() {
18130
+ try {
18131
+ const {
18132
+ collateralXSTRK,
18133
+ collateralUSDValue,
18134
+ debtSTRK,
18135
+ debtUSDValue,
18136
+ xSTRKPrice,
18137
+ collateralInSTRK
18138
+ } = await this.getPositionInfo();
18139
+ const usdValue = Number(collateralUSDValue.toFixed(6)) - Number(debtUSDValue.toFixed(6));
18140
+ return {
18141
+ usdValue,
18142
+ amount: new Web3Number(
18143
+ (collateralInSTRK - Number(debtSTRK.toFixed(6))).toFixed(6),
18144
+ collateralXSTRK.decimals
18145
+ ),
18146
+ tokenInfo: this.metadata.depositTokens[0]
18147
+ };
18148
+ } catch (error) {
18149
+ console.error("Error fetching TVL:", error);
18150
+ return {
18151
+ usdValue: 0,
18152
+ amount: new Web3Number("0", this.metadata.depositTokens[0].decimals),
18153
+ tokenInfo: this.metadata.depositTokens[0]
18154
+ };
18155
+ }
18156
+ }
18157
+ async depositCall(amountInfo, receiver) {
18158
+ const mainTokenContract = new Contract7(
18159
+ erc20_abi_default,
18160
+ this.metadata.depositTokens[0].address.address,
18161
+ this.config.provider
18162
+ );
18163
+ const call1 = mainTokenContract.populate("approve", [
18164
+ this.address.address,
18165
+ uint2565.bnToUint256(amountInfo.amount.toWei())
18166
+ ]);
18167
+ const call2 = this.contract.populate("deposit", [
18168
+ uint2565.bnToUint256(amountInfo.amount.toWei()),
18169
+ receiver.address
18170
+ ]);
18171
+ const calls = [call1, call2];
18172
+ return calls;
18173
+ }
18174
+ async withdrawCall(amountInfo, receiver, owner) {
18175
+ const call = this.contract.populate("withdraw", [
18176
+ uint2565.bnToUint256(amountInfo.amount.toWei()),
18177
+ receiver.address,
18178
+ 300
18179
+ // 3% max slippage
18180
+ ]);
18181
+ return [call];
18182
+ }
18183
+ async getPositionInfo() {
18184
+ const CACHE_KEY = "positionInfo";
18185
+ if (this.isCacheValid(CACHE_KEY)) {
18186
+ return this.getCache(CACHE_KEY);
18187
+ }
18188
+ const resp = await fetch(
18189
+ `${getTrovesEndpoint()}/vesu/positions?walletAddress=${this.address.address}`
18190
+ );
18191
+ const data = await resp.json();
18192
+ if (!data.data || data.data.length == 0) {
18193
+ throw new Error("No positions found");
18194
+ }
18195
+ const collateralXSTRK = Web3Number.fromWei(
18196
+ data.data[0].collateral.value,
18197
+ data.data[0].collateral.decimals
18198
+ );
18199
+ const collateralUSDValue = Web3Number.fromWei(
18200
+ data.data[0].collateral.usdPrice.value,
18201
+ data.data[0].collateral.usdPrice.decimals
18202
+ );
18203
+ const debtSTRK = Web3Number.fromWei(
18204
+ data.data[0].debt.value,
18205
+ data.data[0].debt.decimals
18206
+ );
18207
+ const debtUSDValue = Web3Number.fromWei(
18208
+ data.data[0].debt.usdPrice.value,
18209
+ data.data[0].debt.usdPrice.decimals
18210
+ );
18211
+ const xSTRKPrice = await this.getSecondaryTokenPriceRelativeToMain();
18212
+ const collateralInSTRK = Number(collateralXSTRK.toFixed(6)) * xSTRKPrice;
18213
+ const STRKUSDPrice = Number(debtUSDValue.toFixed(6)) / Number(debtSTRK.toFixed(6));
18214
+ const actualCollateralUSDValue = collateralInSTRK * STRKUSDPrice;
18215
+ const cacheData = {
18216
+ collateralXSTRK,
18217
+ collateralUSDValue: new Web3Number(
18218
+ actualCollateralUSDValue.toFixed(6),
18219
+ collateralUSDValue.decimals
18220
+ ),
18221
+ debtSTRK,
18222
+ debtUSDValue,
18223
+ xSTRKPrice,
18224
+ collateralInSTRK
18225
+ };
18226
+ this.setCache(CACHE_KEY, cacheData);
18227
+ return cacheData;
18228
+ }
18229
+ async getSecondaryTokenPriceRelativeToMain(retry = 0) {
18230
+ const CACHE_KEY = "xSTRKPrice";
18231
+ if (this.isCacheValid(CACHE_KEY)) {
18232
+ return this.getCache(CACHE_KEY);
18233
+ }
18234
+ const params = {
18235
+ sellTokenAddress: this.metadata.additionalInfo.secondaryToken.address.address,
18236
+ buyTokenAddress: this.metadata.additionalInfo.mainToken.address.address,
18237
+ sellAmount: BigInt(new Web3Number("1", 18).toWei()),
18238
+ takerAddress: this.address.address
18239
+ };
18240
+ logger.verbose("getSecondaryTokenPriceRelativeToMain [1]", params);
18241
+ let avnu = new AvnuWrapper();
18242
+ const quote = await avnu.getQuotes(
18243
+ params.sellTokenAddress,
18244
+ params.buyTokenAddress,
18245
+ params.sellAmount?.toString() || "0",
18246
+ params.takerAddress
18247
+ );
18248
+ if (!quote) {
18249
+ throw new Error("No quotes found to compute secondary token price relative to main token");
18250
+ }
18251
+ const firstQuote = quote;
18252
+ const price = Number(
18253
+ Web3Number.fromWei(firstQuote.buyAmount.toString(), 18).toFixed(
18254
+ 6
18255
+ )
18256
+ );
18257
+ logger.verbose("getSecondaryTokenPriceRelativeToMain [2]", price);
18258
+ this.setCache(CACHE_KEY, price);
18259
+ return price;
18260
+ }
18261
+ };
18262
+ var senseiDescription = `Deposit your {{token1}} to automatically loop your funds via Endur ({{token2}}) and Vesu to create a delta neutral position. This strategy is designed to maximize your yield on {{token1}}. Your position is automatically adjusted periodically to maintain a healthy health factor. You receive a NFT as representation for your stake on Troves. You can withdraw anytime by redeeming your NFT for {{token1}}.`;
18263
+ var vesuProtocol = {
18264
+ name: "Vesu",
18265
+ logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png"
18266
+ };
18267
+ var endurProtocol = {
18268
+ name: "Endur",
18269
+ logo: "https://app.endur.fi/logo.png"
18270
+ };
18271
+ var _riskFactor3 = [
18272
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by CSC" },
18273
+ { type: "Depeg Risk" /* DEPEG_RISK */, value: 0.25, weight: 25, reason: "Depending on prevailing market conditions and trading activity, xSTRK may lose its peg to the underlying asset." },
18274
+ { type: "Liquidation Risk" /* LIQUIDATION_RISK */, value: 0.1, weight: 10, reason: "Liquidation risk is low due to the nature of the Re7 Pool on Vesu" },
18275
+ { type: "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */, value: 0.5, weight: 50, reason: "xSTRK can be sometimes illiquid near true price" }
18276
+ ];
18277
+ var FAQS = [
18278
+ {
18279
+ question: "What is xSTRK Sensei?",
18280
+ answer: "xSTRK Sensei is a leveraged looping strategy involving xSTRK and STRK. It uses xSTRK as collateral on Vesu, borrows STRK, and buys more xSTRK with it to create up to 4x leverage and boost yields."
18281
+ },
18282
+ {
18283
+ question: "What is the benefit of using xSTRK Sensei?",
18284
+ answer: "The strategy amplifies your xSTRK exposure and yield through leverage. It also helps you accumulate more Endur points faster."
18285
+ },
18286
+ {
18287
+ question: "What is the maximum leverage possible?",
18288
+ answer: "The strategy may allow up to ~4x leverage, depending on your collateral ratio and market conditions on Vesu. This strategy tries to maintain a health factor of 1.1 on Vesu"
18289
+ },
18290
+ {
18291
+ question: "Isn't 1.1 health factor risky?",
18292
+ answer: "Based on Re7's xSTRK pool configuration on Vesu, xSTRK uses STRK price as its oracle source. This means collateral and debt will always move in the same direction, making 1.1 HF safe. However, if debt increases too much (over months), liquidation may occur, which we try to avoid by actively monitoring the position."
18293
+ },
18294
+ {
18295
+ question: "Are there any risks involved?",
18296
+ answer: "Yes. The major risks are related to xSTRK's illiquidity and price volatility. During volatility or low liquidity, exiting a position can result in loss."
18297
+ },
18298
+ {
18299
+ question: "Does the position always grow?",
18300
+ answer: "No. While xSTRK's true value increases over time, its DEX price may not grow continuously and can fluctuate or move in discrete steps."
18301
+ },
18302
+ {
18303
+ question: "Can I lose money using this strategy?",
18304
+ answer: "Yes. If the xSTRK price drops sharply or becomes illiquid, you may face slippage or loss when trying to exit the looped position."
18305
+ },
18306
+ {
18307
+ question: "What affects the DEX price of xSTRK?",
18308
+ answer: "xSTRK's DEX price depends on supply, demand, and liquidity. Unlike its true value which grows steadily, the DEX price can fluctuate due to market activity."
18309
+ },
18310
+ {
18311
+ question: "Why is xSTRK considered illiquid?",
18312
+ answer: "Since xSTRK is a evolving LST with limited trading volume, sudden large trades can cause high slippage, making it harder to enter or exit positions efficiently. Such conditions normalize over time. Enter and exit positions with caution."
18313
+ },
18314
+ {
18315
+ question: "Do I earn Endur points on looped xSTRK?",
18316
+ answer: "Yes. All xSTRK in the looped position contributes to your Endur points, allowing you to farm points more effectively with leverage. Visit endur.fi/leaderboard to see your points."
18317
+ }
18318
+ ];
18319
+ var SenseiStrategies = [
18320
+ {
18321
+ name: "xSTRK Sensei",
18322
+ description: highlightTextWithLinks(
18323
+ senseiDescription.replaceAll("{{token1}}", "STRK").replaceAll("{{token2}}", "xSTRK"),
18324
+ [{
18325
+ highlight: "Endur",
18326
+ link: "https://endur.fi"
18327
+ }, {
18328
+ highlight: "Vesu",
18329
+ link: "https://vesu.xyz"
18330
+ }, {
18331
+ highlight: "delta neutral position",
18332
+ link: "https://www.investopedia.com/terms/d/deltaneutral.asp"
18333
+ }]
18334
+ ),
18335
+ address: ContractAddr.from(
18336
+ "0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b"
18337
+ ),
18338
+ launchBlock: 1053811,
18339
+ type: "Other",
18340
+ depositTokens: [
18341
+ Global.getDefaultTokens().find((t) => t.symbol === "STRK")
18342
+ ],
18343
+ protocols: [endurProtocol, vesuProtocol],
18344
+ maxTVL: new Web3Number("1500000", 18),
18345
+ risk: {
18346
+ riskFactor: _riskFactor3,
18347
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
18348
+ notARisks: getNoRiskTags(_riskFactor3)
18349
+ },
18350
+ additionalInfo: {
18351
+ mainToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
18352
+ secondaryToken: Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
18353
+ targetHfBps: 11e3,
18354
+ // 1.1 health factor
18355
+ feeBps: 2e3
18356
+ // 2% fee on profits
18357
+ },
18358
+ faqs: FAQS,
18359
+ contractDetails: [],
18360
+ investmentSteps: [
18361
+ "Swap STRK for xSTRK",
18362
+ "Deposit xSTRK to Vesu's Re7 xSTRK Pool",
18363
+ "Borrow STRK against your xSTRK collateral",
18364
+ "Buy more xSTRK with borrowed STRK",
18365
+ "Repeat the process to loop your position",
18366
+ "Claim DeFi spring (STRK) rewards weekly and reinvest"
18367
+ ]
18368
+ }
18369
+ ];
18370
+
16281
18371
  // src/notifs/telegram.ts
16282
18372
  import TelegramBot from "node-telegram-bot-api";
16283
18373
  var TelegramNotif = class {
@@ -16560,6 +18650,8 @@ export {
16560
18650
  PricerFromApi,
16561
18651
  PricerRedis,
16562
18652
  RiskType,
18653
+ SenseiStrategies,
18654
+ SenseiVault,
16563
18655
  Store,
16564
18656
  TelegramNotif,
16565
18657
  VesuRebalance,
@@ -16573,6 +18665,7 @@ export {
16573
18665
  getNoRiskTags,
16574
18666
  getRiskColor,
16575
18667
  getRiskExplaination,
18668
+ getTrovesEndpoint,
16576
18669
  highlightTextWithLinks,
16577
18670
  logger
16578
18671
  };