plasma_amm_sdk/
lib.rs

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}