Skip to main content

tengu_api/state/
mod.rs

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