@strkfarm/sdk 2.0.0-dev.42 → 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/cli.js +2 -2
- package/dist/cli.mjs +2 -2
- package/dist/index.browser.global.js +26409 -25535
- package/dist/index.browser.mjs +859 -581
- package/dist/index.d.ts +52 -8
- package/dist/index.js +894 -613
- package/dist/index.mjs +864 -584
- package/package.json +72 -14
- package/src/global.ts +219 -230
- package/src/interfaces/common.tsx +12 -3
- package/src/modules/ekubo-pricer.ts +2 -1
- package/src/modules/pricer.ts +27 -15
- package/src/modules/zkLend.ts +3 -2
- package/src/strategies/ekubo-cl-vault.tsx +0 -5
- package/src/strategies/svk-strategy.ts +7 -0
- package/src/strategies/token-boosted-xstrk-carry-strategy.tsx +0 -1
- package/src/strategies/universal-lst-muliplier-strategy.tsx +294 -39
- package/src/strategies/universal-strategy.tsx +0 -1
- package/src/strategies/yoloVault.ts +2 -0
package/dist/index.mjs
CHANGED
|
@@ -104,7 +104,7 @@ var Web3Number = class _Web3Number2 extends _Web3Number {
|
|
|
104
104
|
[util.inspect.custom](depth, opts) {
|
|
105
105
|
return this.toString();
|
|
106
106
|
}
|
|
107
|
-
[
|
|
107
|
+
[Symbol.for("nodejs.util.inspect.custom")](depth, inspectOptions, inspect) {
|
|
108
108
|
return this.toString();
|
|
109
109
|
}
|
|
110
110
|
inspect(depth, opts) {
|
|
@@ -155,7 +155,7 @@ var ContractAddr = class _ContractAddr {
|
|
|
155
155
|
// src/dataTypes/mynumber.ts
|
|
156
156
|
import BigNumber2 from "bignumber.js";
|
|
157
157
|
import { ethers } from "ethers";
|
|
158
|
-
var customInspectSymbol =
|
|
158
|
+
var customInspectSymbol = Symbol.for("nodejs.util.inspect.custom");
|
|
159
159
|
BigNumber2.config({
|
|
160
160
|
DECIMAL_PLACES: 18
|
|
161
161
|
});
|
|
@@ -164,16 +164,16 @@ var MyNumber = class _MyNumber {
|
|
|
164
164
|
this.bigNumber = new BigNumber2(bigNumber);
|
|
165
165
|
this.decimals = decimals;
|
|
166
166
|
}
|
|
167
|
-
static fromEther(
|
|
167
|
+
static fromEther(num17, decimals) {
|
|
168
168
|
try {
|
|
169
169
|
return new _MyNumber(
|
|
170
170
|
Number(
|
|
171
|
-
ethers.parseUnits(Number(
|
|
171
|
+
ethers.parseUnits(Number(num17).toFixed(10), decimals)
|
|
172
172
|
).toFixed(6),
|
|
173
173
|
decimals
|
|
174
174
|
);
|
|
175
175
|
} catch (e) {
|
|
176
|
-
console.error("fromEther", e,
|
|
176
|
+
console.error("fromEther", e, num17, decimals);
|
|
177
177
|
throw e;
|
|
178
178
|
}
|
|
179
179
|
}
|
|
@@ -373,7 +373,7 @@ var getStackFromMeta = (stack, meta) => {
|
|
|
373
373
|
if (typeof stack === "string" && stack.length > 0) {
|
|
374
374
|
return stack;
|
|
375
375
|
}
|
|
376
|
-
const splat = meta[
|
|
376
|
+
const splat = meta[Symbol.for("splat")];
|
|
377
377
|
if (Array.isArray(splat)) {
|
|
378
378
|
for (const item of splat) {
|
|
379
379
|
if (item instanceof Error && item.stack) {
|
|
@@ -447,7 +447,7 @@ function configureLogger(config = {}) {
|
|
|
447
447
|
out += ` stack="${escapeValue(stripAnsi(derivedStack))}"`;
|
|
448
448
|
}
|
|
449
449
|
const metaCopy = { ...meta };
|
|
450
|
-
delete metaCopy[
|
|
450
|
+
delete metaCopy[Symbol.for("splat")];
|
|
451
451
|
if (Object.keys(metaCopy).length > 0) {
|
|
452
452
|
out += ` meta=${escapeValue(stringifyUnknown(metaCopy))}`;
|
|
453
453
|
}
|
|
@@ -466,283 +466,510 @@ function configureLogger(config = {}) {
|
|
|
466
466
|
}
|
|
467
467
|
configureLogger();
|
|
468
468
|
|
|
469
|
+
// src/interfaces/lending.ts
|
|
470
|
+
var MarginType = /* @__PURE__ */ ((MarginType2) => {
|
|
471
|
+
MarginType2["SHARED"] = "shared";
|
|
472
|
+
MarginType2["NONE"] = "none";
|
|
473
|
+
return MarginType2;
|
|
474
|
+
})(MarginType || {});
|
|
475
|
+
var ILending = class {
|
|
476
|
+
constructor(config, metadata) {
|
|
477
|
+
this.tokens = [];
|
|
478
|
+
this.initialised = false;
|
|
479
|
+
this.metadata = metadata;
|
|
480
|
+
this.config = config;
|
|
481
|
+
this.init();
|
|
482
|
+
}
|
|
483
|
+
/** Wait for initialisation */
|
|
484
|
+
waitForInitilisation() {
|
|
485
|
+
return new Promise((resolve, reject) => {
|
|
486
|
+
const interval = setInterval(() => {
|
|
487
|
+
logger.verbose(`Waiting for ${this.metadata.name} to initialise`);
|
|
488
|
+
if (this.initialised) {
|
|
489
|
+
logger.verbose(`${this.metadata.name} initialised`);
|
|
490
|
+
clearInterval(interval);
|
|
491
|
+
resolve();
|
|
492
|
+
}
|
|
493
|
+
}, 1e3);
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
// src/interfaces/common.tsx
|
|
499
|
+
import { BlockTag, RpcProvider } from "starknet";
|
|
500
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
501
|
+
var RiskType = /* @__PURE__ */ ((RiskType2) => {
|
|
502
|
+
RiskType2["MARKET_RISK"] = "Market Risk";
|
|
503
|
+
RiskType2["IMPERMANENT_LOSS"] = "Impermanent Loss Risk";
|
|
504
|
+
RiskType2["LIQUIDATION_RISK"] = "Liquidation Risk";
|
|
505
|
+
RiskType2["LOW_LIQUIDITY_RISK"] = "Low Liquidity Risk";
|
|
506
|
+
RiskType2["SMART_CONTRACT_RISK"] = "Smart Contract Risk";
|
|
507
|
+
RiskType2["ORACLE_RISK"] = "Oracle Risk";
|
|
508
|
+
RiskType2["TECHNICAL_RISK"] = "Technical Risk";
|
|
509
|
+
RiskType2["COUNTERPARTY_RISK"] = "Counterparty Risk";
|
|
510
|
+
RiskType2["DEPEG_RISK"] = "Depeg Risk";
|
|
511
|
+
return RiskType2;
|
|
512
|
+
})(RiskType || {});
|
|
513
|
+
var TokenIndexingType = /* @__PURE__ */ ((TokenIndexingType2) => {
|
|
514
|
+
TokenIndexingType2["PEGGED"] = "pegged";
|
|
515
|
+
TokenIndexingType2["INDEXER"] = "indexer";
|
|
516
|
+
TokenIndexingType2["LST_SCRIPT"] = "lstScript";
|
|
517
|
+
TokenIndexingType2["IGNORE"] = "ignore";
|
|
518
|
+
return TokenIndexingType2;
|
|
519
|
+
})(TokenIndexingType || {});
|
|
520
|
+
var Network = /* @__PURE__ */ ((Network2) => {
|
|
521
|
+
Network2["mainnet"] = "mainnet";
|
|
522
|
+
Network2["sepolia"] = "sepolia";
|
|
523
|
+
Network2["devnet"] = "devnet";
|
|
524
|
+
return Network2;
|
|
525
|
+
})(Network || {});
|
|
526
|
+
var StrategyTag = /* @__PURE__ */ ((StrategyTag3) => {
|
|
527
|
+
StrategyTag3["META_VAULT"] = "Meta Vaults";
|
|
528
|
+
StrategyTag3["LEVERED"] = "Maxx";
|
|
529
|
+
StrategyTag3["AUTOMATED_LP"] = "Ekubo";
|
|
530
|
+
StrategyTag3["BTC"] = "BTC";
|
|
531
|
+
return StrategyTag3;
|
|
532
|
+
})(StrategyTag || {});
|
|
533
|
+
var VaultType = /* @__PURE__ */ ((VaultType2) => {
|
|
534
|
+
VaultType2["LOOPING"] = "Looping";
|
|
535
|
+
VaultType2["META_VAULT"] = "Meta Vault";
|
|
536
|
+
VaultType2["DELTA_NEUTRAL"] = "Delta Neutral";
|
|
537
|
+
VaultType2["AUTOMATED_LP"] = "Automated LP";
|
|
538
|
+
VaultType2["TVA"] = "Troves Value Averaging";
|
|
539
|
+
return VaultType2;
|
|
540
|
+
})(VaultType || {});
|
|
541
|
+
var AuditStatus = /* @__PURE__ */ ((AuditStatus2) => {
|
|
542
|
+
AuditStatus2["AUDITED"] = "Audited";
|
|
543
|
+
AuditStatus2["NOT_AUDITED"] = "Not Audited";
|
|
544
|
+
return AuditStatus2;
|
|
545
|
+
})(AuditStatus || {});
|
|
546
|
+
var SourceCodeType = /* @__PURE__ */ ((SourceCodeType2) => {
|
|
547
|
+
SourceCodeType2["OPEN_SOURCE"] = "Open Source";
|
|
548
|
+
SourceCodeType2["CLOSED_SOURCE"] = "Closed Source";
|
|
549
|
+
return SourceCodeType2;
|
|
550
|
+
})(SourceCodeType || {});
|
|
551
|
+
var AccessControlType = /* @__PURE__ */ ((AccessControlType2) => {
|
|
552
|
+
AccessControlType2["MULTISIG_ACCOUNT"] = "Multisig Account";
|
|
553
|
+
AccessControlType2["STANDARD_ACCOUNT"] = "Standard Account";
|
|
554
|
+
AccessControlType2["ROLE_BASED_ACCESS"] = "Role Based Access";
|
|
555
|
+
return AccessControlType2;
|
|
556
|
+
})(AccessControlType || {});
|
|
557
|
+
var InstantWithdrawalVault = /* @__PURE__ */ ((InstantWithdrawalVault2) => {
|
|
558
|
+
InstantWithdrawalVault2["YES"] = "Yes";
|
|
559
|
+
InstantWithdrawalVault2["NO"] = "No";
|
|
560
|
+
return InstantWithdrawalVault2;
|
|
561
|
+
})(InstantWithdrawalVault || {});
|
|
562
|
+
var FlowChartColors = /* @__PURE__ */ ((FlowChartColors2) => {
|
|
563
|
+
FlowChartColors2["Green"] = "purple";
|
|
564
|
+
FlowChartColors2["Blue"] = "#35484f";
|
|
565
|
+
FlowChartColors2["Purple"] = "#6e53dc";
|
|
566
|
+
return FlowChartColors2;
|
|
567
|
+
})(FlowChartColors || {});
|
|
568
|
+
var StrategyLiveStatus = /* @__PURE__ */ ((StrategyLiveStatus2) => {
|
|
569
|
+
StrategyLiveStatus2["ACTIVE"] = "Active";
|
|
570
|
+
StrategyLiveStatus2["NEW"] = "New";
|
|
571
|
+
StrategyLiveStatus2["COMING_SOON"] = "Coming Soon";
|
|
572
|
+
StrategyLiveStatus2["DEPRECATED"] = "Deprecated";
|
|
573
|
+
StrategyLiveStatus2["RETIRED"] = "Retired";
|
|
574
|
+
StrategyLiveStatus2["HOT"] = "Hot & New \u{1F525}";
|
|
575
|
+
return StrategyLiveStatus2;
|
|
576
|
+
})(StrategyLiveStatus || {});
|
|
577
|
+
function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier = BlockTag.LATEST) {
|
|
578
|
+
return {
|
|
579
|
+
provider: new RpcProvider({
|
|
580
|
+
nodeUrl: rpcUrl,
|
|
581
|
+
blockIdentifier
|
|
582
|
+
// specVersion
|
|
583
|
+
}),
|
|
584
|
+
stage: "production",
|
|
585
|
+
network: "mainnet" /* mainnet */
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
var getStrategyTagDesciption = (tag) => {
|
|
589
|
+
switch (tag) {
|
|
590
|
+
case "Meta Vaults" /* META_VAULT */:
|
|
591
|
+
return "A meta vault is a vault that auto allocates funds to multiple vaults based on optimal yield opportunities";
|
|
592
|
+
case "Maxx" /* LEVERED */:
|
|
593
|
+
return "Looping vaults on Endur LSTs with leveraged borrowing of STRK or BTC to increase yield (2-4x higher yield than simply staking)";
|
|
594
|
+
case "Ekubo" /* AUTOMATED_LP */:
|
|
595
|
+
return "Automated LP vaults on Ekubo that rebalance position automatically, ensuring you earn fees efficiently";
|
|
596
|
+
case "BTC" /* BTC */:
|
|
597
|
+
return "BTC linked vaults";
|
|
598
|
+
}
|
|
599
|
+
};
|
|
600
|
+
var getAllStrategyTags = () => {
|
|
601
|
+
return Object.values(StrategyTag);
|
|
602
|
+
};
|
|
603
|
+
var getRiskExplaination = (riskType) => {
|
|
604
|
+
switch (riskType) {
|
|
605
|
+
case "Market Risk" /* MARKET_RISK */:
|
|
606
|
+
return "The risk of the market moving against the position.";
|
|
607
|
+
case "Impermanent Loss Risk" /* IMPERMANENT_LOSS */:
|
|
608
|
+
return "The temporary loss of value experienced by liquidity providers in AMMs when asset prices diverge compared to simply holding them.";
|
|
609
|
+
case "Liquidation Risk" /* LIQUIDATION_RISK */:
|
|
610
|
+
return "The risk of losing funds due to the position being liquidated.";
|
|
611
|
+
case "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */:
|
|
612
|
+
return "The risk of low liquidity in the pool, which can lead to high slippages or reduced in-abilities to quickly exit the position.";
|
|
613
|
+
case "Oracle Risk" /* ORACLE_RISK */:
|
|
614
|
+
return "The risk of the oracle being manipulated or incorrect.";
|
|
615
|
+
case "Smart Contract Risk" /* SMART_CONTRACT_RISK */:
|
|
616
|
+
return "The risk of the smart contract being vulnerable to attacks.";
|
|
617
|
+
case "Technical Risk" /* TECHNICAL_RISK */:
|
|
618
|
+
return "The risk of technical issues e.g. backend failure.";
|
|
619
|
+
case "Counterparty Risk" /* COUNTERPARTY_RISK */:
|
|
620
|
+
return "The risk of the counterparty defaulting e.g. bad debt on lending platforms.";
|
|
621
|
+
case "Depeg Risk" /* DEPEG_RISK */:
|
|
622
|
+
return "The risk of a token losing its peg to the underlying asset, leading to potential losses for holders.";
|
|
623
|
+
}
|
|
624
|
+
};
|
|
625
|
+
var getRiskColor = (risk) => {
|
|
626
|
+
const value = risk.value;
|
|
627
|
+
if (value <= 2) return "light_green_2";
|
|
628
|
+
if (value < 3) return "yellow";
|
|
629
|
+
return "red";
|
|
630
|
+
};
|
|
631
|
+
var getNoRiskTags = (risks) => {
|
|
632
|
+
const noRisks1 = risks.filter((risk) => risk.value === 0).map((risk) => risk.type);
|
|
633
|
+
const noRisks2 = Object.values(RiskType).filter(
|
|
634
|
+
(risk) => !risks.map((risk2) => risk2.type).includes(risk)
|
|
635
|
+
);
|
|
636
|
+
const mergedUnique = [.../* @__PURE__ */ new Set([...noRisks1, ...noRisks2])];
|
|
637
|
+
return mergedUnique;
|
|
638
|
+
};
|
|
639
|
+
function highlightTextWithLinks(put, highlights) {
|
|
640
|
+
const escapeRegExp = (text) => text.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
641
|
+
const pattern = new RegExp(
|
|
642
|
+
`(${highlights.map((m) => escapeRegExp(m.highlight)).join("|")})`,
|
|
643
|
+
"gi"
|
|
644
|
+
);
|
|
645
|
+
const parts = put.split(pattern);
|
|
646
|
+
return /* @__PURE__ */ jsx(Fragment, { children: parts.map((part, i) => {
|
|
647
|
+
const match = highlights.find((m) => m.highlight.toLowerCase() === part.toLowerCase());
|
|
648
|
+
return match ? /* @__PURE__ */ jsx("a", { href: match.link, target: "_blank", style: { color: "white", background: "rgba(255, 255, 255, 0.04)" }, children: part }, i) : /* @__PURE__ */ jsx("span", { children: part }, i);
|
|
649
|
+
}) });
|
|
650
|
+
}
|
|
651
|
+
var VesuProtocol = {
|
|
652
|
+
name: "Vesu",
|
|
653
|
+
logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png"
|
|
654
|
+
};
|
|
655
|
+
var AvnuProtocol = {
|
|
656
|
+
name: "Avnu",
|
|
657
|
+
logo: "https://static-assets-8zct.onrender.com/integrations/avnu/logo.png"
|
|
658
|
+
};
|
|
659
|
+
var EndurProtocol = {
|
|
660
|
+
name: "Endur",
|
|
661
|
+
logo: "http://endur.fi/logo.png"
|
|
662
|
+
};
|
|
663
|
+
var ExtendedProtocol = {
|
|
664
|
+
name: "Extended",
|
|
665
|
+
logo: "https://static-assets-8zct.onrender.com/integrations/extended/extended.svg"
|
|
666
|
+
};
|
|
667
|
+
var EkuboProtocol = {
|
|
668
|
+
name: "Ekubo",
|
|
669
|
+
logo: "https://app.ekubo.org/favicon.ico"
|
|
670
|
+
};
|
|
671
|
+
var NoneProtocol = {
|
|
672
|
+
name: "-",
|
|
673
|
+
logo: ""
|
|
674
|
+
};
|
|
675
|
+
var VaultProtocol = {
|
|
676
|
+
name: "Vault",
|
|
677
|
+
logo: ""
|
|
678
|
+
};
|
|
679
|
+
var TrovesProtocol = {
|
|
680
|
+
name: "Troves",
|
|
681
|
+
logo: "https://app.troves.fi/favicon.ico"
|
|
682
|
+
};
|
|
683
|
+
var Protocols = {
|
|
684
|
+
NONE: NoneProtocol,
|
|
685
|
+
VESU: VesuProtocol,
|
|
686
|
+
ENDUR: EndurProtocol,
|
|
687
|
+
EXTENDED: ExtendedProtocol,
|
|
688
|
+
EKUBO: EkuboProtocol,
|
|
689
|
+
AVNU: AvnuProtocol,
|
|
690
|
+
VAULT: VaultProtocol,
|
|
691
|
+
TROVES: TrovesProtocol
|
|
692
|
+
};
|
|
693
|
+
var UnwrapLabsCurator = {
|
|
694
|
+
name: "Unwrap Labs",
|
|
695
|
+
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
696
|
+
};
|
|
697
|
+
|
|
698
|
+
// src/interfaces/initializable.ts
|
|
699
|
+
var Initializable = class {
|
|
700
|
+
constructor() {
|
|
701
|
+
this.initialized = false;
|
|
702
|
+
}
|
|
703
|
+
async waitForInitilisation() {
|
|
704
|
+
return new Promise((resolve, reject) => {
|
|
705
|
+
const interval = setInterval(() => {
|
|
706
|
+
if (this.initialized) {
|
|
707
|
+
console.log("Initialised");
|
|
708
|
+
clearInterval(interval);
|
|
709
|
+
resolve();
|
|
710
|
+
}
|
|
711
|
+
}, 1e3);
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
};
|
|
715
|
+
|
|
469
716
|
// src/global.ts
|
|
470
717
|
var FatalError = class extends Error {
|
|
471
718
|
constructor(message, err) {
|
|
472
719
|
super(message);
|
|
473
720
|
logger.error(message);
|
|
474
|
-
if (err)
|
|
721
|
+
if (err)
|
|
722
|
+
logger.error(err.message);
|
|
475
723
|
this.name = "FatalError";
|
|
476
724
|
}
|
|
477
725
|
};
|
|
478
|
-
var defaultTokens = [
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
symbol: "strkBTC",
|
|
719
|
-
logo: "https://assets.troves.fi/integrations/tokens/strkbtc.svg",
|
|
720
|
-
address: ContractAddr.from("0x0787150e306e6eae6e3f79dea881770e8bbff2c1b8eb490f969669ee945b3135"),
|
|
721
|
-
decimals: 8,
|
|
722
|
-
coingeckId: void 0,
|
|
723
|
-
displayDecimals: 6,
|
|
724
|
-
priceCheckAmount: 1e-3,
|
|
725
|
-
// 112000 * 0.0001 = $110.2
|
|
726
|
-
priceProxySymbol: "WBTC"
|
|
727
|
-
},
|
|
728
|
-
{
|
|
729
|
-
name: "xstrkBTC",
|
|
730
|
-
symbol: "xstrkBTC",
|
|
731
|
-
logo: "https://assets.troves.fi/integrations/tokens/xstrkbtc.svg",
|
|
732
|
-
address: ContractAddr.from("0x047751b3532fabca89b0f2e35ca1cb45e5a7b11d5e3d3663dfa1f4406b45fd88"),
|
|
733
|
-
decimals: 8,
|
|
734
|
-
coingeckId: void 0,
|
|
735
|
-
displayDecimals: 6,
|
|
736
|
-
priceCheckAmount: 1e-3,
|
|
737
|
-
priceProxySymbol: "WBTC"
|
|
738
|
-
}
|
|
739
|
-
];
|
|
726
|
+
var defaultTokens = [{
|
|
727
|
+
name: "Starknet",
|
|
728
|
+
symbol: "STRK",
|
|
729
|
+
logo: "https://assets.troves.fi/integrations/tokens/strk.svg",
|
|
730
|
+
address: ContractAddr.from("0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d"),
|
|
731
|
+
decimals: 18,
|
|
732
|
+
coingeckId: "starknet",
|
|
733
|
+
displayDecimals: 2,
|
|
734
|
+
priceCheckAmount: 5e3,
|
|
735
|
+
priceMethod: "Avnu",
|
|
736
|
+
indexingType: "indexer" /* INDEXER */
|
|
737
|
+
}, {
|
|
738
|
+
name: "xSTRK",
|
|
739
|
+
symbol: "xSTRK",
|
|
740
|
+
logo: "https://assets.troves.fi/integrations/tokens/xstrk.svg",
|
|
741
|
+
address: ContractAddr.from("0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a"),
|
|
742
|
+
decimals: 18,
|
|
743
|
+
coingeckId: void 0,
|
|
744
|
+
priceCheckAmount: 5e3,
|
|
745
|
+
displayDecimals: 2,
|
|
746
|
+
priceMethod: "Avnu",
|
|
747
|
+
indexingType: "lstScript" /* LST_SCRIPT */
|
|
748
|
+
}, {
|
|
749
|
+
name: "ETH",
|
|
750
|
+
symbol: "ETH",
|
|
751
|
+
logo: "https://assets.troves.fi/integrations/tokens/eth.svg",
|
|
752
|
+
address: ContractAddr.from("0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"),
|
|
753
|
+
decimals: 18,
|
|
754
|
+
coingeckId: void 0,
|
|
755
|
+
priceCheckAmount: 0.1,
|
|
756
|
+
displayDecimals: 6,
|
|
757
|
+
indexingType: "indexer" /* INDEXER */
|
|
758
|
+
}, {
|
|
759
|
+
name: "USDC.e",
|
|
760
|
+
symbol: "USDC.e",
|
|
761
|
+
logo: "https://assets.troves.fi/integrations/tokens/usdc.svg",
|
|
762
|
+
address: ContractAddr.from("0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8"),
|
|
763
|
+
decimals: 6,
|
|
764
|
+
coingeckId: void 0,
|
|
765
|
+
displayDecimals: 2,
|
|
766
|
+
priceCheckAmount: 1e3,
|
|
767
|
+
priceProxySymbol: "USDC",
|
|
768
|
+
indexingType: "pegged" /* PEGGED */
|
|
769
|
+
}, {
|
|
770
|
+
name: "USDC",
|
|
771
|
+
symbol: "USDC",
|
|
772
|
+
logo: "https://assets.troves.fi/integrations/tokens/usdc.svg",
|
|
773
|
+
address: ContractAddr.from("0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb"),
|
|
774
|
+
decimals: 6,
|
|
775
|
+
coingeckId: void 0,
|
|
776
|
+
displayDecimals: 2,
|
|
777
|
+
priceCheckAmount: 1e3,
|
|
778
|
+
indexingType: "indexer" /* INDEXER */
|
|
779
|
+
}, {
|
|
780
|
+
name: "USDT",
|
|
781
|
+
symbol: "USDT",
|
|
782
|
+
logo: "https://assets.troves.fi/integrations/tokens/usdt.svg",
|
|
783
|
+
address: ContractAddr.from("0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8"),
|
|
784
|
+
decimals: 6,
|
|
785
|
+
coingeckId: void 0,
|
|
786
|
+
priceCheckAmount: 1e3,
|
|
787
|
+
displayDecimals: 2,
|
|
788
|
+
indexingType: "indexer" /* INDEXER */
|
|
789
|
+
}, {
|
|
790
|
+
name: "WBTC",
|
|
791
|
+
symbol: "WBTC",
|
|
792
|
+
logo: "https://assets.troves.fi/integrations/tokens/wbtc.svg",
|
|
793
|
+
address: ContractAddr.from("0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
|
|
794
|
+
decimals: 8,
|
|
795
|
+
coingeckId: void 0,
|
|
796
|
+
displayDecimals: 6,
|
|
797
|
+
priceCheckAmount: 1e-3,
|
|
798
|
+
// 112000 * 0.0001 = $110.2
|
|
799
|
+
indexingType: "indexer" /* INDEXER */
|
|
800
|
+
}, {
|
|
801
|
+
name: "tBTC",
|
|
802
|
+
symbol: "tBTC",
|
|
803
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/tbtc.svg",
|
|
804
|
+
address: ContractAddr.from("0x4daa17763b286d1e59b97c283c0b8c949994c361e426a28f743c67bdfe9a32f"),
|
|
805
|
+
decimals: 18,
|
|
806
|
+
coingeckId: void 0,
|
|
807
|
+
displayDecimals: 6,
|
|
808
|
+
priceCheckAmount: 1e-3,
|
|
809
|
+
// 112000 * 0.0001 = $110.2
|
|
810
|
+
priceProxySymbol: "WBTC",
|
|
811
|
+
indexingType: "pegged" /* PEGGED */
|
|
812
|
+
}, {
|
|
813
|
+
name: "solvBTC",
|
|
814
|
+
symbol: "solvBTC",
|
|
815
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/solvbtc.svg",
|
|
816
|
+
address: ContractAddr.from("0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"),
|
|
817
|
+
decimals: 18,
|
|
818
|
+
coingeckId: void 0,
|
|
819
|
+
priceProxySymbol: "WBTC",
|
|
820
|
+
displayDecimals: 6,
|
|
821
|
+
priceCheckAmount: 1e-4,
|
|
822
|
+
// 112000 * 0.0001 = $11.2
|
|
823
|
+
indexingType: "pegged" /* PEGGED */
|
|
824
|
+
}, {
|
|
825
|
+
name: "LBTC",
|
|
826
|
+
symbol: "LBTC",
|
|
827
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/lbtc.svg",
|
|
828
|
+
address: ContractAddr.from("0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4"),
|
|
829
|
+
decimals: 8,
|
|
830
|
+
coingeckId: void 0,
|
|
831
|
+
displayDecimals: 6,
|
|
832
|
+
priceProxySymbol: "WBTC",
|
|
833
|
+
priceCheckAmount: 1e-4,
|
|
834
|
+
// 112000 * 0.0001 = $11.2
|
|
835
|
+
indexingType: "pegged" /* PEGGED */
|
|
836
|
+
}, {
|
|
837
|
+
name: "xWBTC",
|
|
838
|
+
symbol: "xWBTC",
|
|
839
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
|
|
840
|
+
address: ContractAddr.from("0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"),
|
|
841
|
+
decimals: 8,
|
|
842
|
+
coingeckId: void 0,
|
|
843
|
+
displayDecimals: 6,
|
|
844
|
+
priceCheckAmount: 1e-3,
|
|
845
|
+
// 112000 * 0.0001 = $110.2
|
|
846
|
+
priceMethod: "Avnu",
|
|
847
|
+
indexingType: "lstScript" /* LST_SCRIPT */
|
|
848
|
+
}, {
|
|
849
|
+
name: "xsBTC",
|
|
850
|
+
symbol: "xsBTC",
|
|
851
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
|
|
852
|
+
address: ContractAddr.from("0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"),
|
|
853
|
+
decimals: 18,
|
|
854
|
+
coingeckId: void 0,
|
|
855
|
+
displayDecimals: 6,
|
|
856
|
+
priceCheckAmount: 1e-4,
|
|
857
|
+
// 112000 * 0.0001 = $11.2
|
|
858
|
+
priceMethod: "Avnu",
|
|
859
|
+
indexingType: "lstScript" /* LST_SCRIPT */
|
|
860
|
+
}, {
|
|
861
|
+
name: "xtBTC",
|
|
862
|
+
symbol: "xtBTC",
|
|
863
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
|
|
864
|
+
address: ContractAddr.from("0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"),
|
|
865
|
+
decimals: 18,
|
|
866
|
+
coingeckId: void 0,
|
|
867
|
+
displayDecimals: 6,
|
|
868
|
+
priceCheckAmount: 1e-3,
|
|
869
|
+
// 112000 * 0.0001 = $110.2
|
|
870
|
+
priceMethod: "Avnu",
|
|
871
|
+
indexingType: "lstScript" /* LST_SCRIPT */
|
|
872
|
+
}, {
|
|
873
|
+
name: "xLBTC",
|
|
874
|
+
symbol: "xLBTC",
|
|
875
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/xlbtc.svg",
|
|
876
|
+
address: ContractAddr.from("0x07dd3c80de9fcc5545f0cb83678826819c79619ed7992cc06ff81fc67cd2efe0"),
|
|
877
|
+
decimals: 8,
|
|
878
|
+
coingeckId: void 0,
|
|
879
|
+
displayDecimals: 6,
|
|
880
|
+
priceCheckAmount: 1e-4,
|
|
881
|
+
// 112000 * 0.0001 = $11.2
|
|
882
|
+
priceMethod: "Avnu",
|
|
883
|
+
indexingType: "lstScript" /* LST_SCRIPT */
|
|
884
|
+
}, {
|
|
885
|
+
name: "mRe7BTC",
|
|
886
|
+
symbol: "mRe7BTC",
|
|
887
|
+
logo: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3a62ecee-1e58-45d3-9862-3ce90dff1900/logo",
|
|
888
|
+
address: ContractAddr.from("0x4e4fb1a9ca7e84bae609b9dc0078ad7719e49187ae7e425bb47d131710eddac"),
|
|
889
|
+
decimals: 18,
|
|
890
|
+
coingeckId: void 0,
|
|
891
|
+
displayDecimals: 6,
|
|
892
|
+
priceCheckAmount: 1e-4,
|
|
893
|
+
// 112000 * 0.0001 = $11.2
|
|
894
|
+
dontPrice: true,
|
|
895
|
+
indexingType: "ignore" /* IGNORE */
|
|
896
|
+
}, {
|
|
897
|
+
name: "mRe7YIELD",
|
|
898
|
+
symbol: "mRe7YIELD",
|
|
899
|
+
logo: "https://midas.app/assets/mre7-BcOOHm7i.svg",
|
|
900
|
+
address: ContractAddr.from("0x4be8945e61dc3e19ebadd1579a6bd53b262f51ba89e6f8b0c4bc9a7e3c633fc"),
|
|
901
|
+
decimals: 18,
|
|
902
|
+
coingeckId: void 0,
|
|
903
|
+
displayDecimals: 2,
|
|
904
|
+
priceCheckAmount: 100,
|
|
905
|
+
dontPrice: true,
|
|
906
|
+
indexingType: "ignore" /* IGNORE */
|
|
907
|
+
}, {
|
|
908
|
+
name: "fyeWBTC",
|
|
909
|
+
symbol: "fyeWBTC",
|
|
910
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/wbtc.svg",
|
|
911
|
+
address: ContractAddr.from("0x04dd39de0a588f5e1c7a8377e1bef2c49caaee49a11433429d2c48f587b3a492"),
|
|
912
|
+
decimals: 8,
|
|
913
|
+
coingeckId: void 0,
|
|
914
|
+
displayDecimals: 6,
|
|
915
|
+
priceCheckAmount: 1e-3,
|
|
916
|
+
// 112000 * 0.0001 = $110.2
|
|
917
|
+
dontPrice: true,
|
|
918
|
+
indexingType: "ignore" /* IGNORE */
|
|
919
|
+
}, {
|
|
920
|
+
name: "fyETH",
|
|
921
|
+
symbol: "fyETH",
|
|
922
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/eth.svg",
|
|
923
|
+
address: ContractAddr.from("0x050707bC3b8730022F10530C2c6f6b9467644129C50C2868Ad0036c5e4E9e616"),
|
|
924
|
+
decimals: 18,
|
|
925
|
+
coingeckId: void 0,
|
|
926
|
+
displayDecimals: 4,
|
|
927
|
+
priceCheckAmount: 0.1,
|
|
928
|
+
dontPrice: true,
|
|
929
|
+
indexingType: "ignore" /* IGNORE */
|
|
930
|
+
}, {
|
|
931
|
+
name: "fyeUSDC",
|
|
932
|
+
symbol: "fyeUSDC",
|
|
933
|
+
logo: "https://assets.strkfarm.com/integrations/tokens/usdc.svg",
|
|
934
|
+
address: ContractAddr.from("0x07fdcec0cef01294c9c3d52415215949805c77bae8003702a7928fd6d2c36bc1"),
|
|
935
|
+
decimals: 6,
|
|
936
|
+
coingeckId: void 0,
|
|
937
|
+
displayDecimals: 2,
|
|
938
|
+
priceCheckAmount: 100,
|
|
939
|
+
dontPrice: true,
|
|
940
|
+
indexingType: "ignore" /* IGNORE */
|
|
941
|
+
}, {
|
|
942
|
+
name: "strkBTC",
|
|
943
|
+
symbol: "strkBTC",
|
|
944
|
+
logo: "https://assets.troves.fi/integrations/tokens/strkbtc.svg",
|
|
945
|
+
address: ContractAddr.from("0x0787150e306e6eae6e3f79dea881770e8bbff2c1b8eb490f969669ee945b3135"),
|
|
946
|
+
decimals: 8,
|
|
947
|
+
coingeckId: void 0,
|
|
948
|
+
displayDecimals: 6,
|
|
949
|
+
priceCheckAmount: 1e-3,
|
|
950
|
+
// 112000 * 0.0001 = $110.2
|
|
951
|
+
priceMethod: "Avnu",
|
|
952
|
+
priceProxySymbol: "WBTC",
|
|
953
|
+
indexingType: "pegged" /* PEGGED */
|
|
954
|
+
}, {
|
|
955
|
+
name: "xstrkBTC",
|
|
956
|
+
symbol: "xstrkBTC",
|
|
957
|
+
logo: "https://assets.troves.fi/integrations/tokens/xstrkbtc.svg",
|
|
958
|
+
address: ContractAddr.from("0x047751b3532fabca89b0f2e35ca1cb45e5a7b11d5e3d3663dfa1f4406b45fd88"),
|
|
959
|
+
decimals: 8,
|
|
960
|
+
coingeckId: void 0,
|
|
961
|
+
displayDecimals: 6,
|
|
962
|
+
priceCheckAmount: 1e-3,
|
|
963
|
+
priceMethod: "Avnu",
|
|
964
|
+
indexingType: "lstScript" /* LST_SCRIPT */
|
|
965
|
+
}];
|
|
740
966
|
var tokens = defaultTokens;
|
|
741
967
|
var _Global = class _Global {
|
|
742
968
|
static fatalError(message, err) {
|
|
743
969
|
logger.error(message);
|
|
744
970
|
console.error(message, err);
|
|
745
|
-
if (err)
|
|
971
|
+
if (err)
|
|
972
|
+
console.error(err);
|
|
746
973
|
process.exit(1);
|
|
747
974
|
}
|
|
748
975
|
static httpError(url, err, message) {
|
|
@@ -754,9 +981,7 @@ var _Global = class _Global {
|
|
|
754
981
|
}
|
|
755
982
|
static async getTokens() {
|
|
756
983
|
if (tokens.length) return tokens;
|
|
757
|
-
const data = await axios.get(
|
|
758
|
-
"https://assets.troves.fi/integrations/tokens.json"
|
|
759
|
-
);
|
|
984
|
+
const data = await axios.get("https://assets.troves.fi/integrations/tokens.json");
|
|
760
985
|
const tokensData = data.data.content;
|
|
761
986
|
tokensData.forEach((token) => {
|
|
762
987
|
if (!token.tags.includes("AVNU") || !token.tags.includes("Verified")) {
|
|
@@ -769,7 +994,8 @@ var _Global = class _Global {
|
|
|
769
994
|
decimals: token.decimals,
|
|
770
995
|
logo: token.logoUri,
|
|
771
996
|
coingeckId: token.extensions.coingeckoId,
|
|
772
|
-
displayDecimals: 2
|
|
997
|
+
displayDecimals: 2,
|
|
998
|
+
indexingType: "ignore" /* IGNORE */
|
|
773
999
|
});
|
|
774
1000
|
});
|
|
775
1001
|
console.log(tokens);
|
|
@@ -780,25 +1006,25 @@ var _Global = class _Global {
|
|
|
780
1006
|
throw new FatalError(message);
|
|
781
1007
|
}
|
|
782
1008
|
}
|
|
783
|
-
static async
|
|
1009
|
+
static async getTokenInfoFromAddr(addr) {
|
|
784
1010
|
if (tokens.length == defaultTokens.length) {
|
|
785
1011
|
await _Global.getTokens();
|
|
786
1012
|
}
|
|
787
|
-
const token = tokens.find(
|
|
788
|
-
(token2) => token2.name.toLowerCase() === tokenName.toLowerCase()
|
|
789
|
-
);
|
|
1013
|
+
const token = tokens.find((token2) => addr.eq(token2.address));
|
|
790
1014
|
if (!token) {
|
|
791
|
-
throw new FatalError(`Token not found: ${
|
|
1015
|
+
throw new FatalError(`Token not found: ${addr.address}`);
|
|
792
1016
|
}
|
|
793
1017
|
return token;
|
|
794
1018
|
}
|
|
795
|
-
static async
|
|
1019
|
+
static async getTokenInfoFromName(tokenName) {
|
|
796
1020
|
if (tokens.length == defaultTokens.length) {
|
|
797
1021
|
await _Global.getTokens();
|
|
798
1022
|
}
|
|
799
|
-
const token = tokens.find(
|
|
1023
|
+
const token = tokens.find(
|
|
1024
|
+
(token2) => token2.name.toLowerCase() === tokenName.toLowerCase()
|
|
1025
|
+
);
|
|
800
1026
|
if (!token) {
|
|
801
|
-
throw new FatalError(`Token not found: ${
|
|
1027
|
+
throw new FatalError(`Token not found: ${tokenName}`);
|
|
802
1028
|
}
|
|
803
1029
|
return token;
|
|
804
1030
|
}
|
|
@@ -4047,21 +4273,14 @@ var Pricer = class extends PricerBase {
|
|
|
4047
4273
|
}
|
|
4048
4274
|
}
|
|
4049
4275
|
async _getPrice(token) {
|
|
4050
|
-
const
|
|
4051
|
-
|
|
4052
|
-
logger.verbose(`Fetching price of ${token.symbol} using pinned ${pinned}`);
|
|
4053
|
-
try {
|
|
4054
|
-
return await this._tryPriceMethod(token, pinned);
|
|
4055
|
-
} catch (error) {
|
|
4056
|
-
console.warn(`${pinned}: pinned price failed [${token.symbol}]: `, error.message);
|
|
4057
|
-
delete this.methodToUse[token.symbol];
|
|
4058
|
-
}
|
|
4059
|
-
}
|
|
4060
|
-
for (const method of PRICE_METHOD_PRIORITY) {
|
|
4276
|
+
const methodsToTry = this._getMethodsToTry(token);
|
|
4277
|
+
for (const method of methodsToTry) {
|
|
4061
4278
|
logger.verbose(`Fetching price of ${token.symbol} using ${method}`);
|
|
4062
4279
|
try {
|
|
4063
4280
|
const result = await this._tryPriceMethod(token, method);
|
|
4064
|
-
|
|
4281
|
+
if (!token.priceMethod) {
|
|
4282
|
+
this.methodToUse[token.symbol] = method;
|
|
4283
|
+
}
|
|
4065
4284
|
return result;
|
|
4066
4285
|
} catch (error) {
|
|
4067
4286
|
console.warn(`${method}: price err [${token.symbol}]: `, error.message);
|
|
@@ -4069,6 +4288,22 @@ var Pricer = class extends PricerBase {
|
|
|
4069
4288
|
}
|
|
4070
4289
|
throw new FatalError(`Price not found for ${token.symbol}`);
|
|
4071
4290
|
}
|
|
4291
|
+
_getMethodsToTry(token) {
|
|
4292
|
+
const methods = [];
|
|
4293
|
+
if (token.priceMethod) {
|
|
4294
|
+
methods.push(token.priceMethod);
|
|
4295
|
+
}
|
|
4296
|
+
const pinned = this.methodToUse[token.symbol];
|
|
4297
|
+
if (pinned && pinned !== token.priceMethod) {
|
|
4298
|
+
methods.push(pinned);
|
|
4299
|
+
}
|
|
4300
|
+
for (const method of PRICE_METHOD_PRIORITY) {
|
|
4301
|
+
if (!methods.includes(method)) {
|
|
4302
|
+
methods.push(method);
|
|
4303
|
+
}
|
|
4304
|
+
}
|
|
4305
|
+
return methods;
|
|
4306
|
+
}
|
|
4072
4307
|
async _tryPriceMethod(token, method) {
|
|
4073
4308
|
switch (method) {
|
|
4074
4309
|
case "AvnuApi":
|
|
@@ -4284,35 +4519,6 @@ var Web3Number2 = class _Web3Number2 extends _Web3Number {
|
|
|
4284
4519
|
}
|
|
4285
4520
|
};
|
|
4286
4521
|
|
|
4287
|
-
// src/interfaces/lending.ts
|
|
4288
|
-
var MarginType = /* @__PURE__ */ ((MarginType2) => {
|
|
4289
|
-
MarginType2["SHARED"] = "shared";
|
|
4290
|
-
MarginType2["NONE"] = "none";
|
|
4291
|
-
return MarginType2;
|
|
4292
|
-
})(MarginType || {});
|
|
4293
|
-
var ILending = class {
|
|
4294
|
-
constructor(config, metadata) {
|
|
4295
|
-
this.tokens = [];
|
|
4296
|
-
this.initialised = false;
|
|
4297
|
-
this.metadata = metadata;
|
|
4298
|
-
this.config = config;
|
|
4299
|
-
this.init();
|
|
4300
|
-
}
|
|
4301
|
-
/** Wait for initialisation */
|
|
4302
|
-
waitForInitilisation() {
|
|
4303
|
-
return new Promise((resolve, reject) => {
|
|
4304
|
-
const interval = setInterval(() => {
|
|
4305
|
-
logger.verbose(`Waiting for ${this.metadata.name} to initialise`);
|
|
4306
|
-
if (this.initialised) {
|
|
4307
|
-
logger.verbose(`${this.metadata.name} initialised`);
|
|
4308
|
-
clearInterval(interval);
|
|
4309
|
-
resolve();
|
|
4310
|
-
}
|
|
4311
|
-
}, 1e3);
|
|
4312
|
-
});
|
|
4313
|
-
}
|
|
4314
|
-
};
|
|
4315
|
-
|
|
4316
4522
|
// src/modules/zkLend.ts
|
|
4317
4523
|
var _ZkLend = class _ZkLend extends ILending {
|
|
4318
4524
|
constructor(config, pricer) {
|
|
@@ -4343,7 +4549,8 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
4343
4549
|
decimals: pool.token.decimals,
|
|
4344
4550
|
borrowFactor: Web3Number2.fromWei(pool.borrow_factor.value, pool.borrow_factor.decimals),
|
|
4345
4551
|
collareralFactor,
|
|
4346
|
-
displayDecimals: 2
|
|
4552
|
+
displayDecimals: 2,
|
|
4553
|
+
indexingType: "ignore" /* IGNORE */
|
|
4347
4554
|
};
|
|
4348
4555
|
this.tokens.push(token);
|
|
4349
4556
|
});
|
|
@@ -4745,7 +4952,8 @@ var EkuboPricer = class extends PricerBase {
|
|
|
4745
4952
|
constructor(config, tokens2) {
|
|
4746
4953
|
super(config, tokens2);
|
|
4747
4954
|
this.EKUBO_PRICE_FETCHER_ADDRESS = "0x04946fb4ad5237d97bbb1256eba2080c4fe1de156da6a7f83e3b4823bb6d7da1";
|
|
4748
|
-
|
|
4955
|
+
// Updating to new USDC_ADDRESS
|
|
4956
|
+
this.USDC_ADDRESS = "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb";
|
|
4749
4957
|
this.USDC_DECIMALS = 6;
|
|
4750
4958
|
this.contract = new Contract3({
|
|
4751
4959
|
abi: ekubo_price_fethcer_abi_default,
|
|
@@ -4753,8 +4961,8 @@ var EkuboPricer = class extends PricerBase {
|
|
|
4753
4961
|
providerOrAccount: config.provider
|
|
4754
4962
|
});
|
|
4755
4963
|
}
|
|
4756
|
-
div2Power128(
|
|
4757
|
-
return Number(
|
|
4964
|
+
div2Power128(num17) {
|
|
4965
|
+
return Number(num17 * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
|
|
4758
4966
|
}
|
|
4759
4967
|
async getPrice(tokenAddr, blockIdentifier = "latest") {
|
|
4760
4968
|
if (!tokenAddr) {
|
|
@@ -6284,217 +6492,6 @@ var EkuboQuoter = class _EkuboQuoter {
|
|
|
6284
6492
|
}
|
|
6285
6493
|
};
|
|
6286
6494
|
|
|
6287
|
-
// src/interfaces/common.tsx
|
|
6288
|
-
import { BlockTag, RpcProvider as RpcProvider3 } from "starknet";
|
|
6289
|
-
import { Fragment, jsx } from "react/jsx-runtime";
|
|
6290
|
-
var RiskType = /* @__PURE__ */ ((RiskType2) => {
|
|
6291
|
-
RiskType2["MARKET_RISK"] = "Market Risk";
|
|
6292
|
-
RiskType2["IMPERMANENT_LOSS"] = "Impermanent Loss Risk";
|
|
6293
|
-
RiskType2["LIQUIDATION_RISK"] = "Liquidation Risk";
|
|
6294
|
-
RiskType2["LOW_LIQUIDITY_RISK"] = "Low Liquidity Risk";
|
|
6295
|
-
RiskType2["SMART_CONTRACT_RISK"] = "Smart Contract Risk";
|
|
6296
|
-
RiskType2["ORACLE_RISK"] = "Oracle Risk";
|
|
6297
|
-
RiskType2["TECHNICAL_RISK"] = "Technical Risk";
|
|
6298
|
-
RiskType2["COUNTERPARTY_RISK"] = "Counterparty Risk";
|
|
6299
|
-
RiskType2["DEPEG_RISK"] = "Depeg Risk";
|
|
6300
|
-
return RiskType2;
|
|
6301
|
-
})(RiskType || {});
|
|
6302
|
-
var Network = /* @__PURE__ */ ((Network2) => {
|
|
6303
|
-
Network2["mainnet"] = "mainnet";
|
|
6304
|
-
Network2["sepolia"] = "sepolia";
|
|
6305
|
-
Network2["devnet"] = "devnet";
|
|
6306
|
-
return Network2;
|
|
6307
|
-
})(Network || {});
|
|
6308
|
-
var StrategyTag = /* @__PURE__ */ ((StrategyTag3) => {
|
|
6309
|
-
StrategyTag3["META_VAULT"] = "Meta Vaults";
|
|
6310
|
-
StrategyTag3["LEVERED"] = "Maxx";
|
|
6311
|
-
StrategyTag3["AUTOMATED_LP"] = "Ekubo";
|
|
6312
|
-
StrategyTag3["BTC"] = "BTC";
|
|
6313
|
-
return StrategyTag3;
|
|
6314
|
-
})(StrategyTag || {});
|
|
6315
|
-
var VaultType = /* @__PURE__ */ ((VaultType2) => {
|
|
6316
|
-
VaultType2["LOOPING"] = "Looping";
|
|
6317
|
-
VaultType2["META_VAULT"] = "Meta Vault";
|
|
6318
|
-
VaultType2["DELTA_NEUTRAL"] = "Delta Neutral";
|
|
6319
|
-
VaultType2["AUTOMATED_LP"] = "Automated LP";
|
|
6320
|
-
VaultType2["TVA"] = "Troves Value Averaging";
|
|
6321
|
-
return VaultType2;
|
|
6322
|
-
})(VaultType || {});
|
|
6323
|
-
var AuditStatus = /* @__PURE__ */ ((AuditStatus2) => {
|
|
6324
|
-
AuditStatus2["AUDITED"] = "Audited";
|
|
6325
|
-
AuditStatus2["NOT_AUDITED"] = "Not Audited";
|
|
6326
|
-
return AuditStatus2;
|
|
6327
|
-
})(AuditStatus || {});
|
|
6328
|
-
var SourceCodeType = /* @__PURE__ */ ((SourceCodeType2) => {
|
|
6329
|
-
SourceCodeType2["OPEN_SOURCE"] = "Open Source";
|
|
6330
|
-
SourceCodeType2["CLOSED_SOURCE"] = "Closed Source";
|
|
6331
|
-
return SourceCodeType2;
|
|
6332
|
-
})(SourceCodeType || {});
|
|
6333
|
-
var AccessControlType = /* @__PURE__ */ ((AccessControlType2) => {
|
|
6334
|
-
AccessControlType2["MULTISIG_ACCOUNT"] = "Multisig Account";
|
|
6335
|
-
AccessControlType2["STANDARD_ACCOUNT"] = "Standard Account";
|
|
6336
|
-
AccessControlType2["ROLE_BASED_ACCESS"] = "Role Based Access";
|
|
6337
|
-
return AccessControlType2;
|
|
6338
|
-
})(AccessControlType || {});
|
|
6339
|
-
var InstantWithdrawalVault = /* @__PURE__ */ ((InstantWithdrawalVault2) => {
|
|
6340
|
-
InstantWithdrawalVault2["YES"] = "Yes";
|
|
6341
|
-
InstantWithdrawalVault2["NO"] = "No";
|
|
6342
|
-
return InstantWithdrawalVault2;
|
|
6343
|
-
})(InstantWithdrawalVault || {});
|
|
6344
|
-
var FlowChartColors = /* @__PURE__ */ ((FlowChartColors2) => {
|
|
6345
|
-
FlowChartColors2["Green"] = "purple";
|
|
6346
|
-
FlowChartColors2["Blue"] = "#35484f";
|
|
6347
|
-
FlowChartColors2["Purple"] = "#6e53dc";
|
|
6348
|
-
return FlowChartColors2;
|
|
6349
|
-
})(FlowChartColors || {});
|
|
6350
|
-
var StrategyLiveStatus = /* @__PURE__ */ ((StrategyLiveStatus2) => {
|
|
6351
|
-
StrategyLiveStatus2["ACTIVE"] = "Active";
|
|
6352
|
-
StrategyLiveStatus2["NEW"] = "New";
|
|
6353
|
-
StrategyLiveStatus2["COMING_SOON"] = "Coming Soon";
|
|
6354
|
-
StrategyLiveStatus2["DEPRECATED"] = "Deprecated";
|
|
6355
|
-
StrategyLiveStatus2["RETIRED"] = "Retired";
|
|
6356
|
-
StrategyLiveStatus2["HOT"] = "Hot & New \u{1F525}";
|
|
6357
|
-
return StrategyLiveStatus2;
|
|
6358
|
-
})(StrategyLiveStatus || {});
|
|
6359
|
-
function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier = BlockTag.LATEST) {
|
|
6360
|
-
return {
|
|
6361
|
-
provider: new RpcProvider3({
|
|
6362
|
-
nodeUrl: rpcUrl,
|
|
6363
|
-
blockIdentifier
|
|
6364
|
-
// specVersion
|
|
6365
|
-
}),
|
|
6366
|
-
stage: "production",
|
|
6367
|
-
network: "mainnet" /* mainnet */
|
|
6368
|
-
};
|
|
6369
|
-
}
|
|
6370
|
-
var getStrategyTagDesciption = (tag) => {
|
|
6371
|
-
switch (tag) {
|
|
6372
|
-
case "Meta Vaults" /* META_VAULT */:
|
|
6373
|
-
return "A meta vault is a vault that auto allocates funds to multiple vaults based on optimal yield opportunities";
|
|
6374
|
-
case "Maxx" /* LEVERED */:
|
|
6375
|
-
return "Looping vaults on Endur LSTs with leveraged borrowing of STRK or BTC to increase yield (2-4x higher yield than simply staking)";
|
|
6376
|
-
case "Ekubo" /* AUTOMATED_LP */:
|
|
6377
|
-
return "Automated LP vaults on Ekubo that rebalance position automatically, ensuring you earn fees efficiently";
|
|
6378
|
-
case "BTC" /* BTC */:
|
|
6379
|
-
return "BTC linked vaults";
|
|
6380
|
-
}
|
|
6381
|
-
};
|
|
6382
|
-
var getAllStrategyTags = () => {
|
|
6383
|
-
return Object.values(StrategyTag);
|
|
6384
|
-
};
|
|
6385
|
-
var getRiskExplaination = (riskType) => {
|
|
6386
|
-
switch (riskType) {
|
|
6387
|
-
case "Market Risk" /* MARKET_RISK */:
|
|
6388
|
-
return "The risk of the market moving against the position.";
|
|
6389
|
-
case "Impermanent Loss Risk" /* IMPERMANENT_LOSS */:
|
|
6390
|
-
return "The temporary loss of value experienced by liquidity providers in AMMs when asset prices diverge compared to simply holding them.";
|
|
6391
|
-
case "Liquidation Risk" /* LIQUIDATION_RISK */:
|
|
6392
|
-
return "The risk of losing funds due to the position being liquidated.";
|
|
6393
|
-
case "Low Liquidity Risk" /* LOW_LIQUIDITY_RISK */:
|
|
6394
|
-
return "The risk of low liquidity in the pool, which can lead to high slippages or reduced in-abilities to quickly exit the position.";
|
|
6395
|
-
case "Oracle Risk" /* ORACLE_RISK */:
|
|
6396
|
-
return "The risk of the oracle being manipulated or incorrect.";
|
|
6397
|
-
case "Smart Contract Risk" /* SMART_CONTRACT_RISK */:
|
|
6398
|
-
return "The risk of the smart contract being vulnerable to attacks.";
|
|
6399
|
-
case "Technical Risk" /* TECHNICAL_RISK */:
|
|
6400
|
-
return "The risk of technical issues e.g. backend failure.";
|
|
6401
|
-
case "Counterparty Risk" /* COUNTERPARTY_RISK */:
|
|
6402
|
-
return "The risk of the counterparty defaulting e.g. bad debt on lending platforms.";
|
|
6403
|
-
case "Depeg Risk" /* DEPEG_RISK */:
|
|
6404
|
-
return "The risk of a token losing its peg to the underlying asset, leading to potential losses for holders.";
|
|
6405
|
-
}
|
|
6406
|
-
};
|
|
6407
|
-
var getRiskColor = (risk) => {
|
|
6408
|
-
const value = risk.value;
|
|
6409
|
-
if (value <= 2) return "light_green_2";
|
|
6410
|
-
if (value < 3) return "yellow";
|
|
6411
|
-
return "red";
|
|
6412
|
-
};
|
|
6413
|
-
var getNoRiskTags = (risks) => {
|
|
6414
|
-
const noRisks1 = risks.filter((risk) => risk.value === 0).map((risk) => risk.type);
|
|
6415
|
-
const noRisks2 = Object.values(RiskType).filter(
|
|
6416
|
-
(risk) => !risks.map((risk2) => risk2.type).includes(risk)
|
|
6417
|
-
);
|
|
6418
|
-
const mergedUnique = [.../* @__PURE__ */ new Set([...noRisks1, ...noRisks2])];
|
|
6419
|
-
return mergedUnique;
|
|
6420
|
-
};
|
|
6421
|
-
function highlightTextWithLinks(put, highlights) {
|
|
6422
|
-
const escapeRegExp = (text) => text.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
6423
|
-
const pattern = new RegExp(
|
|
6424
|
-
`(${highlights.map((m) => escapeRegExp(m.highlight)).join("|")})`,
|
|
6425
|
-
"gi"
|
|
6426
|
-
);
|
|
6427
|
-
const parts = put.split(pattern);
|
|
6428
|
-
return /* @__PURE__ */ jsx(Fragment, { children: parts.map((part, i) => {
|
|
6429
|
-
const match = highlights.find((m) => m.highlight.toLowerCase() === part.toLowerCase());
|
|
6430
|
-
return match ? /* @__PURE__ */ jsx("a", { href: match.link, target: "_blank", style: { color: "white", background: "rgba(255, 255, 255, 0.04)" }, children: part }, i) : /* @__PURE__ */ jsx("span", { children: part }, i);
|
|
6431
|
-
}) });
|
|
6432
|
-
}
|
|
6433
|
-
var VesuProtocol = {
|
|
6434
|
-
name: "Vesu",
|
|
6435
|
-
logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png"
|
|
6436
|
-
};
|
|
6437
|
-
var AvnuProtocol = {
|
|
6438
|
-
name: "Avnu",
|
|
6439
|
-
logo: "https://static-assets-8zct.onrender.com/integrations/avnu/logo.png"
|
|
6440
|
-
};
|
|
6441
|
-
var EndurProtocol = {
|
|
6442
|
-
name: "Endur",
|
|
6443
|
-
logo: "http://endur.fi/logo.png"
|
|
6444
|
-
};
|
|
6445
|
-
var ExtendedProtocol = {
|
|
6446
|
-
name: "Extended",
|
|
6447
|
-
logo: "https://static-assets-8zct.onrender.com/integrations/extended/extended.svg"
|
|
6448
|
-
};
|
|
6449
|
-
var EkuboProtocol = {
|
|
6450
|
-
name: "Ekubo",
|
|
6451
|
-
logo: "https://app.ekubo.org/favicon.ico"
|
|
6452
|
-
};
|
|
6453
|
-
var NoneProtocol = {
|
|
6454
|
-
name: "-",
|
|
6455
|
-
logo: ""
|
|
6456
|
-
};
|
|
6457
|
-
var VaultProtocol = {
|
|
6458
|
-
name: "Vault",
|
|
6459
|
-
logo: ""
|
|
6460
|
-
};
|
|
6461
|
-
var TrovesProtocol = {
|
|
6462
|
-
name: "Troves",
|
|
6463
|
-
logo: "https://app.troves.fi/favicon.ico"
|
|
6464
|
-
};
|
|
6465
|
-
var Protocols = {
|
|
6466
|
-
NONE: NoneProtocol,
|
|
6467
|
-
VESU: VesuProtocol,
|
|
6468
|
-
ENDUR: EndurProtocol,
|
|
6469
|
-
EXTENDED: ExtendedProtocol,
|
|
6470
|
-
EKUBO: EkuboProtocol,
|
|
6471
|
-
AVNU: AvnuProtocol,
|
|
6472
|
-
VAULT: VaultProtocol,
|
|
6473
|
-
TROVES: TrovesProtocol
|
|
6474
|
-
};
|
|
6475
|
-
var UnwrapLabsCurator = {
|
|
6476
|
-
name: "Unwrap Labs",
|
|
6477
|
-
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
6478
|
-
};
|
|
6479
|
-
|
|
6480
|
-
// src/interfaces/initializable.ts
|
|
6481
|
-
var Initializable = class {
|
|
6482
|
-
constructor() {
|
|
6483
|
-
this.initialized = false;
|
|
6484
|
-
}
|
|
6485
|
-
async waitForInitilisation() {
|
|
6486
|
-
return new Promise((resolve, reject) => {
|
|
6487
|
-
const interval = setInterval(() => {
|
|
6488
|
-
if (this.initialized) {
|
|
6489
|
-
console.log("Initialised");
|
|
6490
|
-
clearInterval(interval);
|
|
6491
|
-
resolve();
|
|
6492
|
-
}
|
|
6493
|
-
}, 1e3);
|
|
6494
|
-
});
|
|
6495
|
-
}
|
|
6496
|
-
};
|
|
6497
|
-
|
|
6498
6495
|
// src/strategies/autoCompounderStrk.ts
|
|
6499
6496
|
import { Contract as Contract6, uint256 as uint2569 } from "starknet";
|
|
6500
6497
|
var AutoCompounderSTRK = class {
|
|
@@ -18031,6 +18028,73 @@ async function binarySearch(lowWei, highWei, callback) {
|
|
|
18031
18028
|
}
|
|
18032
18029
|
return null;
|
|
18033
18030
|
}
|
|
18031
|
+
async function findMaxInputWithSlippage(options) {
|
|
18032
|
+
const {
|
|
18033
|
+
apiGetOutput,
|
|
18034
|
+
maxInput,
|
|
18035
|
+
maxSlippagePercent,
|
|
18036
|
+
tolerance,
|
|
18037
|
+
minInput = 0,
|
|
18038
|
+
referenceAmountMultiplier = 1e-3,
|
|
18039
|
+
referenceRate = 0
|
|
18040
|
+
} = options;
|
|
18041
|
+
let apiCalls = 0;
|
|
18042
|
+
if (!referenceRate && !referenceAmountMultiplier) {
|
|
18043
|
+
throw new Error("One of referenceRate or referenceAmountMultiplier must be provided");
|
|
18044
|
+
}
|
|
18045
|
+
let _referenceRate = referenceRate;
|
|
18046
|
+
if (!_referenceRate) {
|
|
18047
|
+
const smallAmount = maxInput * referenceAmountMultiplier;
|
|
18048
|
+
const referenceOutput = await apiGetOutput(smallAmount);
|
|
18049
|
+
apiCalls++;
|
|
18050
|
+
_referenceRate = referenceOutput / smallAmount;
|
|
18051
|
+
}
|
|
18052
|
+
async function checkSlippage(inputAmount) {
|
|
18053
|
+
const actualOutput = await apiGetOutput(inputAmount);
|
|
18054
|
+
apiCalls++;
|
|
18055
|
+
const expectedOutput = inputAmount * referenceRate;
|
|
18056
|
+
const slippage = (expectedOutput - actualOutput) / expectedOutput;
|
|
18057
|
+
logger.verbose(`findMaxInputWithSlippage::checkSlippage inputAmount: ${inputAmount}, actualOutput: ${actualOutput}, slippage: ${slippage}, maxSlippagePercent: ${maxSlippagePercent}`);
|
|
18058
|
+
return {
|
|
18059
|
+
acceptable: slippage <= maxSlippagePercent,
|
|
18060
|
+
slippage,
|
|
18061
|
+
output: actualOutput
|
|
18062
|
+
};
|
|
18063
|
+
}
|
|
18064
|
+
const maxCheck = await checkSlippage(maxInput);
|
|
18065
|
+
if (maxCheck.acceptable) {
|
|
18066
|
+
return {
|
|
18067
|
+
optimalInput: maxInput,
|
|
18068
|
+
actualOutput: maxCheck.output,
|
|
18069
|
+
actualSlippage: maxCheck.slippage,
|
|
18070
|
+
apiCallsUsed: apiCalls
|
|
18071
|
+
};
|
|
18072
|
+
}
|
|
18073
|
+
let left = minInput;
|
|
18074
|
+
let right = maxInput;
|
|
18075
|
+
let bestInput = minInput;
|
|
18076
|
+
let bestOutput = 0;
|
|
18077
|
+
let bestSlippage = 0;
|
|
18078
|
+
const convergenceThreshold = tolerance * maxInput;
|
|
18079
|
+
while (right - left > convergenceThreshold) {
|
|
18080
|
+
const mid = (left + right) / 2;
|
|
18081
|
+
const midCheck = await checkSlippage(mid);
|
|
18082
|
+
if (midCheck.acceptable) {
|
|
18083
|
+
bestInput = mid;
|
|
18084
|
+
bestOutput = midCheck.output;
|
|
18085
|
+
bestSlippage = midCheck.slippage;
|
|
18086
|
+
left = mid;
|
|
18087
|
+
} else {
|
|
18088
|
+
right = mid;
|
|
18089
|
+
}
|
|
18090
|
+
}
|
|
18091
|
+
return {
|
|
18092
|
+
optimalInput: bestInput,
|
|
18093
|
+
actualOutput: bestOutput,
|
|
18094
|
+
actualSlippage: bestSlippage,
|
|
18095
|
+
apiCallsUsed: apiCalls
|
|
18096
|
+
};
|
|
18097
|
+
}
|
|
18034
18098
|
|
|
18035
18099
|
// src/strategies/ekubo-cl-vault.tsx
|
|
18036
18100
|
import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
@@ -18336,9 +18400,6 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18336
18400
|
async getUserRealizedAPY(blockIdentifier = "latest", sinceBlocks = 6e5) {
|
|
18337
18401
|
throw new Error("getUserRealizedAPY not implemented yet for Ekubo CL Vault strategy");
|
|
18338
18402
|
}
|
|
18339
|
-
async getMaxTVL() {
|
|
18340
|
-
return new Web3Number("0", 18);
|
|
18341
|
-
}
|
|
18342
18403
|
async getUserPositionCards(input) {
|
|
18343
18404
|
const quoteToken = this.metadata.additionalInfo.quoteAsset;
|
|
18344
18405
|
const [userTVL, quotePrice] = await Promise.all([
|
|
@@ -18639,8 +18700,8 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18639
18700
|
upperTick: _EkuboCLVault.i129ToNumber(result.bounds.upper)
|
|
18640
18701
|
};
|
|
18641
18702
|
}
|
|
18642
|
-
static div2Power128(
|
|
18643
|
-
return Number(BigInt(
|
|
18703
|
+
static div2Power128(num17) {
|
|
18704
|
+
return Number(BigInt(num17.toString()) * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
|
|
18644
18705
|
}
|
|
18645
18706
|
static priceToTick(price, isRoundDown, tickSpacing) {
|
|
18646
18707
|
const value = isRoundDown ? Math.floor(Math.log(price) / Math.log(1.000001)) : Math.ceil(Math.log(price) / Math.log(1.000001));
|
|
@@ -30267,7 +30328,8 @@ var vesuPrimeUSDC = {
|
|
|
30267
30328
|
name: "Vesu Prime USDC",
|
|
30268
30329
|
decimals: 18,
|
|
30269
30330
|
logo: usdc.logo,
|
|
30270
|
-
displayDecimals: 2
|
|
30331
|
+
displayDecimals: 2,
|
|
30332
|
+
indexingType: "ignore" /* IGNORE */
|
|
30271
30333
|
};
|
|
30272
30334
|
var strk = Global.getDefaultTokens().find((t) => t.symbol === "STRK");
|
|
30273
30335
|
function getYoloVaultErc4626Config(mainToken, secondaryToken) {
|
|
@@ -37259,6 +37321,12 @@ var SVKStrategy = class extends BaseStrategy {
|
|
|
37259
37321
|
const maxWithdrawables = await Promise.all(this.metadata.additionalInfo.adapters.map((adapter) => adapter.adapter.maxWithdraw()));
|
|
37260
37322
|
return maxWithdrawables;
|
|
37261
37323
|
}
|
|
37324
|
+
async getMaxTVL() {
|
|
37325
|
+
const lstToken = this.asset();
|
|
37326
|
+
const depositLimit = await this.contract.call("get_deposit_limit", []);
|
|
37327
|
+
const limitBN = uint25622.uint256ToBN(depositLimit);
|
|
37328
|
+
return Web3Number.fromWei(limitBN.toString(), lstToken.decimals);
|
|
37329
|
+
}
|
|
37262
37330
|
};
|
|
37263
37331
|
|
|
37264
37332
|
// src/strategies/universal-strategy.tsx
|
|
@@ -38129,7 +38197,6 @@ var getUniversalRisk = () => ({
|
|
|
38129
38197
|
var createUniversalSettings = (tokenSymbol, maxTVLDecimals) => {
|
|
38130
38198
|
const isUSDT = tokenSymbol === "USDT";
|
|
38131
38199
|
return {
|
|
38132
|
-
maxTVL: Web3Number.fromWei(0, maxTVLDecimals),
|
|
38133
38200
|
isAudited: true,
|
|
38134
38201
|
liveStatus: isUSDT ? "Retired" /* RETIRED */ : "Active" /* ACTIVE */,
|
|
38135
38202
|
isPaused: isUSDT,
|
|
@@ -38271,7 +38338,7 @@ var UniversalStrategies = [
|
|
|
38271
38338
|
];
|
|
38272
38339
|
|
|
38273
38340
|
// src/strategies/universal-lst-muliplier-strategy.tsx
|
|
38274
|
-
import { Contract as Contract18, uint256 as uint25624 } from "starknet";
|
|
38341
|
+
import { Contract as Contract18, num as num14, uint256 as uint25624 } from "starknet";
|
|
38275
38342
|
|
|
38276
38343
|
// src/strategies/universal-adapters/adapter-optimizer.ts
|
|
38277
38344
|
var AdapterOptimizer = class {
|
|
@@ -38753,41 +38820,270 @@ var UniversalLstMultiplierStrategy = class _UniversalLstMultiplierStrategy exten
|
|
|
38753
38820
|
}
|
|
38754
38821
|
async netAPY() {
|
|
38755
38822
|
const unusedBalance = await this.getUnusedBalance();
|
|
38756
|
-
const
|
|
38757
|
-
|
|
38758
|
-
|
|
38823
|
+
const maxNewDeposits = await this.maxNewDeposits({
|
|
38824
|
+
isAPYComputation: true
|
|
38825
|
+
});
|
|
38826
|
+
const lstAPY = await this.getLSTAPR(
|
|
38827
|
+
this.getLSTUnderlyingTokenInfo().address
|
|
38828
|
+
);
|
|
38829
|
+
if (maxNewDeposits * 1.5 < unusedBalance.amount.toNumber()) {
|
|
38759
38830
|
logger.verbose(
|
|
38760
38831
|
`${this.getTag()}::netAPY: unused balance is > max servicable from loan, lstAPY: ${lstAPY}`
|
|
38761
38832
|
);
|
|
38762
|
-
const
|
|
38833
|
+
const { positions, baseAPYs, rewardAPYs } = await this.getVesuAPYs();
|
|
38834
|
+
const unusedBalanceAPY = await this.getUnusedBalanceAPY();
|
|
38835
|
+
baseAPYs.push(...[unusedBalanceAPY.apy]);
|
|
38836
|
+
rewardAPYs.push(0);
|
|
38837
|
+
const weights = positions.map((p, index) => p.usdValue * (index % 2 == 0 ? 1 : -1));
|
|
38838
|
+
weights.push(unusedBalanceAPY.weight);
|
|
38839
|
+
const prevAUM = await this.getPrevAUM();
|
|
38840
|
+
const price = await this.pricer.getPrice(this.metadata.depositTokens[0].symbol);
|
|
38841
|
+
const prevAUMUSD = prevAUM.multipliedBy(price.price);
|
|
38842
|
+
const output = await this.returnNetAPY(baseAPYs, rewardAPYs, weights, prevAUMUSD);
|
|
38763
38843
|
output.splits.push({ apy: lstAPY, id: "lst_apy" });
|
|
38764
38844
|
return output;
|
|
38765
38845
|
} else {
|
|
38766
38846
|
logger.verbose(
|
|
38767
38847
|
`${this.getTag()}::netAPY: we can take more deposits, use theoretical max APY`
|
|
38768
38848
|
);
|
|
38769
|
-
const
|
|
38849
|
+
const { positions, baseAPYs, rewardAPYs } = await this.getVesuAPYs();
|
|
38850
|
+
const weights = positions.map(
|
|
38851
|
+
(p, index) => p.usdValue * (index % 2 == 0 ? 1 : -1)
|
|
38852
|
+
);
|
|
38853
|
+
const aum = weights.reduce((acc, curr) => acc + curr, 0);
|
|
38854
|
+
const output = await this.returnNetAPY(
|
|
38855
|
+
baseAPYs,
|
|
38856
|
+
rewardAPYs,
|
|
38857
|
+
weights,
|
|
38858
|
+
new Web3Number(
|
|
38859
|
+
aum.toFixed(9),
|
|
38860
|
+
this.getLSTUnderlyingTokenInfo().decimals
|
|
38861
|
+
)
|
|
38862
|
+
);
|
|
38770
38863
|
output.splits.push({ apy: lstAPY, id: "lst_apy" });
|
|
38771
38864
|
return output;
|
|
38772
38865
|
}
|
|
38773
38866
|
}
|
|
38774
|
-
async
|
|
38775
|
-
|
|
38776
|
-
|
|
38777
|
-
|
|
38778
|
-
|
|
38867
|
+
async getVesuAPYs() {
|
|
38868
|
+
const vesuAdapters = this.getVesuAdapters();
|
|
38869
|
+
const allVesuPools = await VesuAdapter.getVesuPools();
|
|
38870
|
+
const pools = vesuAdapters.map((vesuAdapter) => {
|
|
38871
|
+
return allVesuPools.pools.find((p) => vesuAdapter.config.poolId.eqString(num14.getHexString(p.id)));
|
|
38872
|
+
});
|
|
38873
|
+
logger.verbose(`${this.metadata.name}::netAPY: vesu-pools: ${JSON.stringify(pools)}`);
|
|
38874
|
+
if (pools.some((p) => !p)) {
|
|
38875
|
+
throw new Error("Pool not found");
|
|
38779
38876
|
}
|
|
38780
|
-
|
|
38877
|
+
const positions = await this.getVesuPositions();
|
|
38878
|
+
logger.verbose(`${this.metadata.name}::netAPY: positions: ${JSON.stringify(positions)}`);
|
|
38879
|
+
const baseAPYs = [];
|
|
38880
|
+
const rewardAPYs = [];
|
|
38881
|
+
for (const [index, pool] of pools.entries()) {
|
|
38882
|
+
const vesuAdapter = vesuAdapters[index];
|
|
38883
|
+
const collateralAsset = pool.assets.find((a) => a.symbol.toLowerCase() === vesuAdapter.config.collateral.symbol.toLowerCase())?.stats;
|
|
38884
|
+
const debtAsset = pool.assets.find((a) => a.symbol.toLowerCase() === vesuAdapter.config.debt.symbol.toLowerCase())?.stats;
|
|
38885
|
+
const supplyApy = Number(collateralAsset.supplyApy.value || 0) / 1e18;
|
|
38886
|
+
const lstAPY = await this.getLSTAPR(vesuAdapter.config.collateral.address);
|
|
38887
|
+
logger.verbose(`${this.metadata.name}::netAPY: ${vesuAdapter.config.collateral.symbol} LST APR from Endur: ${lstAPY}`);
|
|
38888
|
+
baseAPYs.push(...[supplyApy + lstAPY, Number(debtAsset.borrowApr.value) / 1e18]);
|
|
38889
|
+
rewardAPYs.push(...[Number(collateralAsset.defiSpringSupplyApr?.value || "0") / 1e18, 0]);
|
|
38890
|
+
}
|
|
38891
|
+
logger.verbose(`${this.metadata.name}::netAPY: baseAPYs: ${JSON.stringify(baseAPYs)}`);
|
|
38892
|
+
logger.verbose(`${this.metadata.name}::netAPY: rewardAPYs: ${JSON.stringify(rewardAPYs)}`);
|
|
38893
|
+
assert(baseAPYs.length == positions.length, "APYs and positions length mismatch");
|
|
38894
|
+
return {
|
|
38895
|
+
baseAPYs,
|
|
38896
|
+
rewardAPYs,
|
|
38897
|
+
positions
|
|
38898
|
+
};
|
|
38899
|
+
}
|
|
38900
|
+
async returnNetAPY(baseAPYs, rewardAPYs, weights, prevAUMUSD) {
|
|
38901
|
+
if (weights.every((p) => p == 0)) {
|
|
38902
|
+
return {
|
|
38903
|
+
net: 0,
|
|
38904
|
+
splits: [{
|
|
38905
|
+
apy: 0,
|
|
38906
|
+
id: "base"
|
|
38907
|
+
}, {
|
|
38908
|
+
apy: 0,
|
|
38909
|
+
id: "defispring"
|
|
38910
|
+
}]
|
|
38911
|
+
};
|
|
38912
|
+
}
|
|
38913
|
+
const baseAPY = this.computeAPY(baseAPYs, weights, prevAUMUSD);
|
|
38914
|
+
const rewardAPY = this.computeAPY(rewardAPYs, weights, prevAUMUSD);
|
|
38915
|
+
const netAPY = baseAPY + rewardAPY;
|
|
38916
|
+
logger.verbose(`${this.metadata.name}::netAPY: net: ${netAPY}, baseAPY: ${baseAPY}, rewardAPY: ${rewardAPY}`);
|
|
38917
|
+
return {
|
|
38918
|
+
net: netAPY,
|
|
38919
|
+
splits: [{
|
|
38920
|
+
apy: baseAPY,
|
|
38921
|
+
id: "base"
|
|
38922
|
+
}, {
|
|
38923
|
+
apy: rewardAPY,
|
|
38924
|
+
id: "defispring"
|
|
38925
|
+
}]
|
|
38926
|
+
};
|
|
38781
38927
|
}
|
|
38782
38928
|
async getUnusedBalanceAPY() {
|
|
38783
38929
|
const unusedBalance = await this.getUnusedBalance();
|
|
38784
|
-
const
|
|
38930
|
+
const vesuAdapter = this.getVesuSameTokenAdapter();
|
|
38931
|
+
const underlying = vesuAdapter.config.debt;
|
|
38785
38932
|
const lstAPY = await this.getLSTAPR(underlying.address);
|
|
38786
38933
|
return {
|
|
38787
38934
|
apy: lstAPY,
|
|
38788
38935
|
weight: unusedBalance.usdValue
|
|
38789
38936
|
};
|
|
38790
38937
|
}
|
|
38938
|
+
computeAPY(apys, weights, currentAUM) {
|
|
38939
|
+
assert(apys.length === weights.length, "APYs and weights length mismatch");
|
|
38940
|
+
const weightedSum = apys.reduce((acc, apy, i) => acc + apy * weights[i], 0);
|
|
38941
|
+
logger.verbose(`${this.getTag()} computeAPY: apys: ${JSON.stringify(apys)}, weights: ${JSON.stringify(weights)}, weightedSum: ${weightedSum}, currentAUM: ${currentAUM}`);
|
|
38942
|
+
return weightedSum / currentAUM.toNumber();
|
|
38943
|
+
}
|
|
38944
|
+
getVesuAdapters() {
|
|
38945
|
+
const multiply = this.getVesuMultiplyAdapters();
|
|
38946
|
+
return multiply.map((m) => m._vesuAdapter);
|
|
38947
|
+
}
|
|
38948
|
+
async getVesuPositions(blockNumber = "latest") {
|
|
38949
|
+
const adapters = this.getVesuAdapters();
|
|
38950
|
+
const positions = [];
|
|
38951
|
+
for (const adapter of adapters) {
|
|
38952
|
+
positions.push(...await adapter.getPositions(this.config, blockNumber));
|
|
38953
|
+
}
|
|
38954
|
+
return positions;
|
|
38955
|
+
}
|
|
38956
|
+
async getUnusedBalance() {
|
|
38957
|
+
const balance = await new ERC20(this.config).balanceOf(this.asset().address, this.metadata.additionalInfo.vaultAllocator, this.asset().decimals);
|
|
38958
|
+
const price = await this.pricer.getPrice(this.metadata.depositTokens[0].symbol);
|
|
38959
|
+
const usdValue = Number(balance.toFixed(6)) * price.price;
|
|
38960
|
+
return {
|
|
38961
|
+
tokenInfo: this.asset(),
|
|
38962
|
+
amount: balance,
|
|
38963
|
+
usdValue
|
|
38964
|
+
};
|
|
38965
|
+
}
|
|
38966
|
+
async maxNewDeposits(params = { isAPYComputation: false }) {
|
|
38967
|
+
const maxBorrowableAmounts = await this.getMaxBorrowableAmount(params);
|
|
38968
|
+
let numerator = 0;
|
|
38969
|
+
for (let adapter of this.getVesuAdapters()) {
|
|
38970
|
+
const maxBorrowableAmountInfo = maxBorrowableAmounts.maxBorrowables.find(
|
|
38971
|
+
(b) => b.borrowableAsset.address.eq(adapter.config.debt.address)
|
|
38972
|
+
);
|
|
38973
|
+
if (!maxBorrowableAmountInfo || !maxBorrowableAmountInfo?.amount) {
|
|
38974
|
+
throw new Error(
|
|
38975
|
+
`Max borrowable amount not found for adapter: ${adapter.config.debt.symbol}`
|
|
38976
|
+
);
|
|
38977
|
+
}
|
|
38978
|
+
numerator += this.metadata.additionalInfo.targetHealthFactor * maxBorrowableAmountInfo.amount.toNumber() / maxBorrowableAmountInfo.ltv;
|
|
38979
|
+
}
|
|
38980
|
+
return numerator - maxBorrowableAmounts.netMaxBorrowableAmount.toNumber();
|
|
38981
|
+
}
|
|
38982
|
+
async getMaxBorrowableAmount(params = { isAPYComputation: false }) {
|
|
38983
|
+
const vesuAdapters = this.getVesuAdapters();
|
|
38984
|
+
let netMaxBorrowableAmount = Web3Number.fromWei("0", this.getLSTUnderlyingTokenInfo().decimals);
|
|
38985
|
+
const maxBorrowables = [];
|
|
38986
|
+
for (const vesuAdapter of vesuAdapters) {
|
|
38987
|
+
const output = await this.getMaxBorrowableAmountByVesuAdapter(
|
|
38988
|
+
vesuAdapter,
|
|
38989
|
+
params.isAPYComputation
|
|
38990
|
+
);
|
|
38991
|
+
const ltv = await vesuAdapter.getLTVConfig(this.config);
|
|
38992
|
+
maxBorrowables.push({ ...output, ltv, poolId: vesuAdapter.config.poolId });
|
|
38993
|
+
}
|
|
38994
|
+
maxBorrowables.sort((a, b) => b.amount.toNumber() - a.amount.toNumber());
|
|
38995
|
+
netMaxBorrowableAmount = maxBorrowables.reduce(
|
|
38996
|
+
(acc, curr) => acc.plus(curr.amount),
|
|
38997
|
+
Web3Number.fromWei("0", this.getLSTUnderlyingTokenInfo().decimals)
|
|
38998
|
+
);
|
|
38999
|
+
return { netMaxBorrowableAmount, maxBorrowables };
|
|
39000
|
+
}
|
|
39001
|
+
async getMaxSwappableWithMaxSlippage(fromToken, toToken, maxSlippage, maxAmount) {
|
|
39002
|
+
const output = await findMaxInputWithSlippage({
|
|
39003
|
+
apiGetOutput: async (inputAmount) => {
|
|
39004
|
+
const ekuboQuoter = new EkuboQuoter(this.config, this.pricer);
|
|
39005
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
39006
|
+
const quote = await ekuboQuoter.getQuoteExactInput(
|
|
39007
|
+
fromToken.address.address,
|
|
39008
|
+
toToken.address.address,
|
|
39009
|
+
new Web3Number(inputAmount.toFixed(9), fromToken.decimals)
|
|
39010
|
+
);
|
|
39011
|
+
return Web3Number.fromWei(
|
|
39012
|
+
quote.total_calculated.toString(),
|
|
39013
|
+
toToken.decimals
|
|
39014
|
+
).toNumber();
|
|
39015
|
+
},
|
|
39016
|
+
maxInput: maxAmount.toNumber(),
|
|
39017
|
+
maxSlippagePercent: maxSlippage,
|
|
39018
|
+
tolerance: 1e-3,
|
|
39019
|
+
referenceRate: 1
|
|
39020
|
+
});
|
|
39021
|
+
return new Web3Number(output.optimalInput, fromToken.decimals);
|
|
39022
|
+
}
|
|
39023
|
+
async getMaxBorrowableAmountByVesuAdapter(vesuAdapter, isAPYComputation) {
|
|
39024
|
+
const lstAPY = await this.getLSTAPR(
|
|
39025
|
+
this.getLSTUnderlyingTokenInfo().address
|
|
39026
|
+
);
|
|
39027
|
+
const maxInterestRate = lstAPY * 0.8;
|
|
39028
|
+
const { maxDebtToHave: maxBorrowableAmount, currentDebt } = await vesuAdapter.getMaxBorrowableByInterestRate(
|
|
39029
|
+
this.config,
|
|
39030
|
+
vesuAdapter.config.debt,
|
|
39031
|
+
maxInterestRate
|
|
39032
|
+
);
|
|
39033
|
+
const debtCap = await vesuAdapter.getDebtCap(this.config);
|
|
39034
|
+
if (currentDebt.gte(debtCap)) {
|
|
39035
|
+
return {
|
|
39036
|
+
amount: Web3Number.fromWei("0", vesuAdapter.config.debt.decimals),
|
|
39037
|
+
dexSwappableAmount: Web3Number.fromWei(
|
|
39038
|
+
"0",
|
|
39039
|
+
vesuAdapter.config.debt.decimals
|
|
39040
|
+
),
|
|
39041
|
+
maxBorrowableAmount: Web3Number.fromWei(
|
|
39042
|
+
"0",
|
|
39043
|
+
vesuAdapter.config.debt.decimals
|
|
39044
|
+
),
|
|
39045
|
+
borrowableAsset: vesuAdapter.config.debt
|
|
39046
|
+
};
|
|
39047
|
+
}
|
|
39048
|
+
const availableToBorrow = debtCap.minus(currentDebt);
|
|
39049
|
+
const maxBorrowable = maxBorrowableAmount.minimum(availableToBorrow).multipliedBy(0.999);
|
|
39050
|
+
if (vesuAdapter.config.debt.address.eq(
|
|
39051
|
+
this.getLSTUnderlyingTokenInfo().address
|
|
39052
|
+
) || isAPYComputation) {
|
|
39053
|
+
return {
|
|
39054
|
+
amount: maxBorrowable,
|
|
39055
|
+
dexSwappableAmount: maxBorrowable,
|
|
39056
|
+
maxBorrowableAmount: maxBorrowable,
|
|
39057
|
+
borrowableAsset: vesuAdapter.config.debt
|
|
39058
|
+
};
|
|
39059
|
+
}
|
|
39060
|
+
try {
|
|
39061
|
+
const maxSwappable = await this.getMaxSwappableWithMaxSlippage(
|
|
39062
|
+
vesuAdapter.config.debt,
|
|
39063
|
+
this.getLSTUnderlyingTokenInfo(),
|
|
39064
|
+
2e-4,
|
|
39065
|
+
maxBorrowable
|
|
39066
|
+
);
|
|
39067
|
+
return {
|
|
39068
|
+
amount: maxBorrowable.minimum(maxSwappable),
|
|
39069
|
+
dexSwappableAmount: maxSwappable,
|
|
39070
|
+
maxBorrowableAmount: maxBorrowable,
|
|
39071
|
+
borrowableAsset: vesuAdapter.config.debt
|
|
39072
|
+
};
|
|
39073
|
+
} catch (error) {
|
|
39074
|
+
logger.warn(`${this.getTag()}: Failed to get max swappable: ${error}`);
|
|
39075
|
+
const maxSwappable = Web3Number.fromWei(
|
|
39076
|
+
"0",
|
|
39077
|
+
vesuAdapter.config.debt.decimals
|
|
39078
|
+
);
|
|
39079
|
+
return {
|
|
39080
|
+
amount: maxBorrowable.minimum(maxSwappable),
|
|
39081
|
+
dexSwappableAmount: maxSwappable,
|
|
39082
|
+
maxBorrowableAmount: maxBorrowable,
|
|
39083
|
+
borrowableAsset: vesuAdapter.config.debt
|
|
39084
|
+
};
|
|
39085
|
+
}
|
|
39086
|
+
}
|
|
38791
39087
|
async getAUM(unrealizedAUM = false) {
|
|
38792
39088
|
const underlying = this.asset();
|
|
38793
39089
|
assert(underlying.symbol.startsWith("x"), "Underlying is not an LST of Endur");
|
|
@@ -39150,6 +39446,9 @@ var hyperxWBTC = {
|
|
|
39150
39446
|
borrowable_assets: [{
|
|
39151
39447
|
tokenInfo: Global.getDefaultTokens().find((token) => token.symbol === "WBTC"),
|
|
39152
39448
|
poolId: VesuPools.Re7xBTC
|
|
39449
|
+
}, {
|
|
39450
|
+
tokenInfo: Global.getDefaultTokens().find((token) => token.symbol === "WBTC"),
|
|
39451
|
+
poolId: VesuPools.Prime
|
|
39153
39452
|
}],
|
|
39154
39453
|
underlyingToken: Global.getDefaultTokens().find((token) => token.symbol === "WBTC"),
|
|
39155
39454
|
quoteAmountToFetchPrice: new Web3Number("0.001", Global.getDefaultTokens().find((token) => token.symbol === "WBTC").decimals),
|
|
@@ -39219,29 +39518,11 @@ function getInvestmentSteps(lstSymbol, underlyingSymbol) {
|
|
|
39219
39518
|
`If required, adjust leverage or re-allocate assets within LST pool on Vesu to optimize yield`
|
|
39220
39519
|
];
|
|
39221
39520
|
}
|
|
39222
|
-
function getMaxTVL(lstSymbol) {
|
|
39223
|
-
const lstMaxTVLs = {
|
|
39224
|
-
xWBTC: 5,
|
|
39225
|
-
xLBTC: 5,
|
|
39226
|
-
xtBTC: 5,
|
|
39227
|
-
xsBTC: 5,
|
|
39228
|
-
xSTRK: 7e6
|
|
39229
|
-
};
|
|
39230
|
-
const maxTVLValue = lstMaxTVLs[lstSymbol] || 0;
|
|
39231
|
-
const token = Global.getDefaultTokens().find(
|
|
39232
|
-
(token2) => token2.symbol === lstSymbol
|
|
39233
|
-
);
|
|
39234
|
-
if (!token) {
|
|
39235
|
-
return Web3Number.fromWei(0, 18);
|
|
39236
|
-
}
|
|
39237
|
-
return Web3Number.fromWei(maxTVLValue, token.decimals);
|
|
39238
|
-
}
|
|
39239
39521
|
function createHyperLSTSettings(lstSymbol, underlyingSymbol) {
|
|
39240
39522
|
const depositToken = Global.getDefaultTokens().find(
|
|
39241
39523
|
(token) => token.symbol === lstSymbol
|
|
39242
39524
|
);
|
|
39243
39525
|
return {
|
|
39244
|
-
maxTVL: getMaxTVL(lstSymbol),
|
|
39245
39526
|
isPaused: false,
|
|
39246
39527
|
liveStatus: "Hot & New \u{1F525}" /* HOT */,
|
|
39247
39528
|
isAudited: true,
|
|
@@ -39280,8 +39561,7 @@ var HYPER_LST_SECURITY = {
|
|
|
39280
39561
|
},
|
|
39281
39562
|
accessControl: {
|
|
39282
39563
|
type: "Standard Account" /* STANDARD_ACCOUNT */,
|
|
39283
|
-
addresses: [ContractAddr.from("
|
|
39284
|
-
timeLock: "2 Days"
|
|
39564
|
+
addresses: [ContractAddr.from("0x03495dd1e4838aa06666aac236036d86e81a6553e222fc02e70c2cbc0062e8d0")]
|
|
39285
39565
|
}
|
|
39286
39566
|
};
|
|
39287
39567
|
var HYPER_LST_REDEMPTION_INFO = {
|
|
@@ -39358,7 +39638,7 @@ var HyperLSTStrategies = [
|
|
|
39358
39638
|
];
|
|
39359
39639
|
|
|
39360
39640
|
// src/strategies/token-boosted-xstrk-carry-strategy.tsx
|
|
39361
|
-
import { uint256 as uint25625, num as
|
|
39641
|
+
import { uint256 as uint25625, num as num15 } from "starknet";
|
|
39362
39642
|
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
39363
39643
|
var BoostedxSTRKCarryStrategy = class _BoostedxSTRKCarryStrategy extends SVKStrategy {
|
|
39364
39644
|
constructor(config, pricer, metadata) {
|
|
@@ -39622,7 +39902,7 @@ var BoostedxSTRKCarryStrategy = class _BoostedxSTRKCarryStrategy extends SVKStra
|
|
|
39622
39902
|
);
|
|
39623
39903
|
const allVesuPools = await VesuAdapter.getVesuPools();
|
|
39624
39904
|
const pool = allVesuPools.pools.find(
|
|
39625
|
-
(p) => vesuAdapter.config.poolId.eqString(
|
|
39905
|
+
(p) => vesuAdapter.config.poolId.eqString(num15.getHexString(p.id))
|
|
39626
39906
|
);
|
|
39627
39907
|
if (!pool) {
|
|
39628
39908
|
throw new Error(
|
|
@@ -40234,7 +40514,6 @@ function getStrategySettings2(settings, meta) {
|
|
|
40234
40514
|
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
40235
40515
|
},
|
|
40236
40516
|
settings: {
|
|
40237
|
-
maxTVL: Web3Number.fromWei(0, depositToken.decimals),
|
|
40238
40517
|
liveStatus: "Hot & New \u{1F525}" /* HOT */,
|
|
40239
40518
|
isPaused: false,
|
|
40240
40519
|
isAudited: true,
|
|
@@ -40810,7 +41089,7 @@ var PricerRedis = class extends Pricer {
|
|
|
40810
41089
|
|
|
40811
41090
|
// src/node/deployer.ts
|
|
40812
41091
|
import assert2 from "assert";
|
|
40813
|
-
import { Deployer as SnDeployer, TransactionExecutionStatus, constants as constants3, extractContractHashes, json, num as
|
|
41092
|
+
import { Deployer as SnDeployer, TransactionExecutionStatus, constants as constants3, extractContractHashes, json, num as num16 } from "starknet";
|
|
40814
41093
|
import { readFileSync as readFileSync2, existsSync, writeFileSync as writeFileSync2 } from "fs";
|
|
40815
41094
|
|
|
40816
41095
|
// src/utils/store.ts
|
|
@@ -41092,7 +41371,7 @@ async function prepareMultiDeployContracts(contracts, config, acc) {
|
|
|
41092
41371
|
}
|
|
41093
41372
|
async function executeDeployCalls(contractsInfo, acc, provider2) {
|
|
41094
41373
|
for (let contractInfo of contractsInfo) {
|
|
41095
|
-
assert2(
|
|
41374
|
+
assert2(num16.toHexString(contractInfo.call.contractAddress) == num16.toHexString(constants3.UDC.ADDRESS), "Must be pointed at UDC address");
|
|
41096
41375
|
}
|
|
41097
41376
|
const allCalls = contractsInfo.map((info) => info.call);
|
|
41098
41377
|
await executeTransactions(allCalls, acc, provider2, `Deploying contracts: ${contractsInfo.map((info) => info.contract_name).join(", ")}`);
|
|
@@ -41232,6 +41511,7 @@ export {
|
|
|
41232
41511
|
TRANSFER_SANITIZER,
|
|
41233
41512
|
TelegramGroupNotif,
|
|
41234
41513
|
TelegramNotif,
|
|
41514
|
+
TokenIndexingType,
|
|
41235
41515
|
TokenMarketData,
|
|
41236
41516
|
TokenTransferAdapter,
|
|
41237
41517
|
UNIVERSAL_ADAPTER_IDS,
|