@strkfarm/sdk 2.0.0-dev.43 → 2.0.0-dev.44

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.js CHANGED
@@ -102,6 +102,7 @@ __export(index_exports, {
102
102
  TRANSFER_SANITIZER: () => TRANSFER_SANITIZER,
103
103
  TelegramGroupNotif: () => TelegramGroupNotif,
104
104
  TelegramNotif: () => TelegramNotif,
105
+ TokenIndexingType: () => TokenIndexingType,
105
106
  TokenMarketData: () => TokenMarketData,
106
107
  TokenTransferAdapter: () => TokenTransferAdapter,
107
108
  UNIVERSAL_ADAPTER_IDS: () => UNIVERSAL_ADAPTER_IDS,
@@ -273,7 +274,7 @@ var Web3Number = class _Web3Number2 extends _Web3Number {
273
274
  [import_util.default.inspect.custom](depth, opts) {
274
275
  return this.toString();
275
276
  }
276
- [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")](depth, inspectOptions, inspect) {
277
+ [Symbol.for("nodejs.util.inspect.custom")](depth, inspectOptions, inspect) {
277
278
  return this.toString();
278
279
  }
279
280
  inspect(depth, opts) {
@@ -324,7 +325,7 @@ var ContractAddr = class _ContractAddr {
324
325
  // src/dataTypes/mynumber.ts
325
326
  var import_bignumber3 = __toESM(require("bignumber.js"));
326
327
  var import_ethers = require("ethers");
327
- var customInspectSymbol = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
328
+ var customInspectSymbol = Symbol.for("nodejs.util.inspect.custom");
328
329
  import_bignumber3.default.config({
329
330
  DECIMAL_PLACES: 18
330
331
  });
@@ -333,16 +334,16 @@ var MyNumber = class _MyNumber {
333
334
  this.bigNumber = new import_bignumber3.default(bigNumber);
334
335
  this.decimals = decimals;
335
336
  }
336
- static fromEther(num16, decimals) {
337
+ static fromEther(num17, decimals) {
337
338
  try {
338
339
  return new _MyNumber(
339
340
  Number(
340
- import_ethers.ethers.parseUnits(Number(num16).toFixed(10), decimals)
341
+ import_ethers.ethers.parseUnits(Number(num17).toFixed(10), decimals)
341
342
  ).toFixed(6),
342
343
  decimals
343
344
  );
344
345
  } catch (e) {
345
- console.error("fromEther", e, num16, decimals);
346
+ console.error("fromEther", e, num17, decimals);
346
347
  throw e;
347
348
  }
348
349
  }
@@ -542,7 +543,7 @@ var getStackFromMeta = (stack, meta) => {
542
543
  if (typeof stack === "string" && stack.length > 0) {
543
544
  return stack;
544
545
  }
545
- const splat = meta[/* @__PURE__ */ Symbol.for("splat")];
546
+ const splat = meta[Symbol.for("splat")];
546
547
  if (Array.isArray(splat)) {
547
548
  for (const item of splat) {
548
549
  if (item instanceof Error && item.stack) {
@@ -616,7 +617,7 @@ function configureLogger(config = {}) {
616
617
  out += ` stack="${escapeValue(stripAnsi(derivedStack))}"`;
617
618
  }
618
619
  const metaCopy = { ...meta };
619
- delete metaCopy[/* @__PURE__ */ Symbol.for("splat")];
620
+ delete metaCopy[Symbol.for("splat")];
620
621
  if (Object.keys(metaCopy).length > 0) {
621
622
  out += ` meta=${escapeValue(stringifyUnknown(metaCopy))}`;
622
623
  }
@@ -635,283 +636,510 @@ function configureLogger(config = {}) {
635
636
  }
636
637
  configureLogger();
637
638
 
639
+ // src/interfaces/lending.ts
640
+ var MarginType = /* @__PURE__ */ ((MarginType2) => {
641
+ MarginType2["SHARED"] = "shared";
642
+ MarginType2["NONE"] = "none";
643
+ return MarginType2;
644
+ })(MarginType || {});
645
+ var ILending = class {
646
+ constructor(config, metadata) {
647
+ this.tokens = [];
648
+ this.initialised = false;
649
+ this.metadata = metadata;
650
+ this.config = config;
651
+ this.init();
652
+ }
653
+ /** Wait for initialisation */
654
+ waitForInitilisation() {
655
+ return new Promise((resolve, reject) => {
656
+ const interval = setInterval(() => {
657
+ logger.verbose(`Waiting for ${this.metadata.name} to initialise`);
658
+ if (this.initialised) {
659
+ logger.verbose(`${this.metadata.name} initialised`);
660
+ clearInterval(interval);
661
+ resolve();
662
+ }
663
+ }, 1e3);
664
+ });
665
+ }
666
+ };
667
+
668
+ // src/interfaces/common.tsx
669
+ var import_starknet4 = require("starknet");
670
+ var import_jsx_runtime = require("react/jsx-runtime");
671
+ var RiskType = /* @__PURE__ */ ((RiskType2) => {
672
+ RiskType2["MARKET_RISK"] = "Market Risk";
673
+ RiskType2["IMPERMANENT_LOSS"] = "Impermanent Loss Risk";
674
+ RiskType2["LIQUIDATION_RISK"] = "Liquidation Risk";
675
+ RiskType2["LOW_LIQUIDITY_RISK"] = "Low Liquidity Risk";
676
+ RiskType2["SMART_CONTRACT_RISK"] = "Smart Contract Risk";
677
+ RiskType2["ORACLE_RISK"] = "Oracle Risk";
678
+ RiskType2["TECHNICAL_RISK"] = "Technical Risk";
679
+ RiskType2["COUNTERPARTY_RISK"] = "Counterparty Risk";
680
+ RiskType2["DEPEG_RISK"] = "Depeg Risk";
681
+ return RiskType2;
682
+ })(RiskType || {});
683
+ var TokenIndexingType = /* @__PURE__ */ ((TokenIndexingType2) => {
684
+ TokenIndexingType2["PEGGED"] = "pegged";
685
+ TokenIndexingType2["INDEXER"] = "indexer";
686
+ TokenIndexingType2["LST_SCRIPT"] = "lstScript";
687
+ TokenIndexingType2["IGNORE"] = "ignore";
688
+ return TokenIndexingType2;
689
+ })(TokenIndexingType || {});
690
+ var Network = /* @__PURE__ */ ((Network2) => {
691
+ Network2["mainnet"] = "mainnet";
692
+ Network2["sepolia"] = "sepolia";
693
+ Network2["devnet"] = "devnet";
694
+ return Network2;
695
+ })(Network || {});
696
+ var StrategyTag = /* @__PURE__ */ ((StrategyTag3) => {
697
+ StrategyTag3["META_VAULT"] = "Meta Vaults";
698
+ StrategyTag3["LEVERED"] = "Maxx";
699
+ StrategyTag3["AUTOMATED_LP"] = "Ekubo";
700
+ StrategyTag3["BTC"] = "BTC";
701
+ return StrategyTag3;
702
+ })(StrategyTag || {});
703
+ var VaultType = /* @__PURE__ */ ((VaultType2) => {
704
+ VaultType2["LOOPING"] = "Looping";
705
+ VaultType2["META_VAULT"] = "Meta Vault";
706
+ VaultType2["DELTA_NEUTRAL"] = "Delta Neutral";
707
+ VaultType2["AUTOMATED_LP"] = "Automated LP";
708
+ VaultType2["TVA"] = "Troves Value Averaging";
709
+ return VaultType2;
710
+ })(VaultType || {});
711
+ var AuditStatus = /* @__PURE__ */ ((AuditStatus2) => {
712
+ AuditStatus2["AUDITED"] = "Audited";
713
+ AuditStatus2["NOT_AUDITED"] = "Not Audited";
714
+ return AuditStatus2;
715
+ })(AuditStatus || {});
716
+ var SourceCodeType = /* @__PURE__ */ ((SourceCodeType2) => {
717
+ SourceCodeType2["OPEN_SOURCE"] = "Open Source";
718
+ SourceCodeType2["CLOSED_SOURCE"] = "Closed Source";
719
+ return SourceCodeType2;
720
+ })(SourceCodeType || {});
721
+ var AccessControlType = /* @__PURE__ */ ((AccessControlType2) => {
722
+ AccessControlType2["MULTISIG_ACCOUNT"] = "Multisig Account";
723
+ AccessControlType2["STANDARD_ACCOUNT"] = "Standard Account";
724
+ AccessControlType2["ROLE_BASED_ACCESS"] = "Role Based Access";
725
+ return AccessControlType2;
726
+ })(AccessControlType || {});
727
+ var InstantWithdrawalVault = /* @__PURE__ */ ((InstantWithdrawalVault2) => {
728
+ InstantWithdrawalVault2["YES"] = "Yes";
729
+ InstantWithdrawalVault2["NO"] = "No";
730
+ return InstantWithdrawalVault2;
731
+ })(InstantWithdrawalVault || {});
732
+ var FlowChartColors = /* @__PURE__ */ ((FlowChartColors2) => {
733
+ FlowChartColors2["Green"] = "purple";
734
+ FlowChartColors2["Blue"] = "#35484f";
735
+ FlowChartColors2["Purple"] = "#6e53dc";
736
+ return FlowChartColors2;
737
+ })(FlowChartColors || {});
738
+ var StrategyLiveStatus = /* @__PURE__ */ ((StrategyLiveStatus2) => {
739
+ StrategyLiveStatus2["ACTIVE"] = "Active";
740
+ StrategyLiveStatus2["NEW"] = "New";
741
+ StrategyLiveStatus2["COMING_SOON"] = "Coming Soon";
742
+ StrategyLiveStatus2["DEPRECATED"] = "Deprecated";
743
+ StrategyLiveStatus2["RETIRED"] = "Retired";
744
+ StrategyLiveStatus2["HOT"] = "Hot & New \u{1F525}";
745
+ return StrategyLiveStatus2;
746
+ })(StrategyLiveStatus || {});
747
+ function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier = import_starknet4.BlockTag.LATEST) {
748
+ return {
749
+ provider: new import_starknet4.RpcProvider({
750
+ nodeUrl: rpcUrl,
751
+ blockIdentifier
752
+ // specVersion
753
+ }),
754
+ stage: "production",
755
+ network: "mainnet" /* mainnet */
756
+ };
757
+ }
758
+ var getStrategyTagDesciption = (tag) => {
759
+ switch (tag) {
760
+ case "Meta Vaults" /* META_VAULT */:
761
+ return "A meta vault is a vault that auto allocates funds to multiple vaults based on optimal yield opportunities";
762
+ case "Maxx" /* LEVERED */:
763
+ return "Looping vaults on Endur LSTs with leveraged borrowing of STRK or BTC to increase yield (2-4x higher yield than simply staking)";
764
+ case "Ekubo" /* AUTOMATED_LP */:
765
+ return "Automated LP vaults on Ekubo that rebalance position automatically, ensuring you earn fees efficiently";
766
+ case "BTC" /* BTC */:
767
+ return "BTC linked vaults";
768
+ }
769
+ };
770
+ var getAllStrategyTags = () => {
771
+ return Object.values(StrategyTag);
772
+ };
773
+ var getRiskExplaination = (riskType) => {
774
+ switch (riskType) {
775
+ case "Market Risk" /* MARKET_RISK */:
776
+ return "The risk of the market moving against the position.";
777
+ case "Impermanent Loss Risk" /* IMPERMANENT_LOSS */:
778
+ return "The temporary loss of value experienced by liquidity providers in AMMs when asset prices diverge compared to simply holding them.";
779
+ case "Liquidation Risk" /* LIQUIDATION_RISK */:
780
+ return "The risk of losing funds due to the position being liquidated.";
781
+ case "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */:
782
+ return "The risk of low liquidity in the pool, which can lead to high slippages or reduced in-abilities to quickly exit the position.";
783
+ case "Oracle Risk" /* ORACLE_RISK */:
784
+ return "The risk of the oracle being manipulated or incorrect.";
785
+ case "Smart Contract Risk" /* SMART_CONTRACT_RISK */:
786
+ return "The risk of the smart contract being vulnerable to attacks.";
787
+ case "Technical Risk" /* TECHNICAL_RISK */:
788
+ return "The risk of technical issues e.g. backend failure.";
789
+ case "Counterparty Risk" /* COUNTERPARTY_RISK */:
790
+ return "The risk of the counterparty defaulting e.g. bad debt on lending platforms.";
791
+ case "Depeg Risk" /* DEPEG_RISK */:
792
+ return "The risk of a token losing its peg to the underlying asset, leading to potential losses for holders.";
793
+ }
794
+ };
795
+ var getRiskColor = (risk) => {
796
+ const value = risk.value;
797
+ if (value <= 2) return "light_green_2";
798
+ if (value < 3) return "yellow";
799
+ return "red";
800
+ };
801
+ var getNoRiskTags = (risks) => {
802
+ const noRisks1 = risks.filter((risk) => risk.value === 0).map((risk) => risk.type);
803
+ const noRisks2 = Object.values(RiskType).filter(
804
+ (risk) => !risks.map((risk2) => risk2.type).includes(risk)
805
+ );
806
+ const mergedUnique = [.../* @__PURE__ */ new Set([...noRisks1, ...noRisks2])];
807
+ return mergedUnique;
808
+ };
809
+ function highlightTextWithLinks(put, highlights) {
810
+ const escapeRegExp = (text) => text.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
811
+ const pattern = new RegExp(
812
+ `(${highlights.map((m) => escapeRegExp(m.highlight)).join("|")})`,
813
+ "gi"
814
+ );
815
+ const parts = put.split(pattern);
816
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: parts.map((part, i) => {
817
+ const match = highlights.find((m) => m.highlight.toLowerCase() === part.toLowerCase());
818
+ return match ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: match.link, target: "_blank", style: { color: "white", background: "rgba(255, 255, 255, 0.04)" }, children: part }, i) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: part }, i);
819
+ }) });
820
+ }
821
+ var VesuProtocol = {
822
+ name: "Vesu",
823
+ logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png"
824
+ };
825
+ var AvnuProtocol = {
826
+ name: "Avnu",
827
+ logo: "https://static-assets-8zct.onrender.com/integrations/avnu/logo.png"
828
+ };
829
+ var EndurProtocol = {
830
+ name: "Endur",
831
+ logo: "http://endur.fi/logo.png"
832
+ };
833
+ var ExtendedProtocol = {
834
+ name: "Extended",
835
+ logo: "https://static-assets-8zct.onrender.com/integrations/extended/extended.svg"
836
+ };
837
+ var EkuboProtocol = {
838
+ name: "Ekubo",
839
+ logo: "https://app.ekubo.org/favicon.ico"
840
+ };
841
+ var NoneProtocol = {
842
+ name: "-",
843
+ logo: ""
844
+ };
845
+ var VaultProtocol = {
846
+ name: "Vault",
847
+ logo: ""
848
+ };
849
+ var TrovesProtocol = {
850
+ name: "Troves",
851
+ logo: "https://app.troves.fi/favicon.ico"
852
+ };
853
+ var Protocols = {
854
+ NONE: NoneProtocol,
855
+ VESU: VesuProtocol,
856
+ ENDUR: EndurProtocol,
857
+ EXTENDED: ExtendedProtocol,
858
+ EKUBO: EkuboProtocol,
859
+ AVNU: AvnuProtocol,
860
+ VAULT: VaultProtocol,
861
+ TROVES: TrovesProtocol
862
+ };
863
+ var UnwrapLabsCurator = {
864
+ name: "Unwrap Labs",
865
+ logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
866
+ };
867
+
868
+ // src/interfaces/initializable.ts
869
+ var Initializable = class {
870
+ constructor() {
871
+ this.initialized = false;
872
+ }
873
+ async waitForInitilisation() {
874
+ return new Promise((resolve, reject) => {
875
+ const interval = setInterval(() => {
876
+ if (this.initialized) {
877
+ console.log("Initialised");
878
+ clearInterval(interval);
879
+ resolve();
880
+ }
881
+ }, 1e3);
882
+ });
883
+ }
884
+ };
885
+
638
886
  // src/global.ts
639
887
  var FatalError = class extends Error {
640
888
  constructor(message, err) {
641
889
  super(message);
642
890
  logger.error(message);
643
- if (err) logger.error(err.message);
891
+ if (err)
892
+ logger.error(err.message);
644
893
  this.name = "FatalError";
645
894
  }
646
895
  };
647
- var defaultTokens = [
648
- {
649
- name: "Starknet",
650
- symbol: "STRK",
651
- logo: "https://assets.troves.fi/integrations/tokens/strk.svg",
652
- address: ContractAddr.from(
653
- "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d"
654
- ),
655
- decimals: 18,
656
- coingeckId: "starknet",
657
- displayDecimals: 2,
658
- priceCheckAmount: 1e3
659
- },
660
- {
661
- name: "xSTRK",
662
- symbol: "xSTRK",
663
- logo: "https://assets.troves.fi/integrations/tokens/xstrk.svg",
664
- address: ContractAddr.from(
665
- "0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a"
666
- ),
667
- decimals: 18,
668
- coingeckId: void 0,
669
- priceCheckAmount: 1e3,
670
- displayDecimals: 2
671
- },
672
- {
673
- name: "ETH",
674
- symbol: "ETH",
675
- logo: "https://assets.troves.fi/integrations/tokens/eth.svg",
676
- address: ContractAddr.from(
677
- "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"
678
- ),
679
- decimals: 18,
680
- coingeckId: void 0,
681
- priceCheckAmount: 0.1,
682
- displayDecimals: 6
683
- },
684
- {
685
- name: "USDC.e",
686
- symbol: "USDC.e",
687
- logo: "https://assets.troves.fi/integrations/tokens/usdc.svg",
688
- address: ContractAddr.from("0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8"),
689
- decimals: 6,
690
- coingeckId: void 0,
691
- displayDecimals: 2,
692
- priceCheckAmount: 1e3,
693
- priceProxySymbol: "USDC"
694
- },
695
- {
696
- name: "USDC",
697
- symbol: "USDC",
698
- logo: "https://assets.troves.fi/integrations/tokens/usdc.svg",
699
- address: ContractAddr.from("0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb"),
700
- decimals: 6,
701
- coingeckId: void 0,
702
- displayDecimals: 2,
703
- priceCheckAmount: 1e3
704
- },
705
- {
706
- name: "USDT",
707
- symbol: "USDT",
708
- logo: "https://assets.troves.fi/integrations/tokens/usdt.svg",
709
- address: ContractAddr.from(
710
- "0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8"
711
- ),
712
- decimals: 6,
713
- coingeckId: void 0,
714
- priceCheckAmount: 1e3,
715
- displayDecimals: 2
716
- },
717
- {
718
- name: "WBTC",
719
- symbol: "WBTC",
720
- logo: "https://assets.troves.fi/integrations/tokens/wbtc.svg",
721
- address: ContractAddr.from(
722
- "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"
723
- ),
724
- decimals: 8,
725
- coingeckId: void 0,
726
- displayDecimals: 6,
727
- priceCheckAmount: 1e-3
728
- // 112000 * 0.0001 = $110.2
729
- },
730
- {
731
- name: "tBTC",
732
- symbol: "tBTC",
733
- logo: "https://assets.strkfarm.com/integrations/tokens/tbtc.svg",
734
- address: ContractAddr.from(
735
- "0x4daa17763b286d1e59b97c283c0b8c949994c361e426a28f743c67bdfe9a32f"
736
- ),
737
- decimals: 18,
738
- coingeckId: void 0,
739
- displayDecimals: 6,
740
- priceCheckAmount: 1e-3
741
- // 112000 * 0.0001 = $110.2
742
- },
743
- {
744
- name: "solvBTC",
745
- symbol: "solvBTC",
746
- logo: "https://assets.strkfarm.com/integrations/tokens/solvbtc.svg",
747
- address: ContractAddr.from(
748
- "0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"
749
- ),
750
- decimals: 18,
751
- coingeckId: void 0,
752
- priceProxySymbol: "WBTC",
753
- displayDecimals: 6,
754
- priceCheckAmount: 1e-4
755
- // 112000 * 0.0001 = $11.2
756
- },
757
- {
758
- name: "LBTC",
759
- symbol: "LBTC",
760
- logo: "https://assets.strkfarm.com/integrations/tokens/lbtc.svg",
761
- address: ContractAddr.from(
762
- "0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4"
763
- ),
764
- decimals: 8,
765
- coingeckId: void 0,
766
- displayDecimals: 6,
767
- priceProxySymbol: "WBTC",
768
- priceCheckAmount: 1e-4
769
- // 112000 * 0.0001 = $11.2
770
- },
771
- {
772
- name: "xWBTC",
773
- symbol: "xWBTC",
774
- logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
775
- address: ContractAddr.from(
776
- "0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"
777
- ),
778
- decimals: 8,
779
- coingeckId: void 0,
780
- displayDecimals: 6,
781
- priceProxySymbol: "WBTC",
782
- priceCheckAmount: 1e-3
783
- // 112000 * 0.0001 = $110.2
784
- },
785
- {
786
- name: "xsBTC",
787
- symbol: "xsBTC",
788
- logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
789
- address: ContractAddr.from(
790
- "0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"
791
- ),
792
- decimals: 18,
793
- coingeckId: void 0,
794
- displayDecimals: 6,
795
- priceProxySymbol: "WBTC",
796
- priceCheckAmount: 1e-4
797
- // 112000 * 0.0001 = $11.2
798
- },
799
- {
800
- // todo upgrade proxy tokens once feeds are available
801
- name: "xtBTC",
802
- symbol: "xtBTC",
803
- logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
804
- address: ContractAddr.from(
805
- "0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"
806
- ),
807
- decimals: 18,
808
- coingeckId: void 0,
809
- displayDecimals: 6,
810
- priceCheckAmount: 1e-3,
811
- // 112000 * 0.0001 = $110.2
812
- priceProxySymbol: "WBTC"
813
- },
814
- {
815
- name: "xLBTC",
816
- symbol: "xLBTC",
817
- logo: "https://assets.strkfarm.com/integrations/tokens/xlbtc.svg",
818
- address: ContractAddr.from("0x07dd3c80de9fcc5545f0cb83678826819c79619ed7992cc06ff81fc67cd2efe0"),
819
- decimals: 8,
820
- coingeckId: void 0,
821
- displayDecimals: 6,
822
- priceProxySymbol: "WBTC",
823
- priceCheckAmount: 1e-4
824
- // 112000 * 0.0001 = $11.2
825
- },
826
- {
827
- name: "mRe7BTC",
828
- symbol: "mRe7BTC",
829
- logo: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3a62ecee-1e58-45d3-9862-3ce90dff1900/logo",
830
- address: ContractAddr.from(
831
- "0x4e4fb1a9ca7e84bae609b9dc0078ad7719e49187ae7e425bb47d131710eddac"
832
- ),
833
- decimals: 18,
834
- coingeckId: void 0,
835
- displayDecimals: 6,
836
- priceCheckAmount: 1e-4,
837
- // 112000 * 0.0001 = $11.2
838
- dontPrice: true
839
- },
840
- {
841
- name: "mRe7YIELD",
842
- symbol: "mRe7YIELD",
843
- logo: "https://midas.app/assets/mre7-BcOOHm7i.svg",
844
- address: ContractAddr.from("0x4be8945e61dc3e19ebadd1579a6bd53b262f51ba89e6f8b0c4bc9a7e3c633fc"),
845
- decimals: 18,
846
- coingeckId: void 0,
847
- displayDecimals: 2,
848
- priceCheckAmount: 100,
849
- dontPrice: true
850
- },
851
- {
852
- name: "fyWBTC",
853
- symbol: "fyWBTC",
854
- logo: "https://assets.strkfarm.com/integrations/tokens/wbtc.svg",
855
- address: ContractAddr.from("0x04dd39de0a588f5e1c7a8377e1bef2c49caaee49a11433429d2c48f587b3a492"),
856
- decimals: 8,
857
- coingeckId: void 0,
858
- displayDecimals: 6,
859
- priceCheckAmount: 1e-3,
860
- // 112000 * 0.0001 = $110.2
861
- dontPrice: true
862
- },
863
- {
864
- name: "fyETH",
865
- symbol: "fyETH",
866
- logo: "https://assets.strkfarm.com/integrations/tokens/eth.svg",
867
- address: ContractAddr.from("0x050707bC3b8730022F10530C2c6f6b9467644129C50C2868Ad0036c5e4E9e616"),
868
- decimals: 18,
869
- coingeckId: void 0,
870
- displayDecimals: 4,
871
- priceCheckAmount: 0.1,
872
- dontPrice: true
873
- },
874
- {
875
- name: "fyUSDC",
876
- symbol: "fyUSDC",
877
- logo: "https://assets.strkfarm.com/integrations/tokens/usdc.svg",
878
- address: ContractAddr.from("0x07fdcec0cef01294c9c3d52415215949805c77bae8003702a7928fd6d2c36bc1"),
879
- decimals: 6,
880
- coingeckId: void 0,
881
- displayDecimals: 2,
882
- priceCheckAmount: 100,
883
- dontPrice: true
884
- },
885
- {
886
- name: "strkBTC",
887
- symbol: "strkBTC",
888
- logo: "https://assets.troves.fi/integrations/tokens/strkbtc.svg",
889
- address: ContractAddr.from("0x0787150e306e6eae6e3f79dea881770e8bbff2c1b8eb490f969669ee945b3135"),
890
- decimals: 8,
891
- coingeckId: void 0,
892
- displayDecimals: 6,
893
- priceCheckAmount: 1e-3,
894
- // 112000 * 0.0001 = $110.2
895
- priceProxySymbol: "WBTC"
896
- },
897
- {
898
- name: "xstrkBTC",
899
- symbol: "xstrkBTC",
900
- logo: "https://assets.troves.fi/integrations/tokens/xstrkbtc.svg",
901
- address: ContractAddr.from("0x047751b3532fabca89b0f2e35ca1cb45e5a7b11d5e3d3663dfa1f4406b45fd88"),
902
- decimals: 8,
903
- coingeckId: void 0,
904
- displayDecimals: 6,
905
- priceCheckAmount: 1e-3,
906
- priceProxySymbol: "WBTC"
907
- }
908
- ];
896
+ var defaultTokens = [{
897
+ name: "Starknet",
898
+ symbol: "STRK",
899
+ logo: "https://assets.troves.fi/integrations/tokens/strk.svg",
900
+ address: ContractAddr.from("0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d"),
901
+ decimals: 18,
902
+ coingeckId: "starknet",
903
+ displayDecimals: 2,
904
+ priceCheckAmount: 5e3,
905
+ priceMethod: "Avnu",
906
+ indexingType: "indexer" /* INDEXER */
907
+ }, {
908
+ name: "xSTRK",
909
+ symbol: "xSTRK",
910
+ logo: "https://assets.troves.fi/integrations/tokens/xstrk.svg",
911
+ address: ContractAddr.from("0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a"),
912
+ decimals: 18,
913
+ coingeckId: void 0,
914
+ priceCheckAmount: 5e3,
915
+ displayDecimals: 2,
916
+ priceMethod: "Avnu",
917
+ indexingType: "lstScript" /* LST_SCRIPT */
918
+ }, {
919
+ name: "ETH",
920
+ symbol: "ETH",
921
+ logo: "https://assets.troves.fi/integrations/tokens/eth.svg",
922
+ address: ContractAddr.from("0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"),
923
+ decimals: 18,
924
+ coingeckId: void 0,
925
+ priceCheckAmount: 0.1,
926
+ displayDecimals: 6,
927
+ indexingType: "indexer" /* INDEXER */
928
+ }, {
929
+ name: "USDC.e",
930
+ symbol: "USDC.e",
931
+ logo: "https://assets.troves.fi/integrations/tokens/usdc.svg",
932
+ address: ContractAddr.from("0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8"),
933
+ decimals: 6,
934
+ coingeckId: void 0,
935
+ displayDecimals: 2,
936
+ priceCheckAmount: 1e3,
937
+ priceProxySymbol: "USDC",
938
+ indexingType: "pegged" /* PEGGED */
939
+ }, {
940
+ name: "USDC",
941
+ symbol: "USDC",
942
+ logo: "https://assets.troves.fi/integrations/tokens/usdc.svg",
943
+ address: ContractAddr.from("0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb"),
944
+ decimals: 6,
945
+ coingeckId: void 0,
946
+ displayDecimals: 2,
947
+ priceCheckAmount: 1e3,
948
+ indexingType: "indexer" /* INDEXER */
949
+ }, {
950
+ name: "USDT",
951
+ symbol: "USDT",
952
+ logo: "https://assets.troves.fi/integrations/tokens/usdt.svg",
953
+ address: ContractAddr.from("0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8"),
954
+ decimals: 6,
955
+ coingeckId: void 0,
956
+ priceCheckAmount: 1e3,
957
+ displayDecimals: 2,
958
+ indexingType: "indexer" /* INDEXER */
959
+ }, {
960
+ name: "WBTC",
961
+ symbol: "WBTC",
962
+ logo: "https://assets.troves.fi/integrations/tokens/wbtc.svg",
963
+ address: ContractAddr.from("0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
964
+ decimals: 8,
965
+ coingeckId: void 0,
966
+ displayDecimals: 6,
967
+ priceCheckAmount: 1e-3,
968
+ // 112000 * 0.0001 = $110.2
969
+ indexingType: "indexer" /* INDEXER */
970
+ }, {
971
+ name: "tBTC",
972
+ symbol: "tBTC",
973
+ logo: "https://assets.strkfarm.com/integrations/tokens/tbtc.svg",
974
+ address: ContractAddr.from("0x4daa17763b286d1e59b97c283c0b8c949994c361e426a28f743c67bdfe9a32f"),
975
+ decimals: 18,
976
+ coingeckId: void 0,
977
+ displayDecimals: 6,
978
+ priceCheckAmount: 1e-3,
979
+ // 112000 * 0.0001 = $110.2
980
+ priceProxySymbol: "WBTC",
981
+ indexingType: "pegged" /* PEGGED */
982
+ }, {
983
+ name: "solvBTC",
984
+ symbol: "solvBTC",
985
+ logo: "https://assets.strkfarm.com/integrations/tokens/solvbtc.svg",
986
+ address: ContractAddr.from("0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"),
987
+ decimals: 18,
988
+ coingeckId: void 0,
989
+ priceProxySymbol: "WBTC",
990
+ displayDecimals: 6,
991
+ priceCheckAmount: 1e-4,
992
+ // 112000 * 0.0001 = $11.2
993
+ indexingType: "pegged" /* PEGGED */
994
+ }, {
995
+ name: "LBTC",
996
+ symbol: "LBTC",
997
+ logo: "https://assets.strkfarm.com/integrations/tokens/lbtc.svg",
998
+ address: ContractAddr.from("0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4"),
999
+ decimals: 8,
1000
+ coingeckId: void 0,
1001
+ displayDecimals: 6,
1002
+ priceProxySymbol: "WBTC",
1003
+ priceCheckAmount: 1e-4,
1004
+ // 112000 * 0.0001 = $11.2
1005
+ indexingType: "pegged" /* PEGGED */
1006
+ }, {
1007
+ name: "xWBTC",
1008
+ symbol: "xWBTC",
1009
+ logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
1010
+ address: ContractAddr.from("0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"),
1011
+ decimals: 8,
1012
+ coingeckId: void 0,
1013
+ displayDecimals: 6,
1014
+ priceCheckAmount: 1e-3,
1015
+ // 112000 * 0.0001 = $110.2
1016
+ priceMethod: "Avnu",
1017
+ indexingType: "lstScript" /* LST_SCRIPT */
1018
+ }, {
1019
+ name: "xsBTC",
1020
+ symbol: "xsBTC",
1021
+ logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
1022
+ address: ContractAddr.from("0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"),
1023
+ decimals: 18,
1024
+ coingeckId: void 0,
1025
+ displayDecimals: 6,
1026
+ priceCheckAmount: 1e-4,
1027
+ // 112000 * 0.0001 = $11.2
1028
+ priceMethod: "Avnu",
1029
+ indexingType: "lstScript" /* LST_SCRIPT */
1030
+ }, {
1031
+ name: "xtBTC",
1032
+ symbol: "xtBTC",
1033
+ logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
1034
+ address: ContractAddr.from("0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"),
1035
+ decimals: 18,
1036
+ coingeckId: void 0,
1037
+ displayDecimals: 6,
1038
+ priceCheckAmount: 1e-3,
1039
+ // 112000 * 0.0001 = $110.2
1040
+ priceMethod: "Avnu",
1041
+ indexingType: "lstScript" /* LST_SCRIPT */
1042
+ }, {
1043
+ name: "xLBTC",
1044
+ symbol: "xLBTC",
1045
+ logo: "https://assets.strkfarm.com/integrations/tokens/xlbtc.svg",
1046
+ address: ContractAddr.from("0x07dd3c80de9fcc5545f0cb83678826819c79619ed7992cc06ff81fc67cd2efe0"),
1047
+ decimals: 8,
1048
+ coingeckId: void 0,
1049
+ displayDecimals: 6,
1050
+ priceCheckAmount: 1e-4,
1051
+ // 112000 * 0.0001 = $11.2
1052
+ priceMethod: "Avnu",
1053
+ indexingType: "lstScript" /* LST_SCRIPT */
1054
+ }, {
1055
+ name: "mRe7BTC",
1056
+ symbol: "mRe7BTC",
1057
+ logo: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3a62ecee-1e58-45d3-9862-3ce90dff1900/logo",
1058
+ address: ContractAddr.from("0x4e4fb1a9ca7e84bae609b9dc0078ad7719e49187ae7e425bb47d131710eddac"),
1059
+ decimals: 18,
1060
+ coingeckId: void 0,
1061
+ displayDecimals: 6,
1062
+ priceCheckAmount: 1e-4,
1063
+ // 112000 * 0.0001 = $11.2
1064
+ dontPrice: true,
1065
+ indexingType: "ignore" /* IGNORE */
1066
+ }, {
1067
+ name: "mRe7YIELD",
1068
+ symbol: "mRe7YIELD",
1069
+ logo: "https://midas.app/assets/mre7-BcOOHm7i.svg",
1070
+ address: ContractAddr.from("0x4be8945e61dc3e19ebadd1579a6bd53b262f51ba89e6f8b0c4bc9a7e3c633fc"),
1071
+ decimals: 18,
1072
+ coingeckId: void 0,
1073
+ displayDecimals: 2,
1074
+ priceCheckAmount: 100,
1075
+ dontPrice: true,
1076
+ indexingType: "ignore" /* IGNORE */
1077
+ }, {
1078
+ name: "fyeWBTC",
1079
+ symbol: "fyeWBTC",
1080
+ logo: "https://assets.strkfarm.com/integrations/tokens/wbtc.svg",
1081
+ address: ContractAddr.from("0x04dd39de0a588f5e1c7a8377e1bef2c49caaee49a11433429d2c48f587b3a492"),
1082
+ decimals: 8,
1083
+ coingeckId: void 0,
1084
+ displayDecimals: 6,
1085
+ priceCheckAmount: 1e-3,
1086
+ // 112000 * 0.0001 = $110.2
1087
+ dontPrice: true,
1088
+ indexingType: "ignore" /* IGNORE */
1089
+ }, {
1090
+ name: "fyETH",
1091
+ symbol: "fyETH",
1092
+ logo: "https://assets.strkfarm.com/integrations/tokens/eth.svg",
1093
+ address: ContractAddr.from("0x050707bC3b8730022F10530C2c6f6b9467644129C50C2868Ad0036c5e4E9e616"),
1094
+ decimals: 18,
1095
+ coingeckId: void 0,
1096
+ displayDecimals: 4,
1097
+ priceCheckAmount: 0.1,
1098
+ dontPrice: true,
1099
+ indexingType: "ignore" /* IGNORE */
1100
+ }, {
1101
+ name: "fyeUSDC",
1102
+ symbol: "fyeUSDC",
1103
+ logo: "https://assets.strkfarm.com/integrations/tokens/usdc.svg",
1104
+ address: ContractAddr.from("0x07fdcec0cef01294c9c3d52415215949805c77bae8003702a7928fd6d2c36bc1"),
1105
+ decimals: 6,
1106
+ coingeckId: void 0,
1107
+ displayDecimals: 2,
1108
+ priceCheckAmount: 100,
1109
+ dontPrice: true,
1110
+ indexingType: "ignore" /* IGNORE */
1111
+ }, {
1112
+ name: "strkBTC",
1113
+ symbol: "strkBTC",
1114
+ logo: "https://assets.troves.fi/integrations/tokens/strkbtc.svg",
1115
+ address: ContractAddr.from("0x0787150e306e6eae6e3f79dea881770e8bbff2c1b8eb490f969669ee945b3135"),
1116
+ decimals: 8,
1117
+ coingeckId: void 0,
1118
+ displayDecimals: 6,
1119
+ priceCheckAmount: 1e-3,
1120
+ // 112000 * 0.0001 = $110.2
1121
+ priceMethod: "Avnu",
1122
+ priceProxySymbol: "WBTC",
1123
+ indexingType: "pegged" /* PEGGED */
1124
+ }, {
1125
+ name: "xstrkBTC",
1126
+ symbol: "xstrkBTC",
1127
+ logo: "https://assets.troves.fi/integrations/tokens/xstrkbtc.svg",
1128
+ address: ContractAddr.from("0x047751b3532fabca89b0f2e35ca1cb45e5a7b11d5e3d3663dfa1f4406b45fd88"),
1129
+ decimals: 8,
1130
+ coingeckId: void 0,
1131
+ displayDecimals: 6,
1132
+ priceCheckAmount: 1e-3,
1133
+ priceMethod: "Avnu",
1134
+ indexingType: "lstScript" /* LST_SCRIPT */
1135
+ }];
909
1136
  var tokens = defaultTokens;
910
1137
  var _Global = class _Global {
911
1138
  static fatalError(message, err) {
912
1139
  logger.error(message);
913
1140
  console.error(message, err);
914
- if (err) console.error(err);
1141
+ if (err)
1142
+ console.error(err);
915
1143
  process.exit(1);
916
1144
  }
917
1145
  static httpError(url, err, message) {
@@ -923,9 +1151,7 @@ var _Global = class _Global {
923
1151
  }
924
1152
  static async getTokens() {
925
1153
  if (tokens.length) return tokens;
926
- const data = await import_axios.default.get(
927
- "https://assets.troves.fi/integrations/tokens.json"
928
- );
1154
+ const data = await import_axios.default.get("https://assets.troves.fi/integrations/tokens.json");
929
1155
  const tokensData = data.data.content;
930
1156
  tokensData.forEach((token) => {
931
1157
  if (!token.tags.includes("AVNU") || !token.tags.includes("Verified")) {
@@ -938,7 +1164,8 @@ var _Global = class _Global {
938
1164
  decimals: token.decimals,
939
1165
  logo: token.logoUri,
940
1166
  coingeckId: token.extensions.coingeckoId,
941
- displayDecimals: 2
1167
+ displayDecimals: 2,
1168
+ indexingType: "ignore" /* IGNORE */
942
1169
  });
943
1170
  });
944
1171
  console.log(tokens);
@@ -949,25 +1176,25 @@ var _Global = class _Global {
949
1176
  throw new FatalError(message);
950
1177
  }
951
1178
  }
952
- static async getTokenInfoFromName(tokenName) {
1179
+ static async getTokenInfoFromAddr(addr) {
953
1180
  if (tokens.length == defaultTokens.length) {
954
1181
  await _Global.getTokens();
955
1182
  }
956
- const token = tokens.find(
957
- (token2) => token2.name.toLowerCase() === tokenName.toLowerCase()
958
- );
1183
+ const token = tokens.find((token2) => addr.eq(token2.address));
959
1184
  if (!token) {
960
- throw new FatalError(`Token not found: ${tokenName}`);
1185
+ throw new FatalError(`Token not found: ${addr.address}`);
961
1186
  }
962
1187
  return token;
963
1188
  }
964
- static async getTokenInfoFromAddr(addr) {
1189
+ static async getTokenInfoFromName(tokenName) {
965
1190
  if (tokens.length == defaultTokens.length) {
966
1191
  await _Global.getTokens();
967
1192
  }
968
- const token = tokens.find((token2) => addr.eq(token2.address));
1193
+ const token = tokens.find(
1194
+ (token2) => token2.name.toLowerCase() === tokenName.toLowerCase()
1195
+ );
969
1196
  if (!token) {
970
- throw new FatalError(`Token not found: ${addr.address}`);
1197
+ throw new FatalError(`Token not found: ${tokenName}`);
971
1198
  }
972
1199
  return token;
973
1200
  }
@@ -996,8 +1223,8 @@ var import_bytes = require("@ericnordelo/strk-merkle-tree/dist/bytes");
996
1223
  var import_core = require("@ericnordelo/strk-merkle-tree/dist/core");
997
1224
  var import_hashes = require("@ericnordelo/strk-merkle-tree/dist/hashes");
998
1225
  var import_merkletree = require("@ericnordelo/strk-merkle-tree/dist/merkletree");
999
- var import_starknet4 = require("starknet");
1000
- var import_starknet5 = require("@scure/starknet");
1226
+ var import_starknet5 = require("starknet");
1227
+ var import_starknet6 = require("@scure/starknet");
1001
1228
  function hash_leaf(leaf) {
1002
1229
  if (leaf.data.length < 1) {
1003
1230
  throw new Error("Invalid leaf data");
@@ -1007,10 +1234,10 @@ function hash_leaf(leaf) {
1007
1234
  for (let i = 1; i < leaf.data.length; i++) {
1008
1235
  value = pedersen_hash(value, leaf.data[i]);
1009
1236
  }
1010
- return `0x${import_starknet4.num.toHexString(value).replace(/^0x/, "").padStart(64, "0")}`;
1237
+ return `0x${import_starknet5.num.toHexString(value).replace(/^0x/, "").padStart(64, "0")}`;
1011
1238
  }
1012
1239
  function pedersen_hash(a, b) {
1013
- return BigInt((0, import_starknet5.pedersen)(a, b).toString());
1240
+ return BigInt((0, import_starknet6.pedersen)(a, b).toString());
1014
1241
  }
1015
1242
  var StandardMerkleTree = class _StandardMerkleTree extends import_merkletree.MerkleTreeImpl {
1016
1243
  constructor(tree, values, leafEncoding) {
@@ -1076,7 +1303,7 @@ function isDualTokenStrategy(strategy) {
1076
1303
  }
1077
1304
 
1078
1305
  // src/utils/starknet-call-parser.ts
1079
- var import_starknet6 = require("starknet");
1306
+ var import_starknet7 = require("starknet");
1080
1307
 
1081
1308
  // src/utils/logger.browser.ts
1082
1309
  var logger2 = {
@@ -1700,7 +1927,7 @@ var _StarknetCallParser = class _StarknetCallParser {
1700
1927
  }
1701
1928
  static u256FromParts(low, high) {
1702
1929
  try {
1703
- return import_starknet6.uint256.uint256ToBN({ low, high }).toString();
1930
+ return import_starknet7.uint256.uint256ToBN({ low, high }).toString();
1704
1931
  } catch {
1705
1932
  return "0";
1706
1933
  }
@@ -1883,7 +2110,7 @@ _StarknetCallParser.METHOD_BY_SELECTOR = new Map(
1883
2110
  "manage_vault_with_merkle_verification",
1884
2111
  "multi_route_swap"
1885
2112
  ].map((method) => [
1886
- _StarknetCallParser.normalizeHex(import_starknet6.hash.getSelectorFromName(method)),
2113
+ _StarknetCallParser.normalizeHex(import_starknet7.hash.getSelectorFromName(method)),
1887
2114
  method
1888
2115
  ])
1889
2116
  );
@@ -2210,8 +2437,8 @@ _Midas.BASE_URL = "https://api-prod.midas.app/api/data";
2210
2437
  var Midas = _Midas;
2211
2438
 
2212
2439
  // src/modules/token-market-data.ts
2213
- var import_starknet7 = require("starknet");
2214
2440
  var import_starknet8 = require("starknet");
2441
+ var import_starknet9 = require("starknet");
2215
2442
 
2216
2443
  // src/data/erc4626.abi.json
2217
2444
  var erc4626_abi_default = [
@@ -3810,15 +4037,15 @@ var TokenMarketData = class {
3810
4037
  async getTruePrice(tokenInfo) {
3811
4038
  try {
3812
4039
  if (LSTAPRService.isLST(tokenInfo.address)) {
3813
- const lstABI = new import_starknet7.Contract({
4040
+ const lstABI = new import_starknet8.Contract({
3814
4041
  abi: erc4626_abi_default,
3815
4042
  address: tokenInfo.address.address,
3816
4043
  providerOrAccount: this.config.provider
3817
4044
  });
3818
4045
  const price2 = await lstABI.call("convert_to_assets", [
3819
- import_starknet8.uint256.bnToUint256(new Web3Number(1, tokenInfo.decimals).toWei())
4046
+ import_starknet9.uint256.bnToUint256(new Web3Number(1, tokenInfo.decimals).toWei())
3820
4047
  ]);
3821
- const exchangeRate = Number(import_starknet8.uint256.uint256ToBN(price2).toString()) / Math.pow(10, tokenInfo.decimals);
4048
+ const exchangeRate = Number(import_starknet9.uint256.uint256ToBN(price2).toString()) / Math.pow(10, tokenInfo.decimals);
3822
4049
  if (exchangeRate === 0) {
3823
4050
  throw new Error(`True price is 0 for LST token ${tokenInfo.symbol}`);
3824
4051
  }
@@ -3912,7 +4139,7 @@ var PricerBase = class {
3912
4139
  };
3913
4140
 
3914
4141
  // src/modules/avnu.ts
3915
- var import_starknet9 = require("starknet");
4142
+ var import_starknet10 = require("starknet");
3916
4143
  var import_avnu_sdk = require("@avnu/avnu-sdk");
3917
4144
  var AvnuWrapper = class _AvnuWrapper {
3918
4145
  async getQuotes(fromToken, toToken, amountWei, taker, retry = 0, excludeSources = ["Haiko(Solvers)"]) {
@@ -3962,10 +4189,10 @@ var AvnuWrapper = class _AvnuWrapper {
3962
4189
  const _minAmount = minAmount || (quote.buyAmount * 95n / 100n).toString();
3963
4190
  const swapInfo = {
3964
4191
  token_from_address: quote.sellTokenAddress,
3965
- token_from_amount: import_starknet9.uint256.bnToUint256(quote.sellAmount),
4192
+ token_from_amount: import_starknet10.uint256.bnToUint256(quote.sellAmount),
3966
4193
  token_to_address: quote.buyTokenAddress,
3967
- token_to_amount: import_starknet9.uint256.bnToUint256(_minAmount),
3968
- token_to_min_amount: import_starknet9.uint256.bnToUint256(_minAmount),
4194
+ token_to_amount: import_starknet10.uint256.bnToUint256(_minAmount),
4195
+ token_to_min_amount: import_starknet10.uint256.bnToUint256(_minAmount),
3969
4196
  beneficiary: taker,
3970
4197
  integrator_fee_amount_bps: integratorFeeBps,
3971
4198
  integrator_fee_recipient: integratorFeeRecipient,
@@ -3976,10 +4203,10 @@ var AvnuWrapper = class _AvnuWrapper {
3976
4203
  static buildZeroSwap(tokenToSell, beneficiary, tokenToBuy = tokenToSell) {
3977
4204
  return {
3978
4205
  token_from_address: tokenToSell.address,
3979
- token_from_amount: import_starknet9.uint256.bnToUint256(0),
4206
+ token_from_amount: import_starknet10.uint256.bnToUint256(0),
3980
4207
  token_to_address: tokenToBuy.address,
3981
- token_to_amount: import_starknet9.uint256.bnToUint256(0),
3982
- token_to_min_amount: import_starknet9.uint256.bnToUint256(0),
4208
+ token_to_amount: import_starknet10.uint256.bnToUint256(0),
4209
+ token_to_min_amount: import_starknet10.uint256.bnToUint256(0),
3983
4210
  beneficiary,
3984
4211
  integrator_fee_amount_bps: 0,
3985
4212
  integrator_fee_recipient: beneficiary,
@@ -3994,7 +4221,7 @@ var AvnuWrapper = class _AvnuWrapper {
3994
4221
  });
3995
4222
  if (minAmount) {
3996
4223
  logger.verbose(`AvnuWrapper: minAmount passed ${minAmount.toString()}`);
3997
- const u256 = import_starknet9.uint256.bnToUint256(minAmount.toWei());
4224
+ const u256 = import_starknet10.uint256.bnToUint256(minAmount.toWei());
3998
4225
  result[0][6] = BigInt(u256.low);
3999
4226
  result[0][7] = BigInt(u256.high);
4000
4227
  }
@@ -4216,21 +4443,14 @@ var Pricer = class extends PricerBase {
4216
4443
  }
4217
4444
  }
4218
4445
  async _getPrice(token) {
4219
- const pinned = this.methodToUse[token.symbol];
4220
- if (pinned) {
4221
- logger.verbose(`Fetching price of ${token.symbol} using pinned ${pinned}`);
4222
- try {
4223
- return await this._tryPriceMethod(token, pinned);
4224
- } catch (error) {
4225
- console.warn(`${pinned}: pinned price failed [${token.symbol}]: `, error.message);
4226
- delete this.methodToUse[token.symbol];
4227
- }
4228
- }
4229
- for (const method of PRICE_METHOD_PRIORITY) {
4446
+ const methodsToTry = this._getMethodsToTry(token);
4447
+ for (const method of methodsToTry) {
4230
4448
  logger.verbose(`Fetching price of ${token.symbol} using ${method}`);
4231
4449
  try {
4232
4450
  const result = await this._tryPriceMethod(token, method);
4233
- this.methodToUse[token.symbol] = method;
4451
+ if (!token.priceMethod) {
4452
+ this.methodToUse[token.symbol] = method;
4453
+ }
4234
4454
  return result;
4235
4455
  } catch (error) {
4236
4456
  console.warn(`${method}: price err [${token.symbol}]: `, error.message);
@@ -4238,6 +4458,22 @@ var Pricer = class extends PricerBase {
4238
4458
  }
4239
4459
  throw new FatalError(`Price not found for ${token.symbol}`);
4240
4460
  }
4461
+ _getMethodsToTry(token) {
4462
+ const methods = [];
4463
+ if (token.priceMethod) {
4464
+ methods.push(token.priceMethod);
4465
+ }
4466
+ const pinned = this.methodToUse[token.symbol];
4467
+ if (pinned && pinned !== token.priceMethod) {
4468
+ methods.push(pinned);
4469
+ }
4470
+ for (const method of PRICE_METHOD_PRIORITY) {
4471
+ if (!methods.includes(method)) {
4472
+ methods.push(method);
4473
+ }
4474
+ }
4475
+ return methods;
4476
+ }
4241
4477
  async _tryPriceMethod(token, method) {
4242
4478
  switch (method) {
4243
4479
  case "AvnuApi":
@@ -4306,7 +4542,7 @@ var Pricer = class extends PricerBase {
4306
4542
  };
4307
4543
 
4308
4544
  // src/modules/pragma.ts
4309
- var import_starknet10 = require("starknet");
4545
+ var import_starknet11 = require("starknet");
4310
4546
 
4311
4547
  // src/data/pragma.abi.json
4312
4548
  var pragma_abi_default = [
@@ -4411,7 +4647,7 @@ var Pragma = class extends PricerBase {
4411
4647
  constructor(config, tokens2) {
4412
4648
  super(config, tokens2);
4413
4649
  this.contractAddr = "0x023fb3afbff2c0e3399f896dcf7400acf1a161941cfb386e34a123f228c62832";
4414
- this.contract = new import_starknet10.Contract({
4650
+ this.contract = new import_starknet11.Contract({
4415
4651
  abi: pragma_abi_default,
4416
4652
  address: this.contractAddr,
4417
4653
  providerOrAccount: config.provider
@@ -4439,7 +4675,7 @@ var Pragma = class extends PricerBase {
4439
4675
  var import_axios5 = __toESM(require("axios"));
4440
4676
 
4441
4677
  // src/dataTypes/bignumber.browser.ts
4442
- var import_starknet11 = require("starknet");
4678
+ var import_starknet12 = require("starknet");
4443
4679
  var Web3Number2 = class _Web3Number2 extends _Web3Number {
4444
4680
  static fromWei(weiNumber, decimals) {
4445
4681
  const bn = new _Web3Number2(weiNumber, decimals).dividedBy(10 ** decimals);
@@ -4449,36 +4685,7 @@ var Web3Number2 = class _Web3Number2 extends _Web3Number {
4449
4685
  return new _Web3Number2(number.toString(), decimals);
4450
4686
  }
4451
4687
  static fromUint256(uint256Value) {
4452
- return this.fromWei(import_starknet11.uint256.uint256ToBN(uint256Value).toString(), 18);
4453
- }
4454
- };
4455
-
4456
- // src/interfaces/lending.ts
4457
- var MarginType = /* @__PURE__ */ ((MarginType2) => {
4458
- MarginType2["SHARED"] = "shared";
4459
- MarginType2["NONE"] = "none";
4460
- return MarginType2;
4461
- })(MarginType || {});
4462
- var ILending = class {
4463
- constructor(config, metadata) {
4464
- this.tokens = [];
4465
- this.initialised = false;
4466
- this.metadata = metadata;
4467
- this.config = config;
4468
- this.init();
4469
- }
4470
- /** Wait for initialisation */
4471
- waitForInitilisation() {
4472
- return new Promise((resolve, reject) => {
4473
- const interval = setInterval(() => {
4474
- logger.verbose(`Waiting for ${this.metadata.name} to initialise`);
4475
- if (this.initialised) {
4476
- logger.verbose(`${this.metadata.name} initialised`);
4477
- clearInterval(interval);
4478
- resolve();
4479
- }
4480
- }, 1e3);
4481
- });
4688
+ return this.fromWei(import_starknet12.uint256.uint256ToBN(uint256Value).toString(), 18);
4482
4689
  }
4483
4690
  };
4484
4691
 
@@ -4512,7 +4719,8 @@ var _ZkLend = class _ZkLend extends ILending {
4512
4719
  decimals: pool.token.decimals,
4513
4720
  borrowFactor: Web3Number2.fromWei(pool.borrow_factor.value, pool.borrow_factor.decimals),
4514
4721
  collareralFactor,
4515
- displayDecimals: 2
4722
+ displayDecimals: 2,
4723
+ indexingType: "ignore" /* IGNORE */
4516
4724
  };
4517
4725
  this.tokens.push(token);
4518
4726
  });
@@ -4640,7 +4848,7 @@ var apolloClient = new import_client.ApolloClient({
4640
4848
  var import_client2 = require("@apollo/client");
4641
4849
 
4642
4850
  // src/modules/ekubo-pricer.ts
4643
- var import_starknet12 = require("starknet");
4851
+ var import_starknet13 = require("starknet");
4644
4852
 
4645
4853
  // src/data/ekubo-price-fethcer.abi.json
4646
4854
  var ekubo_price_fethcer_abi_default = [
@@ -4914,16 +5122,17 @@ var EkuboPricer = class extends PricerBase {
4914
5122
  constructor(config, tokens2) {
4915
5123
  super(config, tokens2);
4916
5124
  this.EKUBO_PRICE_FETCHER_ADDRESS = "0x04946fb4ad5237d97bbb1256eba2080c4fe1de156da6a7f83e3b4823bb6d7da1";
4917
- this.USDC_ADDRESS = "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8";
5125
+ // Updating to new USDC_ADDRESS
5126
+ this.USDC_ADDRESS = "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb";
4918
5127
  this.USDC_DECIMALS = 6;
4919
- this.contract = new import_starknet12.Contract({
5128
+ this.contract = new import_starknet13.Contract({
4920
5129
  abi: ekubo_price_fethcer_abi_default,
4921
5130
  address: this.EKUBO_PRICE_FETCHER_ADDRESS,
4922
5131
  providerOrAccount: config.provider
4923
5132
  });
4924
5133
  }
4925
- div2Power128(num16) {
4926
- return Number(num16 * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
5134
+ div2Power128(num17) {
5135
+ return Number(num17 * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
4927
5136
  }
4928
5137
  async getPrice(tokenAddr, blockIdentifier = "latest") {
4929
5138
  if (!tokenAddr) {
@@ -5132,7 +5341,7 @@ var PricerFromApi = class extends PricerBase {
5132
5341
  };
5133
5342
 
5134
5343
  // src/modules/erc20.ts
5135
- var import_starknet13 = require("starknet");
5344
+ var import_starknet14 = require("starknet");
5136
5345
 
5137
5346
  // src/data/erc20.abi.json
5138
5347
  var erc20_abi_default = [
@@ -6265,7 +6474,7 @@ var ERC20 = class {
6265
6474
  }
6266
6475
  contract(addr) {
6267
6476
  const _addr = typeof addr === "string" ? addr : addr.address;
6268
- return new import_starknet13.Contract({
6477
+ return new import_starknet14.Contract({
6269
6478
  abi: erc20_abi_default,
6270
6479
  address: _addr,
6271
6480
  providerOrAccount: this.config.provider
@@ -6286,7 +6495,7 @@ var ERC20 = class {
6286
6495
  }
6287
6496
  transfer(token, to, amount) {
6288
6497
  const contract = this.contract(token);
6289
- const amountUint256 = import_starknet13.uint256.bnToUint256(amount.toWei());
6498
+ const amountUint256 = import_starknet14.uint256.bnToUint256(amount.toWei());
6290
6499
  const transferCall = contract.populate("transfer", [
6291
6500
  to.toString(),
6292
6501
  amountUint256.low.toString(),
@@ -6296,7 +6505,7 @@ var ERC20 = class {
6296
6505
  }
6297
6506
  transferFrom(token, from2, to, amount) {
6298
6507
  const contract = this.contract(token);
6299
- const amountUint256 = import_starknet13.uint256.bnToUint256(amount.toWei());
6508
+ const amountUint256 = import_starknet14.uint256.bnToUint256(amount.toWei());
6300
6509
  const transferFromCall = contract.populate("transferFrom", [
6301
6510
  from2.toString(),
6302
6511
  to.toString(),
@@ -6307,7 +6516,7 @@ var ERC20 = class {
6307
6516
  }
6308
6517
  approve(token, spender, amount) {
6309
6518
  const contract = this.contract(token);
6310
- const amountUint256 = import_starknet13.uint256.bnToUint256(amount.toWei());
6519
+ const amountUint256 = import_starknet14.uint256.bnToUint256(amount.toWei());
6311
6520
  const approveCall = contract.populate("approve", [
6312
6521
  spender.toString(),
6313
6522
  amountUint256.low.toString(),
@@ -6319,8 +6528,8 @@ var ERC20 = class {
6319
6528
 
6320
6529
  // src/modules/ekubo-quoter.ts
6321
6530
  var import_axios7 = __toESM(require("axios"));
6322
- var import_starknet14 = require("starknet");
6323
6531
  var import_starknet15 = require("starknet");
6532
+ var import_starknet16 = require("starknet");
6324
6533
  var EkuboQuoter = class _EkuboQuoter {
6325
6534
  constructor(config, pricer) {
6326
6535
  this.config = config;
@@ -6384,13 +6593,13 @@ var EkuboQuoter = class _EkuboQuoter {
6384
6593
  }
6385
6594
  async getLSTTrueExchangeRate(baseToken, quoteToken, amount) {
6386
6595
  const lstTokenInfo = baseToken;
6387
- const lstABI = new import_starknet15.Contract({
6596
+ const lstABI = new import_starknet16.Contract({
6388
6597
  abi: erc4626_abi_default,
6389
6598
  address: lstTokenInfo.address.address,
6390
6599
  providerOrAccount: this.config.provider
6391
6600
  });
6392
- const price = await lstABI.call("convert_to_assets", [import_starknet14.uint256.bnToUint256(new Web3Number(1, lstTokenInfo.decimals).toWei())]);
6393
- const exchangeRate = Number(import_starknet14.uint256.uint256ToBN(price).toString()) / Math.pow(10, lstTokenInfo.decimals);
6601
+ const price = await lstABI.call("convert_to_assets", [import_starknet15.uint256.bnToUint256(new Web3Number(1, lstTokenInfo.decimals).toWei())]);
6602
+ const exchangeRate = Number(import_starknet15.uint256.uint256ToBN(price).toString()) / Math.pow(10, lstTokenInfo.decimals);
6394
6603
  logger.verbose(`${_EkuboQuoter.name}:: LST true Exchange Rate: ${exchangeRate}`);
6395
6604
  return exchangeRate;
6396
6605
  }
@@ -6453,217 +6662,6 @@ var EkuboQuoter = class _EkuboQuoter {
6453
6662
  }
6454
6663
  };
6455
6664
 
6456
- // src/interfaces/common.tsx
6457
- var import_starknet16 = require("starknet");
6458
- var import_jsx_runtime = require("react/jsx-runtime");
6459
- var RiskType = /* @__PURE__ */ ((RiskType2) => {
6460
- RiskType2["MARKET_RISK"] = "Market Risk";
6461
- RiskType2["IMPERMANENT_LOSS"] = "Impermanent Loss Risk";
6462
- RiskType2["LIQUIDATION_RISK"] = "Liquidation Risk";
6463
- RiskType2["LOW_LIQUIDITY_RISK"] = "Low Liquidity Risk";
6464
- RiskType2["SMART_CONTRACT_RISK"] = "Smart Contract Risk";
6465
- RiskType2["ORACLE_RISK"] = "Oracle Risk";
6466
- RiskType2["TECHNICAL_RISK"] = "Technical Risk";
6467
- RiskType2["COUNTERPARTY_RISK"] = "Counterparty Risk";
6468
- RiskType2["DEPEG_RISK"] = "Depeg Risk";
6469
- return RiskType2;
6470
- })(RiskType || {});
6471
- var Network = /* @__PURE__ */ ((Network2) => {
6472
- Network2["mainnet"] = "mainnet";
6473
- Network2["sepolia"] = "sepolia";
6474
- Network2["devnet"] = "devnet";
6475
- return Network2;
6476
- })(Network || {});
6477
- var StrategyTag = /* @__PURE__ */ ((StrategyTag3) => {
6478
- StrategyTag3["META_VAULT"] = "Meta Vaults";
6479
- StrategyTag3["LEVERED"] = "Maxx";
6480
- StrategyTag3["AUTOMATED_LP"] = "Ekubo";
6481
- StrategyTag3["BTC"] = "BTC";
6482
- return StrategyTag3;
6483
- })(StrategyTag || {});
6484
- var VaultType = /* @__PURE__ */ ((VaultType2) => {
6485
- VaultType2["LOOPING"] = "Looping";
6486
- VaultType2["META_VAULT"] = "Meta Vault";
6487
- VaultType2["DELTA_NEUTRAL"] = "Delta Neutral";
6488
- VaultType2["AUTOMATED_LP"] = "Automated LP";
6489
- VaultType2["TVA"] = "Troves Value Averaging";
6490
- return VaultType2;
6491
- })(VaultType || {});
6492
- var AuditStatus = /* @__PURE__ */ ((AuditStatus2) => {
6493
- AuditStatus2["AUDITED"] = "Audited";
6494
- AuditStatus2["NOT_AUDITED"] = "Not Audited";
6495
- return AuditStatus2;
6496
- })(AuditStatus || {});
6497
- var SourceCodeType = /* @__PURE__ */ ((SourceCodeType2) => {
6498
- SourceCodeType2["OPEN_SOURCE"] = "Open Source";
6499
- SourceCodeType2["CLOSED_SOURCE"] = "Closed Source";
6500
- return SourceCodeType2;
6501
- })(SourceCodeType || {});
6502
- var AccessControlType = /* @__PURE__ */ ((AccessControlType2) => {
6503
- AccessControlType2["MULTISIG_ACCOUNT"] = "Multisig Account";
6504
- AccessControlType2["STANDARD_ACCOUNT"] = "Standard Account";
6505
- AccessControlType2["ROLE_BASED_ACCESS"] = "Role Based Access";
6506
- return AccessControlType2;
6507
- })(AccessControlType || {});
6508
- var InstantWithdrawalVault = /* @__PURE__ */ ((InstantWithdrawalVault2) => {
6509
- InstantWithdrawalVault2["YES"] = "Yes";
6510
- InstantWithdrawalVault2["NO"] = "No";
6511
- return InstantWithdrawalVault2;
6512
- })(InstantWithdrawalVault || {});
6513
- var FlowChartColors = /* @__PURE__ */ ((FlowChartColors2) => {
6514
- FlowChartColors2["Green"] = "purple";
6515
- FlowChartColors2["Blue"] = "#35484f";
6516
- FlowChartColors2["Purple"] = "#6e53dc";
6517
- return FlowChartColors2;
6518
- })(FlowChartColors || {});
6519
- var StrategyLiveStatus = /* @__PURE__ */ ((StrategyLiveStatus2) => {
6520
- StrategyLiveStatus2["ACTIVE"] = "Active";
6521
- StrategyLiveStatus2["NEW"] = "New";
6522
- StrategyLiveStatus2["COMING_SOON"] = "Coming Soon";
6523
- StrategyLiveStatus2["DEPRECATED"] = "Deprecated";
6524
- StrategyLiveStatus2["RETIRED"] = "Retired";
6525
- StrategyLiveStatus2["HOT"] = "Hot & New \u{1F525}";
6526
- return StrategyLiveStatus2;
6527
- })(StrategyLiveStatus || {});
6528
- function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier = import_starknet16.BlockTag.LATEST) {
6529
- return {
6530
- provider: new import_starknet16.RpcProvider({
6531
- nodeUrl: rpcUrl,
6532
- blockIdentifier
6533
- // specVersion
6534
- }),
6535
- stage: "production",
6536
- network: "mainnet" /* mainnet */
6537
- };
6538
- }
6539
- var getStrategyTagDesciption = (tag) => {
6540
- switch (tag) {
6541
- case "Meta Vaults" /* META_VAULT */:
6542
- return "A meta vault is a vault that auto allocates funds to multiple vaults based on optimal yield opportunities";
6543
- case "Maxx" /* LEVERED */:
6544
- return "Looping vaults on Endur LSTs with leveraged borrowing of STRK or BTC to increase yield (2-4x higher yield than simply staking)";
6545
- case "Ekubo" /* AUTOMATED_LP */:
6546
- return "Automated LP vaults on Ekubo that rebalance position automatically, ensuring you earn fees efficiently";
6547
- case "BTC" /* BTC */:
6548
- return "BTC linked vaults";
6549
- }
6550
- };
6551
- var getAllStrategyTags = () => {
6552
- return Object.values(StrategyTag);
6553
- };
6554
- var getRiskExplaination = (riskType) => {
6555
- switch (riskType) {
6556
- case "Market Risk" /* MARKET_RISK */:
6557
- return "The risk of the market moving against the position.";
6558
- case "Impermanent Loss Risk" /* IMPERMANENT_LOSS */:
6559
- return "The temporary loss of value experienced by liquidity providers in AMMs when asset prices diverge compared to simply holding them.";
6560
- case "Liquidation Risk" /* LIQUIDATION_RISK */:
6561
- return "The risk of losing funds due to the position being liquidated.";
6562
- case "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */:
6563
- return "The risk of low liquidity in the pool, which can lead to high slippages or reduced in-abilities to quickly exit the position.";
6564
- case "Oracle Risk" /* ORACLE_RISK */:
6565
- return "The risk of the oracle being manipulated or incorrect.";
6566
- case "Smart Contract Risk" /* SMART_CONTRACT_RISK */:
6567
- return "The risk of the smart contract being vulnerable to attacks.";
6568
- case "Technical Risk" /* TECHNICAL_RISK */:
6569
- return "The risk of technical issues e.g. backend failure.";
6570
- case "Counterparty Risk" /* COUNTERPARTY_RISK */:
6571
- return "The risk of the counterparty defaulting e.g. bad debt on lending platforms.";
6572
- case "Depeg Risk" /* DEPEG_RISK */:
6573
- return "The risk of a token losing its peg to the underlying asset, leading to potential losses for holders.";
6574
- }
6575
- };
6576
- var getRiskColor = (risk) => {
6577
- const value = risk.value;
6578
- if (value <= 2) return "light_green_2";
6579
- if (value < 3) return "yellow";
6580
- return "red";
6581
- };
6582
- var getNoRiskTags = (risks) => {
6583
- const noRisks1 = risks.filter((risk) => risk.value === 0).map((risk) => risk.type);
6584
- const noRisks2 = Object.values(RiskType).filter(
6585
- (risk) => !risks.map((risk2) => risk2.type).includes(risk)
6586
- );
6587
- const mergedUnique = [.../* @__PURE__ */ new Set([...noRisks1, ...noRisks2])];
6588
- return mergedUnique;
6589
- };
6590
- function highlightTextWithLinks(put, highlights) {
6591
- const escapeRegExp = (text) => text.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
6592
- const pattern = new RegExp(
6593
- `(${highlights.map((m) => escapeRegExp(m.highlight)).join("|")})`,
6594
- "gi"
6595
- );
6596
- const parts = put.split(pattern);
6597
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: parts.map((part, i) => {
6598
- const match = highlights.find((m) => m.highlight.toLowerCase() === part.toLowerCase());
6599
- return match ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: match.link, target: "_blank", style: { color: "white", background: "rgba(255, 255, 255, 0.04)" }, children: part }, i) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: part }, i);
6600
- }) });
6601
- }
6602
- var VesuProtocol = {
6603
- name: "Vesu",
6604
- logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png"
6605
- };
6606
- var AvnuProtocol = {
6607
- name: "Avnu",
6608
- logo: "https://static-assets-8zct.onrender.com/integrations/avnu/logo.png"
6609
- };
6610
- var EndurProtocol = {
6611
- name: "Endur",
6612
- logo: "http://endur.fi/logo.png"
6613
- };
6614
- var ExtendedProtocol = {
6615
- name: "Extended",
6616
- logo: "https://static-assets-8zct.onrender.com/integrations/extended/extended.svg"
6617
- };
6618
- var EkuboProtocol = {
6619
- name: "Ekubo",
6620
- logo: "https://app.ekubo.org/favicon.ico"
6621
- };
6622
- var NoneProtocol = {
6623
- name: "-",
6624
- logo: ""
6625
- };
6626
- var VaultProtocol = {
6627
- name: "Vault",
6628
- logo: ""
6629
- };
6630
- var TrovesProtocol = {
6631
- name: "Troves",
6632
- logo: "https://app.troves.fi/favicon.ico"
6633
- };
6634
- var Protocols = {
6635
- NONE: NoneProtocol,
6636
- VESU: VesuProtocol,
6637
- ENDUR: EndurProtocol,
6638
- EXTENDED: ExtendedProtocol,
6639
- EKUBO: EkuboProtocol,
6640
- AVNU: AvnuProtocol,
6641
- VAULT: VaultProtocol,
6642
- TROVES: TrovesProtocol
6643
- };
6644
- var UnwrapLabsCurator = {
6645
- name: "Unwrap Labs",
6646
- logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
6647
- };
6648
-
6649
- // src/interfaces/initializable.ts
6650
- var Initializable = class {
6651
- constructor() {
6652
- this.initialized = false;
6653
- }
6654
- async waitForInitilisation() {
6655
- return new Promise((resolve, reject) => {
6656
- const interval = setInterval(() => {
6657
- if (this.initialized) {
6658
- console.log("Initialised");
6659
- clearInterval(interval);
6660
- resolve();
6661
- }
6662
- }, 1e3);
6663
- });
6664
- }
6665
- };
6666
-
6667
6665
  // src/strategies/autoCompounderStrk.ts
6668
6666
  var import_starknet17 = require("starknet");
6669
6667
  var AutoCompounderSTRK = class {
@@ -18196,6 +18194,73 @@ async function binarySearch(lowWei, highWei, callback) {
18196
18194
  }
18197
18195
  return null;
18198
18196
  }
18197
+ async function findMaxInputWithSlippage(options) {
18198
+ const {
18199
+ apiGetOutput,
18200
+ maxInput,
18201
+ maxSlippagePercent,
18202
+ tolerance,
18203
+ minInput = 0,
18204
+ referenceAmountMultiplier = 1e-3,
18205
+ referenceRate = 0
18206
+ } = options;
18207
+ let apiCalls = 0;
18208
+ if (!referenceRate && !referenceAmountMultiplier) {
18209
+ throw new Error("One of referenceRate or referenceAmountMultiplier must be provided");
18210
+ }
18211
+ let _referenceRate = referenceRate;
18212
+ if (!_referenceRate) {
18213
+ const smallAmount = maxInput * referenceAmountMultiplier;
18214
+ const referenceOutput = await apiGetOutput(smallAmount);
18215
+ apiCalls++;
18216
+ _referenceRate = referenceOutput / smallAmount;
18217
+ }
18218
+ async function checkSlippage(inputAmount) {
18219
+ const actualOutput = await apiGetOutput(inputAmount);
18220
+ apiCalls++;
18221
+ const expectedOutput = inputAmount * referenceRate;
18222
+ const slippage = (expectedOutput - actualOutput) / expectedOutput;
18223
+ logger.verbose(`findMaxInputWithSlippage::checkSlippage inputAmount: ${inputAmount}, actualOutput: ${actualOutput}, slippage: ${slippage}, maxSlippagePercent: ${maxSlippagePercent}`);
18224
+ return {
18225
+ acceptable: slippage <= maxSlippagePercent,
18226
+ slippage,
18227
+ output: actualOutput
18228
+ };
18229
+ }
18230
+ const maxCheck = await checkSlippage(maxInput);
18231
+ if (maxCheck.acceptable) {
18232
+ return {
18233
+ optimalInput: maxInput,
18234
+ actualOutput: maxCheck.output,
18235
+ actualSlippage: maxCheck.slippage,
18236
+ apiCallsUsed: apiCalls
18237
+ };
18238
+ }
18239
+ let left = minInput;
18240
+ let right = maxInput;
18241
+ let bestInput = minInput;
18242
+ let bestOutput = 0;
18243
+ let bestSlippage = 0;
18244
+ const convergenceThreshold = tolerance * maxInput;
18245
+ while (right - left > convergenceThreshold) {
18246
+ const mid = (left + right) / 2;
18247
+ const midCheck = await checkSlippage(mid);
18248
+ if (midCheck.acceptable) {
18249
+ bestInput = mid;
18250
+ bestOutput = midCheck.output;
18251
+ bestSlippage = midCheck.slippage;
18252
+ left = mid;
18253
+ } else {
18254
+ right = mid;
18255
+ }
18256
+ }
18257
+ return {
18258
+ optimalInput: bestInput,
18259
+ actualOutput: bestOutput,
18260
+ actualSlippage: bestSlippage,
18261
+ apiCallsUsed: apiCalls
18262
+ };
18263
+ }
18199
18264
 
18200
18265
  // src/strategies/ekubo-cl-vault.tsx
18201
18266
  var import_jsx_runtime3 = require("react/jsx-runtime");
@@ -18801,8 +18866,8 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
18801
18866
  upperTick: _EkuboCLVault.i129ToNumber(result.bounds.upper)
18802
18867
  };
18803
18868
  }
18804
- static div2Power128(num16) {
18805
- return Number(BigInt(num16.toString()) * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
18869
+ static div2Power128(num17) {
18870
+ return Number(BigInt(num17.toString()) * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
18806
18871
  }
18807
18872
  static priceToTick(price, isRoundDown, tickSpacing) {
18808
18873
  const value = isRoundDown ? Math.floor(Math.log(price) / Math.log(1.000001)) : Math.ceil(Math.log(price) / Math.log(1.000001));
@@ -30429,7 +30494,8 @@ var vesuPrimeUSDC = {
30429
30494
  name: "Vesu Prime USDC",
30430
30495
  decimals: 18,
30431
30496
  logo: usdc.logo,
30432
- displayDecimals: 2
30497
+ displayDecimals: 2,
30498
+ indexingType: "ignore" /* IGNORE */
30433
30499
  };
30434
30500
  var strk = Global.getDefaultTokens().find((t) => t.symbol === "STRK");
30435
30501
  function getYoloVaultErc4626Config(mainToken, secondaryToken) {
@@ -38920,41 +38986,270 @@ var UniversalLstMultiplierStrategy = class _UniversalLstMultiplierStrategy exten
38920
38986
  }
38921
38987
  async netAPY() {
38922
38988
  const unusedBalance = await this.getUnusedBalance();
38923
- const maxDeposits = await this.maxNewDeposits({ isAPYComputation: true });
38924
- const lstAPY = await this.getLSTAPR(this.getLSTUnderlyingTokenInfo().address);
38925
- if (maxDeposits * 1.5 < unusedBalance.amount.toNumber()) {
38989
+ const maxNewDeposits = await this.maxNewDeposits({
38990
+ isAPYComputation: true
38991
+ });
38992
+ const lstAPY = await this.getLSTAPR(
38993
+ this.getLSTUnderlyingTokenInfo().address
38994
+ );
38995
+ if (maxNewDeposits * 1.5 < unusedBalance.amount.toNumber()) {
38926
38996
  logger.verbose(
38927
38997
  `${this.getTag()}::netAPY: unused balance is > max servicable from loan, lstAPY: ${lstAPY}`
38928
38998
  );
38929
- const output = await super.netAPY();
38999
+ const { positions, baseAPYs, rewardAPYs } = await this.getVesuAPYs();
39000
+ const unusedBalanceAPY = await this.getUnusedBalanceAPY();
39001
+ baseAPYs.push(...[unusedBalanceAPY.apy]);
39002
+ rewardAPYs.push(0);
39003
+ const weights = positions.map((p, index) => p.usdValue * (index % 2 == 0 ? 1 : -1));
39004
+ weights.push(unusedBalanceAPY.weight);
39005
+ const prevAUM = await this.getPrevAUM();
39006
+ const price = await this.pricer.getPrice(this.metadata.depositTokens[0].symbol);
39007
+ const prevAUMUSD = prevAUM.multipliedBy(price.price);
39008
+ const output = await this.returnNetAPY(baseAPYs, rewardAPYs, weights, prevAUMUSD);
38930
39009
  output.splits.push({ apy: lstAPY, id: "lst_apy" });
38931
39010
  return output;
38932
39011
  } else {
38933
39012
  logger.verbose(
38934
39013
  `${this.getTag()}::netAPY: we can take more deposits, use theoretical max APY`
38935
39014
  );
38936
- const output = await super.netAPY();
39015
+ const { positions, baseAPYs, rewardAPYs } = await this.getVesuAPYs();
39016
+ const weights = positions.map(
39017
+ (p, index) => p.usdValue * (index % 2 == 0 ? 1 : -1)
39018
+ );
39019
+ const aum = weights.reduce((acc, curr) => acc + curr, 0);
39020
+ const output = await this.returnNetAPY(
39021
+ baseAPYs,
39022
+ rewardAPYs,
39023
+ weights,
39024
+ new Web3Number(
39025
+ aum.toFixed(9),
39026
+ this.getLSTUnderlyingTokenInfo().decimals
39027
+ )
39028
+ );
38937
39029
  output.splits.push({ apy: lstAPY, id: "lst_apy" });
38938
39030
  return output;
38939
39031
  }
38940
39032
  }
38941
- async maxNewDeposits(params = { isAPYComputation: false }) {
38942
- let numerator = 0;
38943
- for (let adapter of this.getVesuMultiplyAdapters()) {
38944
- const maxDepositInfo = await adapter.maxDeposit();
38945
- numerator += maxDepositInfo.amount.toNumber();
39033
+ async getVesuAPYs() {
39034
+ const vesuAdapters = this.getVesuAdapters();
39035
+ const allVesuPools = await VesuAdapter.getVesuPools();
39036
+ const pools = vesuAdapters.map((vesuAdapter) => {
39037
+ return allVesuPools.pools.find((p) => vesuAdapter.config.poolId.eqString(import_starknet36.num.getHexString(p.id)));
39038
+ });
39039
+ logger.verbose(`${this.metadata.name}::netAPY: vesu-pools: ${JSON.stringify(pools)}`);
39040
+ if (pools.some((p) => !p)) {
39041
+ throw new Error("Pool not found");
38946
39042
  }
38947
- return numerator;
39043
+ const positions = await this.getVesuPositions();
39044
+ logger.verbose(`${this.metadata.name}::netAPY: positions: ${JSON.stringify(positions)}`);
39045
+ const baseAPYs = [];
39046
+ const rewardAPYs = [];
39047
+ for (const [index, pool] of pools.entries()) {
39048
+ const vesuAdapter = vesuAdapters[index];
39049
+ const collateralAsset = pool.assets.find((a) => a.symbol.toLowerCase() === vesuAdapter.config.collateral.symbol.toLowerCase())?.stats;
39050
+ const debtAsset = pool.assets.find((a) => a.symbol.toLowerCase() === vesuAdapter.config.debt.symbol.toLowerCase())?.stats;
39051
+ const supplyApy = Number(collateralAsset.supplyApy.value || 0) / 1e18;
39052
+ const lstAPY = await this.getLSTAPR(vesuAdapter.config.collateral.address);
39053
+ logger.verbose(`${this.metadata.name}::netAPY: ${vesuAdapter.config.collateral.symbol} LST APR from Endur: ${lstAPY}`);
39054
+ baseAPYs.push(...[supplyApy + lstAPY, Number(debtAsset.borrowApr.value) / 1e18]);
39055
+ rewardAPYs.push(...[Number(collateralAsset.defiSpringSupplyApr?.value || "0") / 1e18, 0]);
39056
+ }
39057
+ logger.verbose(`${this.metadata.name}::netAPY: baseAPYs: ${JSON.stringify(baseAPYs)}`);
39058
+ logger.verbose(`${this.metadata.name}::netAPY: rewardAPYs: ${JSON.stringify(rewardAPYs)}`);
39059
+ assert(baseAPYs.length == positions.length, "APYs and positions length mismatch");
39060
+ return {
39061
+ baseAPYs,
39062
+ rewardAPYs,
39063
+ positions
39064
+ };
39065
+ }
39066
+ async returnNetAPY(baseAPYs, rewardAPYs, weights, prevAUMUSD) {
39067
+ if (weights.every((p) => p == 0)) {
39068
+ return {
39069
+ net: 0,
39070
+ splits: [{
39071
+ apy: 0,
39072
+ id: "base"
39073
+ }, {
39074
+ apy: 0,
39075
+ id: "defispring"
39076
+ }]
39077
+ };
39078
+ }
39079
+ const baseAPY = this.computeAPY(baseAPYs, weights, prevAUMUSD);
39080
+ const rewardAPY = this.computeAPY(rewardAPYs, weights, prevAUMUSD);
39081
+ const netAPY = baseAPY + rewardAPY;
39082
+ logger.verbose(`${this.metadata.name}::netAPY: net: ${netAPY}, baseAPY: ${baseAPY}, rewardAPY: ${rewardAPY}`);
39083
+ return {
39084
+ net: netAPY,
39085
+ splits: [{
39086
+ apy: baseAPY,
39087
+ id: "base"
39088
+ }, {
39089
+ apy: rewardAPY,
39090
+ id: "defispring"
39091
+ }]
39092
+ };
38948
39093
  }
38949
39094
  async getUnusedBalanceAPY() {
38950
39095
  const unusedBalance = await this.getUnusedBalance();
38951
- const underlying = this.getLSTUnderlyingTokenInfo();
39096
+ const vesuAdapter = this.getVesuSameTokenAdapter();
39097
+ const underlying = vesuAdapter.config.debt;
38952
39098
  const lstAPY = await this.getLSTAPR(underlying.address);
38953
39099
  return {
38954
39100
  apy: lstAPY,
38955
39101
  weight: unusedBalance.usdValue
38956
39102
  };
38957
39103
  }
39104
+ computeAPY(apys, weights, currentAUM) {
39105
+ assert(apys.length === weights.length, "APYs and weights length mismatch");
39106
+ const weightedSum = apys.reduce((acc, apy, i) => acc + apy * weights[i], 0);
39107
+ logger.verbose(`${this.getTag()} computeAPY: apys: ${JSON.stringify(apys)}, weights: ${JSON.stringify(weights)}, weightedSum: ${weightedSum}, currentAUM: ${currentAUM}`);
39108
+ return weightedSum / currentAUM.toNumber();
39109
+ }
39110
+ getVesuAdapters() {
39111
+ const multiply = this.getVesuMultiplyAdapters();
39112
+ return multiply.map((m) => m._vesuAdapter);
39113
+ }
39114
+ async getVesuPositions(blockNumber = "latest") {
39115
+ const adapters = this.getVesuAdapters();
39116
+ const positions = [];
39117
+ for (const adapter of adapters) {
39118
+ positions.push(...await adapter.getPositions(this.config, blockNumber));
39119
+ }
39120
+ return positions;
39121
+ }
39122
+ async getUnusedBalance() {
39123
+ const balance = await new ERC20(this.config).balanceOf(this.asset().address, this.metadata.additionalInfo.vaultAllocator, this.asset().decimals);
39124
+ const price = await this.pricer.getPrice(this.metadata.depositTokens[0].symbol);
39125
+ const usdValue = Number(balance.toFixed(6)) * price.price;
39126
+ return {
39127
+ tokenInfo: this.asset(),
39128
+ amount: balance,
39129
+ usdValue
39130
+ };
39131
+ }
39132
+ async maxNewDeposits(params = { isAPYComputation: false }) {
39133
+ const maxBorrowableAmounts = await this.getMaxBorrowableAmount(params);
39134
+ let numerator = 0;
39135
+ for (let adapter of this.getVesuAdapters()) {
39136
+ const maxBorrowableAmountInfo = maxBorrowableAmounts.maxBorrowables.find(
39137
+ (b) => b.borrowableAsset.address.eq(adapter.config.debt.address)
39138
+ );
39139
+ if (!maxBorrowableAmountInfo || !maxBorrowableAmountInfo?.amount) {
39140
+ throw new Error(
39141
+ `Max borrowable amount not found for adapter: ${adapter.config.debt.symbol}`
39142
+ );
39143
+ }
39144
+ numerator += this.metadata.additionalInfo.targetHealthFactor * maxBorrowableAmountInfo.amount.toNumber() / maxBorrowableAmountInfo.ltv;
39145
+ }
39146
+ return numerator - maxBorrowableAmounts.netMaxBorrowableAmount.toNumber();
39147
+ }
39148
+ async getMaxBorrowableAmount(params = { isAPYComputation: false }) {
39149
+ const vesuAdapters = this.getVesuAdapters();
39150
+ let netMaxBorrowableAmount = Web3Number.fromWei("0", this.getLSTUnderlyingTokenInfo().decimals);
39151
+ const maxBorrowables = [];
39152
+ for (const vesuAdapter of vesuAdapters) {
39153
+ const output = await this.getMaxBorrowableAmountByVesuAdapter(
39154
+ vesuAdapter,
39155
+ params.isAPYComputation
39156
+ );
39157
+ const ltv = await vesuAdapter.getLTVConfig(this.config);
39158
+ maxBorrowables.push({ ...output, ltv, poolId: vesuAdapter.config.poolId });
39159
+ }
39160
+ maxBorrowables.sort((a, b) => b.amount.toNumber() - a.amount.toNumber());
39161
+ netMaxBorrowableAmount = maxBorrowables.reduce(
39162
+ (acc, curr) => acc.plus(curr.amount),
39163
+ Web3Number.fromWei("0", this.getLSTUnderlyingTokenInfo().decimals)
39164
+ );
39165
+ return { netMaxBorrowableAmount, maxBorrowables };
39166
+ }
39167
+ async getMaxSwappableWithMaxSlippage(fromToken, toToken, maxSlippage, maxAmount) {
39168
+ const output = await findMaxInputWithSlippage({
39169
+ apiGetOutput: async (inputAmount) => {
39170
+ const ekuboQuoter = new EkuboQuoter(this.config, this.pricer);
39171
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
39172
+ const quote = await ekuboQuoter.getQuoteExactInput(
39173
+ fromToken.address.address,
39174
+ toToken.address.address,
39175
+ new Web3Number(inputAmount.toFixed(9), fromToken.decimals)
39176
+ );
39177
+ return Web3Number.fromWei(
39178
+ quote.total_calculated.toString(),
39179
+ toToken.decimals
39180
+ ).toNumber();
39181
+ },
39182
+ maxInput: maxAmount.toNumber(),
39183
+ maxSlippagePercent: maxSlippage,
39184
+ tolerance: 1e-3,
39185
+ referenceRate: 1
39186
+ });
39187
+ return new Web3Number(output.optimalInput, fromToken.decimals);
39188
+ }
39189
+ async getMaxBorrowableAmountByVesuAdapter(vesuAdapter, isAPYComputation) {
39190
+ const lstAPY = await this.getLSTAPR(
39191
+ this.getLSTUnderlyingTokenInfo().address
39192
+ );
39193
+ const maxInterestRate = lstAPY * 0.8;
39194
+ const { maxDebtToHave: maxBorrowableAmount, currentDebt } = await vesuAdapter.getMaxBorrowableByInterestRate(
39195
+ this.config,
39196
+ vesuAdapter.config.debt,
39197
+ maxInterestRate
39198
+ );
39199
+ const debtCap = await vesuAdapter.getDebtCap(this.config);
39200
+ if (currentDebt.gte(debtCap)) {
39201
+ return {
39202
+ amount: Web3Number.fromWei("0", vesuAdapter.config.debt.decimals),
39203
+ dexSwappableAmount: Web3Number.fromWei(
39204
+ "0",
39205
+ vesuAdapter.config.debt.decimals
39206
+ ),
39207
+ maxBorrowableAmount: Web3Number.fromWei(
39208
+ "0",
39209
+ vesuAdapter.config.debt.decimals
39210
+ ),
39211
+ borrowableAsset: vesuAdapter.config.debt
39212
+ };
39213
+ }
39214
+ const availableToBorrow = debtCap.minus(currentDebt);
39215
+ const maxBorrowable = maxBorrowableAmount.minimum(availableToBorrow).multipliedBy(0.999);
39216
+ if (vesuAdapter.config.debt.address.eq(
39217
+ this.getLSTUnderlyingTokenInfo().address
39218
+ ) || isAPYComputation) {
39219
+ return {
39220
+ amount: maxBorrowable,
39221
+ dexSwappableAmount: maxBorrowable,
39222
+ maxBorrowableAmount: maxBorrowable,
39223
+ borrowableAsset: vesuAdapter.config.debt
39224
+ };
39225
+ }
39226
+ try {
39227
+ const maxSwappable = await this.getMaxSwappableWithMaxSlippage(
39228
+ vesuAdapter.config.debt,
39229
+ this.getLSTUnderlyingTokenInfo(),
39230
+ 2e-4,
39231
+ maxBorrowable
39232
+ );
39233
+ return {
39234
+ amount: maxBorrowable.minimum(maxSwappable),
39235
+ dexSwappableAmount: maxSwappable,
39236
+ maxBorrowableAmount: maxBorrowable,
39237
+ borrowableAsset: vesuAdapter.config.debt
39238
+ };
39239
+ } catch (error) {
39240
+ logger.warn(`${this.getTag()}: Failed to get max swappable: ${error}`);
39241
+ const maxSwappable = Web3Number.fromWei(
39242
+ "0",
39243
+ vesuAdapter.config.debt.decimals
39244
+ );
39245
+ return {
39246
+ amount: maxBorrowable.minimum(maxSwappable),
39247
+ dexSwappableAmount: maxSwappable,
39248
+ maxBorrowableAmount: maxBorrowable,
39249
+ borrowableAsset: vesuAdapter.config.debt
39250
+ };
39251
+ }
39252
+ }
38958
39253
  async getAUM(unrealizedAUM = false) {
38959
39254
  const underlying = this.asset();
38960
39255
  assert(underlying.symbol.startsWith("x"), "Underlying is not an LST of Endur");
@@ -39317,6 +39612,9 @@ var hyperxWBTC = {
39317
39612
  borrowable_assets: [{
39318
39613
  tokenInfo: Global.getDefaultTokens().find((token) => token.symbol === "WBTC"),
39319
39614
  poolId: VesuPools.Re7xBTC
39615
+ }, {
39616
+ tokenInfo: Global.getDefaultTokens().find((token) => token.symbol === "WBTC"),
39617
+ poolId: VesuPools.Prime
39320
39618
  }],
39321
39619
  underlyingToken: Global.getDefaultTokens().find((token) => token.symbol === "WBTC"),
39322
39620
  quoteAmountToFetchPrice: new Web3Number("0.001", Global.getDefaultTokens().find((token) => token.symbol === "WBTC").decimals),
@@ -39429,8 +39727,7 @@ var HYPER_LST_SECURITY = {
39429
39727
  },
39430
39728
  accessControl: {
39431
39729
  type: "Standard Account" /* STANDARD_ACCOUNT */,
39432
- addresses: [ContractAddr.from("0x0")],
39433
- timeLock: "2 Days"
39730
+ addresses: [ContractAddr.from("0x03495dd1e4838aa06666aac236036d86e81a6553e222fc02e70c2cbc0062e8d0")]
39434
39731
  }
39435
39732
  };
39436
39733
  var HYPER_LST_REDEMPTION_INFO = {
@@ -41381,6 +41678,7 @@ var deployer_default = Deployer;
41381
41678
  TRANSFER_SANITIZER,
41382
41679
  TelegramGroupNotif,
41383
41680
  TelegramNotif,
41681
+ TokenIndexingType,
41384
41682
  TokenMarketData,
41385
41683
  TokenTransferAdapter,
41386
41684
  UNIVERSAL_ADAPTER_IDS,