Skip to main content

tengu_api/
event.rs

1//! Program events.
2
3use solana_program::pubkey::Pubkey;
4use steel::*;
5
6#[repr(C)]
7#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
8pub struct DojoInitialized {
9    pub owner: Pubkey,
10    pub referrer: Pubkey, // Pubkey::default() = None
11}
12
13#[repr(C)]
14#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
15pub struct ShogunRecruited {
16    pub dojo: Pubkey,
17    pub pool_index: u64,
18    pub rarity: u64,
19    pub element: u64,
20    pub spirit_power: u64,
21    /// Entropy value used for this pull (keccak input). Enables provable fairness: UI verifies
22    /// hash = keccak(entropy_value || pull_index) then rarity/element from hash.
23    pub entropy_value: [u8; 32],
24    /// Index of this pull in the batch (0 for single, 0–9 for 10-pull).
25    pub pull_index: u64,
26}
27
28#[repr(C)]
29#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
30pub struct ShogunAssignedToBarracks {
31    pub dojo: Pubkey,
32    pub pool_index: u64,
33    pub slot: u64,
34}
35
36#[repr(C)]
37#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
38pub struct ShogunUnassignedFromBarracks {
39    pub dojo: Pubkey,
40    pub shogun: Pubkey,
41}
42
43#[repr(C)]
44#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
45pub struct OreMined {
46    pub dojo: Pubkey,
47    pub amount: u64,
48    pub slot: u64,
49}
50
51#[repr(C)]
52#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
53pub struct OreRefined {
54    pub dojo: Pubkey,
55    pub ore_in: u64,
56    /// Raw units refined this tick (added to `shard_balance` before mint in `claim_shards`).
57    pub dojo_out: u64,
58}
59
60#[repr(C)]
61#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
62pub struct ShardsClaimed {
63    pub dojo: Pubkey,
64    /// SPL $DOJO minted by `claim_shards`.
65    pub amount_raw: u64,
66    pub slot: u64,
67}
68
69#[repr(C)]
70#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
71pub struct ShogunMerged {
72    pub dojo: Pubkey,
73    pub pool_index: u64,
74    pub rarity: u64,
75    pub merge_type: u64,
76}
77
78#[repr(C)]
79#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
80pub struct ShogunPrestigeUpgraded {
81    pub dojo: Pubkey,
82    pub pool_index: u64,
83    pub new_prestige: u64,
84    pub new_spirit_power: u64,
85}
86
87#[repr(C)]
88#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
89pub struct EmissionMinted {
90    pub amount: u64,
91    pub slot: u64,
92}
93
94#[repr(C)]
95#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
96pub struct ReferralRewardClaimed {
97    pub referrer: Pubkey,
98    pub referrer_dojo: Pubkey,
99    pub amount: u64,
100}
101
102#[repr(C)]
103#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
104pub struct TaskClaimed {
105    pub dojo: Pubkey,
106    pub task_id: u64,
107    pub recruitment_tickets: u64,
108}
109
110#[repr(C)]
111#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
112pub struct SceneSectionsSalvaged {
113    pub dojo: Pubkey,
114    pub amethyst_refund: u64,
115}
116
117#[repr(C)]
118#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
119pub struct SceneSectionsRolled {
120    pub dojo: Pubkey,
121    pub count: u64,
122    pub payment_type: u8, // 0 = amethyst, 1 = shards
123    pub _pad: [u8; 7],
124    pub seed: [u8; 32],
125}
126
127#[repr(C)]
128#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
129pub struct ChestBought {
130    pub dojo: Pubkey,
131    pub amethyst_amount: u64,
132}
133
134#[repr(C)]
135#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
136pub struct SceneBought {
137    pub dojo: Pubkey,
138    pub scene_id: u64,
139}
140
141#[repr(C)]
142#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
143pub struct ActiveSceneUpdated {
144    pub dojo: Pubkey,
145    pub scene_id: u64,
146}
147
148#[repr(C)]
149#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
150pub struct ShogunLeveledUp {
151    pub dojo: Pubkey,
152    pub slot: u64,
153    pub new_level: u64,
154}
155
156#[repr(C)]
157#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
158pub struct ChakraRecovered {
159    pub dojo: Pubkey,
160    pub slot: u64,
161    pub tier: u64,
162}
163
164#[repr(C)]
165#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
166pub struct BarracksUpgraded {
167    pub dojo: Pubkey,
168    pub new_level: u64,
169}
170
171#[repr(C)]
172#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
173pub struct ForgeUpgraded {
174    pub dojo: Pubkey,
175    pub new_level: u64,
176}
177
178#[repr(C)]
179#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
180pub struct BundleBought {
181    pub dojo: Pubkey,
182    pub tickets: u64,
183}
184
185#[repr(C)]
186#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
187pub struct TicketsBoughtWithShards {
188    pub dojo: Pubkey,
189    pub tickets: u64,
190}
191
192#[repr(C)]
193#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
194pub struct FlashSaleBought {
195    pub dojo: Pubkey,
196    pub tickets: u64,
197}
198
199#[repr(C)]
200#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
201pub struct ForgeCooldownCleared {
202    pub dojo: Pubkey,
203}
204
205#[repr(C)]
206#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
207pub struct BattleResolved {
208    pub attacker_dojo: Pubkey,
209    pub defender_dojo: Pubkey,
210    pub attacker_won: u8,
211    pub _pad: [u8; 7],
212    pub roll_bps: u64,
213    pub win_probability_bps: u64,
214    pub points_moved: u64,
215    pub attacker_bp_after: u64,
216    pub defender_bp_after: u64,
217    pub slot: u64,
218}
219
220event!(DojoInitialized);
221event!(ShogunRecruited);
222event!(ShogunAssignedToBarracks);
223event!(ShogunUnassignedFromBarracks);
224event!(OreMined);
225event!(OreRefined);
226event!(ShardsClaimed);
227event!(ShogunMerged);
228event!(ShogunPrestigeUpgraded);
229event!(EmissionMinted);
230event!(ReferralRewardClaimed);
231event!(TaskClaimed);
232event!(SceneSectionsSalvaged);
233event!(SceneSectionsRolled);
234event!(ChestBought);
235event!(SceneBought);
236event!(ActiveSceneUpdated);
237event!(ShogunLeveledUp);
238event!(ChakraRecovered);
239event!(BarracksUpgraded);
240event!(ForgeUpgraded);
241event!(BundleBought);
242event!(TicketsBoughtWithShards);
243event!(FlashSaleBought);
244event!(ForgeCooldownCleared);
245event!(BattleResolved);