Skip to main content

pyra_types/
pyra.rs

1use serde::{Deserialize, Serialize};
2use solana_pubkey::Pubkey;
3
4/// Pyra vault account stored in Redis by the indexer.
5///
6/// Contains spend limit configuration and the vault owner.
7#[derive(Serialize, Deserialize, Clone, Debug)]
8pub struct Vault {
9    pub owner: Vec<u8>,
10    pub bump: u8,
11    pub spend_limit_per_transaction: u64,
12    pub spend_limit_per_timeframe: u64,
13    pub remaining_spend_limit_per_timeframe: u64,
14    pub next_timeframe_reset_timestamp: u64,
15    pub timeframe_in_seconds: u64,
16}
17
18/// Time lock used by withdraw and spend-limit order accounts.
19#[derive(Serialize, Deserialize, Clone, Debug)]
20#[serde(rename_all(serialize = "camelCase", deserialize = "snake_case"))]
21pub struct TimeLock {
22    pub owner: Pubkey,
23    pub payer: Pubkey,
24    pub release_slot: u64,
25}
26
27/// Pending withdraw order account stored in Redis.
28#[derive(Serialize, Deserialize, Clone, Debug)]
29#[serde(rename_all(serialize = "camelCase", deserialize = "snake_case"))]
30pub struct WithdrawOrderAccount {
31    pub time_lock: TimeLock,
32    pub amount_base_units: u64,
33    pub drift_market_index: u16,
34    pub reduce_only: bool,
35    pub destination: Pubkey,
36}
37
38/// Pending spend-limits order account stored in Redis.
39#[derive(Serialize, Deserialize, Clone, Debug)]
40#[serde(rename_all(serialize = "camelCase", deserialize = "snake_case"))]
41pub struct SpendLimitsOrderAccount {
42    pub time_lock: TimeLock,
43    pub spend_limit_per_transaction: u64,
44    pub spend_limit_per_timeframe: u64,
45    pub timeframe_in_seconds: u64,
46    pub next_timeframe_reset_timestamp: u64,
47}