1use borsh::{BorshDeserialize, BorshSerialize};
2use solana_sdk::pubkey::Pubkey;
3
4pub mod accounts;
5pub mod error;
6pub mod instructions;
7pub mod client;
8
9pub use error::CarrotError;
10pub use client::{deposit_usdc, withdraw_crt, CarrotClient};
11
12pub const CARROT_PROGRAM_ID: Pubkey = solana_sdk::pubkey!("CarrotwivhMpDnm27EHmRLeQ683Z1PufuqEmBZvD282s");
14
15pub const CRT_MINT: Pubkey = solana_sdk::pubkey!("CRTx1JouZhzSU6XytsE42UQraoGqiHgxabocVfARTy2s");
17
18pub const USDC_MINT: Pubkey = solana_sdk::pubkey!("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
20
21pub const USDT_MINT: Pubkey = solana_sdk::pubkey!("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB");
23
24pub const PYUSD_MINT: Pubkey = solana_sdk::pubkey!("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo");
26
27pub const LOG_PROGRAM_ID: Pubkey = solana_sdk::pubkey!("7Mc3vSdRWoThArpni6t5W4XjvQf4BuMny1uC8b6VBn48");
29
30pub const VAULT_ADDRESS: Pubkey = solana_sdk::pubkey!("FfCRL34rkJiMiX5emNDrYp3MdWH2mES3FvDQyFppqgpJ");
32
33#[derive(Debug, Clone, BorshSerialize, BorshDeserialize)]
35pub struct Fee {
36 pub redemption_fee_bps: u16,
37 pub redemption_fee_accumulated: u64,
38 pub management_fee_bps: u16,
39 pub management_fee_last_update: i64,
40 pub management_fee_accumulated: u64,
41 pub performance_fee_bps: u16,
42}
43
44#[derive(Debug, Clone, BorshSerialize, BorshDeserialize)]
46pub struct Asset {
47 pub asset_id: u16,
49 pub mint: Pubkey,
51 pub decimals: u8,
53 pub ata: Pubkey,
55 pub oracle: Pubkey,
57}
58
59#[derive(Debug, Clone, BorshSerialize, BorshDeserialize)]
61pub struct StrategyRecord {
62 pub strategy_id: u16,
63 pub asset_id: u16,
64 pub balance: u64,
65 pub net_earnings: i64,
66}
67
68#[derive(Debug, Clone, BorshSerialize, BorshDeserialize)]
70pub struct Vault {
71 pub authority: Pubkey,
73 pub shares: Pubkey,
75 pub fee: Fee,
77 pub paused: bool,
79 pub asset_index: u16,
81 pub strategy_index: u16,
83 pub assets: Vec<Asset>,
85 pub strategies: Vec<StrategyRecord>,
87}
88
89impl Vault {
90 pub fn get_remaining_accounts(&self) -> Vec<Pubkey> {
92 self.assets
93 .iter()
94 .flat_map(|asset| vec![asset.ata, asset.oracle])
95 .collect()
96 }
97}
98
99#[derive(Debug, Clone, BorshSerialize, BorshDeserialize)]
101pub struct IssueArgs {
102 pub amount: u64,
103}
104
105#[derive(Debug, Clone, BorshSerialize, BorshDeserialize)]
107pub struct RedeemArgs {
108 pub amount: u64,
109}