From 2fcd38b0162ad7ad734366528f7f60d2c406fc69 Mon Sep 17 00:00:00 2001 From: "0x_Dave." Date: Wed, 27 May 2026 15:41:21 +0000 Subject: [PATCH] feat(oracle): store submitted_ledger in ResultEntry (#563) --- contracts/oracle/src/lib.rs | 17 +++++++++++++++++ contracts/oracle/src/types.rs | 2 ++ 2 files changed, 19 insertions(+) diff --git a/contracts/oracle/src/lib.rs b/contracts/oracle/src/lib.rs index 2c5d532..2e23b01 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(), + submitted_ledger: env.ledger().sequence(), }, ); env.storage().persistent().extend_ttl( @@ -397,6 +398,22 @@ mod tests { assert_eq!(entry.result, Winner::Player1); } + /// Issue #563 — ResultEntry must record the ledger at which the result was submitted. + #[test] + fn test_submit_result_stores_submitted_ledger() { + let (env, contract_id, ..) = setup(); + let client = OracleContractClient::new(&env, &contract_id); + + let ledger_before = env.ledger().sequence(); + client.submit_result(&0u64, &String::from_str(&env, "abc123"), &Winner::Player1); + + let entry = client.get_result(&0u64); + assert!( + entry.submitted_ledger >= ledger_before, + "submitted_ledger must be >= ledger at call time" + ); + } + #[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..e38f73a 100644 --- a/contracts/oracle/src/types.rs +++ b/contracts/oracle/src/types.rs @@ -15,6 +15,8 @@ pub enum Winner { pub struct ResultEntry { pub game_id: String, pub result: Winner, + /// Ledger sequence number at which this result was submitted. + pub submitted_ledger: u32, } #[contracttype]