@strkfarm/sdk 1.0.59 → 1.0.60
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.browser.global.js +241 -38
- package/dist/index.browser.mjs +232 -29
- package/dist/index.d.ts +20 -1
- package/dist/index.js +232 -29
- package/dist/index.mjs +232 -29
- package/package.json +1 -1
- package/src/interfaces/common.tsx +13 -1
- package/src/strategies/universal-adapters/adapter-utils.ts +1 -1
- package/src/strategies/universal-adapters/common-adapter.ts +31 -0
- package/src/strategies/{universal-strategy.ts → universal-strategy.tsx} +225 -27
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ContractAddr, Web3Number } from "@/dataTypes";
|
|
2
2
|
import { BaseStrategy, SingleActionAmount, SingleTokenInfo } from "./base-strategy";
|
|
3
3
|
import { PricerBase } from "@/modules/pricerBase";
|
|
4
|
-
import { getNoRiskTags, IConfig, IStrategyMetadata, Protocols, RiskFactor, RiskType, VaultPosition } from "@/interfaces";
|
|
4
|
+
import { FAQ, getNoRiskTags, IConfig, IStrategyMetadata, Protocols, RiskFactor, RiskType, VaultPosition } from "@/interfaces";
|
|
5
5
|
import { Call, CallData, Contract, num, uint256 } from "starknet";
|
|
6
6
|
import { VesuRebalanceSettings } from "./vesu-rebalance";
|
|
7
7
|
import { assert, LeafData, logger, StandardMerkleTree } from "@/utils";
|
|
@@ -12,6 +12,7 @@ import { Global } from "@/global";
|
|
|
12
12
|
import { ERC20 } from "@/modules";
|
|
13
13
|
|
|
14
14
|
export interface UniversalStrategySettings {
|
|
15
|
+
vaultAddress: ContractAddr,
|
|
15
16
|
manager: ContractAddr,
|
|
16
17
|
vaultAllocator: ContractAddr,
|
|
17
18
|
redeemRequestNFT: ContractAddr,
|
|
@@ -290,6 +291,7 @@ export class UniversalStrategy<
|
|
|
290
291
|
.plus(leg2AUM[0].usdValue / token1Price.price)
|
|
291
292
|
.minus(leg1AUM[1].usdValue / token1Price.price)
|
|
292
293
|
.minus(leg2AUM[1].amount);
|
|
294
|
+
logger.verbose(`${this.getTag()} Vesu AUM: leg1: ${leg1AUM[0].amount.toNumber()}, ${leg1AUM[1].amount.toNumber()}, leg2: ${leg2AUM[0].amount.toNumber()}, ${leg2AUM[1].amount.toNumber()}`);
|
|
293
295
|
|
|
294
296
|
const zeroAmt = Web3Number.fromWei('0', this.asset().decimals);
|
|
295
297
|
const net = {
|
|
@@ -549,20 +551,25 @@ export class UniversalStrategy<
|
|
|
549
551
|
logger.verbose(`${this.getTag()}:: borrow1Amount: ${borrow1Amount.toString()} ${vesuAdapter1.config.debt.symbol}`);
|
|
550
552
|
logger.verbose(`${this.getTag()}:: borrow2Amount: ${borrow2Amount.toString()} ${vesuAdapter2.config.debt.symbol}`);
|
|
551
553
|
|
|
552
|
-
|
|
554
|
+
let callSet1 = this.getVesuModifyPositionCalls({
|
|
553
555
|
isLeg1: true,
|
|
554
556
|
isDeposit: params.isDeposit,
|
|
555
557
|
depositAmount: params.leg1DepositAmount.plus(borrow2Amount),
|
|
556
558
|
debtAmount: borrow1Amount
|
|
557
559
|
});
|
|
558
560
|
|
|
559
|
-
|
|
561
|
+
let callSet2 = this.getVesuModifyPositionCalls({
|
|
560
562
|
isLeg1: false,
|
|
561
563
|
isDeposit: params.isDeposit,
|
|
562
564
|
depositAmount: borrow1Amount,
|
|
563
565
|
debtAmount: borrow2Amount
|
|
564
566
|
});
|
|
565
567
|
|
|
568
|
+
if (!params.isDeposit) {
|
|
569
|
+
let temp = callSet2;
|
|
570
|
+
callSet2 = [...callSet1];
|
|
571
|
+
callSet1 = [...temp];
|
|
572
|
+
}
|
|
566
573
|
const allActions = [...callSet1.map(i => i.manageCall), ...callSet2.map(i => i.manageCall)];
|
|
567
574
|
const flashloanCalldata = CallData.compile([
|
|
568
575
|
[...callSet1.map(i => i.proofs), ...callSet2.map(i => i.proofs)],
|
|
@@ -583,6 +590,21 @@ export class UniversalStrategy<
|
|
|
583
590
|
return manageCall;
|
|
584
591
|
}
|
|
585
592
|
|
|
593
|
+
async getBringLiquidityCall(params: {
|
|
594
|
+
amount: Web3Number
|
|
595
|
+
}) {
|
|
596
|
+
const manage1Info = this.getProofs<ApproveCallParams>(UNIVERSAL_MANAGE_IDS.APPROVE_BRING_LIQUIDITY);
|
|
597
|
+
const manageCall1 = manage1Info.callConstructor({
|
|
598
|
+
amount: params.amount
|
|
599
|
+
});
|
|
600
|
+
const manage2Info = this.getProofs<ApproveCallParams>(UNIVERSAL_MANAGE_IDS.BRING_LIQUIDITY);
|
|
601
|
+
const manageCall2 = manage2Info.callConstructor({
|
|
602
|
+
amount: params.amount
|
|
603
|
+
});
|
|
604
|
+
const manageCall = this.getManageCall([UNIVERSAL_MANAGE_IDS.APPROVE_BRING_LIQUIDITY, UNIVERSAL_MANAGE_IDS.BRING_LIQUIDITY], [manageCall1, manageCall2]);
|
|
605
|
+
return manageCall;
|
|
606
|
+
}
|
|
607
|
+
|
|
586
608
|
async getRebalanceCall(params: {
|
|
587
609
|
isLeg1toLeg2: boolean,
|
|
588
610
|
amount: Web3Number
|
|
@@ -616,12 +638,15 @@ export class UniversalStrategy<
|
|
|
616
638
|
}
|
|
617
639
|
|
|
618
640
|
|
|
641
|
+
// useful to map readble names to proofs and calls
|
|
619
642
|
export enum UNIVERSAL_MANAGE_IDS {
|
|
620
643
|
FLASH_LOAN = 'flash_loan_init',
|
|
621
644
|
VESU_LEG1 = 'vesu_leg1',
|
|
622
645
|
VESU_LEG2 = 'vesu_leg2',
|
|
623
646
|
APPROVE_TOKEN1 = 'approve_token1',
|
|
624
|
-
APPROVE_TOKEN2 = 'approve_token2'
|
|
647
|
+
APPROVE_TOKEN2 = 'approve_token2',
|
|
648
|
+
APPROVE_BRING_LIQUIDITY = 'approve_bring_liquidity',
|
|
649
|
+
BRING_LIQUIDITY = 'bring_liquidity'
|
|
625
650
|
}
|
|
626
651
|
|
|
627
652
|
export enum UNIVERSAL_ADAPTERS {
|
|
@@ -635,7 +660,7 @@ function getLooperSettings(
|
|
|
635
660
|
token2Symbol: string,
|
|
636
661
|
vaultSettings: UniversalStrategySettings,
|
|
637
662
|
pool1: ContractAddr,
|
|
638
|
-
pool2: ContractAddr
|
|
663
|
+
pool2: ContractAddr,
|
|
639
664
|
) {
|
|
640
665
|
const USDCToken = Global.getDefaultTokens().find(token => token.symbol === token1Symbol)!;
|
|
641
666
|
const ETHToken = Global.getDefaultTokens().find(token => token.symbol === token2Symbol)!;
|
|
@@ -643,7 +668,9 @@ function getLooperSettings(
|
|
|
643
668
|
const commonAdapter = new CommonAdapter({
|
|
644
669
|
manager: vaultSettings.manager,
|
|
645
670
|
asset: USDCToken.address,
|
|
646
|
-
id: UNIVERSAL_MANAGE_IDS.FLASH_LOAN
|
|
671
|
+
id: UNIVERSAL_MANAGE_IDS.FLASH_LOAN,
|
|
672
|
+
vaultAddress: vaultSettings.vaultAddress,
|
|
673
|
+
vaultAllocator: vaultSettings.vaultAllocator,
|
|
647
674
|
})
|
|
648
675
|
const vesuAdapterUSDCETH = new VesuAdapter({
|
|
649
676
|
poolId: pool1,
|
|
@@ -669,20 +696,28 @@ function getLooperSettings(
|
|
|
669
696
|
id: UNIVERSAL_ADAPTERS.VESU_LEG2,
|
|
670
697
|
adapter: vesuAdapterETHUSDC
|
|
671
698
|
}])
|
|
699
|
+
|
|
700
|
+
// vesu looping
|
|
672
701
|
vaultSettings.leafAdapters.push(commonAdapter.getFlashloanAdapter.bind(commonAdapter));
|
|
673
702
|
vaultSettings.leafAdapters.push(vesuAdapterUSDCETH.getModifyPosition.bind(vesuAdapterUSDCETH));
|
|
674
703
|
vaultSettings.leafAdapters.push(vesuAdapterETHUSDC.getModifyPosition.bind(vesuAdapterETHUSDC));
|
|
675
704
|
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(USDCToken.address, vesuAdapterUSDCETH.VESU_SINGLETON, UNIVERSAL_MANAGE_IDS.APPROVE_TOKEN1).bind(commonAdapter));
|
|
676
705
|
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(ETHToken.address, vesuAdapterETHUSDC.VESU_SINGLETON, UNIVERSAL_MANAGE_IDS.APPROVE_TOKEN2).bind(commonAdapter));
|
|
706
|
+
|
|
707
|
+
// to bridge liquidity back to vault (used by bring_liquidity)
|
|
708
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(USDCToken.address, vaultSettings.vaultAddress, UNIVERSAL_MANAGE_IDS.APPROVE_BRING_LIQUIDITY).bind(commonAdapter));
|
|
709
|
+
vaultSettings.leafAdapters.push(commonAdapter.getBringLiquidityAdapter(UNIVERSAL_MANAGE_IDS.BRING_LIQUIDITY).bind(commonAdapter));
|
|
677
710
|
return vaultSettings;
|
|
678
711
|
}
|
|
679
712
|
|
|
680
713
|
const _riskFactor: RiskFactor[] = [
|
|
681
714
|
{ type: RiskType.SMART_CONTRACT_RISK, value: 0.5, weight: 25, reason: "Audited by Zellic" },
|
|
682
|
-
{ type: RiskType.LIQUIDATION_RISK, value: 1, weight: 50, reason: "Liquidation risk is mitigated
|
|
715
|
+
{ type: RiskType.LIQUIDATION_RISK, value: 1.5, weight: 50, reason: "Liquidation risk is mitigated by stable price feed on Starknet" },
|
|
716
|
+
{ type: RiskType.TECHNICAL_RISK, value: 1, weight: 50, reason: "Technical failures like risk monitoring failures" }
|
|
683
717
|
];
|
|
684
718
|
|
|
685
719
|
const usdcVaultSettings: UniversalStrategySettings = {
|
|
720
|
+
vaultAddress: ContractAddr.from('0x7e6498cf6a1bfc7e6fc89f1831865e2dacb9756def4ec4b031a9138788a3b5e'),
|
|
686
721
|
manager: ContractAddr.from('0xf41a2b1f498a7f9629db0b8519259e66e964260a23d20003f3e42bb1997a07'),
|
|
687
722
|
vaultAllocator: ContractAddr.from('0x228cca1005d3f2b55cbaba27cb291dacf1b9a92d1d6b1638195fbd3d0c1e3ba'),
|
|
688
723
|
redeemRequestNFT: ContractAddr.from('0x906d03590010868cbf7590ad47043959d7af8e782089a605d9b22567b64fda'),
|
|
@@ -694,6 +729,7 @@ const usdcVaultSettings: UniversalStrategySettings = {
|
|
|
694
729
|
}
|
|
695
730
|
|
|
696
731
|
const wbtcVaultSettings: UniversalStrategySettings = {
|
|
732
|
+
vaultAddress: ContractAddr.from('0x5a4c1651b913aa2ea7afd9024911603152a19058624c3e425405370d62bf80c'),
|
|
697
733
|
manager: ContractAddr.from('0xef8a664ffcfe46a6af550766d27c28937bf1b77fb4ab54d8553e92bca5ba34'),
|
|
698
734
|
vaultAllocator: ContractAddr.from('0x1e01c25f0d9494570226ad28a7fa856c0640505e809c366a9fab4903320e735'),
|
|
699
735
|
redeemRequestNFT: ContractAddr.from('0x4fec59a12f8424281c1e65a80b5de51b4e754625c60cddfcd00d46941ec37b2'),
|
|
@@ -705,6 +741,7 @@ const wbtcVaultSettings: UniversalStrategySettings = {
|
|
|
705
741
|
}
|
|
706
742
|
|
|
707
743
|
const ethVaultSettings: UniversalStrategySettings = {
|
|
744
|
+
vaultAddress: ContractAddr.from('0x446c22d4d3f5cb52b4950ba832ba1df99464c6673a37c092b1d9622650dbd8'),
|
|
708
745
|
manager: ContractAddr.from('0x494888b37206616bd09d759dcda61e5118470b9aa7f58fb84f21c778a7b8f97'),
|
|
709
746
|
vaultAllocator: ContractAddr.from('0x4acc0ad6bea58cb578d60ff7c31f06f44369a7a9a7bbfffe4701f143e427bd'),
|
|
710
747
|
redeemRequestNFT: ContractAddr.from('0x2e6cd71e5060a254d4db00655e420db7bf89da7755bb0d5f922e2f00c76ac49'),
|
|
@@ -716,6 +753,7 @@ const ethVaultSettings: UniversalStrategySettings = {
|
|
|
716
753
|
}
|
|
717
754
|
|
|
718
755
|
const strkVaultSettings: UniversalStrategySettings = {
|
|
756
|
+
vaultAddress: ContractAddr.from('0x55d012f57e58c96e0a5c7ebbe55853989d01e6538b15a95e7178aca4af05c21'),
|
|
719
757
|
manager: ContractAddr.from('0xcc6a5153ca56293405506eb20826a379d982cd738008ef7e808454d318fb81'),
|
|
720
758
|
vaultAllocator: ContractAddr.from('0xf29d2f82e896c0ed74c9eff220af34ac148e8b99846d1ace9fbb02c9191d01'),
|
|
721
759
|
redeemRequestNFT: ContractAddr.from('0x46902423bd632c428376b84fcee9cac5dbe016214e93a8103bcbde6e1de656b'),
|
|
@@ -727,6 +765,7 @@ const strkVaultSettings: UniversalStrategySettings = {
|
|
|
727
765
|
}
|
|
728
766
|
|
|
729
767
|
const usdtVaultSettings: UniversalStrategySettings = {
|
|
768
|
+
vaultAddress: ContractAddr.from('0x1c4933d1880c6778585e597154eaca7b428579d72f3aae425ad2e4d26c6bb3'),
|
|
730
769
|
manager: ContractAddr.from('0x39bb9843503799b552b7ed84b31c06e4ff10c0537edcddfbf01fe944b864029'),
|
|
731
770
|
vaultAllocator: ContractAddr.from('0x56437d18c43727ac971f6c7086031cad7d9d6ccb340f4f3785a74cc791c931a'),
|
|
732
771
|
redeemRequestNFT: ContractAddr.from('0x5af0c2a657eaa8e23ed78e855dac0c51e4f69e2cf91a18c472041a1f75bb41f'),
|
|
@@ -737,11 +776,170 @@ const usdtVaultSettings: UniversalStrategySettings = {
|
|
|
737
776
|
minHealthFactor: 1.25
|
|
738
777
|
}
|
|
739
778
|
|
|
779
|
+
export default function MetaVaultDescription() {
|
|
780
|
+
const logos: any = {
|
|
781
|
+
vesu: Protocols.VESU.logo,
|
|
782
|
+
endur: Protocols.ENDUR.logo,
|
|
783
|
+
extended: Protocols.EXTENDED.logo,
|
|
784
|
+
ekubo: "https://dummyimage.com/64x64/ffffff/000000&text=K",
|
|
785
|
+
};
|
|
786
|
+
const sources = [
|
|
787
|
+
{ key: "vesu", name: "Vesu", status: "Live", description: "Integrated liquidity venue used for automated routing to capture the best available yield." },
|
|
788
|
+
{ key: "endur", name: "Endur", status: "Coming soon", description: "Planned integration to tap into STRK staking–backed yields via our LST pipeline." },
|
|
789
|
+
{ key: "extended", name: "Extended", status: "Coming soon", description: "Expanding coverage to additional money markets and vaults across the ecosystem." },
|
|
790
|
+
// { key: "ekubo", name: "Ekubo", status: "Coming soon", description: "Concentrated liquidity strategies targeted for optimized fee APR harvesting." },
|
|
791
|
+
];
|
|
792
|
+
|
|
793
|
+
const containerStyle = {
|
|
794
|
+
maxWidth: "800px",
|
|
795
|
+
margin: "0 auto",
|
|
796
|
+
backgroundColor: "#111",
|
|
797
|
+
color: "#eee",
|
|
798
|
+
fontFamily: "Arial, sans-serif",
|
|
799
|
+
borderRadius: "12px",
|
|
800
|
+
};
|
|
801
|
+
|
|
802
|
+
const cardStyle = {
|
|
803
|
+
border: "1px solid #333",
|
|
804
|
+
borderRadius: "10px",
|
|
805
|
+
padding: "12px",
|
|
806
|
+
marginBottom: "12px",
|
|
807
|
+
backgroundColor: "#1a1a1a",
|
|
808
|
+
};
|
|
809
|
+
|
|
810
|
+
const logoStyle = {
|
|
811
|
+
width: "24px",
|
|
812
|
+
height: "24px",
|
|
813
|
+
borderRadius: "8px",
|
|
814
|
+
border: "1px solid #444",
|
|
815
|
+
backgroundColor: "#222",
|
|
816
|
+
};
|
|
817
|
+
|
|
818
|
+
return (
|
|
819
|
+
<div style={containerStyle}>
|
|
820
|
+
<h1 style={{ fontSize: "18px", marginBottom: "10px" }}>Meta Vault — Automated Yield Router</h1>
|
|
821
|
+
<p style={{ fontSize: "14px", lineHeight: "1.5", marginBottom: "16px" }}>
|
|
822
|
+
This Evergreen vault is a tokenized Meta Vault, auto-compounding strategy that continuously allocates your deposited
|
|
823
|
+
asset to the best available yield source in the ecosystem. Depositors receive vault shares that
|
|
824
|
+
represent a proportional claim on the underlying assets and accrued yield. Allocation shifts are
|
|
825
|
+
handled programmatically based on on-chain signals and risk filters, minimizing idle capital and
|
|
826
|
+
maximizing net APY.
|
|
827
|
+
</p>
|
|
828
|
+
|
|
829
|
+
<div style={{ backgroundColor: "#222", padding: "10px", borderRadius: "8px", marginBottom: "20px", border: "1px solid #444" }}>
|
|
830
|
+
<p style={{ fontSize: "13px", color: "#ccc" }}>
|
|
831
|
+
<strong>Withdrawals:</strong> Requests can take up to <strong>1-2 hours</strong> to process as the vault unwinds and settles routing.
|
|
832
|
+
</p>
|
|
833
|
+
</div>
|
|
834
|
+
|
|
835
|
+
<h2 style={{ fontSize: "18px", marginBottom: "10px" }}>Supported Yield Sources</h2>
|
|
836
|
+
{sources.map((s) => (
|
|
837
|
+
<div key={s.key} style={cardStyle}>
|
|
838
|
+
<div style={{ display: "flex", gap: "10px", alignItems: "flex-start" }}>
|
|
839
|
+
<img src={logos[s.key]} alt={`${s.name} logo`} style={logoStyle} />
|
|
840
|
+
<div style={{ flex: 1 }}>
|
|
841
|
+
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
|
|
842
|
+
<h3 style={{ fontSize: "15px", margin: 0 }}>{s.name}</h3>
|
|
843
|
+
<StatusBadge status={s.status} />
|
|
844
|
+
</div>
|
|
845
|
+
{/* <p style={{ fontSize: "13px", color: "#ccc", marginTop: "4px" }}>{s.description}</p> */}
|
|
846
|
+
</div>
|
|
847
|
+
</div>
|
|
848
|
+
</div>
|
|
849
|
+
))}
|
|
850
|
+
</div>
|
|
851
|
+
);
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
function StatusBadge({ status }: { status: string }) {
|
|
855
|
+
const isSoon = String(status).toLowerCase() !== "live";
|
|
856
|
+
const badgeStyle = {
|
|
857
|
+
fontSize: "12px",
|
|
858
|
+
padding: "2px 6px",
|
|
859
|
+
borderRadius: "12px",
|
|
860
|
+
border: "1px solid",
|
|
861
|
+
color: isSoon ? "rgb(196 196 195)" : "#6aff7d",
|
|
862
|
+
borderColor: isSoon ? "#484848" : "#6aff7d",
|
|
863
|
+
backgroundColor: isSoon ? "#424242" : "#002b1a",
|
|
864
|
+
};
|
|
865
|
+
return <span style={badgeStyle}>{status}</span>;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
function getDescription(tokenSymbol: string) {
|
|
869
|
+
return MetaVaultDescription();
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
function getFAQs(): FAQ[] {
|
|
873
|
+
return [
|
|
874
|
+
{
|
|
875
|
+
question: "What is the Meta Vault?",
|
|
876
|
+
answer:
|
|
877
|
+
"The Meta Vault is a tokenized strategy that automatically allocates your deposited assets to the best available yield source in the ecosystem. It optimizes returns while minimizing idle capital.",
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
question: "How does yield allocation work?",
|
|
881
|
+
answer:
|
|
882
|
+
"The vault continuously monitors supported protocols and routes liquidity to the source offering the highest net yield after accounting for fees, slippage, and gas costs. Reallocations are performed automatically.",
|
|
883
|
+
},
|
|
884
|
+
{
|
|
885
|
+
question: "Which yield sources are supported?",
|
|
886
|
+
answer: (
|
|
887
|
+
<span>
|
|
888
|
+
Currently, <strong>Vesu</strong> is live. Future integrations include{" "}
|
|
889
|
+
<strong>Endur</strong>, <strong>Extended</strong>, and{" "}
|
|
890
|
+
<strong>Ekubo</strong> (all coming soon).
|
|
891
|
+
</span>
|
|
892
|
+
),
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
question: "What do I receive when I deposit?",
|
|
896
|
+
answer:
|
|
897
|
+
"Depositors receive vault tokens representing their proportional share of the vault. These tokens entitle holders to both the principal and accrued yield.",
|
|
898
|
+
},
|
|
899
|
+
{
|
|
900
|
+
question: "How long do withdrawals take?",
|
|
901
|
+
answer:
|
|
902
|
+
"Withdrawals may take up to 1-2 hours to process, as the vault unwinds and settles liquidity routing across integrated protocols.",
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
question: "Is the Meta Vault non-custodial?",
|
|
906
|
+
answer:
|
|
907
|
+
"Yes. The Meta Vault operates entirely on-chain. Users always maintain control of their vault tokens, and the strategy is fully transparent.",
|
|
908
|
+
},
|
|
909
|
+
{
|
|
910
|
+
question: "How is risk managed?",
|
|
911
|
+
answer:
|
|
912
|
+
"Integrations are supported with active risk monitoring like liquidation risk. Only vetted protocols are included to balance yield with safety. However, usual Defi risks like smart contract risk, extreme volatile market risk, etc. are still present.",
|
|
913
|
+
},
|
|
914
|
+
{
|
|
915
|
+
question: "Are there any fees?",
|
|
916
|
+
answer:
|
|
917
|
+
"Troves charges a performance of 10% on the yield generated. The APY shown is net of this fee. This fee is only applied to the profits earned, ensuring that users retain their initial capital.",
|
|
918
|
+
},
|
|
919
|
+
];
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
function getContractDetails(settings: UniversalStrategySettings): {address: ContractAddr, name: string}[] {
|
|
923
|
+
return [
|
|
924
|
+
{ address: settings.vaultAddress, name: "Vault" },
|
|
925
|
+
{ address: settings.manager, name: "Vault Manager" },
|
|
926
|
+
{ address: settings.vaultAllocator, name: "Vault Allocator" },
|
|
927
|
+
{ address: settings.redeemRequestNFT, name: "Redeem Request NFT" },
|
|
928
|
+
{ address: settings.aumOracle, name: "AUM Oracle" },
|
|
929
|
+
];
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
const investmentSteps: string[] = [
|
|
933
|
+
"Deposit funds into the vault",
|
|
934
|
+
"Vault manager allocates funds to optimal yield sources",
|
|
935
|
+
"Vault manager reports asset under management (AUM) regularly to the vault",
|
|
936
|
+
"Request withdrawal and vault manager processes it in 1-2 hours"
|
|
937
|
+
]
|
|
740
938
|
export const UniversalStrategies: IStrategyMetadata<UniversalStrategySettings>[] =
|
|
741
939
|
[
|
|
742
940
|
{
|
|
743
941
|
name: "USDC Evergreen",
|
|
744
|
-
description:
|
|
942
|
+
description: getDescription('USDC'),
|
|
745
943
|
address: ContractAddr.from('0x7e6498cf6a1bfc7e6fc89f1831865e2dacb9756def4ec4b031a9138788a3b5e'),
|
|
746
944
|
launchBlock: 0,
|
|
747
945
|
type: 'ERC4626',
|
|
@@ -756,13 +954,13 @@ export const UniversalStrategies: IStrategyMetadata<UniversalStrategySettings>[]
|
|
|
756
954
|
},
|
|
757
955
|
protocols: [Protocols.VESU],
|
|
758
956
|
maxTVL: Web3Number.fromWei(0, 6),
|
|
759
|
-
contractDetails:
|
|
760
|
-
faqs:
|
|
761
|
-
investmentSteps:
|
|
957
|
+
contractDetails: getContractDetails(usdcVaultSettings),
|
|
958
|
+
faqs: getFAQs(),
|
|
959
|
+
investmentSteps: investmentSteps,
|
|
762
960
|
},
|
|
763
961
|
{
|
|
764
962
|
name: "WBTC Evergreen",
|
|
765
|
-
description:
|
|
963
|
+
description: getDescription('WBTC'),
|
|
766
964
|
address: ContractAddr.from('0x5a4c1651b913aa2ea7afd9024911603152a19058624c3e425405370d62bf80c'),
|
|
767
965
|
launchBlock: 0,
|
|
768
966
|
type: 'ERC4626',
|
|
@@ -777,13 +975,13 @@ export const UniversalStrategies: IStrategyMetadata<UniversalStrategySettings>[]
|
|
|
777
975
|
},
|
|
778
976
|
protocols: [Protocols.VESU],
|
|
779
977
|
maxTVL: Web3Number.fromWei(0, 8),
|
|
780
|
-
contractDetails:
|
|
781
|
-
faqs:
|
|
782
|
-
investmentSteps:
|
|
978
|
+
contractDetails: getContractDetails(wbtcVaultSettings),
|
|
979
|
+
faqs: getFAQs(),
|
|
980
|
+
investmentSteps: investmentSteps,
|
|
783
981
|
},
|
|
784
982
|
{
|
|
785
983
|
name: "ETH Evergreen",
|
|
786
|
-
description:
|
|
984
|
+
description: getDescription('ETH'),
|
|
787
985
|
address: ContractAddr.from('0x446c22d4d3f5cb52b4950ba832ba1df99464c6673a37c092b1d9622650dbd8'),
|
|
788
986
|
launchBlock: 0,
|
|
789
987
|
type: 'ERC4626',
|
|
@@ -798,13 +996,13 @@ export const UniversalStrategies: IStrategyMetadata<UniversalStrategySettings>[]
|
|
|
798
996
|
},
|
|
799
997
|
protocols: [Protocols.VESU],
|
|
800
998
|
maxTVL: Web3Number.fromWei(0, 18),
|
|
801
|
-
contractDetails:
|
|
802
|
-
faqs:
|
|
803
|
-
investmentSteps:
|
|
999
|
+
contractDetails: getContractDetails(ethVaultSettings),
|
|
1000
|
+
faqs: getFAQs(),
|
|
1001
|
+
investmentSteps: investmentSteps,
|
|
804
1002
|
},
|
|
805
1003
|
{
|
|
806
1004
|
name: "STRK Evergreen",
|
|
807
|
-
description:
|
|
1005
|
+
description: getDescription('STRK'),
|
|
808
1006
|
address: ContractAddr.from('0x55d012f57e58c96e0a5c7ebbe55853989d01e6538b15a95e7178aca4af05c21'),
|
|
809
1007
|
launchBlock: 0,
|
|
810
1008
|
type: 'ERC4626',
|
|
@@ -819,13 +1017,13 @@ export const UniversalStrategies: IStrategyMetadata<UniversalStrategySettings>[]
|
|
|
819
1017
|
},
|
|
820
1018
|
protocols: [Protocols.VESU],
|
|
821
1019
|
maxTVL: Web3Number.fromWei(0, 18),
|
|
822
|
-
contractDetails:
|
|
823
|
-
faqs:
|
|
824
|
-
investmentSteps:
|
|
1020
|
+
contractDetails: getContractDetails(strkVaultSettings),
|
|
1021
|
+
faqs: getFAQs(),
|
|
1022
|
+
investmentSteps: investmentSteps,
|
|
825
1023
|
},
|
|
826
1024
|
{
|
|
827
1025
|
name: "USDT Evergreen",
|
|
828
|
-
description:
|
|
1026
|
+
description: getDescription('USDT'),
|
|
829
1027
|
address: ContractAddr.from('0x1c4933d1880c6778585e597154eaca7b428579d72f3aae425ad2e4d26c6bb3'),
|
|
830
1028
|
launchBlock: 0,
|
|
831
1029
|
type: 'ERC4626',
|
|
@@ -840,8 +1038,8 @@ export const UniversalStrategies: IStrategyMetadata<UniversalStrategySettings>[]
|
|
|
840
1038
|
},
|
|
841
1039
|
protocols: [Protocols.VESU],
|
|
842
1040
|
maxTVL: Web3Number.fromWei(0, 6),
|
|
843
|
-
contractDetails:
|
|
844
|
-
faqs:
|
|
845
|
-
investmentSteps:
|
|
1041
|
+
contractDetails: getContractDetails(usdtVaultSettings),
|
|
1042
|
+
faqs: getFAQs(),
|
|
1043
|
+
investmentSteps: investmentSteps,
|
|
846
1044
|
}
|
|
847
1045
|
]
|