From b46ecc5f919163ce827bb6e661f8b95f40f42329 Mon Sep 17 00:00:00 2001 From: Syed Ghufran Hassan Date: Sun, 28 Jun 2026 14:59:15 +0500 Subject: [PATCH] feat(events): add TreasuryWithdrawalEvent for protocol fee withdrawals - Add TREASURY_WITHDRAWAL_EVENT_NAME constant - Add TreasuryWithdrawalEvent struct with amount, recipient, remaining_balance, ledger - Add treasury_withdrawal_topics() helper for consistent event emission - Add field count and field order constants for indexer compatibility --- creator-keys/src/events.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/creator-keys/src/events.rs b/creator-keys/src/events.rs index 0abde54..20f7513 100644 --- a/creator-keys/src/events.rs +++ b/creator-keys/src/events.rs @@ -258,3 +258,32 @@ pub struct KeysTransferredEvent { pub amount: u32, pub ledger: u32, } + +/// Event name for treasury withdrawal. +pub const TREASURY_WITHDRAWAL_EVENT_NAME: Symbol = symbol_short!("treasury_wd"); + +/// Stable field order for treasury withdrawal event payloads. +pub const TREASURY_WITHDRAWAL_DATA_FIELDS: [&str; 4] = + ["amount", "recipient", "remaining_balance", "ledger"]; + +/// Number of fields in the treasury withdrawal event data payload. +pub const TREASURY_WITHDRAWAL_FIELD_COUNT: usize = TREASURY_WITHDRAWAL_DATA_FIELDS.len(); + +/// Treasury withdrawal event payload for downstream indexers. +/// +/// Event shape: +/// - topics: `(TREASURY_WITHDRAWAL_EVENT_NAME, admin)` +/// - data: `TreasuryWithdrawalEvent` +#[derive(Clone, Debug, Eq, PartialEq)] +#[contracttype] +pub struct TreasuryWithdrawalEvent { + pub amount: i128, + pub recipient: Address, + pub remaining_balance: i128, + pub ledger: u32, +} + +/// Shared treasury withdrawal event topics tuple. +pub fn treasury_withdrawal_topics(admin: &Address) -> (Symbol, Address) { + (TREASURY_WITHDRAWAL_EVENT_NAME, admin.clone()) +}