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    pub dojo_out: u64, // Shards (raw $DOJO when claimed)
57}
58
59#[repr(C)]
60#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
61pub struct ShardsClaimed {
62    pub dojo: Pubkey,
63    pub amount_raw: u64,
64    pub slot: u64,
65}
66
67#[repr(C)]
68#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
69pub struct ShogunMerged {
70    pub dojo: Pubkey,
71    pub pool_index: u64,
72    pub rarity: u64,
73    pub merge_type: u64,
74}
75
76#[repr(C)]
77#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
78pub struct ShogunPrestigeUpgraded {
79    pub dojo: Pubkey,
80    pub pool_index: u64,
81    pub new_prestige: u64,
82    pub new_spirit_power: u64,
83}
84
85#[repr(C)]
86#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
87pub struct EmissionMinted {
88    pub amount: u64,
89    pub slot: u64,
90}
91
92#[repr(C)]
93#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
94pub struct ReferralRewardClaimed {
95    pub referrer: Pubkey,
96    pub referrer_dojo: Pubkey,
97    pub amount: u64,
98}
99
100#[repr(C)]
101#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
102pub struct TaskClaimed {
103    pub dojo: Pubkey,
104    pub task_id: u64,
105    pub recruitment_tickets: u64,
106}
107
108#[repr(C)]
109#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
110pub struct SceneSectionsSalvaged {
111    pub dojo: Pubkey,
112    pub amethyst_refund: u64,
113}
114
115#[repr(C)]
116#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
117pub struct SceneSectionsRolled {
118    pub dojo: Pubkey,
119    pub count: u64,
120    pub payment_type: u8, // 0 = amethyst, 1 = shards
121    pub _pad: [u8; 7],
122    pub seed: [u8; 32],
123}
124
125#[repr(C)]
126#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
127pub struct ChestBought {
128    pub dojo: Pubkey,
129    pub amethyst_amount: u64,
130}
131
132#[repr(C)]
133#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
134pub struct SceneBought {
135    pub dojo: Pubkey,
136    pub scene_id: u64,
137}
138
139#[repr(C)]
140#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
141pub struct ActiveSceneUpdated {
142    pub dojo: Pubkey,
143    pub scene_id: u64,
144}
145
146#[repr(C)]
147#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
148pub struct ShogunLeveledUp {
149    pub dojo: Pubkey,
150    pub slot: u64,
151    pub new_level: u64,
152}
153
154#[repr(C)]
155#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
156pub struct ChakraRecovered {
157    pub dojo: Pubkey,
158    pub slot: u64,
159    pub tier: u64,
160}
161
162#[repr(C)]
163#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
164pub struct BarracksUpgraded {
165    pub dojo: Pubkey,
166    pub new_level: u64,
167}
168
169#[repr(C)]
170#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
171pub struct ForgeUpgraded {
172    pub dojo: Pubkey,
173    pub new_level: u64,
174}
175
176#[repr(C)]
177#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
178pub struct BundleBought {
179    pub dojo: Pubkey,
180    pub tickets: u64,
181}
182
183#[repr(C)]
184#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
185pub struct TicketsBoughtWithShards {
186    pub dojo: Pubkey,
187    pub tickets: u64,
188}
189
190#[repr(C)]
191#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
192pub struct FlashSaleBought {
193    pub dojo: Pubkey,
194    pub tickets: u64,
195}
196
197#[repr(C)]
198#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
199pub struct ForgeCooldownCleared {
200    pub dojo: Pubkey,
201}
202
203event!(DojoInitialized);
204event!(ShogunRecruited);
205event!(ShogunAssignedToBarracks);
206event!(ShogunUnassignedFromBarracks);
207event!(OreMined);
208event!(OreRefined);
209event!(ShardsClaimed);
210event!(ShogunMerged);
211event!(ShogunPrestigeUpgraded);
212event!(EmissionMinted);
213event!(ReferralRewardClaimed);
214event!(TaskClaimed);
215event!(SceneSectionsSalvaged);
216event!(SceneSectionsRolled);
217event!(ChestBought);
218event!(SceneBought);
219event!(ActiveSceneUpdated);
220event!(ShogunLeveledUp);
221event!(ChakraRecovered);
222event!(BarracksUpgraded);
223event!(ForgeUpgraded);
224event!(BundleBought);
225event!(TicketsBoughtWithShards);
226event!(FlashSaleBought);
227event!(ForgeCooldownCleared);