From ca4b861ed4411e00eefc24f52e579e5ed450fc8e Mon Sep 17 00:00:00 2001 From: Blessings Abel Date: Sat, 28 Mar 2026 22:08:38 +0000 Subject: [PATCH 1/2] feat: add get_organizer_address helper to EventRegistry contract --- contract/contracts/event_registry/src/lib.rs | 20 +++++++++++++------ .../contracts/ticket_payment/src/contract.rs | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/contract/contracts/event_registry/src/lib.rs b/contract/contracts/event_registry/src/lib.rs index ad31a2b..5230b5f 100644 --- a/contract/contracts/event_registry/src/lib.rs +++ b/contract/contracts/event_registry/src/lib.rs @@ -505,6 +505,17 @@ impl EventRegistry { storage::get_event(&env, event_id) } + /// Returns the organizer address for a given event ID. + /// Returns `EventNotFound` if the event does not exist. + pub fn get_organizer_address( + env: Env, + event_id: String, + ) -> Result { + storage::get_event(&env, event_id) + .map(|e| e.organizer_address) + .ok_or(EventRegistryError::EventNotFound) + } + /// Returns the total number of tickets sold for an event across all tiers. pub fn get_total_tickets_sold(env: Env, event_id: String) -> Result { let event = storage::get_event(&env, event_id).ok_or(EventRegistryError::EventNotFound)?; @@ -1019,11 +1030,8 @@ impl EventRegistry { event_id: String, scanner: Address, ) -> Result<(), EventRegistryError> { - let event_info = - storage::get_event(&env, event_id.clone()).ok_or(EventRegistryError::EventNotFound)?; - - // Only the organizer can authorize scanners - event_info.organizer_address.require_auth(); + let organizer = Self::get_organizer_address(env.clone(), event_id.clone())?; + organizer.require_auth(); storage::authorize_scanner(&env, event_id.clone(), &scanner); @@ -1032,7 +1040,7 @@ impl EventRegistry { ScannerAuthorizedEvent { event_id, scanner, - authorized_by: event_info.organizer_address, + authorized_by: organizer, timestamp: env.ledger().timestamp(), }, ); diff --git a/contract/contracts/ticket_payment/src/contract.rs b/contract/contracts/ticket_payment/src/contract.rs index 99cc4e3..ddf3ede 100644 --- a/contract/contracts/ticket_payment/src/contract.rs +++ b/contract/contracts/ticket_payment/src/contract.rs @@ -102,6 +102,7 @@ pub mod event_registry { pub trait EventRegistryInterface { fn get_event_payment_info(env: Env, event_id: String) -> PaymentInfo; fn get_event(env: Env, event_id: String) -> Option; + fn get_organizer_address(env: Env, event_id: String) -> Result; fn increment_inventory(env: Env, event_id: String, tier_id: String, quantity: u32); fn decrement_inventory(env: Env, event_id: String, tier_id: String); fn get_global_promo_bps(env: Env) -> u32; From 4bdd6269e0581021b7291acb442a90b5f7307803 Mon Sep 17 00:00:00 2001 From: Blessings Abel Date: Sat, 28 Mar 2026 22:15:54 +0000 Subject: [PATCH 2/2] fix: use Option
return type for get_organizer_address to satisfy contractclient trait bounds --- contract/contracts/event_registry/src/lib.rs | 15 +++++---------- contract/contracts/ticket_payment/src/contract.rs | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/contract/contracts/event_registry/src/lib.rs b/contract/contracts/event_registry/src/lib.rs index 5230b5f..dd01384 100644 --- a/contract/contracts/event_registry/src/lib.rs +++ b/contract/contracts/event_registry/src/lib.rs @@ -505,15 +505,9 @@ impl EventRegistry { storage::get_event(&env, event_id) } - /// Returns the organizer address for a given event ID. - /// Returns `EventNotFound` if the event does not exist. - pub fn get_organizer_address( - env: Env, - event_id: String, - ) -> Result { - storage::get_event(&env, event_id) - .map(|e| e.organizer_address) - .ok_or(EventRegistryError::EventNotFound) + /// Returns the organizer address for a given event ID, or `None` if the event does not exist. + pub fn get_organizer_address(env: Env, event_id: String) -> Option
{ + storage::get_event(&env, event_id).map(|e| e.organizer_address) } /// Returns the total number of tickets sold for an event across all tiers. @@ -1030,7 +1024,8 @@ impl EventRegistry { event_id: String, scanner: Address, ) -> Result<(), EventRegistryError> { - let organizer = Self::get_organizer_address(env.clone(), event_id.clone())?; + let organizer = Self::get_organizer_address(env.clone(), event_id.clone()) + .ok_or(EventRegistryError::EventNotFound)?; organizer.require_auth(); storage::authorize_scanner(&env, event_id.clone(), &scanner); diff --git a/contract/contracts/ticket_payment/src/contract.rs b/contract/contracts/ticket_payment/src/contract.rs index ddf3ede..c0b78da 100644 --- a/contract/contracts/ticket_payment/src/contract.rs +++ b/contract/contracts/ticket_payment/src/contract.rs @@ -102,7 +102,7 @@ pub mod event_registry { pub trait EventRegistryInterface { fn get_event_payment_info(env: Env, event_id: String) -> PaymentInfo; fn get_event(env: Env, event_id: String) -> Option; - fn get_organizer_address(env: Env, event_id: String) -> Result; + fn get_organizer_address(env: Env, event_id: String) -> Option
; fn increment_inventory(env: Env, event_id: String, tier_id: String, quantity: u32); fn decrement_inventory(env: Env, event_id: String, tier_id: String); fn get_global_promo_bps(env: Env) -> u32;