2022-02-10 01:04:47 -08:00
|
|
|
use anchor_lang::prelude::*;
|
|
|
|
|
2022-02-22 00:32:21 -08:00
|
|
|
const MAX_TOKENS: usize = 100;
|
|
|
|
// TODO: Assuming we allow up to 65536 different tokens
|
|
|
|
pub type TokenIndex = u16;
|
|
|
|
|
|
|
|
#[zero_copy] // is repr(packed) still a problem
|
|
|
|
pub struct TokenInfo {
|
|
|
|
pub mint: Pubkey,
|
|
|
|
pub decimals: u8,
|
2022-02-22 05:23:13 -08:00
|
|
|
pub bank_bump: u8,
|
|
|
|
pub vault_bump: u8,
|
2022-02-22 00:49:02 -08:00
|
|
|
// TODO: store oracle index here?
|
2022-02-22 05:23:13 -08:00
|
|
|
pub reserved: [u8; 30], // TODO: size?
|
2022-02-22 04:15:13 -08:00
|
|
|
// token's bank account is a PDA
|
2022-02-22 00:32:21 -08:00
|
|
|
}
|
|
|
|
// TODO: static assert the size and alignment
|
|
|
|
|
|
|
|
impl TokenInfo {
|
|
|
|
pub fn is_valid(&self) -> bool {
|
|
|
|
self.mint != Pubkey::default()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-22 05:23:13 -08:00
|
|
|
#[zero_copy]
|
|
|
|
pub struct Tokens {
|
|
|
|
pub infos: [TokenInfo; MAX_TOKENS],
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Tokens {
|
|
|
|
pub fn info_for_mint<'a>(&'a self, mint: &Pubkey) -> Option<&'a TokenInfo> {
|
|
|
|
self.infos.iter().find(|ti| ti.mint == *mint)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-22 00:49:02 -08:00
|
|
|
// TODO: Should we call this `Group` instead of `MangoGroup`? And `Account` instead of `MangoAccount`?
|
2022-02-22 00:32:21 -08:00
|
|
|
#[account(zero_copy)]
|
2022-02-10 00:07:34 -08:00
|
|
|
pub struct MangoGroup {
|
2022-02-22 00:32:21 -08:00
|
|
|
// Relying on Anchor's discriminator be sufficient for our versioning needs?
|
|
|
|
// pub meta_data: MetaData,
|
|
|
|
pub owner: Pubkey,
|
|
|
|
|
|
|
|
//pub num_oracles: usize, // incremented every time add_oracle is called
|
|
|
|
//pub oracles: [Pubkey; MAX_PAIRS],
|
2022-02-22 05:23:13 -08:00
|
|
|
pub tokens: Tokens,
|
2022-02-22 00:32:21 -08:00
|
|
|
//pub spot_markets: [SpotMarketInfo; MAX_PAIRS],
|
|
|
|
//pub perp_markets: [PerpMarketInfo; MAX_PAIRS],
|
2022-02-10 00:07:34 -08:00
|
|
|
|
2022-02-22 00:32:21 -08:00
|
|
|
//pub signer_nonce: u64,
|
|
|
|
//pub signer_key: Pubkey,
|
2022-02-10 01:49:45 -08:00
|
|
|
// todo: which more dex'es do we want to support? orca for pure swap?
|
2022-02-22 00:32:21 -08:00
|
|
|
//pub dex_program_id: Pubkey,
|
2022-02-10 00:07:34 -08:00
|
|
|
|
2022-02-22 00:32:21 -08:00
|
|
|
//pub cache_valid_interval: u64,
|
2022-02-10 00:07:34 -08:00
|
|
|
|
2022-02-10 01:49:45 -08:00
|
|
|
// todo: do we need this limit? afaik this was for ts liquidator to keep on working, maybe
|
|
|
|
// with liquidatable-accounts-feed we have some sort of scaling? maybe we bought
|
|
|
|
// some more breathing space?
|
2022-02-22 00:32:21 -08:00
|
|
|
//pub max_mango_accounts: u32, // limits maximum number of MangoAccounts.v1 (closeable) accounts
|
|
|
|
//pub num_mango_accounts: u32, // number of MangoAccounts.v1
|
|
|
|
|
|
|
|
//pub ref_surcharge_centibps: u32, // 100
|
|
|
|
//pub ref_share_centibps: u32, // 80 (must be less than surcharge)
|
|
|
|
//pub ref_mngo_required: u64,
|
2022-02-10 00:07:34 -08:00
|
|
|
}
|
2022-02-22 00:32:21 -08:00
|
|
|
// TODO: static assert the size and alignment
|