1use {
4 crate::vault_info::VaultInfo,
5 solana_farm_sdk::vault::Vault,
6 solana_program::{account_info::AccountInfo, entrypoint::ProgramResult},
7};
8
9pub trait VaultParams {
10 fn default_min_crank_interval() -> u64;
11 fn default_fee() -> f64;
12 fn default_external_fee() -> f64;
13}
14
15pub trait UserInit {
16 fn user_init(vault: &Vault, accounts: &[AccountInfo]) -> ProgramResult;
17}
18
19pub trait AddLiquidity {
20 fn add_liquidity(
21 vault: &Vault,
22 accounts: &[AccountInfo],
23 max_token_a_amount: u64,
24 max_token_b_amount: u64,
25 ) -> ProgramResult;
26}
27
28pub trait LockLiquidity {
29 fn lock_liquidity(vault: &Vault, accounts: &[AccountInfo], amount: u64) -> ProgramResult;
30}
31
32pub trait UnlockLiquidity {
33 fn unlock_liquidity(vault: &Vault, accounts: &[AccountInfo], amount: u64) -> ProgramResult;
34}
35
36pub trait RemoveLiquidity {
37 fn remove_liquidity(vault: &Vault, accounts: &[AccountInfo], amount: u64) -> ProgramResult;
38}
39
40pub trait Features {
41 fn set_min_crank_interval(
42 vault: &Vault,
43 vault_info: &mut VaultInfo,
44 accounts: &[AccountInfo],
45 min_crank_interval_sec: u64,
46 ) -> ProgramResult;
47
48 fn set_fee(
49 vault: &Vault,
50 vault_info: &mut VaultInfo,
51 accounts: &[AccountInfo],
52 fee: f64,
53 ) -> ProgramResult;
54
55 fn set_external_fee(
56 vault: &Vault,
57 vault_info: &mut VaultInfo,
58 accounts: &[AccountInfo],
59 external_fee: f64,
60 ) -> ProgramResult;
61
62 fn enable_deposits(
63 vault: &Vault,
64 vault_info: &mut VaultInfo,
65 accounts: &[AccountInfo],
66 ) -> ProgramResult;
67
68 fn disable_deposits(
69 vault: &Vault,
70 vault_info: &mut VaultInfo,
71 accounts: &[AccountInfo],
72 ) -> ProgramResult;
73
74 fn enable_withdrawals(
75 vault: &Vault,
76 vault_info: &mut VaultInfo,
77 accounts: &[AccountInfo],
78 ) -> ProgramResult;
79
80 fn disable_withdrawals(
81 vault: &Vault,
82 vault_info: &mut VaultInfo,
83 accounts: &[AccountInfo],
84 ) -> ProgramResult;
85}
86
87pub trait Crank {
88 fn crank(vault: &Vault, accounts: &[AccountInfo], step: u64) -> ProgramResult;
89}
90
91pub trait Init {
92 fn init(vault: &Vault, accounts: &[AccountInfo], step: u64) -> ProgramResult;
93}
94
95pub trait Shutdown {
96 fn shutdown(vault: &Vault, accounts: &[AccountInfo]) -> ProgramResult;
97}
98
99pub trait WithdrawFees {
100 fn withdraw_fees(vault: &Vault, accounts: &[AccountInfo], amount: u64) -> ProgramResult;
101}
102
103pub trait SetAdminSigners {
104 fn set_admin_signers(
105 vault: &Vault,
106 accounts: &[AccountInfo],
107 min_signatures: u8,
108 ) -> ProgramResult;
109}
110
111pub trait RemoveMultisig {
112 fn remove_multisig(vault: &Vault, accounts: &[AccountInfo]) -> ProgramResult;
113}