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
108event!(DojoInitialized);
109event!(ShogunRecruited);
110event!(ShogunAssignedToBarracks);
111event!(ShogunUnassignedFromBarracks);
112event!(OreMined);
113event!(OreRefined);
114event!(ShardsClaimed);
115event!(ShogunMerged);
116event!(ShogunPrestigeUpgraded);
117event!(EmissionMinted);
118event!(ReferralRewardClaimed);
119event!(TaskClaimed);