1use anchor_lang::prelude::*;
4
5pub mod amm;
6pub mod constants;
7pub mod dlmm;
8pub mod errors;
9pub mod events;
10pub mod instructions;
11pub mod state;
12
13use crate::state::{DlmmParameter};
14use crate::{
15 amm::{
16 state::{FeePreference},
17 },
18};
19
20use instructions::*; use amm::instructions::*; use dlmm::instructions::*; declare_id!("8VryDeNca4LCF7ivjQ5mNwMik6ugTtmwfTrg6Qfta23X");
25
26#[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy)]
27pub enum ParameterAction {
28 Add,
29 Remove,
30}
31
32#[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy)]
33pub enum ParameterList {
34 Official,
35 Community,
36}
37
38#[program]
39pub mod dloom_flow {
40 use super::*;
41
42 pub fn initialize_protocol(ctx: Context<InitializeProtocol>) -> Result<()> {
44 instructions::initialize_protocol::handle_initialize_protocol(ctx)
45 }
46
47 pub fn update_dlmm_fees(ctx: Context<UpdateDlmmFees>, new_fee_rate: Option<u16>) -> Result<()> {
48 instructions::update_dlmm_fees::handle_update_dlmm_fees(ctx, new_fee_rate)
49 }
50
51 pub fn initialize_dlmm_parameters(
52 ctx: Context<InitializeDlmmParameters>,
53 official_params: Vec<DlmmParameter>,
54 community_params: Vec<DlmmParameter>,
55 ) -> Result<()> {
56 instructions::initialize_dlmm_parameters::handle_initialize_dlmm_parameters(
57 ctx,
58 official_params,
59 community_params,
60 )
61 }
62
63 pub fn update_dlmm_parameters(
64 ctx: Context<UpdateDlmmParameters>,
65 list: ParameterList,
66 action: ParameterAction,
67 bin_step: u16,
68 fee_rate: u16,
69 ) -> Result<()> {
70 instructions::update_dlmm_parameters::handle_update_dlmm_parameters(
71 ctx, list, action, bin_step, fee_rate,
72 )
73 }
74
75 pub fn update_fee_preference(
76 ctx: Context<UpdateFeePreference>,
77 new_preference: FeePreference,
78 ) -> Result<()> {
79 instructions::update_fee_preference::handle_update_fee_preference(ctx, new_preference)
80 }
81
82 pub fn update_amm_fees(ctx: Context<UpdateAmmFees>, new_fee_rate: Option<u16>) -> Result<()> {
83 instructions::update_amm_fees::handle_update_amm_fees(ctx, new_fee_rate)
84 }
85
86 pub fn create_amm_pool(
87 ctx: Context<CreateAmmPool>,
88 fee_rate: u16,
89 protocol_fee_share: u16,
90 referrer_fee_share: u16,
91 ) -> Result<()> {
92 amm::instructions::create_pool::handle_create_amm_pool(
93 ctx,
94 fee_rate,
95 protocol_fee_share,
96 referrer_fee_share,
97 )
98 }
99
100 pub fn open_amm_position(
101 ctx: Context<OpenAmmPosition>,
102 fee_preference: FeePreference,
103 ) -> Result<()> {
104 amm::instructions::open_position::handle_open_amm_position(ctx, fee_preference)
105 }
106
107 pub fn add_amm_liquidity(
108 ctx: Context<AddAmmLiquidity>,
109 amount_a_desired: u64,
110 amount_b_desired: u64,
111 min_lp_tokens_to_mint: u64,
112 ) -> Result<()> {
113 amm::instructions::add_liquidity::handle_add_amm_liquidity(
114 ctx,
115 amount_a_desired,
116 amount_b_desired,
117 min_lp_tokens_to_mint,
118 )
119 }
120
121 pub fn swap_on_amm(
122 ctx: Context<SwapOnAmm>,
123 amount_in: u64,
124 min_amount_out: u64,
125 ) -> Result<()> {
126 amm::instructions::swap::handle_swap_on_amm(ctx, amount_in, min_amount_out)
127 }
128
129 pub fn remove_amm_liquidity(
130 ctx: Context<RemoveAmmLiquidity>,
131 lp_tokens_to_burn: u64,
132 min_amount_a_to_receive: u64,
133 min_amount_b_to_receive: u64,
134 ) -> Result<()> {
135 amm::instructions::remove_liquidity::handle_remove_amm_liquidity(
136 ctx,
137 lp_tokens_to_burn,
138 min_amount_a_to_receive,
139 min_amount_b_to_receive,
140 )
141 }
142
143 pub fn claim_lp_fees(ctx: Context<ClaimLpFees>) -> Result<()> {
144 amm::instructions::claim_lp_fees::handle_claim_lp_fees(ctx)
145 }
146
147 pub fn reinvest_lp_fees(ctx: Context<ReinvestLpFees>) -> Result<()> {
148 amm::instructions::reinvest_lp_fees::handle_reinvest_lp_fees(ctx)
149 }
150
151 pub fn create_dlmm_pool(
154 ctx: Context<CreateDlmmPool>,
155 bin_step: u16,
156 fee_rate: u16,
157 protocol_fee_share: u16,
158 referrer_fee_share: u16,
159 initial_bin_id: i32,
160 ) -> Result<()> {
161 dlmm::instructions::create_pool::handle_create_dlmm_pool(
162 ctx,
163 bin_step,
164 fee_rate,
165 protocol_fee_share,
166 referrer_fee_share,
167 initial_bin_id,
168 )
169 }
170
171 pub fn create_dlmm_community_pool(
172 ctx: Context<CreateDlmmCommunityPool>,
173 bin_step: u16,
174 fee_rate: u16,
175 protocol_fee_share: u16,
176 referrer_fee_share: u16,
177 initial_bin_id: i32,
178 ) -> Result<()> {
179 dlmm::instructions::create_community_pool::handle_create_dlmm_community_pool(
180 ctx,
181 bin_step,
182 fee_rate,
183 protocol_fee_share,
184 referrer_fee_share,
185 initial_bin_id,
186 )
187 }
188
189 pub fn dlmm_open_position(
190 ctx: Context<DlmmOpenPosition>,
191 lower_bin_id: i32,
192 upper_bin_id: i32,
193 ) -> Result<()> {
194 dlmm::instructions::open_position::handle_dlmm_open_position(
195 ctx,
196 lower_bin_id,
197 upper_bin_id,
198 )
199 }
200
201 pub fn dlmm_add_liquidity<'info>(
202 ctx: Context<'_, '_, 'info, 'info, DlmmAddLiquidity<'info>>,
203 start_bin_id: i32,
204 liquidity_per_bin: u128,
205 ) -> Result<()> {
206 dlmm::instructions::add_liquidity::handle_dlmm_add_liquidity(
207 ctx,
208 start_bin_id,
209 liquidity_per_bin,
210 )
211 }
212
213 pub fn dlmm_swap<'info>(
214 ctx: Context<'_, '_, 'info, 'info, DlmmSwap<'info>>,
215 amount_in: u64,
216 min_amount_out: u64,
217 ) -> Result<()> {
218 dlmm::instructions::swap::handle_dlmm_swap(ctx, amount_in, min_amount_out)
219 }
220
221 pub fn dlmm_remove_liquidity<'info>(
222 ctx: Context<'_, '_, 'info, 'info, DlmmRemoveLiquidity<'info>>,
223 liquidity_to_remove: u128,
224 min_amount_a: u64,
225 min_amount_b: u64,
226 ) -> Result<()> {
227 dlmm::instructions::remove_liquidity::handle_dlmm_remove_liquidity(
228 ctx,
229 liquidity_to_remove,
230 min_amount_a,
231 min_amount_b,
232 )
233 }
234
235 pub fn dlmm_modify_liquidity<'info>(
236 ctx: Context<'_, '_, 'info, 'info, DlmmModifyLiquidity<'info>>,
237 min_surplus_a_out: u64,
238 min_surplus_b_out: u64,
239 ) -> Result<()> {
240 dlmm::instructions::modify_liquidity::handle_dlmm_modify_liquidity(
241 ctx,
242 min_surplus_a_out,
243 min_surplus_b_out,
244 )
245 }
246
247 pub fn dlmm_burn_empty_position(
248 ctx: Context<DlmmBurnEmptyPosition>,
249 ) -> Result<()> {
250 dlmm::instructions::burn_empty_position::handle_dlmm_burn_empty_position(ctx)
251 }
252}