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