From ac7507a565156e47f6a4c9c1000a39354b634d6a Mon Sep 17 00:00:00 2001 From: JTKaduma Date: Sat, 30 May 2026 13:08:42 +0100 Subject: [PATCH] fix: escrow initiaization --- contracts/escrow/src/lib.rs | 3 ++- contracts/escrow/src/tests/lifecycle.rs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs index ff9f8df..991140b 100644 --- a/contracts/escrow/src/lib.rs +++ b/contracts/escrow/src/lib.rs @@ -28,10 +28,11 @@ impl EscrowContract { /// trivially, permanently compromising result submission. /// /// # Errors + /// - [`Error::AlreadyInitialized`] — contract has already been initialized. /// - [`Error::InvalidAddress`] — `oracle` is the escrow contract's own address. pub fn initialize(env: Env, oracle: Address, admin: Address) -> Result<(), Error> { if env.storage().instance().has(&DataKey::Oracle) { - panic!("Contract already initialized"); + return Err(Error::AlreadyInitialized); } if oracle == env.current_contract_address() { return Err(Error::InvalidAddress); diff --git a/contracts/escrow/src/tests/lifecycle.rs b/contracts/escrow/src/tests/lifecycle.rs index b2d062a..bb20238 100644 --- a/contracts/escrow/src/tests/lifecycle.rs +++ b/contracts/escrow/src/tests/lifecycle.rs @@ -60,7 +60,6 @@ fn test_initialize_rejects_contract_address_as_oracle() { } #[test] -#[should_panic(expected = "Contract already initialized")] fn test_double_initialize_fails() { let env = Env::default(); env.mock_all_auths(); @@ -73,7 +72,8 @@ fn test_double_initialize_fails() { let client = EscrowContractClient::new(&env, &contract_id); client.initialize(&oracle1, &admin); - client.initialize(&oracle2, &admin); + let result = client.try_initialize(&oracle2, &admin); + assert_eq!(result, Err(Ok(Error::AlreadyInitialized))); } #[test]