dloom_flow/
lib.rs

1// FILE: programs/dloom_flow/src/lib.rs
2
3use 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::*; // For protocol-level instructions
21use amm::instructions::*; // For AMM instructions
22use dlmm::instructions::*; // For DLMM instructions
23
24declare_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    // --- Protocol Admin Instructions ---
43    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    // --- DLMM Instructions ---
152    // FIX: Simplified the Context<> paths from `dlmm::instructions::StructName` to just `StructName`
153    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}