1use borsh::{BorshDeserialize, BorshSerialize};
2use solana_program::{declare_id, pubkey::Pubkey};
3
4pub use plasma_amm_state::amm;
5pub use plasma_amm_state::lp;
6
7pub mod accounts;
8pub mod errors;
9pub mod events;
10pub mod fixed;
11pub mod instructions;
12
13declare_id!("srAMMzfVHVAtgSJc8iH6CfKzuWuUTzLHVCE81QU1rgi");
14
15pub mod spl_token {
16 use solana_program::declare_id;
17
18 declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
19}
20
21pub fn get_vault_address(plasma_program_id: &Pubkey, pool: &Pubkey, mint: &Pubkey) -> (Pubkey, u8) {
22 Pubkey::find_program_address(&[b"vault", pool.as_ref(), mint.as_ref()], plasma_program_id)
23}
24
25pub fn get_lp_position_address(
26 plasma_program_id: &Pubkey,
27 pool: &Pubkey,
28 trader: &Pubkey,
29) -> (Pubkey, u8) {
30 Pubkey::find_program_address(
31 &[b"lp_position", pool.as_ref(), trader.as_ref()],
32 plasma_program_id,
33 )
34}
35
36pub fn get_log_authority(plasma_program_id: &Pubkey) -> Pubkey {
37 Pubkey::find_program_address(&[b"log"], plasma_program_id).0
38}
39
40pub type SlotWindow = u64;
41
42#[derive(Debug, Clone, Copy, BorshDeserialize, BorshSerialize)]
43pub struct SwapResult {
44 pub side: amm::Side,
45 pub base_amount_to_transfer: u64,
46 pub quote_amount_to_transfer: u64,
47 pub base_matched_as_limit_order: u64,
48 pub quote_matched_as_limit_order: u64,
49 pub base_matched_as_swap: u64,
50 pub quote_matched_as_swap: u64,
51 pub fee_in_quote: u64,
52}
53
54impl SwapResult {
55 pub fn new_empty_with_side(side: amm::Side) -> Self {
56 Self {
57 side,
58 base_amount_to_transfer: 0,
59 quote_amount_to_transfer: 0,
60 base_matched_as_limit_order: 0,
61 quote_matched_as_limit_order: 0,
62 base_matched_as_swap: 0,
63 quote_matched_as_swap: 0,
64 fee_in_quote: 0,
65 }
66 }
67}