diff --git a/contracts/oracle/src/lib.rs b/contracts/oracle/src/lib.rs index 2c5d532..9a3b7a0 100644 --- a/contracts/oracle/src/lib.rs +++ b/contracts/oracle/src/lib.rs @@ -82,6 +82,7 @@ impl OracleContract { &ResultEntry { game_id, result: result.clone(), + submitter: admin.clone(), }, ); env.storage().persistent().extend_ttl( @@ -397,6 +398,18 @@ mod tests { assert_eq!(entry.result, Winner::Player1); } + /// Issue #564 — ResultEntry must record the admin address that submitted the result. + #[test] + fn test_submit_result_stores_submitter() { + let (env, contract_id, _escrow_id, oracle_admin, ..) = setup(); + let client = OracleContractClient::new(&env, &contract_id); + + client.submit_result(&0u64, &String::from_str(&env, "abc123"), &Winner::Player1); + + let entry = client.get_result(&0u64); + assert_eq!(entry.submitter, oracle_admin); + } + #[test] fn test_submit_result_emits_event() { let (env, contract_id, ..) = setup(); diff --git a/contracts/oracle/src/types.rs b/contracts/oracle/src/types.rs index 9c2bc7b..67536f2 100644 --- a/contracts/oracle/src/types.rs +++ b/contracts/oracle/src/types.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{contracttype, String}; +use soroban_sdk::{contracttype, Address, String}; /// Canonical result enum shared conceptually with the escrow contract. /// Variants mirror escrow's `Winner` enum for consistency. @@ -15,6 +15,8 @@ pub enum Winner { pub struct ResultEntry { pub game_id: String, pub result: Winner, + /// Address of the admin who submitted this result. + pub submitter: Address, } #[contracttype]