Skip to main content

tengu_api/state/
mod.rs

1mod config;
2mod dojo;
3mod shogun;
4mod barracks;
5mod battle;
6mod forge;
7mod tasks;
8mod treasury;
9mod referral;
10mod scenes;
11mod seeker;
12mod stake;
13pub use config::*;
14pub use dojo::*;
15pub use shogun::*;
16pub use barracks::*;
17pub use battle::*;
18pub use forge::*;
19pub use tasks::*;
20pub use treasury::*;
21pub use referral::*;
22pub use scenes::*;
23pub use seeker::*;
24pub use stake::*;
25
26use crate::consts::*;
27use solana_program::pubkey::Pubkey;
28
29#[repr(u8)]
30#[derive(Clone, Copy, Debug, Eq, PartialEq, num_enum::IntoPrimitive, num_enum::TryFromPrimitive)]
31pub enum DojosAccount {
32    Config = 0,
33    Dojo = 1,
34    Barracks = 3,
35    Battle = 13,
36    Forge = 4,
37    Treasury = 5,
38    Referral = 6,
39    Scenes = 7,
40    Stake = 9,
41    Tasks = 10,
42    Seeker = 12,
43}
44
45/// Config PDA.
46pub fn config_pda(program_id: &Pubkey) -> (Pubkey, u8) {
47    Pubkey::find_program_address(&[CONFIG], program_id)
48}
49
50/// Dojo PDA.
51pub fn dojo_pda(program_id: &Pubkey, owner: &Pubkey) -> (Pubkey, u8) {
52    Pubkey::find_program_address(&[DOJO, owner.as_ref()], program_id)
53}
54
55/// Barracks PDA.
56pub fn barracks_pda(program_id: &Pubkey, dojo: &Pubkey) -> (Pubkey, u8) {
57    Pubkey::find_program_address(&[BARRACKS, dojo.as_ref()], program_id)
58}
59
60/// Battle PDA (one per dojo).
61pub fn battle_pda(program_id: &Pubkey, dojo: &Pubkey) -> (Pubkey, u8) {
62    Pubkey::find_program_address(&[BATTLE, dojo.as_ref()], program_id)
63}
64
65/// Forge PDA.
66pub fn forge_pda(program_id: &Pubkey, dojo: &Pubkey) -> (Pubkey, u8) {
67    Pubkey::find_program_address(&[FORGE, dojo.as_ref()], program_id)
68}
69
70/// Tasks PDA (one per dojo).
71pub fn tasks_pda(program_id: &Pubkey, dojo: &Pubkey) -> (Pubkey, u8) {
72    Pubkey::find_program_address(&[TASKS, dojo.as_ref()], program_id)
73}
74
75/// Treasury PDA.
76pub fn treasury_pda(program_id: &Pubkey) -> (Pubkey, u8) {
77    Pubkey::find_program_address(&[TREASURY], program_id)
78}
79
80/// Referral PDA (keyed by referrer dojo).
81pub fn referral_pda(program_id: &Pubkey, referrer_dojo: &Pubkey) -> (Pubkey, u8) {
82    Pubkey::find_program_address(&[REFERRAL, referrer_dojo.as_ref()], program_id)
83}
84
85/// Scenes PDA (keyed by dojo).
86pub fn scenes_pda(program_id: &Pubkey, dojo: &Pubkey) -> (Pubkey, u8) {
87    Pubkey::find_program_address(&[SCENES, dojo.as_ref()], program_id)
88}
89
90/// Seeker PDA (keyed by SGT mint). One per SGT mint that has claimed; prevents Sybil (same SGT across wallets).
91pub fn seeker_pda(program_id: &Pubkey, sgt_mint: &Pubkey) -> (Pubkey, u8) {
92    Pubkey::find_program_address(&[SEEKER, sgt_mint.as_ref()], program_id)
93}
94
95/// Stake PDA (keyed by authority). One per staker.
96pub fn stake_pda(program_id: &Pubkey, authority: &Pubkey) -> (Pubkey, u8) {
97    Pubkey::find_program_address(&[STAKE, authority.as_ref()], program_id)
98}
99