@strkfarm/sdk 1.0.38 → 1.0.39

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.
@@ -17293,8 +17293,7 @@ var strkfarm_risk_engine = (() => {
17293
17293
  getMainnetConfig: () => getMainnetConfig,
17294
17294
  getNoRiskTags: () => getNoRiskTags,
17295
17295
  getRiskColor: () => getRiskColor,
17296
- getRiskExplaination: () => getRiskExplaination,
17297
- logger: () => logger
17296
+ getRiskExplaination: () => getRiskExplaination
17298
17297
  });
17299
17298
 
17300
17299
  // node_modules/.pnpm/axios@1.7.2/node_modules/axios/lib/helpers/bind.js
@@ -19723,6 +19722,14 @@ var strkfarm_risk_engine = (() => {
19723
19722
  mergeConfig: mergeConfig2
19724
19723
  } = axios_default;
19725
19724
 
19725
+ // src/utils/logger.browser.ts
19726
+ var logger = {
19727
+ ...console,
19728
+ verbose(message) {
19729
+ console.log(`[VERBOSE] ${message}`);
19730
+ }
19731
+ };
19732
+
19726
19733
  // src/dataTypes/_bignumber.ts
19727
19734
  var import_bignumber = __toESM(require_bignumber());
19728
19735
  var _Web3Number = class extends import_bignumber.default {
@@ -19739,6 +19746,7 @@ var strkfarm_risk_engine = (() => {
19739
19746
  }
19740
19747
  dividedBy(value) {
19741
19748
  const _value = this.getStandardString(value);
19749
+ console.log("dividedBy", _value);
19742
19750
  return this.construct(this.div(_value).toString(), this.decimals);
19743
19751
  }
19744
19752
  plus(value) {
@@ -19752,13 +19760,15 @@ var strkfarm_risk_engine = (() => {
19752
19760
  construct(value, decimals) {
19753
19761
  return new this.constructor(value, decimals);
19754
19762
  }
19755
- toString(decimals = this.maxToFixedDecimals()) {
19756
- return super.toFixed(decimals);
19763
+ toString() {
19764
+ return super.toString();
19757
19765
  }
19758
19766
  toJSON() {
19767
+ logger.verbose(`converting to json with decimals`);
19759
19768
  return this.toString();
19760
19769
  }
19761
19770
  valueOf() {
19771
+ logger.verbose(`converting to valueOf with decimals`);
19762
19772
  return this.toString();
19763
19773
  }
19764
19774
  maxToFixedDecimals() {
@@ -36012,12 +36022,6 @@ var strkfarm_risk_engine = (() => {
36012
36022
  };
36013
36023
 
36014
36024
  // src/global.ts
36015
- var logger = {
36016
- ...console,
36017
- verbose(message) {
36018
- console.log(`[VERBOSE] ${message}`);
36019
- }
36020
- };
36021
36025
  var FatalError = class extends Error {
36022
36026
  constructor(message, err2) {
36023
36027
  super(message);
@@ -36596,7 +36600,7 @@ var strkfarm_risk_engine = (() => {
36596
36600
  } catch (e) {
36597
36601
  logger.warn("getPriceFromMyAPI error", JSON.stringify(e.message || e));
36598
36602
  }
36599
- logger.log("getPrice coinbase", tokenSymbol);
36603
+ logger.info("getPrice coinbase", tokenSymbol);
36600
36604
  let retry = 0;
36601
36605
  const MAX_RETRIES = 5;
36602
36606
  for (retry = 1; retry < MAX_RETRIES + 1; retry++) {
@@ -37774,6 +37778,11 @@ var strkfarm_risk_engine = (() => {
37774
37778
  const balance = await contract.call("balanceOf", [address.toString()]);
37775
37779
  return Web3Number.fromWei(balance.toString(), tokenDecimals);
37776
37780
  }
37781
+ async allowance(token, owner, spender, tokenDecimals) {
37782
+ const contract = this.contract(token);
37783
+ const allowance = await contract.call("allowance", [owner.toString(), spender.toString()]);
37784
+ return Web3Number.fromWei(allowance.toString(), tokenDecimals);
37785
+ }
37777
37786
  };
37778
37787
 
37779
37788
  // node_modules/.pnpm/ethers@6.13.5/node_modules/ethers/lib.esm/_version.js
@@ -49609,6 +49618,7 @@ var strkfarm_risk_engine = (() => {
49609
49618
  address: ContractAddr.from(
49610
49619
  "0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
49611
49620
  ),
49621
+ launchBlock: 0,
49612
49622
  type: "ERC4626",
49613
49623
  depositTokens: [
49614
49624
  Global.getDefaultTokens().find((t) => t.symbol === "STRK")
@@ -49632,6 +49642,7 @@ var strkfarm_risk_engine = (() => {
49632
49642
  address: ContractAddr.from(
49633
49643
  "0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca"
49634
49644
  ),
49645
+ launchBlock: 0,
49635
49646
  type: "ERC4626",
49636
49647
  auditUrl: AUDIT_URL,
49637
49648
  depositTokens: [
@@ -49655,6 +49666,7 @@ var strkfarm_risk_engine = (() => {
49655
49666
  address: ContractAddr.from(
49656
49667
  "0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c"
49657
49668
  ),
49669
+ launchBlock: 0,
49658
49670
  type: "ERC4626",
49659
49671
  auditUrl: AUDIT_URL,
49660
49672
  depositTokens: [
@@ -49678,6 +49690,7 @@ var strkfarm_risk_engine = (() => {
49678
49690
  address: ContractAddr.from(
49679
49691
  "0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c"
49680
49692
  ),
49693
+ launchBlock: 0,
49681
49694
  type: "ERC4626",
49682
49695
  depositTokens: [
49683
49696
  Global.getDefaultTokens().find((t) => t.symbol === "USDT")
@@ -54637,11 +54650,15 @@ var strkfarm_risk_engine = (() => {
54637
54650
  this.address.address,
54638
54651
  this.config.provider
54639
54652
  );
54640
- this.lstContract = new Contract(
54641
- erc4626_abi_default,
54642
- this.metadata.additionalInfo.lstContract.address,
54643
- this.config.provider
54644
- );
54653
+ if (this.metadata.additionalInfo.lstContract) {
54654
+ this.lstContract = new Contract(
54655
+ erc4626_abi_default,
54656
+ this.metadata.additionalInfo.lstContract.address,
54657
+ this.config.provider
54658
+ );
54659
+ } else {
54660
+ this.lstContract = null;
54661
+ }
54645
54662
  const EKUBO_POSITION = "0x02e0af29598b407c8716b17f6d2795eca1b471413fa03fb145a5e33722184067";
54646
54663
  this.ekuboPositionsContract = new Contract(
54647
54664
  ekubo_positions_abi_default,
@@ -54775,7 +54792,7 @@ var strkfarm_risk_engine = (() => {
54775
54792
  const priceNow = await this.getCurrentPrice(blockIdentifier);
54776
54793
  let blockNow = typeof blockIdentifier == "number" ? blockIdentifier : (await this.config.provider.getBlockLatestAccepted()).block_number;
54777
54794
  const blockNowTime = typeof blockIdentifier == "number" ? (await this.config.provider.getBlockWithTxs(blockIdentifier)).timestamp : (/* @__PURE__ */ new Date()).getTime() / 1e3;
54778
- const blockBefore = blockNow - sinceBlocks;
54795
+ const blockBefore = Math.max(blockNow - sinceBlocks, this.metadata.launchBlock);
54779
54796
  const adjustedSupplyNow = supplyNow.minus(
54780
54797
  await this.getHarvestRewardShares(blockBefore, blockNow)
54781
54798
  );
@@ -54786,9 +54803,9 @@ var strkfarm_risk_engine = (() => {
54786
54803
  const supplyBefore = await this.totalSupply(blockBefore);
54787
54804
  const priceBefore = await this.getCurrentPrice(blockBefore);
54788
54805
  const tvlInToken0Now = tvlNow.amount0.multipliedBy(priceNow.price).plus(tvlNow.amount1);
54789
- const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow);
54806
+ const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow.toString());
54790
54807
  const tvlInToken0Bf = tvlBefore.amount0.multipliedBy(priceBefore.price).plus(tvlBefore.amount1);
54791
- const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore);
54808
+ const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore.toString());
54792
54809
  const timeDiffSeconds = blockNowTime - blockBeforeInfo.timestamp;
54793
54810
  logger.verbose(`tvlInToken0Now: ${tvlInToken0Now.toString()}`);
54794
54811
  logger.verbose(`tvlInToken0Bf: ${tvlInToken0Bf.toString()}`);
@@ -54826,7 +54843,9 @@ var strkfarm_risk_engine = (() => {
54826
54843
  return shares;
54827
54844
  }
54828
54845
  async balanceOf(user, blockIdentifier = "pending") {
54829
- let bal = await this.contract.call("balance_of", [user.address]);
54846
+ let bal = await this.contract.call("balance_of", [user.address], {
54847
+ blockIdentifier
54848
+ });
54830
54849
  return Web3Number.fromWei(bal.toString(), 18);
54831
54850
  }
54832
54851
  async getUserTVL(user, blockIdentifier = "pending") {
@@ -54974,11 +54993,16 @@ var strkfarm_risk_engine = (() => {
54974
54993
  return Number(result.salt.toString());
54975
54994
  }
54976
54995
  async truePrice() {
54977
- const result = await this.lstContract.call("convert_to_assets", [
54978
- uint256_exports.bnToUint256(BigInt(1e18).toString())
54979
- ]);
54980
- const truePrice = Number(BigInt(result.toString()) * BigInt(1e9) / BigInt(1e18)) / 1e9;
54981
- return truePrice;
54996
+ if (this.metadata.additionalInfo.truePrice) {
54997
+ return this.metadata.additionalInfo.truePrice;
54998
+ } else if (this.lstContract) {
54999
+ const result = await this.lstContract.call("convert_to_assets", [
55000
+ uint256_exports.bnToUint256(BigInt(1e18).toString())
55001
+ ]);
55002
+ const truePrice = Number(BigInt(result.toString()) * BigInt(1e9) / BigInt(1e18)) / 1e9;
55003
+ return truePrice;
55004
+ }
55005
+ throw new Error("No true price available");
54982
55006
  }
54983
55007
  async getCurrentPrice(blockIdentifier = "pending") {
54984
55008
  const poolKey = await this.getPoolKey(blockIdentifier);
@@ -55532,6 +55556,7 @@ var strkfarm_risk_engine = (() => {
55532
55556
  const swap1Amount = Web3Number.fromWei(
55533
55557
  uint256_exports.uint256ToBN(swapInfo1.token_from_amount).toString(),
55534
55558
  18
55559
+ // cause its always STRK?
55535
55560
  );
55536
55561
  const remainingAmount = postFeeAmount.minus(swap1Amount);
55537
55562
  const swapInfo2 = {
@@ -55622,6 +55647,9 @@ var strkfarm_risk_engine = (() => {
55622
55647
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
55623
55648
  { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1, weight: 75 }
55624
55649
  ];
55650
+ var _riskFactorStable = [
55651
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
55652
+ ];
55625
55653
  var AUDIT_URL2 = "https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
55626
55654
  var faqs2 = [
55627
55655
  {
@@ -55668,6 +55696,7 @@ var strkfarm_risk_engine = (() => {
55668
55696
  address: ContractAddr.from(
55669
55697
  "0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"
55670
55698
  ),
55699
+ launchBlock: 1209881,
55671
55700
  type: "Other",
55672
55701
  // must be same order as poolKey token0 and token1
55673
55702
  depositTokens: [
@@ -55700,6 +55729,53 @@ var strkfarm_risk_engine = (() => {
55700
55729
  answer: "A negative APY can occur when xSTRK's price drops on DEXes. This is usually temporary and tends to recover within a few days or a week."
55701
55730
  }
55702
55731
  ]
55732
+ },
55733
+ {
55734
+ name: "Ekubo USDC/USDT",
55735
+ description: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
55736
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "USDC/USDT") }),
55737
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
55738
+ "ul",
55739
+ {
55740
+ style: {
55741
+ marginLeft: "20px",
55742
+ listStyle: "circle",
55743
+ fontSize: "12px"
55744
+ },
55745
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." })
55746
+ }
55747
+ )
55748
+ ] }),
55749
+ address: ContractAddr.from(
55750
+ "0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
55751
+ ),
55752
+ launchBlock: 1385576,
55753
+ type: "Other",
55754
+ // must be same order as poolKey token0 and token1
55755
+ depositTokens: [
55756
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
55757
+ Global.getDefaultTokens().find((t) => t.symbol === "USDT")
55758
+ ],
55759
+ protocols: [_protocol2],
55760
+ auditUrl: AUDIT_URL2,
55761
+ maxTVL: Web3Number.fromWei("0", 6),
55762
+ risk: {
55763
+ riskFactor: _riskFactorStable,
55764
+ netRisk: _riskFactorStable.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
55765
+ notARisks: getNoRiskTags(_riskFactorStable)
55766
+ },
55767
+ apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
55768
+ additionalInfo: {
55769
+ newBounds: {
55770
+ lower: -1,
55771
+ upper: 1
55772
+ },
55773
+ truePrice: 1,
55774
+ feeBps: 1e3
55775
+ },
55776
+ faqs: [
55777
+ ...faqs2
55778
+ ]
55703
55779
  }
55704
55780
  ];
55705
55781
  return __toCommonJS(index_browser_exports);
@@ -4,6 +4,14 @@ import axios2 from "axios";
4
4
  // src/global.ts
5
5
  import axios from "axios";
6
6
 
7
+ // src/utils/logger.browser.ts
8
+ var logger = {
9
+ ...console,
10
+ verbose(message) {
11
+ console.log(`[VERBOSE] ${message}`);
12
+ }
13
+ };
14
+
7
15
  // src/dataTypes/_bignumber.ts
8
16
  import BigNumber from "bignumber.js";
9
17
  var _Web3Number = class extends BigNumber {
@@ -20,6 +28,7 @@ var _Web3Number = class extends BigNumber {
20
28
  }
21
29
  dividedBy(value) {
22
30
  const _value = this.getStandardString(value);
31
+ console.log("dividedBy", _value);
23
32
  return this.construct(this.div(_value).toString(), this.decimals);
24
33
  }
25
34
  plus(value) {
@@ -33,13 +42,15 @@ var _Web3Number = class extends BigNumber {
33
42
  construct(value, decimals) {
34
43
  return new this.constructor(value, decimals);
35
44
  }
36
- toString(decimals = this.maxToFixedDecimals()) {
37
- return super.toFixed(decimals);
45
+ toString() {
46
+ return super.toString();
38
47
  }
39
48
  toJSON() {
49
+ logger.verbose(`converting to json with decimals`);
40
50
  return this.toString();
41
51
  }
42
52
  valueOf() {
53
+ logger.verbose(`converting to valueOf with decimals`);
43
54
  return this.toString();
44
55
  }
45
56
  maxToFixedDecimals() {
@@ -95,12 +106,6 @@ var ContractAddr = class _ContractAddr {
95
106
  };
96
107
 
97
108
  // src/global.ts
98
- var logger = {
99
- ...console,
100
- verbose(message) {
101
- console.log(`[VERBOSE] ${message}`);
102
- }
103
- };
104
109
  var FatalError = class extends Error {
105
110
  constructor(message, err) {
106
111
  super(message);
@@ -686,7 +691,7 @@ var PricerFromApi = class extends PricerBase {
686
691
  } catch (e) {
687
692
  logger.warn("getPriceFromMyAPI error", JSON.stringify(e.message || e));
688
693
  }
689
- logger.log("getPrice coinbase", tokenSymbol);
694
+ logger.info("getPrice coinbase", tokenSymbol);
690
695
  let retry = 0;
691
696
  const MAX_RETRIES = 5;
692
697
  for (retry = 1; retry < MAX_RETRIES + 1; retry++) {
@@ -1867,6 +1872,11 @@ var ERC20 = class {
1867
1872
  const balance = await contract.call("balanceOf", [address.toString()]);
1868
1873
  return Web3Number.fromWei(balance.toString(), tokenDecimals);
1869
1874
  }
1875
+ async allowance(token, owner, spender, tokenDecimals) {
1876
+ const contract = this.contract(token);
1877
+ const allowance = await contract.call("allowance", [owner.toString(), spender.toString()]);
1878
+ return Web3Number.fromWei(allowance.toString(), tokenDecimals);
1879
+ }
1870
1880
  };
1871
1881
 
1872
1882
  // src/modules/avnu.ts
@@ -13395,6 +13405,7 @@ var VesuRebalanceStrategies = [
13395
13405
  address: ContractAddr.from(
13396
13406
  "0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
13397
13407
  ),
13408
+ launchBlock: 0,
13398
13409
  type: "ERC4626",
13399
13410
  depositTokens: [
13400
13411
  Global.getDefaultTokens().find((t) => t.symbol === "STRK")
@@ -13418,6 +13429,7 @@ var VesuRebalanceStrategies = [
13418
13429
  address: ContractAddr.from(
13419
13430
  "0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca"
13420
13431
  ),
13432
+ launchBlock: 0,
13421
13433
  type: "ERC4626",
13422
13434
  auditUrl: AUDIT_URL,
13423
13435
  depositTokens: [
@@ -13441,6 +13453,7 @@ var VesuRebalanceStrategies = [
13441
13453
  address: ContractAddr.from(
13442
13454
  "0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c"
13443
13455
  ),
13456
+ launchBlock: 0,
13444
13457
  type: "ERC4626",
13445
13458
  auditUrl: AUDIT_URL,
13446
13459
  depositTokens: [
@@ -13464,6 +13477,7 @@ var VesuRebalanceStrategies = [
13464
13477
  address: ContractAddr.from(
13465
13478
  "0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c"
13466
13479
  ),
13480
+ launchBlock: 0,
13467
13481
  type: "ERC4626",
13468
13482
  depositTokens: [
13469
13483
  Global.getDefaultTokens().find((t) => t.symbol === "USDT")
@@ -18430,11 +18444,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
18430
18444
  this.address.address,
18431
18445
  this.config.provider
18432
18446
  );
18433
- this.lstContract = new Contract6(
18434
- erc4626_abi_default,
18435
- this.metadata.additionalInfo.lstContract.address,
18436
- this.config.provider
18437
- );
18447
+ if (this.metadata.additionalInfo.lstContract) {
18448
+ this.lstContract = new Contract6(
18449
+ erc4626_abi_default,
18450
+ this.metadata.additionalInfo.lstContract.address,
18451
+ this.config.provider
18452
+ );
18453
+ } else {
18454
+ this.lstContract = null;
18455
+ }
18438
18456
  const EKUBO_POSITION = "0x02e0af29598b407c8716b17f6d2795eca1b471413fa03fb145a5e33722184067";
18439
18457
  this.ekuboPositionsContract = new Contract6(
18440
18458
  ekubo_positions_abi_default,
@@ -18568,7 +18586,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
18568
18586
  const priceNow = await this.getCurrentPrice(blockIdentifier);
18569
18587
  let blockNow = typeof blockIdentifier == "number" ? blockIdentifier : (await this.config.provider.getBlockLatestAccepted()).block_number;
18570
18588
  const blockNowTime = typeof blockIdentifier == "number" ? (await this.config.provider.getBlockWithTxs(blockIdentifier)).timestamp : (/* @__PURE__ */ new Date()).getTime() / 1e3;
18571
- const blockBefore = blockNow - sinceBlocks;
18589
+ const blockBefore = Math.max(blockNow - sinceBlocks, this.metadata.launchBlock);
18572
18590
  const adjustedSupplyNow = supplyNow.minus(
18573
18591
  await this.getHarvestRewardShares(blockBefore, blockNow)
18574
18592
  );
@@ -18579,9 +18597,9 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
18579
18597
  const supplyBefore = await this.totalSupply(blockBefore);
18580
18598
  const priceBefore = await this.getCurrentPrice(blockBefore);
18581
18599
  const tvlInToken0Now = tvlNow.amount0.multipliedBy(priceNow.price).plus(tvlNow.amount1);
18582
- const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow);
18600
+ const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow.toString());
18583
18601
  const tvlInToken0Bf = tvlBefore.amount0.multipliedBy(priceBefore.price).plus(tvlBefore.amount1);
18584
- const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore);
18602
+ const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore.toString());
18585
18603
  const timeDiffSeconds = blockNowTime - blockBeforeInfo.timestamp;
18586
18604
  logger.verbose(`tvlInToken0Now: ${tvlInToken0Now.toString()}`);
18587
18605
  logger.verbose(`tvlInToken0Bf: ${tvlInToken0Bf.toString()}`);
@@ -18619,7 +18637,9 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
18619
18637
  return shares;
18620
18638
  }
18621
18639
  async balanceOf(user, blockIdentifier = "pending") {
18622
- let bal = await this.contract.call("balance_of", [user.address]);
18640
+ let bal = await this.contract.call("balance_of", [user.address], {
18641
+ blockIdentifier
18642
+ });
18623
18643
  return Web3Number.fromWei(bal.toString(), 18);
18624
18644
  }
18625
18645
  async getUserTVL(user, blockIdentifier = "pending") {
@@ -18767,11 +18787,16 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
18767
18787
  return Number(result.salt.toString());
18768
18788
  }
18769
18789
  async truePrice() {
18770
- const result = await this.lstContract.call("convert_to_assets", [
18771
- uint2564.bnToUint256(BigInt(1e18).toString())
18772
- ]);
18773
- const truePrice = Number(BigInt(result.toString()) * BigInt(1e9) / BigInt(1e18)) / 1e9;
18774
- return truePrice;
18790
+ if (this.metadata.additionalInfo.truePrice) {
18791
+ return this.metadata.additionalInfo.truePrice;
18792
+ } else if (this.lstContract) {
18793
+ const result = await this.lstContract.call("convert_to_assets", [
18794
+ uint2564.bnToUint256(BigInt(1e18).toString())
18795
+ ]);
18796
+ const truePrice = Number(BigInt(result.toString()) * BigInt(1e9) / BigInt(1e18)) / 1e9;
18797
+ return truePrice;
18798
+ }
18799
+ throw new Error("No true price available");
18775
18800
  }
18776
18801
  async getCurrentPrice(blockIdentifier = "pending") {
18777
18802
  const poolKey = await this.getPoolKey(blockIdentifier);
@@ -19325,6 +19350,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
19325
19350
  const swap1Amount = Web3Number.fromWei(
19326
19351
  uint2564.uint256ToBN(swapInfo1.token_from_amount).toString(),
19327
19352
  18
19353
+ // cause its always STRK?
19328
19354
  );
19329
19355
  const remainingAmount = postFeeAmount.minus(swap1Amount);
19330
19356
  const swapInfo2 = {
@@ -19415,6 +19441,9 @@ var _riskFactor2 = [
19415
19441
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
19416
19442
  { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1, weight: 75 }
19417
19443
  ];
19444
+ var _riskFactorStable = [
19445
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
19446
+ ];
19418
19447
  var AUDIT_URL2 = "https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
19419
19448
  var faqs2 = [
19420
19449
  {
@@ -19461,6 +19490,7 @@ var EkuboCLVaultStrategies = [
19461
19490
  address: ContractAddr.from(
19462
19491
  "0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"
19463
19492
  ),
19493
+ launchBlock: 1209881,
19464
19494
  type: "Other",
19465
19495
  // must be same order as poolKey token0 and token1
19466
19496
  depositTokens: [
@@ -19493,6 +19523,53 @@ var EkuboCLVaultStrategies = [
19493
19523
  answer: "A negative APY can occur when xSTRK's price drops on DEXes. This is usually temporary and tends to recover within a few days or a week."
19494
19524
  }
19495
19525
  ]
19526
+ },
19527
+ {
19528
+ name: "Ekubo USDC/USDT",
19529
+ description: /* @__PURE__ */ jsxs2("div", { children: [
19530
+ /* @__PURE__ */ jsx2("p", { children: _description2.replace("{{POOL_NAME}}", "USDC/USDT") }),
19531
+ /* @__PURE__ */ jsx2(
19532
+ "ul",
19533
+ {
19534
+ style: {
19535
+ marginLeft: "20px",
19536
+ listStyle: "circle",
19537
+ fontSize: "12px"
19538
+ },
19539
+ children: /* @__PURE__ */ jsx2("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." })
19540
+ }
19541
+ )
19542
+ ] }),
19543
+ address: ContractAddr.from(
19544
+ "0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
19545
+ ),
19546
+ launchBlock: 1385576,
19547
+ type: "Other",
19548
+ // must be same order as poolKey token0 and token1
19549
+ depositTokens: [
19550
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
19551
+ Global.getDefaultTokens().find((t) => t.symbol === "USDT")
19552
+ ],
19553
+ protocols: [_protocol2],
19554
+ auditUrl: AUDIT_URL2,
19555
+ maxTVL: Web3Number.fromWei("0", 6),
19556
+ risk: {
19557
+ riskFactor: _riskFactorStable,
19558
+ netRisk: _riskFactorStable.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
19559
+ notARisks: getNoRiskTags(_riskFactorStable)
19560
+ },
19561
+ apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
19562
+ additionalInfo: {
19563
+ newBounds: {
19564
+ lower: -1,
19565
+ upper: 1
19566
+ },
19567
+ truePrice: 1,
19568
+ feeBps: 1e3
19569
+ },
19570
+ faqs: [
19571
+ ...faqs2
19572
+ ]
19496
19573
  }
19497
19574
  ];
19498
19575
  export {
@@ -19521,6 +19598,5 @@ export {
19521
19598
  getMainnetConfig,
19522
19599
  getNoRiskTags,
19523
19600
  getRiskColor,
19524
- getRiskExplaination,
19525
- logger
19601
+ getRiskExplaination
19526
19602
  };
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ import * as starknet from 'starknet';
3
3
  import { RpcProvider, BlockIdentifier, Contract, Uint256, Call, Account } from 'starknet';
4
4
  import React from 'react';
5
5
  import { Quote } from '@avnu/avnu-sdk';
6
- import * as util from 'util';
7
6
  import TelegramBot from 'node-telegram-bot-api';
8
7
 
9
8
  declare class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
@@ -15,7 +14,7 @@ declare class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
15
14
  plus(value: string | number | T): T;
16
15
  minus(n: number | string | T, base?: number): T;
17
16
  protected construct(value: string | number, decimals: number): T;
18
- toString(decimals?: number | undefined): string;
17
+ toString(): string;
19
18
  toJSON(): string;
20
19
  valueOf(): string;
21
20
  private maxToFixedDecimals;
@@ -97,6 +96,7 @@ interface IStrategyMetadata<T> {
97
96
  name: string;
98
97
  description: string | React.ReactNode;
99
98
  address: ContractAddr;
99
+ launchBlock: number;
100
100
  type: "ERC4626" | "ERC721" | "Other";
101
101
  depositTokens: TokenInfo[];
102
102
  protocols: IProtocol[];
@@ -265,6 +265,7 @@ declare class ERC20 {
265
265
  constructor(config: IConfig);
266
266
  contract(addr: string | ContractAddr): Contract;
267
267
  balanceOf(token: string | ContractAddr, address: string | ContractAddr, tokenDecimals: number): Promise<Web3Number>;
268
+ allowance(token: string | ContractAddr, owner: string | ContractAddr, spender: string | ContractAddr, tokenDecimals: number): Promise<Web3Number>;
268
269
  }
269
270
 
270
271
  interface Route {
@@ -290,52 +291,6 @@ declare class AvnuWrapper {
290
291
  getSwapInfo(quote: Quote, taker: string, integratorFeeBps: number, integratorFeeRecipient: string, minAmount?: string): Promise<SwapInfo>;
291
292
  }
292
293
 
293
- declare const logger: {
294
- verbose(message: string): void;
295
- assert(condition?: boolean, ...data: any[]): void;
296
- assert(value: any, message?: string, ...optionalParams: any[]): void;
297
- clear(): void;
298
- clear(): void;
299
- count(label?: string): void;
300
- count(label?: string): void;
301
- countReset(label?: string): void;
302
- countReset(label?: string): void;
303
- debug(...data: any[]): void;
304
- debug(message?: any, ...optionalParams: any[]): void;
305
- dir(item?: any, options?: any): void;
306
- dir(obj: any, options?: util.InspectOptions): void;
307
- dirxml(...data: any[]): void;
308
- dirxml(...data: any[]): void;
309
- error(...data: any[]): void;
310
- error(message?: any, ...optionalParams: any[]): void;
311
- group(...data: any[]): void;
312
- group(...label: any[]): void;
313
- groupCollapsed(...data: any[]): void;
314
- groupCollapsed(...label: any[]): void;
315
- groupEnd(): void;
316
- groupEnd(): void;
317
- info(...data: any[]): void;
318
- info(message?: any, ...optionalParams: any[]): void;
319
- log(...data: any[]): void;
320
- log(message?: any, ...optionalParams: any[]): void;
321
- table(tabularData?: any, properties?: string[]): void;
322
- table(tabularData: any, properties?: readonly string[]): void;
323
- time(label?: string): void;
324
- time(label?: string): void;
325
- timeEnd(label?: string): void;
326
- timeEnd(label?: string): void;
327
- timeLog(label?: string, ...data: any[]): void;
328
- timeLog(label?: string, ...data: any[]): void;
329
- timeStamp(label?: string): void;
330
- timeStamp(label?: string): void;
331
- trace(...data: any[]): void;
332
- trace(message?: any, ...optionalParams: any[]): void;
333
- warn(...data: any[]): void;
334
- warn(message?: any, ...optionalParams: any[]): void;
335
- Console: console.ConsoleConstructor;
336
- profile(label?: string): void;
337
- profileEnd(label?: string): void;
338
- };
339
294
  declare class FatalError extends Error {
340
295
  constructor(message: string, err?: Error);
341
296
  }
@@ -640,7 +595,8 @@ interface CLVaultStrategySettings {
640
595
  lower: number;
641
596
  upper: number;
642
597
  };
643
- lstContract: ContractAddr;
598
+ lstContract?: ContractAddr;
599
+ truePrice?: number;
644
600
  feeBps: number;
645
601
  }
646
602
  declare class EkuboCLVault extends BaseStrategy<DualTokenInfo, DualActionAmount> {
@@ -655,7 +611,7 @@ declare class EkuboCLVault extends BaseStrategy<DualTokenInfo, DualActionAmount>
655
611
  readonly BASE_WEIGHT = 10000;
656
612
  readonly ekuboPositionsContract: Contract;
657
613
  readonly ekuboMathContract: Contract;
658
- readonly lstContract: Contract;
614
+ readonly lstContract: Contract | null;
659
615
  poolKey: EkuboPoolKey | undefined;
660
616
  readonly avnu: AvnuWrapper;
661
617
  /**
@@ -766,6 +722,19 @@ declare class TelegramNotif {
766
722
  sendMessage(msg: string): void;
767
723
  }
768
724
 
725
+ interface LeveledLogMethod {
726
+ (message: string, ...meta: any[]): void;
727
+ (message: any): void;
728
+ }
729
+ interface MyLogger {
730
+ error: LeveledLogMethod;
731
+ warn: LeveledLogMethod;
732
+ info: LeveledLogMethod;
733
+ verbose: LeveledLogMethod;
734
+ debug: LeveledLogMethod;
735
+ }
736
+ declare const logger: MyLogger;
737
+
769
738
  type RequiredFields<T> = {
770
739
  [K in keyof T]-?: T[K];
771
740
  };