1use solana_program::pubkey::Pubkey;
4use solana_program::pubkey;
5
6pub const ADMIN_ADDRESS: Pubkey = pubkey!("DEvGq2WVuA3qkSCtwwuMYThY4onkJunEHSAxU5cieph8");
7pub const BUYBACK_AUTHORITY: Pubkey = ADMIN_ADDRESS;
9pub const FEE_COLLECTOR: Pubkey = pubkey!("FEEjHM2DoFu6UifSBmrxTQ6X2KkWQ1dbPXASCtdLUdnx");
10pub const SOL_SPLIT_FEE_BPS: u64 = 1000;
12pub const SOL_SPLIT_STAKING_BPS: u64 = 3000;
14pub const SOL_SPLIT_TREASURY_BPS: u64 = 6000;
16
17pub const TASK_VERIFIER: Pubkey = pubkey!("tASK7746ambmkkTvqtyCehd3F56X4VJpr9GCPh4bUmu");
18pub const DOJO_MINT: Pubkey = pubkey!("shaRdWvYzRQecQUxxzytUUGexXJsjr3cMq1VRkBiCZF");
20pub const WSOL_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111112");
22pub const SWAP_PROGRAM: Pubkey = pubkey!("JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4");
24
25pub const DGT_GROUP: Pubkey = pubkey!("DGT1rCDvLYEmasQJ2M9naJ2iakFrsS4Vn4XvmNWJREje");
27
28pub const SGT_GROUP: Pubkey = pubkey!("GT22s89nU4iWFkNXj1Bw6uYhJJWDRPpShHt4Bk8f99Te");
30
31pub const CONFIG: &[u8] = b"config";
32pub const GAME: &[u8] = b"game";
33pub const DOJO: &[u8] = b"dojo";
34pub const SHOGUN: &[u8] = b"shogun";
35pub const BARRACKS: &[u8] = b"barracks";
36pub const BATTLE: &[u8] = b"battle";
37pub const FORGE: &[u8] = b"forge";
38pub const TASKS: &[u8] = b"tasks";
39pub const TREASURY: &[u8] = b"treasury";
40pub const REFERRAL: &[u8] = b"referral";
41pub const PRESTIGE: &[u8] = b"prestige";
42pub const SEEKER: &[u8] = b"seeker";
44pub const STAKE: &[u8] = b"stake";
45pub const PRESTIGE_LEVELS: usize = 6;
47
48pub const ED25519_SIGNATURE_OFFSETS_START: usize = 2;
49pub const ED25519_SIGNATURE_OFFSETS_SIZE: usize = 14;
50pub const ED25519_DATA_START: usize = ED25519_SIGNATURE_OFFSETS_START + ED25519_SIGNATURE_OFFSETS_SIZE;
51pub const ED25519_PUBKEY_SIZE: usize = 32;
52pub const ED25519_SIGNATURE_SIZE: usize = 64;
53
54pub const SECONDS_PER_SLOT: f64 = 0.4;
56pub const ONE_DAY_SLOTS: u64 = 216_000;
58pub const STAKE_VESTING_DAYS: u64 = 30;
60pub const STAKE_VESTING_SLOTS: u64 = STAKE_VESTING_DAYS * ONE_DAY_SLOTS;
62pub const DEFAULT_HALVING_PERIOD_SLOTS: u64 = 28 * ONE_DAY_SLOTS;
64pub const CHAKRA_MAX: u64 = ONE_DAY_SLOTS;
65pub const CHAKRA_24H: u64 = ONE_DAY_SLOTS;
67pub const CHAKRA_48H: u64 = 2 * ONE_DAY_SLOTS;
68pub const CHAKRA_72H: u64 = 3 * ONE_DAY_SLOTS;
69pub const ORE_DIVISOR: u64 = 200;
71pub const EMISSION_RAW_PER_SLOT_BASE: u64 = 40_000_000;
73pub const DOJO_DECIMALS: u8 = 6;
74pub const ONE_DOJO: u64 = 10u64.pow(DOJO_DECIMALS as u32);
76
77pub const SLOTS_PER_LEVEL: u64 = 3;
78pub const MAX_BARRACKS_SLOTS: usize = 12;
79pub const MAX_FODDER_TOTAL: u64 = 200;
81
82pub const STARTER_TICKET_PRICE: u64 = 1_000_000_000;
83pub const RECRUIT_SOL_PRICE: u64 = 100_000_000;
84
85pub const DINE_COST_24H: u64 = 150_000_000;
87pub const DINE_COST_48H: u64 = 300_000_000;
88pub const DINE_COST_72H: u64 = 450_000_000;
89
90pub const DINE_COST_24H_ESCALATED: u64 = 195_000_000;
92pub const DINE_COST_48H_ESCALATED: u64 = 390_000_000;
93pub const DINE_COST_72H_ESCALATED: u64 = 585_000_000;
94
95pub const BARRACKS_COST_1_2_SHARDS: u64 = 50_000_000;
96pub const BARRACKS_COST_1_2_SOL: u64 = 10_000_000;
97pub const BARRACKS_COST_2_3_SHARDS: u64 = 300_000_000;
98pub const BARRACKS_COST_2_3_SOL: u64 = 100_000_000;
99pub const BARRACKS_COST_3_4: u64 = 8_000_000_000;
100
101pub const FORGE_COST_1_2: u64 = 100_000_000;
103pub const FORGE_COST_2_3: u64 = 1_000_000_000;
105pub const FORGE_COST_3_4: u64 = 2_000_000_000;
107pub const FORGE_COST_4_5: u64 = 5_000_000_000;
109pub const FORGE_COST_5_6: u64 = 12_000_000_000;
111pub const FORGE_COST_6_7: u64 = 21_000_000_000;
113
114pub const FORGE_COOLDOWN_1_2: u64 = 0;
116pub const FORGE_COOLDOWN_2_3: u64 = 0;
118pub const FORGE_COOLDOWN_3_4: u64 = 4_500;
120pub const FORGE_COOLDOWN_4_5: u64 = 13_500;
122pub const FORGE_COOLDOWN_5_6: u64 = 27_000;
124pub const FORGE_COOLDOWN_6_7: u64 = 45_000;
126
127pub const SHARDS_RAW_PER_UNIT: u64 = ONE_DOJO;
129
130pub const LEVEL_UP_COST_BASE: u64 = 200_000_000; pub const LEVEL_UP_COST_INCREMENT: u64 = 800_000_000; pub const MAX_SHOGUN_LEVEL: u64 = 100;
134
135pub const SP_N: u64 = 10; pub const SP_R: u64 = 20; pub const SP_SR: u64 = 80; pub const SP_SSR: u64 = 200; pub const SP_UR: u64 = 600; pub const DROP_N: u64 = 541;
142pub const DROP_R: u64 = 324;
143pub const DROP_SR: u64 = 108;
144pub const DROP_SSR: u64 = 22;
145pub const DROP_UR: u64 = 5;
146
147pub const RECRUITMENT_TICKET_REWARD_1: u64 = 1;
148pub const RECRUITMENT_TICKET_REWARD_2: u64 = 2;
149pub const RECRUITMENT_TICKET_REWARD_3: u64 = 3;
150pub const RECRUITMENT_TICKET_REWARD_4: u64 = 4;
151pub const RECRUITMENT_TICKET_REWARD_5: u64 = 5;
152pub const RECRUITMENT_TICKET_REWARD_6: u64 = 6;
153pub const RECRUITMENT_TICKET_REWARD_7: u64 = 7;
154pub const RECRUITMENT_TICKET_REWARD_8: u64 = 8;
155pub const RECRUITMENT_TICKET_REWARD_9: u64 = 9;
156pub const RECRUITMENT_TICKET_REWARD_10: u64 = 10;
157pub const RECRUITMENT_TICKET_REWARD_11: u64 = 11;
158pub const RECRUITMENT_TICKET_REWARD_12: u64 = 12;
159pub const RECRUITMENT_TICKET_REWARD_13: u64 = 13;
160pub const RECRUITMENT_TICKET_REWARD_15: u64 = 15;
161
162pub const ELEMENT_RARITY_REWARD_N: u64 = 1;
163pub const ELEMENT_RARITY_REWARD_R: u64 = 1;
164pub const ELEMENT_RARITY_REWARD_SR: u64 = 2;
165pub const ELEMENT_RARITY_REWARD_SSR: u64 = 5;
166pub const ELEMENT_RARITY_REWARD_UR: u64 = 20;
167
168pub const DAILY_TASK_START: u64 = 17;
169
170pub const CLAIM_TASK_PREFIX: &[u8] = b"dojos:claim_task:";
171pub const ELEMENT_RARITY_SET_SIZE: usize = 3;
172
173pub const TASK_FORGE_3: u64 = 33;
180pub const TASK_FORGE_4: u64 = 34;
181pub const TASK_FORGE_5: u64 = 35;
182pub const FORGE_3_REWARD: u64 = 2;
183pub const FORGE_4_REWARD: u64 = 5;
184pub const FORGE_5_REWARD: u64 = 10;
185pub const FORGE_6_REWARD: u64 = 15;
186pub const FORGE_7_REWARD: u64 = 20;
187
188pub const MAX_SUPPLY: u64 = ONE_DOJO * 1_000_000_000;
189
190pub const BATTLE_COOLDOWN_SLOTS: u64 = (30 * 60 * 10) / 4;
193pub const BATTLE_TARGET_IMMUNITY_SLOTS: u64 = (60 * 60 * 10) / 4;
195pub const BATTLE_MAX_DUELS_PER_24H: u64 = 32;
197pub const BATTLE_TRANSFER_BPS: u64 = 50;
199pub const BATTLE_TRANSFER_DEFENDER_DEPLETED_BPS: u64 = 100;
201pub const BATTLE_POINTS_LOW_THRESHOLD: u64 = 10_000;
203pub const BATTLE_DEFAULT_AP: u64 = 10;
205pub const BATTLE_DEFAULT_DP: u64 = 10;
206pub const BATTLE_DEFAULT_BATTLE_POINTS: u64 = BATTLE_POINTS_LOW_THRESHOLD;
208pub const BATTLE_CHAMPION_SLOT_UNSET: u64 = u64::MAX;
210pub const BATTLE_LOW_WIN_CAP: u64 = 100;
212pub const CHAMPION_CHANGE_COOLDOWN_SLOTS: u64 = (12 * 60 * 60 * 10) / 4;
214pub const CHAMPION_LOCK_AFTER_BATTLE_SLOTS: u64 = BATTLE_COOLDOWN_SLOTS;
216
217pub const XP_STAKE_DIVISOR: u128 = 216_000_000_000;
219
220pub const XP_BATTLE_BP_TO_REWARD_BPS: u64 = 1000;
223pub const XP_RECRUIT_PER_PULL: u64 = 25;
225pub const XP_FORGE_UPGRADE: u64 = 40;
227pub const XP_BARRACKS_UPGRADE: u64 = 40;
229pub const XP_DINE_FIRST_PER_SLOT: u64 = 20;
231
232pub const SCENES: &[u8] = b"scenes";
234pub const SCENE_DEFAULT_ID: u64 = 0;
235pub const SCENE_SECTIONS_PER_SCENE: usize = 12;
236pub const SCENE_COUNT_MAX: usize = 9;
237pub const SCENE_COUNT: u64 = 8;
238pub const SCENE_ROLL_COUNT: u64 = 5;
240pub const SCENE_ROLL_SHARD_COUNT: u64 = 10;
241pub const SCENE_BUY_START: u64 = 6;
243
244pub const SCENE_BONUS_FLAT_50K: u64 = 50_000;
248pub const SCENE_BONUS_FLAT_100K: u64 = 100_000;
250pub const SCENE_BONUS_PCT_2: u64 = 200;
252pub const SCENE_BONUS_PCT_3: u64 = 300;
254pub const SCENE_BONUS_PCT_5: u64 = 500;