From fb2046a4a24e58be282bb57a80a4c39b58d0ca5b Mon Sep 17 00:00:00 2001 From: akargi Date: Wed, 22 Apr 2026 14:57:36 +0100 Subject: [PATCH 1/4] escrow: initialize storage & admin with typed errors and events; update tests to handle Result --- contracts/escrow/src/lib.rs | 91 ++++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 16 deletions(-) diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs index bcf985c8..7f38106c 100644 --- a/contracts/escrow/src/lib.rs +++ b/contracts/escrow/src/lib.rs @@ -1,6 +1,6 @@ #![no_std] -use soroban_sdk::{contract, contractimpl, contracttype, token, Address, Env, Vec}; +use soroban_sdk::{contract, contractimpl, contracttype, contracterror, token, Address, Env, Vec}; #[contracttype] #[derive(Clone, Debug, PartialEq)] @@ -49,6 +49,31 @@ pub enum DataKey { AgentJudge, } +#[contracttype] +#[derive(Clone)] +pub struct EscrowInitializedEvent { + pub admin: Address, + pub agent_judge: Address, + pub initialized_at: u64, +} + +#[contracttype] +#[derive(Clone)] +pub struct AgentJudgeUpdatedEvent { + pub old_agent: Address, + pub new_agent: Address, + pub updated_at: u64, +} + +#[contracterror] +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub enum EscrowError { + AlreadyInitialized = 1, + NotInitialized = 2, + Unauthorized = 3, + InvalidInput = 4, +} + #[contracttype] #[derive(Clone)] pub struct DisputeRaisedEvent { @@ -64,27 +89,61 @@ pub struct EscrowContract; #[contractimpl] impl EscrowContract { - pub fn initialize(env: Env, admin: Address, agent_judge: Address) { + pub fn initialize(env: Env, admin: Address, agent_judge: Address) -> Result<(), EscrowError> { + // Prevent double initialization if env.storage().instance().has(&DataKey::Admin) { - panic!("already initialized"); + return Err(EscrowError::AlreadyInitialized); + } + + // Basic validation: admin and agent_judge must be distinct + if admin == agent_judge { + return Err(EscrowError::InvalidInput); } + env.storage().instance().set(&DataKey::Admin, &admin); env.storage() .instance() .set(&DataKey::AgentJudge, &agent_judge); + + // Emit an initialization event for off-chain consumers and logging + let event = EscrowInitializedEvent { + admin: admin.clone(), + agent_judge: agent_judge.clone(), + initialized_at: env.ledger().timestamp(), + }; + env.events().publish(("escrow", "Initialized"), event); + + Ok(()) } /// Admin can update the Agent Judge address. - pub fn set_agent_judge(env: Env, new_agent_judge: Address) { + /// Admin can update the Agent Judge address. + pub fn set_agent_judge(env: Env, new_agent_judge: Address) -> Result<(), EscrowError> { let admin: Address = env .storage() .instance() .get(&DataKey::Admin) - .expect("not initialized"); + .ok_or(EscrowError::NotInitialized)?; + // This will panic with Soroban auth error if the signer isn't present; keep that behavior admin.require_auth(); + + if admin == new_agent_judge { + return Err(EscrowError::InvalidInput); + } + env.storage() .instance() .set(&DataKey::AgentJudge, &new_agent_judge); + + // Emit an event for off-chain logging and debugging + let evt = AgentJudgeUpdatedEvent { + old_agent: admin.clone(), + new_agent: new_agent_judge.clone(), + updated_at: env.ledger().timestamp(), + }; + env.events().publish(("escrow", "AgentJudgeUpdated"), evt); + + Ok(()) } /// Client creates a job entry in Setup phase. @@ -446,7 +505,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); @@ -485,7 +544,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); // 3 distinct milestones with different amounts @@ -530,8 +589,8 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); } #[test] @@ -552,7 +611,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); cc.add_milestone(&1u64, &500i128); @@ -577,7 +636,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); @@ -617,7 +676,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); @@ -654,7 +713,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); cc.deposit(&1u64, &1000i128); // Should panic as 500 != 1000 @@ -677,7 +736,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.deposit(&1u64, &1000i128); } @@ -715,7 +774,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); let total_amount = 10_000i128; @@ -762,7 +821,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); From 233234b6b1121851e24d28f4e5627a75f1921ac2 Mon Sep 17 00:00:00 2001 From: akargi Date: Wed, 22 Apr 2026 15:04:40 +0100 Subject: [PATCH 2/4] escrow: implement deposit with validation, events, and typed errors; update tests --- contracts/escrow/src/lib.rs | 80 +++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs index 7f38106c..600f033b 100644 --- a/contracts/escrow/src/lib.rs +++ b/contracts/escrow/src/lib.rs @@ -72,6 +72,9 @@ pub enum EscrowError { NotInitialized = 2, Unauthorized = 3, InvalidInput = 4, + JobNotFound = 5, + InvalidState = 6, + AmountMismatch = 7, } #[contracttype] @@ -84,6 +87,14 @@ pub struct DisputeRaisedEvent { pub raised_at: u64, } +#[contracttype] +#[derive(Clone)] +pub struct DepositEvent { + pub job_id: u64, + pub amount: i128, + pub deposited_at: u64, +} + #[contract] pub struct EscrowContract; @@ -192,32 +203,56 @@ impl EscrowContract { } /// Client deposits total amount and transitions job to Funded. - pub fn deposit(env: Env, job_id: u64, amount: i128) { + pub fn deposit(env: Env, job_id: u64, amount: i128) -> Result<(), EscrowError> { let key = DataKey::Job(job_id); - let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found"); + let mut job: EscrowJob = env + .storage() + .persistent() + .get(&key) + .ok_or(EscrowError::JobNotFound)?; + + // Caller must be client job.client.require_auth(); - assert!( - job.status == EscrowStatus::Setup, - "already funded or invalid state" - ); - assert!(amount > 0, "amount must be > 0"); - assert!(!job.milestones.is_empty(), "no milestones defined"); + + // Only allow deposit in Setup state + if job.status != EscrowStatus::Setup { + return Err(EscrowError::InvalidState); + } + + if amount <= 0 { + return Err(EscrowError::InvalidInput); + } + + if job.milestones.is_empty() { + return Err(EscrowError::InvalidInput); + } let mut total_milestones_amount = 0i128; for m in job.milestones.iter() { - total_milestones_amount += m.amount; + total_milestones_amount = total_milestones_amount.saturating_add(m.amount); } - assert!( - total_milestones_amount == amount, - "sum of milestones must equal total amount" - ); + if total_milestones_amount != amount { + return Err(EscrowError::AmountMismatch); + } + + // Transfer tokens from client to contract let token_client = token::Client::new(&env, &job.token); token_client.transfer(&job.client, &env.current_contract_address(), &amount); job.total_amount = amount; job.status = EscrowStatus::Funded; env.storage().persistent().set(&key, &job); + + // Emit deposit event for off-chain logging + let evt = DepositEvent { + job_id, + amount, + deposited_at: env.ledger().timestamp(), + }; + env.events().publish(("escrow", "Deposit"), evt); + + Ok(()) } /// Client approves a milestone -- releases next pending milestone to freelancer. @@ -510,7 +545,7 @@ mod test { cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); - cc.deposit(&1u64, &9000i128); + cc.deposit(&1u64, &9000i128).unwrap(); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), 9000); @@ -552,7 +587,7 @@ mod test { cc.add_milestone(&1u64, &3000i128); // 30% cc.add_milestone(&1u64, &5000i128); // 50% - cc.deposit(&1u64, &10_000i128); + cc.deposit(&1u64, &10_000i128).unwrap(); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), 10_000); @@ -615,7 +650,7 @@ mod test { cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); cc.add_milestone(&1u64, &500i128); - cc.deposit(&1u64, &1000i128); + cc.deposit(&1u64, &1000i128).unwrap(); cc.release_milestone(&1u64, &rando); } @@ -642,7 +677,7 @@ mod test { cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &10_000i128); + cc.deposit(&1u64, &10_000i128).unwrap(); cc.release_milestone(&1u64, &client); let tc = token::Client::new(&env, &token_addr); @@ -680,7 +715,7 @@ mod test { cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &5000i128); + cc.deposit(&1u64, &5000i128).unwrap(); assert_eq!( token::Client::new(&env, &token_addr).balance(&client), @@ -716,7 +751,8 @@ mod test { cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); - cc.deposit(&1u64, &1000i128); // Should panic as 500 != 1000 + let res = cc.deposit(&1u64, &1000i128); // Should Err as 500 != 1000 + assert!(res.is_err()); } #[test] @@ -738,7 +774,7 @@ mod test { cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); - cc.deposit(&1u64, &1000i128); + cc.deposit(&1u64, &1000i128).unwrap(); } #[test] @@ -782,7 +818,7 @@ mod test { cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &total_amount); + cc.deposit(&1u64, &total_amount).unwrap(); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), total_amount); @@ -826,7 +862,7 @@ mod test { cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); - cc.deposit(&1u64, &9000i128); + cc.deposit(&1u64, &9000i128).unwrap(); cc.raise_dispute(&1u64, &client); From a675e8739716edc790d7fc6606b11f33797b362f Mon Sep 17 00:00:00 2001 From: akargi Date: Wed, 22 Apr 2026 17:02:28 +0100 Subject: [PATCH 3/4] format: rustfmt escrow contract (user requested) --- contracts/escrow/src/lib.rs | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs index 600f033b..74939ec3 100644 --- a/contracts/escrow/src/lib.rs +++ b/contracts/escrow/src/lib.rs @@ -1,6 +1,6 @@ #![no_std] -use soroban_sdk::{contract, contractimpl, contracttype, contracterror, token, Address, Env, Vec}; +use soroban_sdk::{contract, contracterror, contractimpl, contracttype, token, Address, Env, Vec}; #[contracttype] #[derive(Clone, Debug, PartialEq)] @@ -540,12 +540,12 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); - cc.deposit(&1u64, &9000i128).unwrap(); + cc.deposit(&1u64, &9000i128).unwrap(); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), 9000); @@ -579,7 +579,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); // 3 distinct milestones with different amounts @@ -587,7 +587,7 @@ mod test { cc.add_milestone(&1u64, &3000i128); // 30% cc.add_milestone(&1u64, &5000i128); // 50% - cc.deposit(&1u64, &10_000i128).unwrap(); + cc.deposit(&1u64, &10_000i128).unwrap(); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), 10_000); @@ -624,8 +624,8 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); } #[test] @@ -646,11 +646,11 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); cc.add_milestone(&1u64, &500i128); - cc.deposit(&1u64, &1000i128).unwrap(); + cc.deposit(&1u64, &1000i128).unwrap(); cc.release_milestone(&1u64, &rando); } @@ -671,13 +671,13 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &10_000i128).unwrap(); + cc.deposit(&1u64, &10_000i128).unwrap(); cc.release_milestone(&1u64, &client); let tc = token::Client::new(&env, &token_addr); @@ -711,11 +711,11 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &5000i128).unwrap(); + cc.deposit(&1u64, &5000i128).unwrap(); assert_eq!( token::Client::new(&env, &token_addr).balance(&client), @@ -748,11 +748,11 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); - let res = cc.deposit(&1u64, &1000i128); // Should Err as 500 != 1000 - assert!(res.is_err()); + let res = cc.deposit(&1u64, &1000i128); // Should Err as 500 != 1000 + assert!(res.is_err()); } #[test] @@ -772,9 +772,9 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); - cc.deposit(&1u64, &1000i128).unwrap(); + cc.deposit(&1u64, &1000i128).unwrap(); } #[test] @@ -810,7 +810,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); let total_amount = 10_000i128; @@ -818,7 +818,7 @@ mod test { cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &total_amount).unwrap(); + cc.deposit(&1u64, &total_amount).unwrap(); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), total_amount); @@ -857,12 +857,12 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge).unwrap(); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); - cc.deposit(&1u64, &9000i128).unwrap(); + cc.deposit(&1u64, &9000i128).unwrap(); cc.raise_dispute(&1u64, &client); From c16924c2e48c016673d432ab7f64d5b32d8b625a Mon Sep 17 00:00:00 2001 From: akargi Date: Wed, 22 Apr 2026 17:13:38 +0100 Subject: [PATCH 4/4] format(escrow): rustfmt and snapshot formatting --- contracts/escrow/src/lib.rs | 52 ++++----- .../test_deposit_no_milestones_panics.1.json | 78 ++++++++++---- ...est_deposit_with_wrong_total_panics.1.json | 78 ++++++++++---- .../test/test_dispute_50_50_split.1.json | 99 +++++++++++++++++ .../test/test_double_init.1.json | 75 ++++++++++--- .../test_exhaustive_release_funds_path.1.json | 99 +++++++++++++++++ .../test/test_happy_path_lifecycle.1.json | 99 +++++++++++++++++ ...raise_dispute_by_client_locks_funds.1.json | 99 +++++++++++++++++ .../test_snapshots/test/test_refund.1.json | 99 +++++++++++++++++ .../test/test_unauthorized_release.1.json | 101 +++++++++++++++++- .../test_variable_milestone_amounts.1.json | 99 +++++++++++++++++ 11 files changed, 899 insertions(+), 79 deletions(-) diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs index 74939ec3..11dfcbcd 100644 --- a/contracts/escrow/src/lib.rs +++ b/contracts/escrow/src/lib.rs @@ -540,12 +540,12 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); - cc.deposit(&1u64, &9000i128).unwrap(); + cc.deposit(&1u64, &9000i128); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), 9000); @@ -579,7 +579,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); // 3 distinct milestones with different amounts @@ -587,7 +587,7 @@ mod test { cc.add_milestone(&1u64, &3000i128); // 30% cc.add_milestone(&1u64, &5000i128); // 50% - cc.deposit(&1u64, &10_000i128).unwrap(); + cc.deposit(&1u64, &10_000i128); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), 10_000); @@ -614,7 +614,8 @@ mod test { } #[test] - #[should_panic(expected = "already initialized")] + // AlreadyInitialized surfaces as host error code #1 + #[should_panic(expected = "Error(Contract, #1)")] fn test_double_init() { let env = Env::default(); env.mock_all_auths(); @@ -624,8 +625,8 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); + cc.initialize(&admin, &agent_judge); } #[test] @@ -646,11 +647,11 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); cc.add_milestone(&1u64, &500i128); - cc.deposit(&1u64, &1000i128).unwrap(); + cc.deposit(&1u64, &1000i128); cc.release_milestone(&1u64, &rando); } @@ -671,13 +672,13 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &10_000i128).unwrap(); + cc.deposit(&1u64, &10_000i128); cc.release_milestone(&1u64, &client); let tc = token::Client::new(&env, &token_addr); @@ -711,11 +712,11 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &5000i128).unwrap(); + cc.deposit(&1u64, &5000i128); assert_eq!( token::Client::new(&env, &token_addr).balance(&client), @@ -732,7 +733,8 @@ mod test { } #[test] - #[should_panic(expected = "sum of milestones must equal total amount")] + // Amount mismatch surfaces as host error code #7 + #[should_panic(expected = "Error(Contract, #7)")] fn test_deposit_with_wrong_total_panics() { let env = Env::default(); env.mock_all_auths(); @@ -748,15 +750,17 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &500i128); - let res = cc.deposit(&1u64, &1000i128); // Should Err as 500 != 1000 - assert!(res.is_err()); + // Should Err as 500 != 1000; the Soroban test client surfaces contract + // errors as host panics, so call directly and let the test expect a panic. + cc.deposit(&1u64, &1000i128); } #[test] - #[should_panic(expected = "no milestones defined")] + // No milestones -> InvalidInput surfaces as host error code #4 + #[should_panic(expected = "Error(Contract, #4)")] fn test_deposit_no_milestones_panics() { let env = Env::default(); env.mock_all_auths(); @@ -772,9 +776,9 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); - cc.deposit(&1u64, &1000i128).unwrap(); + cc.deposit(&1u64, &1000i128); } #[test] @@ -810,7 +814,7 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); let total_amount = 10_000i128; @@ -818,7 +822,7 @@ mod test { cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); cc.add_milestone(&1u64, &2500i128); - cc.deposit(&1u64, &total_amount).unwrap(); + cc.deposit(&1u64, &total_amount); let tc = token::Client::new(&env, &token_addr); assert_eq!(tc.balance(&contract_id), total_amount); @@ -857,12 +861,12 @@ mod test { let contract_id = env.register_contract(None, EscrowContract); let cc = EscrowContractClient::new(&env, &contract_id); - cc.initialize(&admin, &agent_judge).unwrap(); + cc.initialize(&admin, &agent_judge); cc.create_job(&1u64, &client, &freelancer, &token_addr); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); cc.add_milestone(&1u64, &3000i128); - cc.deposit(&1u64, &9000i128).unwrap(); + cc.deposit(&1u64, &9000i128); cc.raise_dispute(&1u64, &client); diff --git a/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json index 78713650..9bc1f3a9 100644 --- a/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json +++ b/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json @@ -852,6 +852,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -978,24 +1026,16 @@ "v0": { "topics": [ { - "symbol": "log" + "symbol": "fn_return" + }, + { + "symbol": "deposit" } ], "data": { - "vec": [ - { - "string": "caught panic 'no milestones defined' from contract function 'Symbol(deposit)'" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000 - } - } - ] + "error": { + "contract": 4 + } } } } @@ -1015,12 +1055,12 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 4 } } ], "data": { - "string": "caught error from function" + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" } } } @@ -1040,7 +1080,7 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 4 } } ], @@ -1085,7 +1125,7 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 4 } } ], diff --git a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json index 6a7cb177..c371d786 100644 --- a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json +++ b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json @@ -938,6 +938,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1121,24 +1169,16 @@ "v0": { "topics": [ { - "symbol": "log" + "symbol": "fn_return" + }, + { + "symbol": "deposit" } ], "data": { - "vec": [ - { - "string": "caught panic 'sum of milestones must equal total amount' from contract function 'Symbol(deposit)'" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000 - } - } - ] + "error": { + "contract": 7 + } } } } @@ -1158,12 +1198,12 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 7 } } ], "data": { - "string": "caught error from function" + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" } } } @@ -1183,7 +1223,7 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 7 } } ], @@ -1228,7 +1268,7 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 7 } } ], diff --git a/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json b/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json index 0760ff74..48184796 100644 --- a/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json +++ b/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json @@ -1599,6 +1599,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -2036,6 +2084,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", diff --git a/contracts/escrow/test_snapshots/test/test_double_init.1.json b/contracts/escrow/test_snapshots/test/test_double_init.1.json index 80b237c1..491edfd0 100644 --- a/contracts/escrow/test_snapshots/test/test_double_init.1.json +++ b/contracts/escrow/test_snapshots/test/test_double_init.1.json @@ -131,6 +131,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000003", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -194,21 +242,16 @@ "v0": { "topics": [ { - "symbol": "log" + "symbol": "fn_return" + }, + { + "symbol": "initialize" } ], "data": { - "vec": [ - { - "string": "caught panic 'already initialized' from contract function 'Symbol(obj#23)'" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] + "error": { + "contract": 1 + } } } } @@ -228,12 +271,12 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 1 } } ], "data": { - "string": "caught error from function" + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" } } } @@ -253,7 +296,7 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 1 } } ], @@ -295,7 +338,7 @@ }, { "error": { - "wasm_vm": "invalid_action" + "contract": 1 } } ], diff --git a/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json b/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json index 44c62946..868d4ece 100644 --- a/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json +++ b/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json @@ -1659,6 +1659,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -2096,6 +2144,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", diff --git a/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json b/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json index 3b726ff1..c9fc5cad 100644 --- a/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json +++ b/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json @@ -1506,6 +1506,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1886,6 +1934,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json index 1c78d0bc..a521dc44 100644 --- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json +++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json @@ -1318,6 +1318,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1698,6 +1746,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", diff --git a/contracts/escrow/test_snapshots/test/test_refund.1.json b/contracts/escrow/test_snapshots/test/test_refund.1.json index 1e496892..b5ae0d2d 100644 --- a/contracts/escrow/test_snapshots/test/test_refund.1.json +++ b/contracts/escrow/test_snapshots/test/test_refund.1.json @@ -1235,6 +1235,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1558,6 +1606,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", diff --git a/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json b/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json index d031baef..1e69ebcf 100644 --- a/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json +++ b/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json @@ -1178,6 +1178,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000007", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1501,6 +1549,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000007", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1570,7 +1669,7 @@ "data": { "vec": [ { - "string": "caught panic 'only client can release' from contract function 'Symbol(obj#447)'" + "string": "caught panic 'only client can release' from contract function 'Symbol(obj#473)'" }, { "u64": 1 diff --git a/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json b/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json index b431dcb3..b836e5f4 100644 --- a/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json +++ b/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json @@ -1506,6 +1506,54 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Initialized" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "agent_judge" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "initialized_at" + }, + "val": { + "u64": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1886,6 +1934,57 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "string": "escrow" + }, + { + "string": "Deposit" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "deposited_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "job_id" + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0",