Skip to main content

sla_escrow_api/
event.rs

1use steel::*;
2
3// Core Payment Events
4#[repr(C)]
5#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
6pub struct PaymentCreatedWithFundEvent {
7    pub payment_uid: [u8; 32],    // 32 bytes
8    pub sla_hash: [u8; 32],       // 32 bytes
9    pub escrow: Pubkey,           // 32 bytes
10    pub buyer: Pubkey,            // 32 bytes
11    pub seller: Pubkey,           // 32 bytes
12    pub mint: Pubkey,             // 32 bytes
13    pub oracle_authority: Pubkey, // 32 bytes
14    pub amount: u64,              // 8 bytes
15    pub expires_at: i64,          // 8 bytes
16    pub timestamp: i64,           // 8 bytes
17    pub state: u8,                // 1 byte
18    pub _padding: [u8; 7],        // 7 bytes padding
19}
20
21#[repr(C)]
22#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
23pub struct DeliverySubmittedEvent {
24    pub payment_uid: [u8; 32],   // 32 bytes
25    pub delivery_hash: [u8; 32], // 32 bytes
26    pub timestamp: i64,          // 8 bytes
27    pub seller: Pubkey,          // 32 bytes
28}
29
30#[repr(C)]
31#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
32pub struct PaymentOracleConfirmedEvent {
33    pub payment_uid: [u8; 32],    // 32 bytes - payment unique identifier
34    pub oracle_authority: Pubkey, // 32 bytes - oracle authority
35    pub delivery_hash: [u8; 32],  // 32 bytes
36    pub sla_hash: [u8; 32],       // 32 bytes - SLA requirements hash (saves indexer cross-ref)
37    pub amount: u64,              // 8 bytes - escrowed amount (for oracle dashboards/reputation)
38    pub timestamp: i64,           // 8 bytes
39
40    pub resolution_reason: u16, // 2 bytes - reason code (see ResolutionReason enum)
41    pub resolution_state: u8,   // 1 byte
42    pub _padding: [u8; 5],      // 5 bytes padding
43}
44
45#[repr(C)]
46#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
47pub struct PaymentFundedEvent {
48    pub payment_uid: [u8; 32], // 32 bytes - payment unique identifier
49    pub mint: Pubkey,          // 32 bytes
50    pub amount: u64,           // 8 bytes
51    pub timestamp: i64,        // 8 bytes
52    pub buyer: Pubkey,         // 32 bytes
53}
54
55#[repr(C)]
56#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
57pub struct PaymentReleasedEvent {
58    pub payment_uid: [u8; 32], // 32 bytes - payment unique identifier
59    pub mint: Pubkey,          // 32 bytes
60    pub amount: u64,           // 8 bytes
61    pub oracle_tip: u64,       // 8 bytes — tip paid to oracle (0 if none)
62    pub timestamp: i64,        // 8 bytes
63    pub seller: Pubkey,        // 32 bytes
64    pub is_expired: u8,        // 1 byte - 1 if expired, 0 if manual release
65    pub _padding: [u8; 7],     // 7 bytes padding
66}
67
68#[repr(C)]
69#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
70pub struct PaymentRefundedEvent {
71    pub payment_uid: [u8; 32], // 32 bytes - payment unique identifier
72    pub mint: Pubkey,          // 32 bytes
73    pub amount: u64,           // 8 bytes
74    pub oracle_tip: u64,       // 8 bytes — tip deducted from refund (0 if none)
75    pub timestamp: i64,        // 8 bytes
76    pub buyer: Pubkey,         // 32 bytes
77}
78
79#[repr(C)]
80#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
81pub struct PaymentExpiredEvent {
82    pub payment_uid: [u8; 32], // 32 bytes - payment unique identifier
83    pub mint: Pubkey,          // 32 bytes
84    pub amount: u64,           // 8 bytes
85    pub timestamp: i64,        // 8 bytes
86    pub buyer: Pubkey,         // 32 bytes
87    pub seller: Pubkey,        // 32 bytes
88}
89
90#[repr(C)]
91#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
92pub struct PaymentClosedEvent {
93    pub payment_uid: [u8; 32], // 32 bytes - payment unique identifier
94    pub timestamp: i64,        // 8 bytes
95    pub closer: Pubkey,        // 32 bytes
96}
97
98// Payment Management Events
99#[repr(C)]
100#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
101pub struct PaymentTTLExtendedEvent {
102    pub payment_uid: [u8; 32],   // 32 bytes - payment unique identifier
103    pub additional_seconds: i64, // 8 bytes
104    pub new_expires_at: i64,     // 8 bytes
105    pub timestamp: i64,          // 8 bytes
106    pub buyer: Pubkey,           // 32 bytes
107}
108
109// Escrow Management Events
110#[repr(C)]
111#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
112pub struct EscrowCreatedEvent {
113    pub timestamp: i64,          // 8 bytes
114    pub escrow: Pubkey,          // 32 bytes
115    pub mint: Pubkey,            // 32 bytes
116    pub authority: Pubkey,       // 32 bytes
117    pub min_payment_amount: u64, // 8 bytes
118    pub max_payment_amount: u64, // 8 bytes
119    pub fee_bps: u16,            // 2 bytes
120    pub paused: u8,              // 1 byte
121    // Total: 8+32+32+32+8+8+2+1 = 123 bytes, need 5 bytes padding for 128-byte alignment
122    pub _padding: [u8; 5], // 5 bytes padding
123}
124
125#[repr(C)]
126#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
127pub struct EscrowClosedEvent {
128    pub timestamp: i64, // 8 bytes
129    pub escrow: Pubkey, // 32 bytes
130    pub mint: Pubkey,   // 32 bytes
131    pub authority: Pubkey, // 32 bytes
132                        // Total: 8+32+32+32 = 104 bytes (already 8-byte aligned)
133}
134
135#[repr(C)]
136#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
137pub struct EscrowSettingsUpdatedEvent {
138    pub escrow: Pubkey,          // 32 bytes
139    pub mint: Pubkey,            // 32 bytes
140    pub authority: Pubkey,       // 32 bytes
141    pub min_payment_amount: u64, // 8 bytes
142    pub max_payment_amount: u64, // 8 bytes
143    pub min_fee_amount: u64,     // 8 bytes
144    pub timestamp: i64,          // 8 bytes
145    pub new_fee_bps: u16,        // 2 bytes
146    // Total: 32+32+32+8+8+8+8+2 = 130 bytes, need 6 bytes padding for 136-byte alignment
147    pub _padding: [u8; 6], // 6 bytes padding
148}
149
150#[repr(C)]
151#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
152pub struct EscrowPausedEvent {
153    pub escrow: Pubkey,    // 32 bytes
154    pub mint: Pubkey,      // 32 bytes
155    pub authority: Pubkey, // 32 bytes
156    pub timestamp: i64,    // 8 bytes
157    pub paused: u8,        // 1 byte
158    // Total: 32+32+32+8+1 = 105 bytes, need 7 bytes padding for 112-byte alignment
159    pub _padding: [u8; 7], // 7 bytes padding
160}
161
162// Bank Management Events
163#[repr(C)]
164#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
165pub struct BankInitializedEvent {
166    pub timestamp: i64,    // 8 bytes
167    pub bank: Pubkey,      // 32 bytes
168    pub authority: Pubkey, // 32 bytes
169    pub fee_bps: u16,      // 2 bytes
170    // Total: 8+32+32+2 = 74 bytes, need 6 bytes padding for 80-byte alignment
171    pub _padding: [u8; 6], // 6 bytes padding
172}
173
174#[repr(C)]
175#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
176pub struct AuthorityUpdatedEvent {
177    pub timestamp: i64,        // 8 bytes
178    pub bank: Pubkey,          // 32 bytes
179    pub old_authority: Pubkey, // 32 bytes
180    pub new_authority: Pubkey, // 32 bytes
181                               // Total: 8+32+32+32 = 104 bytes (already 8-byte aligned)
182}
183
184#[repr(C)]
185#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
186pub struct FeesWithdrawnEvent {
187    pub timestamp: i64, // 8 bytes
188    pub amount: u64,    // 8 bytes
189    pub escrow: Pubkey, // 32 bytes
190    pub mint: Pubkey,   // 32 bytes
191    pub authority: Pubkey, // 32 bytes
192                        // Total: 8+8+32+32+32 = 112 bytes (already 8-byte aligned)
193}
194
195#[repr(C)]
196#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
197pub struct ConfigUpdatedEvent {
198    pub timestamp: i64,               // 8 bytes
199    pub authority: Pubkey,            // 32 bytes
200    pub closure_delay_seconds: i64,   // 8 bytes
201    pub refund_cooldown_seconds: i64, // 8 bytes
202    pub delivery_cutoff_seconds: i64, // 8 bytes
203                                      // Total: 8+32+8+8+8 = 64 bytes (already 8-byte aligned)
204}
205
206#[repr(C)]
207#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
208pub struct AuthorityProposedEvent {
209    pub timestamp: i64,            // 8 bytes
210    pub bank: Pubkey,              // 32 bytes
211    pub current_authority: Pubkey, // 32 bytes
212    pub proposed_authority: Pubkey, // 32 bytes
213                                   // Total: 8+32+32+32 = 104 bytes (8-byte aligned)
214}
215
216#[repr(C)]
217#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
218pub struct AuthorityProposalCancelledEvent {
219    pub timestamp: i64,              // 8 bytes
220    pub bank: Pubkey,                // 32 bytes
221    pub cancelled_authority: Pubkey, // 32 bytes
222    pub cancelled_by: Pubkey,        // 32 bytes
223                                     // Total: 8+32+32+32 = 104 bytes (8-byte aligned)
224}
225
226// Event Macros
227event!(PaymentCreatedWithFundEvent);
228event!(PaymentOracleConfirmedEvent);
229event!(PaymentFundedEvent);
230event!(PaymentReleasedEvent);
231event!(PaymentRefundedEvent);
232event!(PaymentExpiredEvent);
233event!(PaymentClosedEvent);
234event!(PaymentTTLExtendedEvent);
235event!(EscrowCreatedEvent);
236event!(EscrowClosedEvent);
237event!(EscrowSettingsUpdatedEvent);
238event!(EscrowPausedEvent);
239event!(BankInitializedEvent);
240event!(AuthorityUpdatedEvent);
241event!(FeesWithdrawnEvent);
242event!(DeliverySubmittedEvent);
243event!(ConfigUpdatedEvent);
244event!(AuthorityProposedEvent);
245event!(AuthorityProposalCancelledEvent);