93 lines
2.1 KiB
Rust
93 lines
2.1 KiB
Rust
//! State transition types
|
|
|
|
use borsh::{BorshDeserialize, BorshSerialize};
|
|
use solana_program::pubkey::Pubkey;
|
|
|
|
/// Uninitialized version value, all instances are at least version 1
|
|
pub const UNINITIALIZED_VERSION: u8 = 0;
|
|
/// Initialized pool version
|
|
pub const POOL_VERSION: u8 = 1;
|
|
|
|
/// Program states.
|
|
#[repr(C)]
|
|
#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
|
|
pub struct Pool {
|
|
/// Initialized state.
|
|
pub version: u8,
|
|
|
|
/// Nonce used in program address.
|
|
pub bump_seed: u8,
|
|
|
|
/// Program ID of the tokens
|
|
pub token_program_id: Pubkey,
|
|
|
|
/// Account to deposit into
|
|
pub deposit_account: Pubkey,
|
|
|
|
/// Mint information for token Pass
|
|
pub token_pass_mint: Pubkey,
|
|
|
|
/// Mint information for token Fail
|
|
pub token_fail_mint: Pubkey,
|
|
|
|
/// decider key
|
|
pub decider: Pubkey,
|
|
|
|
/// mint end slot
|
|
pub mint_end_slot: u64,
|
|
|
|
/// decide end slot
|
|
pub decide_end_slot: u64,
|
|
|
|
/// decision status
|
|
pub decision: Decision,
|
|
}
|
|
|
|
/// Decision status
|
|
#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
|
|
pub enum Decision {
|
|
/// Decision was not made
|
|
Undecided,
|
|
/// Decision set at Pass
|
|
Pass,
|
|
/// Decision set at Fail
|
|
Fail,
|
|
}
|
|
|
|
impl Pool {
|
|
/// Length serialized data
|
|
pub const LEN: usize = 179;
|
|
|
|
/// Check if Pool already initialized
|
|
pub fn is_initialized(&self) -> bool {
|
|
self.version != UNINITIALIZED_VERSION
|
|
}
|
|
}
|
|
|
|
mod test {
|
|
#[cfg(test)]
|
|
use super::*;
|
|
|
|
#[test]
|
|
pub fn test_pool_pack_unpack() {
|
|
let p = Pool {
|
|
version: 1,
|
|
bump_seed: 2,
|
|
token_program_id: Pubkey::new_unique(),
|
|
deposit_account: Pubkey::new_unique(),
|
|
token_pass_mint: Pubkey::new_unique(),
|
|
token_fail_mint: Pubkey::new_unique(),
|
|
decider: Pubkey::new_unique(),
|
|
mint_end_slot: 433,
|
|
decide_end_slot: 5546,
|
|
decision: Decision::Fail,
|
|
};
|
|
|
|
let packed = p.try_to_vec().unwrap();
|
|
|
|
let unpacked = Pool::try_from_slice(packed.as_slice()).unwrap();
|
|
|
|
assert_eq!(p, unpacked);
|
|
}
|
|
}
|