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