Skip to main content

tengu_api/state/
mod.rs

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