diff --git a/contracts/milestone-escrow/src/admin_override_cancel_tests.rs b/contracts/milestone-escrow/src/admin_override_cancel_tests.rs index b76a787..6755160 100644 --- a/contracts/milestone-escrow/src/admin_override_cancel_tests.rs +++ b/contracts/milestone-escrow/src/admin_override_cancel_tests.rs @@ -16,9 +16,12 @@ //! - Error::InvalidAmount is returned (not a panic) for edge-case amounts. //! - Terminal milestones are correctly skipped in every scenario. +#![cfg(test)] + use super::*; +use crate::test::setup_funded_escrow; use crate::{DataKey, Error, MilestoneEscrowClient, MilestoneStatus}; -use soroban_sdk::{token, vec, Address, Env}; +use soroban_sdk::{testutils::Address as _, token, vec, Address, Env}; // ──────────────────────────────────────────────────────────────────────────── // Issue #383: admin_override_cancel_release storage footprint @@ -118,8 +121,7 @@ fn test_cancel_release_requires_cancel_lock() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); let result = client.try_admin_override_cancel_release(&admin_addr); assert_eq!(result, Err(Ok(Error::InvalidStatus))); @@ -131,8 +133,7 @@ fn test_cancel_release_unauthorized_caller_rejected() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, _, _, _, _, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (client_addr, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); client.cancel_escrow(&client_addr); let attacker = Address::generate(&env); @@ -225,8 +226,7 @@ fn test_cancel_refund_requires_cancel_lock() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); let result = client.try_admin_override_cancel_refund(&admin_addr); assert_eq!(result, Err(Ok(Error::InvalidStatus))); @@ -263,13 +263,19 @@ fn test_cancel_refund_all_terminal_returns_invalid_amount() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, admin_addr, _, _, client) = + let (client_addr, freelancer_addr, _, admin_addr, token_id, contract_id, client) = setup_funded_escrow(&env, vec![&env, 2_000_i128]); // Fully release the single milestone via normal path. client.mark_delivered(&freelancer_addr, &0u32); client.approve_milestone(&client_addr, &0u32); + // Top up the contract so the zero-balance boundary guard in + // `cancel_escrow` still lets a cancel go through even though every + // milestone is now terminal and fully released. + let token_admin = token::StellarAssetClient::new(&env, &token_id); + token_admin.mint(&contract_id, &1_000_i128); + client.cancel_escrow(&client_addr); let result = client.try_admin_override_cancel_refund(&admin_addr); @@ -324,8 +330,7 @@ fn test_cancel_refund_multiple_milestones_sum_correctly() { env.mock_all_auths(); let amounts = vec![&env, 100_i128, 200_i128, 300_i128, 400_i128]; - let (client_addr, _, _, admin_addr, token_id, _, client) = - setup_funded_escrow(&env, amounts); + let (client_addr, _, _, admin_addr, token_id, _, client) = setup_funded_escrow(&env, amounts); client.cancel_escrow(&client_addr); @@ -357,4 +362,3 @@ fn test_cancel_refund_minimum_valid_amount() { assert_eq!(token.balance(&client_addr), client_before + 1); } - diff --git a/contracts/milestone-escrow/src/admin_override_release_tests.rs b/contracts/milestone-escrow/src/admin_override_release_tests.rs new file mode 100644 index 0000000..3844a7f --- /dev/null +++ b/contracts/milestone-escrow/src/admin_override_release_tests.rs @@ -0,0 +1,136 @@ +//! Authorization and source-state guards for `admin_override_release` +//! (issue #328). +//! +//! An unauthorized caller and an illegal (terminal) source state must each +//! return their specific typed error, and neither path may mutate storage. + +use super::*; +use crate::{Error, MilestoneStatus}; +use soroban_sdk::token; +use soroban_sdk::{symbol_short, vec, Address, Env, IntoVal, Val}; + +fn release_event_count(env: &Env) -> u32 { + let topic_val: Val = symbol_short!("admovrls").into_val(env); + let mut count = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == topic_val.get_payload() { + count += 1; + } + } + } + count +} + +struct ReleaseLedgerSnapshot { + status: MilestoneStatus, + released_amount: i128, + freelancer_balance: i128, + contract_balance: i128, +} + +fn snapshot_release_ledger( + env: &Env, + client: &MilestoneEscrowClient, + token_id: &Address, + freelancer_addr: &Address, +) -> ReleaseLedgerSnapshot { + let job = client.get_job(); + let milestone = job.milestones.get(0).unwrap(); + let token = token::Client::new(env, token_id); + ReleaseLedgerSnapshot { + status: milestone.status, + released_amount: milestone.released_amount, + freelancer_balance: token.balance(freelancer_addr), + contract_balance: token.balance(&client.address), + } +} + +fn assert_ledger_unchanged(before: &ReleaseLedgerSnapshot, after: &ReleaseLedgerSnapshot) { + assert_eq!(after.status, before.status); + assert_eq!(after.released_amount, before.released_amount); + assert_eq!(after.freelancer_balance, before.freelancer_balance); + assert_eq!(after.contract_balance, before.contract_balance); +} + +#[test] +fn unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, freelancer_addr, _, admin_addr, token_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + let before = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + assert_eq!(before.status, MilestoneStatus::Pending); + assert_eq!(before.released_amount, 0); + + let attacker = Address::generate(&env); + let result = client.try_admin_override_release(&attacker, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + + let after = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + assert_ledger_unchanged(&before, &after); + assert_eq!(release_event_count(&env), 0); +} + +#[test] +fn illegal_terminal_source_state_returns_invalid_status_and_does_not_mutate_storage() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, _, admin_addr, token_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + // Fully release the milestone first so the source state is terminal. + client.mark_delivered(&freelancer_addr, &0u32); + client.approve_milestone(&client_addr, &0u32); + + let before = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + assert_eq!(before.status, MilestoneStatus::Released); + assert_eq!(before.released_amount, 1_000); + + let result = client.try_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + let after = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + assert_ledger_unchanged(&before, &after); + assert_eq!(release_event_count(&env), 0); +} + +#[test] +fn client_freelancer_and_arbiter_are_unauthorized_without_storage_mutation() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, arbiter_addr, admin_addr, token_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + let before = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + for caller in [client_addr.clone(), freelancer_addr.clone(), arbiter_addr] { + let result = client.try_admin_override_release(&caller, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + let after = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + assert_ledger_unchanged(&before, &after); + } + assert_eq!(release_event_count(&env), 0); +} + +#[test] +fn admin_override_release_releases_funds_to_freelancer() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, freelancer_addr, _, admin_addr, token_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + let before = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + client.admin_override_release(&admin_addr, &0u32); + + let after = snapshot_release_ledger(&env, &client, &token_id, &freelancer_addr); + assert_eq!(after.status, MilestoneStatus::Released); + assert_eq!(after.released_amount, 1_000); + assert_eq!(after.freelancer_balance, before.freelancer_balance + 1_000); + assert_eq!(after.contract_balance, before.contract_balance - 1_000); + assert_eq!(release_event_count(&env), 1); +} diff --git a/contracts/milestone-escrow/src/admin_set_yield_rate_tests.rs b/contracts/milestone-escrow/src/admin_set_yield_rate_tests.rs new file mode 100644 index 0000000..2518254 --- /dev/null +++ b/contracts/milestone-escrow/src/admin_set_yield_rate_tests.rs @@ -0,0 +1,269 @@ +//! Tests for `admin_set_yield_rate` authorization and precondition guards. +//! +//! This module verifies that `admin_set_yield_rate` enforces its two +//! precondition checks — contract initialisation and pause state — before it +//! performs any auth check or touches any ledger entry. +//! +//! Validation matrix +//! ───────────────── +//! 1. Unauthorized caller → `Error::Unauthorized`; no storage mutation. +//! 2. Paused contract → `Error::Paused`; no storage mutation. +//! 3. Uninitialized contract → `Error::NotInitialized`; no storage mutation. +//! 4. Happy path (various rates) → `Ok(())`; `YieldRateBps` written correctly. +//! 5. Rate exceeds BPS_SCALE (10000) → `Error::InvalidRatio`; no storage mutation. +//! 6. Rate == 0 (disable accrual) → `Ok(())`; `YieldRateBps` written as 0. +//! 7. Rate == 10000 (max / 100 %) → `Ok(())`; `YieldRateBps` written as 10000. +//! 8. Repeated calls update the rate correctly. + +#[cfg(test)] +use super::*; +use crate::test::setup_funded_escrow; +use crate::{DataKey, Error, MilestoneEscrow, MilestoneEscrowClient, YieldConfig}; +use soroban_sdk::{testutils::Address as _, vec, Address, Env}; + +// ── helpers ─────────────────────────────────────────────────────────────────── + +/// Set up a fully initialised (and funded) escrow and return the key addresses +/// plus a client handle. +/// +/// Return tuple: (client_addr, freelancer_addr, arbiter_addr, admin_addr, +/// token_id, contract_id, escrow_client) +fn setup(env: &Env) -> (Address, Address, Address, Address, Address, Address, MilestoneEscrowClient<'_>) { + env.mock_all_auths(); + let amounts = vec![env, 1_000_i128]; + let (client_addr, freelancer_addr, arbiter_addr, admin_addr, token_id, contract_id, escrow) = + setup_funded_escrow(env, amounts); + (client_addr, freelancer_addr, arbiter_addr, admin_addr, token_id, contract_id, escrow) +} + +/// Read the persisted yield rate from inside the contract. +/// +/// The rate is not stored under a key of its own -- `admin_set_yield_rate` +/// writes it as the `yield_rate` field of the `YieldConfig` entry under +/// `DataKey::YieldConfig` -- so `None` here means the config was never +/// written, which is what the no-mutation cases assert. +fn read_yield_rate(env: &Env, contract_id: &Address) -> Option { + env.as_contract(contract_id, || { + env.storage() + .persistent() + .get(&DataKey::YieldConfig) + .map(|config: YieldConfig| config.yield_rate) + }) +} + +// ── Unauthorized caller ─────────────────────────────────────────────────────── + +/// A caller whose address does not match `DataKey::Admin` must receive +/// `Error::Unauthorized` and must not mutate `YieldRateBps`. +#[test] +fn unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage() { + let env = Env::default(); + let (_, _, _, _, _, contract_id, escrow) = setup(&env); + + let attacker = Address::generate(&env); + let rate_before = read_yield_rate(&env, &contract_id); + + let result = escrow.try_admin_set_yield_rate(&attacker, &500u32); + + assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Storage must be exactly as it was before the call. + assert_eq!(read_yield_rate(&env, &contract_id), rate_before); +} + +/// Even when the attacker passes a plausible rate (0), the call must still be +/// rejected with `Unauthorized` and no storage entry may be written. +#[test] +fn unauthorized_caller_with_zero_rate_returns_unauthorized_and_does_not_mutate_storage() { + let env = Env::default(); + let (_, _, _, _, _, contract_id, escrow) = setup(&env); + + let attacker = Address::generate(&env); + + let result = escrow.try_admin_set_yield_rate(&attacker, &0u32); + + assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert_eq!(read_yield_rate(&env, &contract_id), None); +} + +// ── Paused contract ─────────────────────────────────────────────────────────── + +/// When the contract is paused, `admin_set_yield_rate` must return +/// `Error::Paused` regardless of caller identity, and `YieldRateBps` must +/// not be touched. +#[test] +fn paused_contract_returns_paused_and_does_not_mutate_storage() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + // Pause the contract via the emergency-pause endpoint. + escrow.emergency_pause(&admin_addr); + + let rate_before = read_yield_rate(&env, &contract_id); + + let result = escrow.try_admin_set_yield_rate(&admin_addr, &300u32); + + assert_eq!(result, Err(Ok(Error::Paused))); + assert_eq!(read_yield_rate(&env, &contract_id), rate_before); +} + +/// Verify that after unpausing, the admin can set the yield rate again, which +/// confirms the pause guard is lifted correctly. +#[test] +fn after_unpause_admin_can_set_yield_rate() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.emergency_pause(&admin_addr); + + // Confirm paused state blocks the call. + let paused_result = escrow.try_admin_set_yield_rate(&admin_addr, &200u32); + assert_eq!(paused_result, Err(Ok(Error::Paused))); + + // Unpause and retry. + escrow.emergency_unpause(&admin_addr); + + let result = escrow.try_admin_set_yield_rate(&admin_addr, &200u32); + assert!(result.is_ok()); + assert_eq!(read_yield_rate(&env, &contract_id), Some(200u32)); +} + +/// An attacker calling on a paused contract must receive `Error::Paused` +/// (precondition fires before auth check), and no storage entry is written. +#[test] +fn paused_contract_unauthorized_caller_returns_paused_not_unauthorized() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.emergency_pause(&admin_addr); + + let attacker = Address::generate(&env); + let result = escrow.try_admin_set_yield_rate(&attacker, &500u32); + + // The Paused precondition fires before the auth check. + assert_eq!(result, Err(Ok(Error::Paused))); + assert_eq!(read_yield_rate(&env, &contract_id), None); +} + +// ── Uninitialized contract ──────────────────────────────────────────────────── + +/// Calling `admin_set_yield_rate` on a contract where `initialize` was never +/// called must return `Error::NotInitialized` immediately; no storage entry +/// may be written. +#[test] +fn uninitialized_contract_returns_not_initialized_and_does_not_mutate_storage() { + let env = Env::default(); + env.mock_all_auths(); + + // Register a fresh contract without calling `initialize`. + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + + let admin = Address::generate(&env); + let result = escrow.try_admin_set_yield_rate(&admin, &500u32); + + assert_eq!(result, Err(Ok(Error::NotInitialized))); + assert_eq!(read_yield_rate(&env, &contract_id), None); +} + +// ── Rate validation ─────────────────────────────────────────────────────────── + +/// A rate that exceeds 10 000 bps (100 %) must be rejected with +/// `Error::InvalidRatio`; `YieldRateBps` must remain unmodified. +#[test] +fn rate_above_bps_scale_returns_invalid_ratio_and_does_not_mutate_storage() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + let rate_before = read_yield_rate(&env, &contract_id); + + let result = escrow.try_admin_set_yield_rate(&admin_addr, &10_001u32); + + assert_eq!(result, Err(Ok(Error::InvalidRatio))); + assert_eq!(read_yield_rate(&env, &contract_id), rate_before); +} + +/// Rate of `u32::MAX` (far above 10 000) must also be rejected cleanly. +#[test] +fn rate_u32_max_returns_invalid_ratio_and_does_not_mutate_storage() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + let result = escrow.try_admin_set_yield_rate(&admin_addr, &u32::MAX); + + assert_eq!(result, Err(Ok(Error::InvalidRatio))); + assert_eq!(read_yield_rate(&env, &contract_id), None); +} + +// ── Happy path ──────────────────────────────────────────────────────────────── + +/// The admin can set a mid-range rate; `YieldRateBps` must be persisted +/// with the exact supplied value. +#[test] +fn admin_can_set_valid_rate() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.admin_set_yield_rate(&admin_addr, &500u32); + + assert_eq!(read_yield_rate(&env, &contract_id), Some(500u32)); +} + +/// Rate of `0` (disables accrual) is accepted and stored correctly. +#[test] +fn admin_can_set_zero_rate_to_disable_accrual() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.admin_set_yield_rate(&admin_addr, &0u32); + + assert_eq!(read_yield_rate(&env, &contract_id), Some(0u32)); +} + +/// Rate of exactly `10 000` (100 %) is at the boundary and must be accepted. +#[test] +fn admin_can_set_max_rate_10000() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.admin_set_yield_rate(&admin_addr, &10_000u32); + + assert_eq!(read_yield_rate(&env, &contract_id), Some(10_000u32)); +} + +/// Successive calls update the rate; the last written value wins. +#[test] +fn repeated_calls_update_rate_correctly() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.admin_set_yield_rate(&admin_addr, &100u32); + assert_eq!(read_yield_rate(&env, &contract_id), Some(100u32)); + + escrow.admin_set_yield_rate(&admin_addr, &750u32); + assert_eq!(read_yield_rate(&env, &contract_id), Some(750u32)); + + escrow.admin_set_yield_rate(&admin_addr, &0u32); + assert_eq!(read_yield_rate(&env, &contract_id), Some(0u32)); +} + +/// A mid-range boundary value (1 bp) is accepted and persisted. +#[test] +fn admin_can_set_minimum_nonzero_rate_1_bps() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.admin_set_yield_rate(&admin_addr, &1u32); + + assert_eq!(read_yield_rate(&env, &contract_id), Some(1u32)); +} + +/// A rate of 9 999 (just below the cap) is accepted. +#[test] +fn admin_can_set_rate_just_below_cap_9999() { + let env = Env::default(); + let (_, _, _, admin_addr, _, contract_id, escrow) = setup(&env); + + escrow.admin_set_yield_rate(&admin_addr, &9_999u32); + + assert_eq!(read_yield_rate(&env, &contract_id), Some(9_999u32)); +} diff --git a/contracts/milestone-escrow/src/admin_tax_withholding_guards_tests.rs b/contracts/milestone-escrow/src/admin_tax_withholding_guards_tests.rs new file mode 100644 index 0000000..ce4f0b4 --- /dev/null +++ b/contracts/milestone-escrow/src/admin_tax_withholding_guards_tests.rs @@ -0,0 +1,206 @@ +#![cfg(test)] +//! Dedicated unit-test suite for `admin_tax_withholding_deductions` +//! authorization and precondition guards (issue #335). +//! +//! The endpoint must reject an unauthorised caller with `Unauthorized` and +//! illegal source states (uninitialised contract, unfunded escrow, +//! out-of-range milestone, non-positive balance, over-scale tax rate) with +//! their specific typed error **before** any ledger entry is read or written. +//! Every rejected path must leave the ledger untouched and emit no `taxwh` +//! event; the happy path must compute the split and emit exactly one event. + +use super::*; +use crate::{DataKey, Error, TaxWithholdingDeductionsEvent}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::testutils::EnvTestConfig; +use soroban_sdk::{symbol_short, vec, Address, Env, FromVal, IntoVal, Symbol, TryIntoVal, Val}; + +fn test_env() -> Env { + Env::new_with_config(EnvTestConfig { + capture_snapshot_at_drop: false, + }) +} + +/// A contract that has never been initialised — no admin key stored. +fn bare_contract(env: &Env) -> (MilestoneEscrowClient<'_>, Address) { + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(env, &contract_id); + (client, contract_id) +} + +fn execution_lock_held(env: &Env, contract_id: &Address) -> bool { + env.as_contract(contract_id, || { + env.storage().instance().has(&DataKey::TaxWithholdingExecutionLock) + }) +} + +fn first_milestone_status(env: &Env, client: &MilestoneEscrowClient<'_>) -> MilestoneStatus { + client.get_job().milestones.get(0).unwrap().status +} + +fn taxwh_event_count(env: &Env) -> u32 { + let topic_val: Val = symbol_short!("taxwh").into_val(env); + let mut count = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == topic_val.get_payload() { + count += 1; + } + } + } + count +} + +fn last_taxwh_event(env: &Env) -> TaxWithholdingDeductionsEvent { + let events = env.events().all(); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(env).unwrap(); + assert_eq!(topic, Symbol::new(env, "taxwh")); + TaxWithholdingDeductionsEvent::from_val(env, &last.2) +} + +// ── authorization ──────────────────────────────────────────────────────────── + +#[test] +fn admin_tax_rejects_caller_on_uninitialised_contract() { + let env = test_env(); + env.mock_all_auths(); + + let (client, contract_id) = bare_contract(&env); + let stranger = Address::generate(&env); + + assert_eq!( + client.try_admin_tax_withholding_deductions(&stranger, &0u32, &1000u32), + Err(Ok(Error::NotInitialized)) + ); + assert!(!execution_lock_held(&env, &contract_id)); + assert_eq!(taxwh_event_count(&env), 0); +} + +#[test] +fn admin_tax_rejects_non_admin_caller() { + let env = test_env(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 1_000_i128]; + let (client_addr, _, _, _, _, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); + + assert_eq!( + client.try_admin_tax_withholding_deductions(&client_addr, &0u32, &1000u32), + Err(Ok(Error::Unauthorized)) + ); + + // Rejection happened before any ledger write: no execution lock was + // created and the milestone is untouched. + assert!(!execution_lock_held(&env, &contract_id)); + assert_eq!(first_milestone_status(&env, &client), MilestoneStatus::Pending); + assert_eq!(taxwh_event_count(&env), 0); +} + +// ── illegal source states ──────────────────────────────────────────────────── + +#[test] +fn admin_tax_rejects_unfunded_contract() { + let env = test_env(); + env.mock_all_auths(); + + let (admin_addr, _, _, _, _, contract_id, client) = setup_multisig_env(&env); + + assert_eq!( + client.try_admin_tax_withholding_deductions(&admin_addr, &0u32, &1000u32), + Err(Ok(Error::NotFunded)) + ); + assert!(!execution_lock_held(&env, &contract_id)); + assert_eq!(taxwh_event_count(&env), 0); +} + +#[test] +fn admin_tax_rejects_out_of_range_milestone() { + let env = test_env(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); + + assert_eq!( + client.try_admin_tax_withholding_deductions(&admin_addr, &99u32, &1000u32), + Err(Ok(Error::InvalidMilestone)) + ); + assert!(!execution_lock_held(&env, &contract_id)); + assert_eq!(first_milestone_status(&env, &client), MilestoneStatus::Pending); + assert_eq!(taxwh_event_count(&env), 0); +} + +#[test] +fn admin_tax_rejects_rate_above_full_scale() { + let env = test_env(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); + + assert_eq!( + client.try_admin_tax_withholding_deductions(&admin_addr, &0u32, &10_001u32), + Err(Ok(Error::InvalidRatio)) + ); + assert!(!execution_lock_held(&env, &contract_id)); + assert_eq!(taxwh_event_count(&env), 0); +} + +#[test] +fn admin_tax_rejects_empty_contract_balance() { + let env = test_env(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, admin_addr, token_contract_id, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); + + // Drain the escrow so the fund balance is zero. + let token_client = token::Client::new(&env, &token_contract_id); + token_client.transfer(&contract_id, &Address::generate(&env), &1_000_i128); + + assert_eq!( + client.try_admin_tax_withholding_deductions(&admin_addr, &0u32, &1000u32), + Err(Ok(Error::InvalidAmount)) + ); + assert!(!execution_lock_held(&env, &contract_id)); + assert_eq!(first_milestone_status(&env, &client), MilestoneStatus::Pending); + assert_eq!(taxwh_event_count(&env), 0); +} + +// ── happy path ─────────────────────────────────────────────────────────────── + +#[test] +fn admin_tax_success_computes_and_emits_exactly_one_event() { + let env = test_env(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); + + let (gross_amount, tax_amount, net_amount) = + client.admin_tax_withholding_deductions(&admin_addr, &0u32, &2_500u32); + + assert_eq!(gross_amount, 1_000); + assert_eq!(tax_amount, 250); + assert_eq!(net_amount, 750); + assert_eq!(gross_amount, tax_amount + net_amount); + + let event = last_taxwh_event(&env); + assert_eq!(taxwh_event_count(&env), 1); + assert_eq!(event.admin, admin_addr); + assert_eq!(event.contract_id, contract_id); + assert_eq!(event.milestone_index, 0); + assert_eq!(event.gross_amount, 1_000); + assert_eq!(event.tax_amount, 250); + assert_eq!(event.net_amount, 750); + assert_eq!(event.tax_rate_bps, 2_500); + + // The execution lock is released before returning; no stale entry remains. + assert!(!execution_lock_held(&env, &contract_id)); +} \ No newline at end of file diff --git a/contracts/milestone-escrow/src/emergency_pause_admin_override_tests.rs b/contracts/milestone-escrow/src/emergency_pause_admin_override_tests.rs new file mode 100644 index 0000000..7cd3ac8 --- /dev/null +++ b/contracts/milestone-escrow/src/emergency_pause_admin_override_tests.rs @@ -0,0 +1,296 @@ + +use super::*; +use crate::{DataKey, EmergencyPauseAdminOverrideEvent, Error}; +use soroban_sdk::{symbol_short, vec, Address, Env, FromVal, IntoVal, Symbol, TryIntoVal, Val}; + +// ── helpers ────────────────────────────────────────────────────────────────── + +/// Count events matching the given 8-char topic symbol. +fn event_count_for(env: &Env, topic: &Val) -> u32 { + let mut count = 0u32; + for event in env.events().all().iter() { + if let Some(t) = event.1.get(0) { + if t.get_payload() == topic.get_payload() { + count += 1; + } + } + } + count +} +fn last_override_event(env: &Env) -> EmergencyPauseAdminOverrideEvent { + let events = env.events().all(); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(env).unwrap(); + assert_eq!(topic, Symbol::new(env, "emoverrid")); + EmergencyPauseAdminOverrideEvent::from_val(env, &last.2) +} + +fn read_pause_lock(env: &Env, contract: &MilestoneEscrowClient<'_>) -> bool { + env.as_contract(&contract.address, || { + env.storage() + .instance() + .get::<_, bool>(&DataKey::EpLk) + .unwrap_or(false) + }) +} + +#[test] +fn override_false_to_true_sets_paused_flag() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + assert!(!client.is_emergency_paused(), "contract must start unpaused"); + + client.emergency_pause_admin_override(&admin_addr, &true); + + assert!(client.is_emergency_paused(), "flag must be set after override"); + assert!( + !read_pause_lock(&env, &client), + "EmergencyPauseLock must remain false — override must not touch it" + ); +} + +#[test] +fn override_true_to_false_clears_paused_flag() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.emergency_pause(&admin_addr); + + assert!(client.is_emergency_paused(), "contract must be paused before override"); + + client.emergency_pause_admin_override(&admin_addr, &false); + + assert!(!client.is_emergency_paused(), "flag must be cleared after override"); + assert!( + !read_pause_lock(&env, &client), + "EmergencyPauseLock must remain false — override must not touch it" + ); +} + +#[test] +fn override_round_trip_is_correct() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.emergency_pause_admin_override(&admin_addr, &true); + assert!(client.is_emergency_paused()); + assert!(!read_pause_lock(&env, &client)); + + client.emergency_pause_admin_override(&admin_addr, &false); + assert!(!client.is_emergency_paused()); + assert!(!read_pause_lock(&env, &client)); +} + +#[test] +fn unauthorized_caller_returns_unauthorized_and_no_state_change() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, _, admin_addr, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let attacker = Address::generate(&env); + + // Neither the client address nor an arbitrary attacker may override. + for caller in [client_addr, attacker] { + let before = escrow.is_emergency_paused(); + let result = escrow.try_emergency_pause_admin_override(&caller, &true); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert_eq!( + escrow.is_emergency_paused(), + before, + "unauthorized call must not change pause state" + ); + assert!( + !read_pause_lock(&env, &escrow), + "unauthorized call must not write EmergencyPauseLock" + ); + } + + // Confirm admin can still succeed — no lock was left dirty. + escrow.emergency_pause_admin_override(&admin_addr, &true); + assert!(escrow.is_emergency_paused()); +} + +#[test] +fn no_op_unpaused_to_false_returns_invalid_status() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + assert!(!client.is_emergency_paused()); + let result = client.try_emergency_pause_admin_override(&admin_addr, &false); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert!(!client.is_emergency_paused(), "state must not change on no-op rejection"); + assert!( + !read_pause_lock(&env, &client), + "no-op rejection must not write EmergencyPauseLock" + ); +} + +#[test] +fn no_op_paused_to_true_returns_invalid_status() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.emergency_pause(&admin_addr); + + assert!(client.is_emergency_paused()); + let result = client.try_emergency_pause_admin_override(&admin_addr, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert!(client.is_emergency_paused(), "state must not change on no-op rejection"); + assert!( + !read_pause_lock(&env, &client), + "no-op rejection must not write EmergencyPauseLock" + ); +} + +#[test] +fn emergency_pause_lock_is_never_written_by_override() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + // Perform several back-to-back overrides; the lock must stay false. + for desired in [true, false, true, false] { + client.emergency_pause_admin_override(&admin_addr, &desired); + assert!( + !read_pause_lock(&env, &client), + "EmergencyPauseLock must be false after override to {desired}" + ); + } +} + +#[test] +fn override_does_not_leave_lock_that_blocks_emergency_pause() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + // Override to paused, then unpause via emergency_unpause — if the lock + // leaked, emergency_unpause would return EmergencyPauseInProgress. + client.emergency_pause_admin_override(&admin_addr, &true); + // emergency_unpause checks assert_emergency_pause_not_locked internally. + client.emergency_unpause(&admin_addr); // must not panic or return error + assert!(!client.is_emergency_paused()); +} + +#[test] +fn emergency_pause_does_not_block_subsequent_override() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.emergency_pause(&admin_addr); + assert!(client.is_emergency_paused()); + + // Override to unpaused — must succeed regardless of what emergency_pause did. + client.emergency_pause_admin_override(&admin_addr, &false); + assert!(!client.is_emergency_paused()); +} + +#[test] +fn override_works_after_admin_pause_escrow_cycle() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + // admin_pause_escrow acquires and releases EmergencyPauseLock. + client.admin_pause_escrow(&admin_addr); + client.admin_resume_escrow(&admin_addr); + + // Lock must be released; override must proceed without EmergencyPauseInProgress. + assert!(!read_pause_lock(&env, &client)); + client.emergency_pause_admin_override(&admin_addr, &true); + assert!(client.is_emergency_paused()); + assert!(!read_pause_lock(&env, &client)); +} + +#[test] +fn interleaved_sequence_produces_correct_final_state() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.emergency_pause_admin_override(&admin_addr, &true); // override → paused + assert!(client.is_emergency_paused()); + + client.emergency_unpause(&admin_addr); // standard unpause + assert!(!client.is_emergency_paused()); + + client.emergency_pause(&admin_addr); // standard pause + assert!(client.is_emergency_paused()); + + client.emergency_pause_admin_override(&admin_addr, &false); // override → unpaused + assert!(!client.is_emergency_paused()); + + // Lock must be clean throughout. + assert!(!read_pause_lock(&env, &client)); +} + +#[test] +fn success_emits_exactly_one_emoverrid_event_with_correct_payload() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let topic: Val = symbol_short!("emoverrid").into_val(&env); + + // Override to paused. + client.emergency_pause_admin_override(&admin_addr, &true); + assert_eq!(event_count_for(&env, &topic), 1); + let ev = last_override_event(&env); + assert_eq!(ev.admin, admin_addr); + assert_eq!(ev.contract_id, client.address); + assert_eq!(ev.paused, true); + + // Override back to unpaused: the second call emits its own event. + // + // The count is 1 again rather than 2 -- env.events().all() reports the + // most recent contract invocation, not a running total across the test -- + // so this asserts the second call emitted exactly one event, and the + // payload check below confirms it is the new one. + client.emergency_pause_admin_override(&admin_addr, &false); + assert_eq!(event_count_for(&env, &topic), 1); + let ev2 = last_override_event(&env); + assert_eq!(ev2.admin, admin_addr); + assert_eq!(ev2.paused, false); +} + +#[test] +fn failed_calls_emit_no_emoverrid_event() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let topic: Val = symbol_short!("emoverrid").into_val(&env); + + // Unauthorized caller. + let attacker = Address::generate(&env); + let _ = client.try_emergency_pause_admin_override(&attacker, &true); + + // No-op: unpaused → false. + let _ = client.try_emergency_pause_admin_override(&admin_addr, &false); + + // No-op: pause first, then try paused → true. + client.emergency_pause(&admin_addr); + let _ = client.try_emergency_pause_admin_override(&admin_addr, &true); + + assert_eq!( + event_count_for(&env, &topic), + 0, + "no emoverrid event must be emitted by any failed call" + ); +} diff --git a/contracts/milestone-escrow/src/execute_admin_transfer_tests.rs b/contracts/milestone-escrow/src/execute_admin_transfer_tests.rs new file mode 100644 index 0000000..08f26f0 --- /dev/null +++ b/contracts/milestone-escrow/src/execute_admin_transfer_tests.rs @@ -0,0 +1,202 @@ +#![cfg(test)] +//! Dedicated unit-test suite for `execute_admin_transfer` authorization +//! and precondition guards (issue #347). +//! +//! The endpoint must reject an uninitialised contract with `NotInitialized`, +//! an absent pending transfer with `NoPendingAdminTransfer`, and an +//! approval-count below the multisig threshold with `MultiSigThresholdNotMet`, +//! all before any ledger entry is read or written. A successful execution +//! must swap the admin key, remove the pending transfer, and emit exactly one +//! `adminexc` event. + +use super::*; +use crate::{AdminTransferExecutedEvent, DataKey, Error}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::testutils::EnvTestConfig; +use soroban_sdk::{symbol_short, vec, Address, Env, FromVal, IntoVal, Symbol, TryIntoVal, Val}; + +fn test_env() -> Env { + Env::new_with_config(EnvTestConfig { + capture_snapshot_at_drop: false, + }) +} + +fn bare_contract(env: &Env) -> MilestoneEscrowClient<'_> { + let contract_id = env.register(MilestoneEscrow, ()); + MilestoneEscrowClient::new(env, &contract_id) +} + +fn adminexc_event_count(env: &Env) -> u32 { + let topic_val: Val = symbol_short!("adminexc").into_val(env); + let mut count = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == topic_val.get_payload() { + count += 1; + } + } + } + count +} + +fn last_adminexc_event(env: &Env) -> AdminTransferExecutedEvent { + let events = env.events().all(); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(env).unwrap(); + assert_eq!(topic, Symbol::new(env, "adminexc")); + AdminTransferExecutedEvent::from_val(env, &last.2) +} + +/// Initialise + fund an escrow and configure a 2-of-2 multisig regime, +/// returning `(admin, s1, s2, new_admin, contract_id, client)`. +fn setup_multisig_transfer( + env: &Env, +) -> (Address, Address, Address, Address, Address, MilestoneEscrowClient<'_>) { + env.mock_all_auths(); + + let milestone_amounts = vec![env, 1_000_i128]; + let (client_addr, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(env, milestone_amounts); + + let s1 = Address::generate(env); + let s2 = Address::generate(env); + let new_admin = Address::generate(env); + + let signers = vec![env, s1.clone(), s2.clone()]; + client.multisig_approval_init(&admin_addr, &signers, &2u32); + + // Propose the transfer (proposal_id = 1). + client.propose_admin_transfer(&admin_addr, &new_admin, &1u32); + + (admin_addr, s1, s2, new_admin, contract_id, client) +} + +// ── precondition guards ────────────────────────────────────────────────────── + +#[test] +fn execute_transfer_rejects_uninitialised_contract() { + let env = test_env(); + env.mock_all_auths(); + + let client = bare_contract(&env); + + assert_eq!( + client.try_execute_admin_transfer(), + Err(Ok(Error::NotInitialized)) + ); + assert_eq!(adminexc_event_count(&env), 0); +} + +#[test] +fn execute_transfer_rejects_when_no_pending_transfer() { + let env = test_env(); + env.mock_all_auths(); + + let (_, _, _, _, _, client) = setup_multisig_transfer(&env); + + // Cancel the pending transfer so there is nothing to execute. + let admin = Address::generate(&env); + // Re-set up a funded escrow with the same admin. + let amounts = vec![&env, 1_000_i128]; + let (client_addr, _, _, admin_addr, _, _, funded_client) = + setup_funded_escrow(&env, amounts); + + let s1 = Address::generate(&env); + let signers = vec![&env, s1.clone()]; + funded_client.multisig_approval_init(&admin_addr, &signers, &1u32); + + // No proposal created yet → NoPendingAdminTransfer. + assert_eq!( + funded_client.try_execute_admin_transfer(), + Err(Ok(Error::NoPendingAdminTransfer)) + ); + assert_eq!(adminexc_event_count(&env), 0); +} + +#[test] +fn execute_transfer_rejects_when_threshold_not_met() { + let env = test_env(); + env.mock_all_auths(); + + let (_, s1, _, new_admin, contract_id, client) = setup_multisig_transfer(&env); + + // Only one signer has approved — threshold is 2. + client.multisig_approve(&s1, &1u32); + + assert_eq!( + client.try_execute_admin_transfer(), + Err(Ok(Error::MultiSigThresholdNotMet)) + ); + + // Admin unchanged and pending transfer still present. + let old_admin: Address = env.as_contract(&contract_id, || { + env.storage().persistent().get(&DataKey::Admin).unwrap() + }); + assert_ne!(old_admin, new_admin); + + let pending: Option = client.get_pending_admin_transfer(); + assert!(pending.is_some()); + assert_eq!(adminexc_event_count(&env), 0); +} + +// ── happy path ─────────────────────────────────────────────────────────────── + +#[test] +fn execute_transfer_swaps_admin_and_emits_event() { + let env = test_env(); + env.mock_all_auths(); + + let (old_admin, s1, s2, new_admin, contract_id, client) = + setup_multisig_transfer(&env); + + // Approve from both signers to reach the threshold. + client.multisig_approve(&s1, &1u32); + client.multisig_approve(&s2, &1u32); + + let result = client.try_execute_admin_transfer(); + assert_eq!(result, Ok(Ok(()))); + + // Exactly one adminexc event with correct payload. Read before any further + // `client.*` call: each one is its own contract invocation, and the test + // env's event buffer reflects the most recent. + assert_eq!(adminexc_event_count(&env), 1); + let event = last_adminexc_event(&env); + assert_eq!(event.old_admin, old_admin); + assert_eq!(event.new_admin, new_admin); + assert_eq!(event.proposal_id, 1); + + // Pending transfer removed. + let pending: Option = client.get_pending_admin_transfer(); + assert!(pending.is_none()); + + // Admin key swapped to new_admin. + let current_admin: Address = env.as_contract(&contract_id, || { + env.storage().persistent().get(&DataKey::Admin).unwrap() + }); + assert_eq!(current_admin, new_admin); + assert_ne!(current_admin, old_admin); +} + +#[test] +fn new_admin_can_propose_after_transfer_old_admin_cannot() { + let env = test_env(); + env.mock_all_auths(); + + let (_, s1, s2, new_admin, _, client) = setup_multisig_transfer(&env); + + client.multisig_approve(&s1, &1u32); + client.multisig_approve(&s2, &1u32); + client.execute_admin_transfer(); + + // Old admin is no longer authorized. + let another = Address::generate(&env); + let signers2 = vec![&env, another.clone()]; + // Old admin cannot initialize multisig (requires being admin — which fails). + // New admin can propose a second transfer. + let result = client.try_propose_admin_transfer(&new_admin, &another, &2u32); + assert!(result.is_ok()); + + // Pending transfer exists for proposal 2. + let pending = client.get_pending_admin_transfer(); + assert!(pending.is_some()); +} diff --git a/contracts/milestone-escrow/src/lib.rs b/contracts/milestone-escrow/src/lib.rs index e058038..874ccd5 100644 --- a/contracts/milestone-escrow/src/lib.rs +++ b/contracts/milestone-escrow/src/lib.rs @@ -69,7 +69,7 @@ pub enum Error { /// mid-execution and holds `DataKey::PlatformFeeAllocationLock`. PlatformFeeAllocationInProgress = 27, /// A guarded endpoint was called while an emergency pause transition is - /// mid-execution and holds `DataKey::EmergencyPauseLock`. + /// mid-execution and holds `DataKey::EpLk`. EmergencyPauseInProgress = 28, /// `emergency_pause` was called while the contract is already paused. /// Re-pausing is rejected rather than silently no-opping so an operator @@ -83,6 +83,9 @@ pub enum Error { /// empty, exceeded the party cap, contained a negative weight, or summed /// to zero. InvalidAllocationWeights = 31, + /// An emergency refund / pause-gated endpoint was called while the + /// contract holds zero token balance, so there is nothing to settle. + EmptyBalance = 32, } const BPS_SCALE: u32 = 10_000; @@ -156,7 +159,9 @@ pub enum DataKey { Admin, Version, WhitelistedTokens, - EmergencyPaused, + /// Instance: whether the escrow is emergency-paused. Short key `Ep` + /// (2 chars vs 16) to minimise on-ledger symbol bytes. + Ep, PlatformFeeAllocation, /// Temporary key: records the ledger timestamp at which a milestone was /// marked delivered. Written by `mark_delivered`, consumed by @@ -181,10 +186,12 @@ pub enum DataKey { /// `set_escrow_interest_yield`; read by getters and lock/unlock helpers. InterestYieldState, // ── escrow_interest_yield admin-override keys ──────────────────────────── - /// Persistent: annual yield rate expressed in basis points (1 bp = 0.01 %). - /// Range 0–10 000 (0 %–100 %). Written by `admin_set_yield_rate`, read by - /// `get_yield_info` and `admin_accrue_yield`. - YieldRateBps, + /// Persistent: holds the `YieldConfig` struct (annual yield rate in basis + /// points, 1 bp = 0.01 %, range 0–10 000 / 0 %–100 %). Written by + /// `admin_set_yield_rate`, read by `get_yield_info` and `admin_accrue_yield`. + /// Consolidated into a single struct-valued key to minimise the ledger + /// footprint versus one key per field. + YieldConfig, /// Persistent: total interest (in token stroops) accrued so far by the /// admin via `admin_accrue_yield`. Reset to zero on admin override release /// or refund so downstream indexers can detect a fresh yield cycle. @@ -209,7 +216,13 @@ pub enum DataKey { /// cleared by `multisig_admin_override_release` or /// `multisig_admin_override_refund`. MultisigLocked, + /// Temporary key: cumulative extension seconds applied to a Delivered + /// milestone. Written by `extend_milestone_deadline`, read by + /// `claim_auto_release` and `time_until_auto_release`. Uses temporary + /// storage because the extension is deadline-scoped workflow state whose + /// ledger footprint cost should not persist beyond the auto-release window. MilestoneTimeExtension(u32), + /// Instance key for the cancel_escrow lock. CancelLock, // ── tax_withholding_deductions storage keys ────────────────────────────── /// Persistent: tax rate in basis points (1 bp = 0.01 %) set by @@ -283,7 +296,8 @@ pub enum DataKey { /// Instance: held while a platform-fee allocation executes. PlatformFeeAllocationLock, /// Instance: held while an emergency pause/resume transition executes. - EmergencyPauseLock, + /// Short key `EpLk` (4 chars vs 19) to minimise on-ledger symbol bytes. + EpLk, } #[contracttype] @@ -415,8 +429,52 @@ pub struct PlatformFeeDistribution { pub treasury_amount: i128, } +/// Emitted by `set_platform_fee_allocation` when the admin successfully +/// updates the platform-fee BPS configuration. +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PlatformFeeAllocationSetEvent { + pub admin: Address, + pub client_bps: u32, + pub freelancer_bps: u32, + pub treasury_bps: u32, +} + +/// Emitted by `lock_platform_fee_allocation` when the admin locks the +/// current platform-fee configuration, preventing further non-override +/// modifications. +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PlatformFeeAllocationLockedEvent { + pub admin: Address, + pub client_bps: u32, + pub freelancer_bps: u32, + pub treasury_bps: u32, +} + +/// Emitted by `pf_alloc_admin_override` when the admin force-updates a +/// locked platform-fee configuration. #[contracttype] #[derive(Clone, Debug, Eq, PartialEq)] +pub struct PlatformFeeAllocationOverrideEvent { + pub admin: Address, + pub client_bps: u32, + pub freelancer_bps: u32, + pub treasury_bps: u32, +} + +/// Emitted by `calculate_platform_fee_split` with the resulting per-party +/// token amounts so downstream indexers can audit the split without +/// re-querying contract storage. +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PlatformFeeSplitCalculatedEvent { + pub total_amount: i128, + pub client_amount: i128, + pub freelancer_amount: i128, + pub treasury_amount: i128, +} + pub struct AutoReleasedEvent { pub contract_id: Address, pub milestone_index: u32, @@ -485,6 +543,19 @@ pub struct ClaimedEvent { pub struct CancelEscrowInitiatedEvent { pub contract_id: Address, pub caller: Address, + /// Whether the initiating caller is the client (`true`) or the freelancer + /// (`false`). Lets indexers attribute the cancellation without resolving + /// the caller address against off-chain metadata. + pub caller_is_client: bool, + pub client: Address, + pub freelancer: Address, + pub token: Address, + /// Total number of milestones in the escrow at the time of cancellation. + pub milestone_count: u32, + /// Sum of all milestone amounts as stored in `JobMeta`. Does not account + /// for amounts already released; indexers that need unreleased balance + /// should subtract separately-indexed release events. + pub total_amount: i128, } /// Emitted by `admin_override_cancel_release` when the admin resolves a locked @@ -590,6 +661,17 @@ pub struct AdminOverrideTaxRefundEvent { pub gross_amount: i128, } +// ── escrow_interest_yield admin-override config ────────────────────────────── + +/// Consolidated yield configuration stored under `DataKey::YieldConfig`. +/// Bundles all yield-related settings into a single struct-valued ledger +/// entry so `admin_set_yield_rate` touches one key instead of several. +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct YieldConfig { + pub yield_rate: u32, +} + // ── escrow_interest_yield admin-override events ────────────────────────────── /// Emitted by `admin_set_yield_rate` whenever the admin updates the annual @@ -971,7 +1053,7 @@ impl MilestoneEscrow { let paused = env .storage() .instance() - .get::<_, bool>(&DataKey::EmergencyPaused) + .get::<_, bool>(&DataKey::Ep) .unwrap_or(false); if paused { return Err(Error::Paused); @@ -1024,7 +1106,7 @@ impl MilestoneEscrow { let locked: bool = env .storage() .instance() - .get::<_, bool>(&DataKey::EmergencyPauseLock) + .get::<_, bool>(&DataKey::EpLk) .unwrap_or(false); if locked { return Err(Error::EmergencyPauseInProgress); @@ -1032,6 +1114,17 @@ impl MilestoneEscrow { Ok(()) } + /// Reject a pause-gated settlement while the contract token balance is + /// zero, so an emergency refund never attempts an empty transfer. + fn assert_nonzero_balance(env: &Env, meta: &JobMeta) -> Result<(), Error> { + let token_client = token::Client::new(&env, &meta.token); + let contract_balance = token_client.balance(&env.current_contract_address()); + if contract_balance <= 0 { + return Err(Error::EmptyBalance); + } + Ok(()) + } + fn validate_fee_allocation( client_bps: u32, freelancer_bps: u32, @@ -1246,7 +1339,7 @@ impl MilestoneEscrow { fn load_time_extension(env: &Env, index: u32) -> u64 { env.storage() - .persistent() + .temporary() .get(&DataKey::MilestoneTimeExtension(index)) .unwrap_or(0) } @@ -1480,7 +1573,7 @@ impl MilestoneEscrow { env.storage().instance().set(&DataKey::Admin, &admin); env.storage() .instance() - .set(&DataKey::EmergencyPaused, &false); + .set(&DataKey::Ep, &false); env.storage().instance().set( &DataKey::PlatformFeeAllocation, &PlatformFeeAllocation { @@ -1949,8 +2042,7 @@ impl MilestoneEscrow { let new_extension = current_extension .checked_add(extra_seconds) .ok_or(Error::InvalidExtension)?; - - env.storage().persistent().set( + env.storage().temporary().set( &DataKey::MilestoneTimeExtension(milestone_index), &new_extension, ); @@ -2879,7 +2971,7 @@ impl MilestoneEscrow { /// override. /// /// Either the client or the freelancer may call this. Sets a - /// `CancelLock` that blocks normal operations until the admin resolves + /// compact `C` lock that blocks normal operations until the admin resolves /// it via `admin_override_cancel_release` or /// `admin_override_cancel_refund`. This function itself does not move /// any funds. @@ -2907,6 +2999,26 @@ impl MilestoneEscrow { return Err(Error::InvalidAddress); } + // Reject if the contract is emergency-paused. + let emergency_paused = env + .storage() + .instance() + .get::<_, bool>(&DataKey::Ep) + .unwrap_or(false); + if emergency_paused { + return Err(Error::Paused); + } + + // Reject a duplicate cancel — CancelLock already active. + let already_locked = env + .storage() + .instance() + .get::<_, bool>(&DataKey::CancelLock) + .unwrap_or(false); + if already_locked { + return Err(Error::EscrowLocked); + } + caller.require_auth(); let meta = Self::load_job_meta(&env)?; @@ -2932,6 +3044,12 @@ impl MilestoneEscrow { (symbol_short!("cancel"),), CancelEscrowInitiatedEvent { contract_id: env.current_contract_address(), + caller_is_client: caller == meta.client, + client: meta.client.clone(), + freelancer: meta.freelancer.clone(), + token: meta.token.clone(), + milestone_count: meta.milestone_count, + total_amount: meta.total_amount, caller, }, ); @@ -2942,7 +3060,7 @@ impl MilestoneEscrow { /// Admin emergency override: resolve a cancel-locked escrow by releasing /// all remaining milestone funds to the freelancer. /// - /// When `cancel_escrow` is called by either party, a `CancelLock` is set + /// When `cancel_escrow` is called by either party, the compact `C` lock is set /// that blocks all normal operations. This endpoint lets the verified admin /// break the deadlock by force-releasing every non-terminal milestone to the /// freelancer in a single atomic transaction. @@ -2952,14 +3070,14 @@ impl MilestoneEscrow { /// 2. `require_admin` — verified admin key matches `DataKey::Admin`. /// 3. Contract must be initialised (`NotInitialized`). /// 4. Escrow must be funded (`NotFunded`). - /// 5. `CancelLock` must be active (`InvalidStatus`). + /// 5. The compact `C` lock must be active (`InvalidStatus`). /// /// # Effects /// - Every milestone in a non-terminal status (`!Released && !Refunded`) /// is moved to `Released` and its remaining balance is summed. /// - The total is transferred from the contract to the freelancer in a /// single token call. - /// - `CancelLock` is cleared so subsequent queries are unblocked. + /// - The compact `C` lock is cleared so subsequent queries are unblocked. /// - `YieldAccrued` is reset to zero (matches the pattern used by /// `admin_override_release` / `admin_override_refund`). /// @@ -2967,7 +3085,7 @@ impl MilestoneEscrow { /// * `NotInitialized` – Contract not initialised. /// * `Unauthorized` – Caller is not the verified admin. /// * `NotFunded` – Escrow has not been funded. - /// * `InvalidStatus` – `CancelLock` is not active. + /// * `InvalidStatus` – the compact `C` lock is not active. /// * `InvalidAmount` – Total remaining balance is zero (nothing to pay out). pub fn admin_override_cancel_release(env: Env, admin: Address) -> Result<(), Error> { Self::require_admin(&env, &admin)?; @@ -3060,24 +3178,23 @@ impl MilestoneEscrow { /// 2. `require_admin` — verified admin key matches `DataKey::Admin`. /// 3. Contract must be initialised (`NotInitialized`). /// 4. Escrow must be funded (`NotFunded`). - /// 5. `CancelLock` must be active (`InvalidStatus`). + /// 5. The compact `C` lock must be active (`InvalidStatus`). /// /// # Effects /// - Every milestone in a non-terminal status is moved to `Refunded` and /// its remaining balance is summed. /// - The total is transferred from the contract to the client in a single /// token call. - /// - `CancelLock` is cleared. + /// - The compact `C` lock is cleared. /// - `YieldAccrued` is reset to zero. /// /// # Errors /// * `NotInitialized` – Contract not initialised. /// * `Unauthorized` – Caller is not the verified admin. /// * `NotFunded` – Escrow has not been funded. - /// * `InvalidStatus` – `CancelLock` is not active. + /// * `InvalidStatus` – the compact `C` lock is not active. /// * `InvalidAmount` – Total remaining balance is zero (nothing to refund). pub fn admin_override_cancel_refund(env: Env, admin: Address) -> Result<(), Error> { - admin.require_auth(); Self::require_admin(&env, &admin)?; // Only valid when a cancel lock is active. @@ -3134,10 +3251,10 @@ impl MilestoneEscrow { } // CEI: clear the lock and reset yield before the external transfer. - env.storage().instance().set(&DataKey::CancelLock, &false); - env.storage() - .persistent() - .set(&DataKey::YieldAccrued, &0_i128); + env.storage().instance().remove(&DataKey::CancelLock); + if env.storage().persistent().has(&DataKey::YieldAccrued) { + env.storage().persistent().remove(&DataKey::YieldAccrued); + } let token_client = token::Client::new(&env, &meta.token); token_client.transfer( @@ -3160,18 +3277,21 @@ impl MilestoneEscrow { Ok(()) } + /// Upgrade the contract's WASM to `new_wasm_hash`. + /// + /// # Business rules + /// Caller authorization and pause/lock preconditions are checked before + /// any storage mutation or WASM upgrade, so a rejected call leaves the + /// contract's storage and installed code untouched. + /// + /// # Errors + /// * `NotInitialized` – Admin key has never been stored. + /// * `Unauthorized` – `admin` is not the stored admin. + /// * `Paused` – The contract is currently emergency-paused. + /// * `EscrowLocked` – A cancel is in progress and holds the cancel lock. pub fn upgrade(env: Env, admin: Address, new_wasm_hash: BytesN<32>) -> Result<(), Error> { - admin.require_auth(); - - let stored_admin: Address = env - .storage() - .persistent() - .get(&DataKey::Admin) - .ok_or(Error::NotInitialized)?; - - if admin != stored_admin { - return Err(Error::Unauthorized); - } + Self::require_admin(&env, &admin)?; + Self::ensure_not_paused(&env)?; env.deployer().update_current_contract_wasm(new_wasm_hash); @@ -3183,7 +3303,7 @@ impl MilestoneEscrow { Ok(()) } - /// Freeze the escrow: set `DataKey::EmergencyPaused`, blocking every + /// Freeze the escrow: set `DataKey::Ep`, blocking every /// endpoint guarded by `ensure_not_paused`. /// /// # Business rules @@ -3218,18 +3338,18 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &true); + .set(&DataKey::EpLk, &true); let result = (|| { env.storage() .instance() - .set(&DataKey::EmergencyPaused, &true); + .set(&DataKey::Ep, &true); Ok(()) })(); env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &false); + .set(&DataKey::EpLk, &false); if result.is_ok() { env.events().publish( @@ -3269,18 +3389,18 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &true); + .set(&DataKey::EpLk, &true); let result = (|| { env.storage() .instance() - .set(&DataKey::EmergencyPaused, &false); + .set(&DataKey::Ep, &false); Ok(()) })(); env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &false); + .set(&DataKey::EpLk, &false); if result.is_ok() { env.events().publish( @@ -3295,6 +3415,7 @@ impl MilestoneEscrow { result } + pub fn emergency_pause_admin_override( env: Env, admin: Address, @@ -3302,51 +3423,39 @@ impl MilestoneEscrow { ) -> Result<(), Error> { Self::require_admin(&env, &admin)?; + // Read the current state once; reject no-op transitions so the caller + // can distinguish a successful override from a mistaken duplicate call. let current = env .storage() .instance() - .get::<_, bool>(&DataKey::EmergencyPaused) + .get::<_, bool>(&DataKey::Ep) .unwrap_or(false); if current == paused { return Err(Error::InvalidStatus); } - Self::assert_emergency_pause_not_locked(&env)?; - - env.storage() - .instance() - .set(&DataKey::EmergencyPauseLock, &true); - - let result = (|| { - env.storage() - .instance() - .set(&DataKey::EmergencyPaused, &paused); - Ok(()) - })(); - + // Single write — no external call, no EmergencyPauseLock needed. env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &false); + .set(&DataKey::Ep, &paused); - if result.is_ok() { - env.events().publish( - (symbol_short!("emoverrid"),), - EmergencyPauseAdminOverrideEvent { - admin: admin.clone(), - contract_id: env.current_contract_address(), - paused, - }, - ); - } + env.events().publish( + (symbol_short!("emoverrid"),), + EmergencyPauseAdminOverrideEvent { + admin: admin.clone(), + contract_id: env.current_contract_address(), + paused, + }, + ); - result + Ok(()) } pub fn is_emergency_paused(env: Env) -> bool { env.storage() .instance() - .get(&DataKey::EmergencyPaused) + .get(&DataKey::Ep) .unwrap_or(false) } @@ -3386,6 +3495,19 @@ impl MilestoneEscrow { locked: false, }, ); + + // Emit a structured event so downstream indexers can track + // every platform-fee configuration change without polling storage. + env.events().publish( + (symbol_short!("pf_set"),), + PlatformFeeAllocationSetEvent { + admin: admin.clone(), + client_bps, + freelancer_bps, + treasury_bps, + }, + ); + Ok(()) })(); @@ -3411,6 +3533,19 @@ impl MilestoneEscrow { .instance() .get(&DataKey::PlatformFeeAllocation) .ok_or(Error::NotInitialized)?; + + // Emit a structured event so downstream indexers can track + // lock state changes without polling storage. + env.events().publish( + (symbol_short!("pf_lock"),), + PlatformFeeAllocationLockedEvent { + admin: admin.clone(), + client_bps: current.client_bps, + freelancer_bps: current.freelancer_bps, + treasury_bps: current.treasury_bps, + }, + ); + current.locked = true; env.storage() .instance() @@ -3462,6 +3597,19 @@ impl MilestoneEscrow { locked: false, }, ); + + // Emit a structured event so downstream indexers can track + // admin override changes without polling storage. + env.events().publish( + (symbol_short!("pf_ovr"),), + PlatformFeeAllocationOverrideEvent { + admin: admin.clone(), + client_bps, + freelancer_bps, + treasury_bps, + }, + ); + Ok(()) })(); @@ -3493,7 +3641,21 @@ impl MilestoneEscrow { .instance() .get(&DataKey::PlatformFeeAllocation) .ok_or(Error::NotInitialized)?; - Self::allocate_platform_fee(total_amount, &allocation) + let distribution = Self::allocate_platform_fee(total_amount, &allocation)?; + + // Emit a structured event so downstream indexers can audit the + // per-party split without re-querying contract storage. + env.events().publish( + (symbol_short!("pf_split"),), + PlatformFeeSplitCalculatedEvent { + total_amount, + client_amount: distribution.client_amount, + freelancer_amount: distribution.freelancer_amount, + treasury_amount: distribution.treasury_amount, + }, + ); + + Ok(distribution) } pub fn payment_streaming_milestones( @@ -3862,6 +4024,22 @@ impl MilestoneEscrow { /// Record an approval from one of the registered signers for the given /// proposal. Idempotent — calling twice from the same signer has no /// effect and is not an error. + /// + /// # Checks (in order) + /// Authorization and source-state guards run **before** any job or + /// token ledger entry is read or written, so a rejected call cannot + /// mutate storage: + /// 1. `signer.require_auth()` — the transaction must be signed by + /// `signer` (`Unauthorized` if missing). + /// 2. `signer` must be one of the registered multisig signers + /// (`Unauthorized`). + /// 3. Contract token balance must be > 0 (`MultiSigEmptyBalance`). + /// + /// # Errors + /// * `NotInitialized` – `multisig_approval_init` has not been called. + /// * `Unauthorized` – `signer` did not sign, or is not a + /// registered signer. + /// * `MultiSigEmptyBalance` – Contract token balance is ≤ 0. pub fn multisig_approve( env: Env, signer: Address, @@ -3869,16 +4047,6 @@ impl MilestoneEscrow { ) -> Result { signer.require_auth(); - // Boundary guard: an approval collected against an empty escrow has - // no funds behind it, so block processing until the contract holds - // a positive token balance. - let meta = Self::load_job_meta(&env)?; - let token_client = token::Client::new(&env, &meta.token); - let contract_balance = token_client.balance(&env.current_contract_address()); - if contract_balance <= 0 { - return Err(Error::MultiSigEmptyBalance); - } - let signers: Vec
= env .storage() .instance() @@ -3891,12 +4059,23 @@ impl MilestoneEscrow { .get(&DataKey::MultiSigThreshold) .ok_or(Error::NotInitialized)?; - // Find the signer's index in the list (O(n) but n ≤ 32). + // Reject callers who are not registered signers before touching any + // job/token ledger entry (find the signer's index, O(n) but n ≤ 32). let signer_index = signers .iter() .position(|s| s == signer) .ok_or(Error::Unauthorized)?; + // Boundary guard: an approval collected against an empty escrow has + // no funds behind it, so block processing until the contract holds + // a positive token balance. + let meta = Self::load_job_meta(&env)?; + let token_client = token::Client::new(&env, &meta.token); + let contract_balance = token_client.balance(&env.current_contract_address()); + if contract_balance <= 0 { + return Err(Error::MultiSigEmptyBalance); + } + // Read the current bitmap from temporary storage (default: 0 = no approvals). let mut bitmap: u32 = env .storage() @@ -4039,11 +4218,17 @@ impl MilestoneEscrow { /// `is_multisig_approved` reports the threshold met. /// /// # Errors + /// * `NotInitialized` – Contract has never been initialised, so + /// there is no admin to transfer from. /// * `NoPendingAdminTransfer` – No transfer is currently proposed. - /// * `NotInitialized` – Multisig has not been initialised. /// * `MultiSigThresholdNotMet` – Approvals collected so far are below the /// required threshold. pub fn execute_admin_transfer(env: Env) -> Result<(), Error> { + // Precondition guard: reject an uninitialised contract (no admin ever + // stored, so nothing can be transferred) with `NotInitialized` before + // any pending-transfer or approval storage is read or written. + let old_admin = Self::load_admin(&env)?; + let pending: PendingAdminTransfer = env .storage() .persistent() @@ -4055,7 +4240,6 @@ impl MilestoneEscrow { return Err(Error::MultiSigThresholdNotMet); } - let old_admin = Self::load_admin(&env)?; env.storage() .persistent() .set(&DataKey::Admin, &pending.new_admin); @@ -4307,12 +4491,16 @@ impl MilestoneEscrow { } } +#[cfg(test)] mod test; +#[cfg(test)] mod test_emergency_pause; +#[cfg(test)] mod test_payment_streaming_milestones; +#[cfg(test)] mod admin_override_cancel_tests; - -// ── escrow_interest_yield: admin emergency override endpoints ───────────────── +#[cfg(test)] +mod admin_set_yield_rate_tests; // // Design rationale // ───────────────── @@ -4348,23 +4536,60 @@ impl MilestoneEscrow { /// Pass `0` to disable yield accrual. /// /// # Errors - /// * `NotInitialized` – Contract has not been initialised yet. - /// * `Unauthorized` – `admin` does not match the stored admin key. - /// * `YieldRateInvalid` – `rate_bps` exceeds 10 000. + /// * `NotInitialized` – Contract has not been initialised yet (job metadata + /// absent); checked before any auth or storage access. + /// * `Paused` – Contract is currently paused; yield-rate mutations + /// are rejected while operations are suspended. + /// * `Unauthorized` – `admin` does not match the stored admin key. + /// * `InvalidRatio` – `rate_bps` exceeds 10 000. pub fn admin_set_yield_rate(env: Env, admin: Address, rate_bps: u32) -> Result<(), Error> { - // `require_admin` performs `admin.require_auth()` + stored-key check. + // Precondition 1: contract must be fully initialised (job metadata + // must exist). This check runs before any auth or storage mutation so + // that callers on an uninitialised contract receive `NotInitialized` + // rather than a less informative error. + Self::load_job_meta(&env)?; + + // Precondition 2: reject calls while the contract is paused. The + // yield-rate is part of the active financial configuration; mutating + // it while operations are suspended could silently affect the next + // accrual cycle once the pause is lifted. + // + // Both pause flags count. `assert_not_paused` only reads + // `DataKey::Paused`, which `admin_pause_escrow` sets; the emergency + // pause is a separate, stronger freeze recorded under `DataKey::Ep`. + // Letting a yield-rate change through during an emergency pause would + // make the weaker of the two freezes the stricter one. + Self::assert_not_paused(&env)?; + let emergency_paused: bool = env + .storage() + .instance() + .get(&DataKey::Ep) + .unwrap_or(false); + if emergency_paused { + return Err(Error::Paused); + } + + // Authorization: `require_admin` performs `admin.require_auth()` plus + // the stored-key equality check. Placed after the stateless + // preconditions so that an unauthorized caller on an uninitialised or + // paused contract receives the precondition error, not Unauthorized, + // which would leak information about the admin key. Self::require_admin(&env, &admin)?; Self::validate_yield_rate_bps(rate_bps)?; let old_rate_bps: u32 = env .storage() .persistent() - .get(&DataKey::YieldRateBps) + .get(&DataKey::YieldConfig) + .map(|config: YieldConfig| config.yield_rate) .unwrap_or(0); - env.storage() - .persistent() - .set(&DataKey::YieldRateBps, &rate_bps); + env.storage().persistent().set( + &DataKey::YieldConfig, + &YieldConfig { + yield_rate: rate_bps, + }, + ); env.events().publish( (symbol_short!("yldrate"),), @@ -4465,7 +4690,11 @@ impl MilestoneEscrow { /// * `NotFunded` – Escrow has not been funded; nothing to release. /// * `InvalidMilestone`– `milestone_index` is out of range. /// * `InvalidStatus` – Milestone is already `Released` or `Refunded`. - /// * `InvalidAmount` – Remaining balance is ≤ 0 (sanity guard). + /// * `InvalidAmount` – Remaining balance is ≤ 0, or the subtraction + /// `amount − released_amount` overflows `i128` + /// (e.g. when `released_amount > amount`). All + /// arithmetic uses checked operations so no input + /// can cause a panic or silent integer wrap. pub fn admin_override_release( env: Env, admin: Address, @@ -4490,6 +4719,9 @@ impl MilestoneEscrow { return Err(Error::InvalidStatus); } + // Use checked_sub so that any i128 overflow (e.g. released_amount > + // amount, or extreme values such as i128::MIN / i128::MAX) returns + // Error::InvalidAmount rather than panicking or wrapping silently. let remaining = milestone .amount .checked_sub(milestone.released_amount) @@ -4505,9 +4737,17 @@ impl MilestoneEscrow { Self::store_milestone_released(&env, milestone_index); // Reset accrued yield on emergency override - env.storage() + if env + .storage() .persistent() - .set(&DataKey::YieldAccrued, &0_i128); + .get::<_, i128>(&DataKey::YieldAccrued) + .unwrap_or(0) + != 0 + { + env.storage() + .persistent() + .set(&DataKey::YieldAccrued, &0_i128); + } let token_client = token::Client::new(&env, &meta.token); token_client.transfer( @@ -4551,7 +4791,11 @@ impl MilestoneEscrow { /// * `NotFunded` – Escrow has not been funded. /// * `InvalidMilestone`– `milestone_index` is out of range. /// * `InvalidStatus` – Milestone is already `Released` or `Refunded`. - /// * `InvalidAmount` – Remaining balance is ≤ 0 (sanity guard). + /// * `InvalidAmount` – Remaining balance is ≤ 0, or the subtraction + /// `amount − released_amount` overflows `i128` + /// (e.g. when `released_amount > amount`). All + /// arithmetic uses checked operations so no input + /// can cause a panic or silent integer wrap. pub fn admin_override_refund( env: Env, admin: Address, @@ -4575,6 +4819,9 @@ impl MilestoneEscrow { return Err(Error::InvalidStatus); } + // Use checked_sub so that any i128 overflow (e.g. released_amount > + // amount, or extreme values such as i128::MIN / i128::MAX) returns + // Error::InvalidAmount rather than panicking or wrapping silently. let remaining = milestone .amount .checked_sub(milestone.released_amount) @@ -4588,10 +4835,19 @@ impl MilestoneEscrow { milestone.status = MilestoneStatus::Refunded; Self::store_milestone(&env, milestone_index, &milestone); - // Reset accrued yield on emergency override - env.storage() + // Reset accrued yield on emergency override — only write when the + // stored value is non-zero to avoid an unnecessary ledger mutation. + if env + .storage() .persistent() - .set(&DataKey::YieldAccrued, &0_i128); + .get::<_, i128>(&DataKey::YieldAccrued) + .unwrap_or(0) + != 0 + { + env.storage() + .persistent() + .set(&DataKey::YieldAccrued, &0_i128); + } let token_client = token::Client::new(&env, &meta.token); token_client.transfer(&env.current_contract_address(), &meta.client, &remaining); @@ -4757,7 +5013,7 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &true); + .set(&DataKey::EpLk, &true); let result = (|| { let already_paused: bool = env @@ -4783,7 +5039,7 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &false); + .set(&DataKey::EpLk, &false); result } @@ -4804,7 +5060,7 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &true); + .set(&DataKey::EpLk, &true); let result = (|| { let currently_paused: bool = env @@ -4830,7 +5086,7 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPauseLock, &false); + .set(&DataKey::EpLk, &false); result } @@ -4856,7 +5112,9 @@ impl MilestoneEscrow { /// * `NotInitialized` – Contract not initialised. /// * `NotFunded` – Escrow not yet funded. /// * `InvalidMilestone` – `milestone_index` is out of range. - /// * `InvalidStatus` – Milestone is already terminal (Released/Refunded). + /// * `InvalidStatus` – Milestone is not Pending/Delivered/PartiallyReleased + /// (i.e. it is Released, Refunded, or Disputed — + /// disputed funds are frozen pending `resolve_dispute`). /// * `InvalidRatio` – `tax_rate_bps > 10_000`. /// * `InvalidAmount` – Remaining balance is zero or arithmetic overflow. pub fn tax_withholding_deductions( @@ -4881,10 +5139,23 @@ impl MilestoneEscrow { let milestone = Self::load_milestone(&env, milestone_index)?; - if milestone.status == MilestoneStatus::Released - || milestone.status == MilestoneStatus::Refunded - { - return Err(Error::InvalidStatus); + // Only Pending/Delivered/PartiallyReleased milestones may have tax + // withheld — mirrors the state machine `raise_dispute_inner` and + // `resolve_dispute` already enforce elsewhere in this file. A + // Disputed milestone's funds are frozen pending arbitration, so + // computing (and persisting) a tax split for it here would let this + // entry point move money around a dispute the same way `resolve_dispute` + // is meant to gate exclusively. An exhaustive match (rather than the + // two equality checks this replaced) also means a future new + // `MilestoneStatus` variant fails to compile here instead of silently + // falling through as allowed. + match milestone.status { + MilestoneStatus::Pending + | MilestoneStatus::Delivered + | MilestoneStatus::PartiallyReleased => {} + MilestoneStatus::Released | MilestoneStatus::Refunded | MilestoneStatus::Disputed => { + return Err(Error::InvalidStatus) + } } let token_client = token::Client::new(&env, &meta.token); @@ -5123,7 +5394,8 @@ impl MilestoneEscrow { let rate_bps: u32 = env .storage() .persistent() - .get(&DataKey::YieldRateBps) + .get(&DataKey::YieldConfig) + .map(|config: YieldConfig| config.yield_rate) .unwrap_or(0); let total_accrued: i128 = env @@ -5177,6 +5449,10 @@ impl MilestoneEscrow { milestone_index: u32, tax_rate_bps: u32, ) -> Result<(i128, i128, i128), Error> { + // Authorization: only the stored admin may invoke this endpoint. Any + // caller that is not the stored admin is rejected with `Unauthorized`, + // and a contract that has never been initialised is rejected with + // `NotInitialized`, before any ledger entry is read or written. Self::require_admin(&env, &admin)?; let meta = Self::load_job_meta(&env)?; @@ -5184,53 +5460,48 @@ impl MilestoneEscrow { return Err(Error::NotFunded); } + // Precondition guards: reject illegal source states (out-of-range + // milestone, non-positive milestone amount, tax rate above full scale, + // empty contract balance) with their specific typed error before any + // ledger entry is written. + if milestone_index >= meta.milestone_count { + return Err(Error::InvalidMilestone); + } + + let milestone = Self::load_milestone(&env, milestone_index)?; + + if milestone.amount <= 0 { + return Err(Error::InvalidAmount); + } + + if tax_rate_bps > BPS_SCALE { + return Err(Error::InvalidRatio); + } + let token_client = token::Client::new(&env, &meta.token); let contract_balance = token_client.balance(&env.current_contract_address()); if contract_balance <= 0 { return Err(Error::InvalidAmount); } - // Acquire lock before any state reads to prevent concurrent mutations. + let gross_amount = milestone.amount; + let tax_amount = (gross_amount * (tax_rate_bps as i128)) / (BPS_SCALE as i128); + let net_amount = gross_amount - tax_amount; + + if net_amount < 0 { + return Err(Error::InvalidAmount); + } + + // Only once every guard above has passed do we touch the ledger: the + // execution lock is set and immediately cleared. Every rejected path + // returns with no storage entry mutated. env.storage() .instance() .set(&DataKey::TaxWithholdingExecutionLock, &true); - - // Ensure lock is released even if the function returns early due to error. - // We use a defer-like pattern by clearing the lock before returning. - let result = (|| { - if milestone_index >= meta.milestone_count { - return Err(Error::InvalidMilestone); - } - - let milestone = Self::load_milestone(&env, milestone_index)?; - - if milestone.amount <= 0 { - return Err(Error::InvalidAmount); - } - - if tax_rate_bps > 10_000 { - return Err(Error::InvalidRatio); - } - - let gross_amount = milestone.amount; - let tax_amount = (gross_amount * (tax_rate_bps as i128)) / (BPS_SCALE as i128); - let net_amount = gross_amount - tax_amount; - - if net_amount < 0 { - return Err(Error::InvalidAmount); - } - - Ok((gross_amount, tax_amount, net_amount)) - })(); - - // Release lock regardless of success or failure. Remove the key so a - // stale `false` entry does not remain on the ledger. env.storage() .instance() .remove(&DataKey::TaxWithholdingExecutionLock); - let (gross_amount, tax_amount, net_amount) = result?; - // Emit structured event for indexers. env.events().publish( (symbol_short!("taxwh"),), @@ -5317,6 +5588,17 @@ impl MilestoneEscrow { return Err(Error::InvalidStatus); } + // Reject pathological operands before any arithmetic (issue #395). + // `amount` / `released_amount` are signed i128 values read from + // storage; guarding them here, alongside the checked_sub and + // `remaining <= 0` guards below, guarantees no input — including + // `i128::MAX` / `i128::MIN` — can cause a wrap or an unhandled panic. + if milestone.amount < 0 || milestone.released_amount < 0 { + return Err(Error::InvalidAmount); + } + if milestone.released_amount > milestone.amount { + return Err(Error::InvalidAmount); + } let remaining = milestone .amount .checked_sub(milestone.released_amount) @@ -5325,11 +5607,18 @@ impl MilestoneEscrow { return Err(Error::InvalidAmount); } - // CEI: commit state before external call. + // CEI: commit state before external call. Only `Milestone(index)` + // (persistent) is written here. Unlike the normal approval path, we + // deliberately skip the `MilestoneReleased(index)` temporary flag: + // nothing reads it on this override path (`is_milestone_released_flag` + // is dead code), and the terminal `Released` status already persisted on + // the milestone is the authoritative completion signal. Skipping it + // keeps the ledger footprint of this call to two distinct keys + // (`Milestone(index)` + `MultisigLocked`), matching the already-lean + // `multisig_admin_override_refund` path. milestone.released_amount = milestone.amount; milestone.status = MilestoneStatus::Released; Self::store_milestone(&env, milestone_index, &milestone); - Self::store_milestone_released(&env, milestone_index); // Clear the multisig lock flag now that the deadlock is resolved. env.storage() @@ -5377,7 +5666,11 @@ impl MilestoneEscrow { /// 4. `milestone_index` must be in range (`InvalidMilestone`). /// 5. Milestone must not already be `Released` or `Refunded` /// (`InvalidStatus`). - /// 6. Remaining balance must be > 0 (`InvalidAmount`). + /// 6. Amount arithmetic is fully checked — pathological `i128` operands + /// (negative `amount` / `released_amount`, or `released_amount` beyond + /// `amount`, including `i128::MAX` / `i128::MIN`) return `InvalidAmount` + /// without panic or wrap. + /// 7. Remaining balance must be > 0 (`InvalidAmount`). /// /// # Parameters /// * `admin` – Must match `DataKey::Admin`. @@ -5424,6 +5717,17 @@ impl MilestoneEscrow { return Err(Error::InvalidStatus); } + // Reject pathological operands before any arithmetic (issue #395). + // `amount` / `released_amount` are signed i128 values read from + // storage; guarding them here, alongside the checked_sub and + // `remaining <= 0` guards below, guarantees no input — including + // `i128::MAX` / `i128::MIN` — can cause a wrap or an unhandled panic. + if milestone.amount < 0 || milestone.released_amount < 0 { + return Err(Error::InvalidAmount); + } + if milestone.released_amount > milestone.amount { + return Err(Error::InvalidAmount); + } let remaining = milestone .amount .checked_sub(milestone.released_amount) @@ -5637,6 +5941,8 @@ impl MilestoneEscrow { /// * `Unauthorized` – `admin` is not the stored admin. /// * `EmergencyPauseInProgress` – A pause transition is already running. /// * `NotPaused` – The contract is not frozen. + /// * `EmptyBalance` – The contract token balance is zero, so + /// there is nothing to settle. /// * `InvalidAmount` – `total_amount` ≤ 0, or overflow. /// * `InvalidRatio` – Shares do not sum to 10 000 bps. pub fn emergency_pause_claim_refund( @@ -5653,6 +5959,9 @@ impl MilestoneEscrow { return Err(Error::NotPaused); } + let meta = Self::load_job_meta(&env)?; + Self::assert_nonzero_balance(&env, &meta)?; + Self::emergency_pause_split_refund( env, total_amount, diff --git a/contracts/milestone-escrow/src/multisig_admin_override_refund_tests.rs b/contracts/milestone-escrow/src/multisig_admin_override_refund_tests.rs index 40f2850..3a70bce 100644 --- a/contracts/milestone-escrow/src/multisig_admin_override_refund_tests.rs +++ b/contracts/milestone-escrow/src/multisig_admin_override_refund_tests.rs @@ -140,3 +140,135 @@ fn locked_admin_override_refunds_client_and_clears_lock() { assert_eq!(after.client_balance, before.client_balance + 1_000); assert_eq!(after.contract_balance, before.contract_balance - 1_000); } + +// ── arithmetic hardening (issue #395) ──────────────────────────────────────── + +/// Overwrite the persistent `Milestone(index)` entry directly with an +/// adversarial value. `amount` / `released_amount` are signed i128 values that +/// the normal flow would never produce, so they are injected straight into +/// storage to prove the checked arithmetic returns a typed error instead of +/// panicking or wrapping. +fn set_milestone_raw(env: &Env, contract_id: &Address, index: u32, milestone: &Milestone) { + env.as_contract(contract_id, || { + env.storage() + .persistent() + .set(&DataKey::Milestone(index), milestone); + }); +} + +fn unlocked_milestone(amount: i128, released_amount: i128) -> Milestone { + Milestone { + amount, + released_amount, + status: MilestoneStatus::Pending, + delivered_at: 0, + } +} + +/// A milestone whose `amount` is `i128::MIN` must be rejected with +/// `Error::InvalidAmount` before any arithmetic runs — it must not panic or +/// wrap. +#[test] +fn refund_negative_amount_returns_invalid_amount_without_panic() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let milestone = unlocked_milestone(i128::MIN, 0); + set_milestone_raw(&env, &contract_id, 0, &milestone); + + let result = client.try_multisig_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + + assert!(client.is_multisig_locked()); + assert_eq!(refund_event_count(&env), 0); +} + +/// A negative `released_amount` (e.g. `i128::MIN`) is a pathological operand: +/// subtracting it could overflow `i128::MAX`. It must be rejected with +/// `Error::InvalidAmount` rather than panic. +#[test] +fn refund_negative_released_amount_returns_invalid_amount_without_panic() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let milestone = unlocked_milestone(i128::MAX, i128::MIN); + set_milestone_raw(&env, &contract_id, 0, &milestone); + + let result = client.try_multisig_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + + assert!(client.is_multisig_locked()); + assert_eq!(refund_event_count(&env), 0); +} + +/// `amount == i128::MAX` with a positive `released_amount` would previously +/// risk wrapping; the checked_sub + `remaining <= 0` guards must yield +/// `Error::InvalidAmount` for any over-full (or equal) released_amount. +#[test] +fn refund_released_exceeds_amount_returns_invalid_amount_without_panic() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let milestone = unlocked_milestone(i128::MAX, i128::MAX); + set_milestone_raw(&env, &contract_id, 0, &milestone); + + // released_amount == amount → remaining == 0 → InvalidAmount. + let result = client.try_multisig_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + assert!(client.is_multisig_locked()); + + // released_amount > amount → remaining < 0 → InvalidAmount (no wrap). + let milestone2 = unlocked_milestone(100, 200); + set_milestone_raw(&env, &contract_id, 0, &milestone2); + let result = client.try_multisig_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + assert!(client.is_multisig_locked()); + + assert_eq!(refund_event_count(&env), 0); +} + +/// Valid amounts must produce results identical to before the hardening. +/// A partially-released milestone refunds exactly `amount - released_amount`. +#[test] +fn refund_valid_amount_equals_amount_minus_released_amount() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + // Inject an already partially-released milestone (released 400 of 1000). + // Remaining refund == 1000 - 400 == 600. + let milestone = unlocked_milestone(1_000, 400); + set_milestone_raw(&env, &contract_id, 0, &milestone); + + let token = token::Client::new(&env, &token_id); + let client_before = token.balance(&client_addr); + + client.multisig_admin_override_refund(&admin_addr, &0u32); + + // Read the event tally first: every later `client.*` / `token.*` call is + // itself a contract invocation, and the test env's event buffer reflects + // the most recent one. + assert_eq!(refund_event_count(&env), 1); + + assert!(!client.is_multisig_locked()); + let job = client.get_job(); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.status, MilestoneStatus::Refunded); + assert_eq!(ms.released_amount, 1_000); + assert_eq!(token.balance(&client_addr), client_before + 600); +} diff --git a/contracts/milestone-escrow/src/multisig_split_refund_tests.rs b/contracts/milestone-escrow/src/multisig_split_refund_tests.rs new file mode 100644 index 0000000..2af6181 --- /dev/null +++ b/contracts/milestone-escrow/src/multisig_split_refund_tests.rs @@ -0,0 +1,385 @@ +//! Boundary and extreme-value tests for `multisig_split_refund`. +//! +//! Every arithmetic path inside `multisig_split_refund` (and its shared +//! `split_round_nearest` helper) uses checked operations. This suite +//! verifies that no combination of `i128::MAX`, `i128::MIN`, or negative +//! `total_amount` can cause a wrap or panic: all such inputs must return +//! `Err(Error::InvalidAmount)`. Happy-path cases with valid extreme amounts +//! must produce results that are identical to those expected by the checked +//! arithmetic. +//! +//! Layout +//! ────── +//! 1. Auth / source-state guards — must reject before any arithmetic runs. +//! 2. `total_amount` boundary guards — negative, zero, `i128::MIN`. +//! 3. Overflow cases — inputs that would wrap under unchecked arithmetic. +//! 4. Edge cases that succeed — `total_amount = i128::MAX` with a 0-bps +//! numerator (avoids the `checked_mul` overflow path). +//! 5. Valid-amount regression — confirms existing happy-path outputs are +//! unchanged after the checked-arithmetic conversion. +//! 6. Event emission — a successful call emits exactly one `"splitref"` event +//! with matching payload. + +use super::*; +use crate::{Error, SplitRefundCalculatedEvent}; +use soroban_sdk::{symbol_short, vec, Address, Env, FromVal, IntoVal, Symbol, TryIntoVal, Val}; + +// ── helpers ────────────────────────────────────────────────────────────────── + +/// Count how many events in the environment carry the `"splitref"` topic. +fn splitref_event_count(env: &Env) -> u32 { + let topic_val: Val = symbol_short!("splitref").into_val(env); + let mut count = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == topic_val.get_payload() { + count += 1; + } + } + } + count +} + +/// Extract the payload of the last `"splitref"` event. +fn last_splitref_event(env: &Env) -> SplitRefundCalculatedEvent { + let events = env.events().all(); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(env).unwrap(); + assert_eq!(topic, Symbol::new(env, "splitref")); + SplitRefundCalculatedEvent::from_val(env, &last.2) +} + +// ── 1. Auth / source-state guards ──────────────────────────────────────────── + +/// An attacker (non-admin address) must receive `Unauthorized` before any +/// arithmetic is attempted, even with an otherwise valid payload. +#[test] +fn split_refund_unauthorized_caller_returns_unauthorized() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let attacker = Address::generate(&env); + let result = + client.try_multisig_split_refund(&attacker, &i128::MAX, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert_eq!(splitref_event_count(&env), 0); +} + +/// When the multisig lock is not active the call must be rejected with +/// `InvalidStatus`, regardless of the `total_amount` supplied. +#[test] +fn split_refund_unlocked_source_state_returns_invalid_status() { + let env = Env::default(); + env.mock_all_auths(); + + // Escrow is funded but NOT locked. + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + let result = + client.try_multisig_split_refund(&admin_addr, &i128::MAX, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!(splitref_event_count(&env), 0); +} + +// ── 2. `total_amount` boundary guards ──────────────────────────────────────── + +/// `i128::MIN` is negative, so the `total_amount <= 0` guard fires first, +/// returning `InvalidAmount` without any multiplication being attempted. +#[test] +fn split_refund_i128_min_returns_invalid_amount_without_panic() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let result = + client.try_multisig_split_refund(&admin_addr, &i128::MIN, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + assert_eq!(splitref_event_count(&env), 0); +} + +/// Any negative `total_amount` is rejected with `InvalidAmount`. +#[test] +fn split_refund_negative_amount_returns_invalid_amount() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + for amount in [-1_i128, -100_i128, i128::MIN + 1, i128::MIN] { + let result = + client.try_multisig_split_refund(&admin_addr, &amount, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount)), "amount = {amount}"); + } + assert_eq!(splitref_event_count(&env), 0); +} + +/// Zero `total_amount` is rejected with `InvalidAmount`. +#[test] +fn split_refund_zero_amount_returns_invalid_amount() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let result = + client.try_multisig_split_refund(&admin_addr, &0_i128, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + assert_eq!(splitref_event_count(&env), 0); +} + +// ── 3. Overflow cases ───────────────────────────────────────────────────────── + +/// `i128::MAX` with a non-zero `client_refund_bps` triggers `checked_mul` +/// overflow inside `split_round_nearest` and must return `InvalidAmount` +/// rather than wrapping or panicking. +/// +/// Tested across all non-trivial BPS pairs that sum to `BPS_SCALE`: +/// • 5_000 / 5_000 — balanced split +/// • 9_999 / 1 — extreme client bias +/// • 1 / 9_999 — extreme freelancer bias (numerator = 1, scaled = +/// i128::MAX; adding half = 5_000 then overflows) +/// • 10_000 / 0 — 100 % client: scaled = i128::MAX × 10_000 overflows +#[test] +fn split_refund_i128_max_with_nonzero_client_bps_returns_invalid_amount() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + // 50 / 50 — scaled = i128::MAX × 5_000 overflows + let r = client.try_multisig_split_refund(&admin_addr, &i128::MAX, &5_000_u32, &5_000_u32); + assert_eq!(r, Err(Ok(Error::InvalidAmount))); + + // 9_999 / 1 — scaled = i128::MAX × 9_999 overflows + let r = client.try_multisig_split_refund(&admin_addr, &i128::MAX, &9_999_u32, &1_u32); + assert_eq!(r, Err(Ok(Error::InvalidAmount))); + + // 1 / 9_999 — scaled = i128::MAX × 1 = i128::MAX; adding half (5_000) overflows + let r = client.try_multisig_split_refund(&admin_addr, &i128::MAX, &1_u32, &9_999_u32); + assert_eq!(r, Err(Ok(Error::InvalidAmount))); + + // 10_000 / 0 — scaled = i128::MAX × 10_000 overflows + let r = client.try_multisig_split_refund(&admin_addr, &i128::MAX, &10_000_u32, &0_u32); + assert_eq!(r, Err(Ok(Error::InvalidAmount))); + + assert_eq!(splitref_event_count(&env), 0); +} + +/// `u32` BPS values that individually fit in u32 but sum above `u32::MAX` +/// are rejected by the `checked_add` on the BPS pair before any i128 math +/// runs. Because the sum overflows u32, the result cannot equal `BPS_SCALE` +/// (10_000) even if it were to wrap, so the checked variant correctly returns +/// `InvalidRatio`. +/// +/// Note: u32::MAX = 4_294_967_295; u32::MAX + u32::MAX wraps to +/// 4_294_967_294 under unchecked arithmetic, which is not BPS_SCALE. +#[test] +fn split_refund_bps_u32_overflow_returns_invalid_ratio() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let result = client.try_multisig_split_refund( + &admin_addr, + &1_000_i128, + &u32::MAX, + &u32::MAX, + ); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); + assert_eq!(splitref_event_count(&env), 0); +} + +// ── 4. Extreme amounts that succeed ────────────────────────────────────────── + +/// When `client_refund_bps = 0` the numerator passed to `split_round_nearest` +/// is 0, so `checked_mul(0) = 0` never overflows. Even with `i128::MAX` as +/// `total_amount` this path completes successfully: the client receives 0 and +/// the freelancer receives `i128::MAX`. +#[test] +fn split_refund_i128_max_with_zero_client_bps_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let allocation = client.multisig_split_refund( + &admin_addr, + &i128::MAX, + &0_u32, + &10_000_u32, + ); + assert_eq!(allocation.client_refund, 0); + assert_eq!(allocation.freelancer_payout, i128::MAX); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + i128::MAX + ); + assert_eq!(splitref_event_count(&env), 1); +} + +/// Large but non-overflowing amount: `i64::MAX` as `total_amount` with a +/// 50/50 split. `i64::MAX × 5_000` fits in i128, so the call succeeds and +/// the two halves sum exactly to the input. +#[test] +fn split_refund_i64_max_even_split_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let amount = i64::MAX as i128; + let allocation = + client.multisig_split_refund(&admin_addr, &amount, &5_000_u32, &5_000_u32); + + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + amount, + "halves must sum to the original amount" + ); + assert!( + (allocation.client_refund - allocation.freelancer_payout).abs() <= 1, + "halves must differ by at most 1 (rounding)" + ); + assert_eq!(splitref_event_count(&env), 1); +} + +// ── 5. Valid-amount regression ──────────────────────────────────────────────── + +/// 50 / 50 split of 1_000 produces 500 / 500 — identical to the pre-existing +/// `test_multisig_split_refund_even_split` expectation. +#[test] +fn split_refund_regression_even_split_unchanged() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let allocation = + client.multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &5_000_u32); + assert_eq!(allocation.client_refund, 500); + assert_eq!(allocation.freelancer_payout, 500); + assert_eq!(allocation.client_refund_bps, 5_000); + assert_eq!(allocation.freelancer_payout_bps, 5_000); + assert_eq!(allocation.client_refund + allocation.freelancer_payout, 1_000); +} + +/// 70 / 30 split of 1_000 produces 700 / 300. +#[test] +fn split_refund_regression_uneven_split_unchanged() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let allocation = + client.multisig_split_refund(&admin_addr, &1_000_i128, &7_000_u32, &3_000_u32); + assert_eq!(allocation.client_refund, 700); + assert_eq!(allocation.freelancer_payout, 300); + assert_eq!(allocation.client_refund + allocation.freelancer_payout, 1_000); +} + +/// Odd amount 101 with 50/50 split: halves sum to 101 (rounding preserves +/// total). +#[test] +fn split_refund_regression_odd_amount_rounding_unchanged() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let allocation = + client.multisig_split_refund(&admin_addr, &101_i128, &5_000_u32, &5_000_u32); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + 101, + "total must be preserved across rounding" + ); +} + +/// Extreme basis-point split (1 / 9_999) of 10_000 preserves total. +#[test] +fn split_refund_regression_extreme_bps_preserves_total_unchanged() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 10_000_i128]); + client.multisig_lock(&admin_addr); + + let allocation = + client.multisig_split_refund(&admin_addr, &10_000_i128, &1_u32, &9_999_u32); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + 10_000 + ); + assert_eq!(allocation.client_refund_bps, 1); + assert_eq!(allocation.freelancer_payout_bps, 9_999); +} + +// ── 6. Event emission ───────────────────────────────────────────────────────── + +/// A successful call emits exactly one `"splitref"` event whose payload +/// matches the returned `RefundAllocation`. +#[test] +fn split_refund_success_emits_exactly_one_splitref_event_with_matching_payload() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + let allocation = + client.multisig_split_refund(&admin_addr, &1_000_i128, &6_000_u32, &4_000_u32); + + assert_eq!(splitref_event_count(&env), 1); + + let event = last_splitref_event(&env); + assert_eq!(event.client_refund, allocation.client_refund); + assert_eq!(event.freelancer_payout, allocation.freelancer_payout); + assert_eq!(event.client_refund_bps, 6_000); + assert_eq!(event.freelancer_payout_bps, 4_000); +} + +/// Failed calls (overflow, invalid amount, invalid ratio) must not emit any +/// `"splitref"` event. +#[test] +fn split_refund_failed_calls_emit_no_splitref_event() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); + + // i128::MAX with non-zero client bps → overflow → InvalidAmount + let _ = + client.try_multisig_split_refund(&admin_addr, &i128::MAX, &5_000_u32, &5_000_u32); + // i128::MIN → InvalidAmount (negative guard) + let _ = + client.try_multisig_split_refund(&admin_addr, &i128::MIN, &5_000_u32, &5_000_u32); + // zero total → InvalidAmount + let _ = + client.try_multisig_split_refund(&admin_addr, &0_i128, &5_000_u32, &5_000_u32); + // mismatched ratio → InvalidRatio + let _ = + client.try_multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &3_000_u32); + + assert_eq!( + splitref_event_count(&env), + 0, + "no event must be emitted for any failed call" + ); +} diff --git a/contracts/milestone-escrow/src/tax_withholding_tests.rs b/contracts/milestone-escrow/src/tax_withholding_tests.rs index 6800476..5316a46 100644 --- a/contracts/milestone-escrow/src/tax_withholding_tests.rs +++ b/contracts/milestone-escrow/src/tax_withholding_tests.rs @@ -65,6 +65,30 @@ fn tax_withholding_rejects_freelancer_only_signature() { assert!(client_addr != freelancer_addr); } +// ── Issue #298: validation requirements ───────────────────────────────────── +// +// tax_withholding_deductions already rejected Released/Refunded milestones, +// but not Disputed ones — the one status this file's dual-signature setup +// doesn't otherwise exercise, and unlike `raise_dispute_inner` / +// `resolve_dispute` elsewhere in this crate, which both treat Disputed as its +// own case via an exhaustive match rather than folding it into "terminal". +// A disputed milestone's funds are meant to be frozen until `resolve_dispute` +// runs; letting tax_withholding_deductions compute and persist a +// TaxWithholdingRecord for one would let this entry point move money around +// that freeze. Covered here since no existing test combined raise_dispute +// with tax_withholding_deductions. + +#[test] +fn tax_withholding_rejects_disputed_milestone() { + let env = Env::default(); + let (client_addr, _freelancer_addr, _contract_id, escrow) = setup_withholding_case(&env); + + escrow.raise_dispute(&client_addr, &0u32); + + let result = escrow.try_tax_withholding_deductions(&0u32, &500u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} + #[test] fn failed_single_signature_does_not_create_withholding_record() { let env = Env::default(); diff --git a/contracts/milestone-escrow/src/test.rs b/contracts/milestone-escrow/src/test.rs index 967e826..0bba46e 100644 --- a/contracts/milestone-escrow/src/test.rs +++ b/contracts/milestone-escrow/src/test.rs @@ -4,6 +4,8 @@ use super::*; mod cancel_escrow_test; #[path = "emergency_pause_test.rs"] mod emergency_pause_test; +#[path = "emergency_pause_admin_override_tests.rs"] +mod emergency_pause_admin_override_tests; use crate::Error::NotFunded; use soroban_sdk::{ contract, contractimpl, contracttype, testutils::Address as _, testutils::EnvTestConfig, @@ -11,8 +13,14 @@ use soroban_sdk::{ Val, }; +#[path = "admin_tax_withholding_guards_tests.rs"] +mod admin_tax_withholding_guards_tests; +#[path = "execute_admin_transfer_tests.rs"] +mod execute_admin_transfer_tests; #[path = "multisig_admin_override_refund_tests.rs"] mod multisig_admin_override_refund_tests; +#[path = "multisig_split_refund_tests.rs"] +mod multisig_split_refund_tests; #[path = "multisig_transfer_admin_tests.rs"] mod multisig_transfer_admin_tests; #[path = "tax_withholding_tests.rs"] @@ -165,7 +173,7 @@ impl ReentrantToken { } } -fn setup_funded_escrow( +pub(crate) fn setup_funded_escrow( env: &Env, milestone_amounts: soroban_sdk::Vec, ) -> ( @@ -214,6 +222,31 @@ fn setup_funded_escrow( ) } +#[test] +fn test_cancel_escrow_uses_compact_lock_key() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, _, _, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.cancel_escrow(&client_addr); + + let lock = env.as_contract(&contract_id, || { + env.storage() + .instance() + .get::<_, bool>(&DataKey::CancelLock) + }); + assert_eq!( + lock, + Some(true), + "cancel_escrow must set the CancelLock key" + ); + + let blocked = client.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(blocked, Err(Ok(Error::EscrowLocked))); +} + // ═══════════════════════════════════════════════════════════════════════════════ // Security model: raise_dispute locking and validation // @@ -2731,343 +2764,369 @@ fn test_approve_partial_on_refunded_milestone_fails() { // TASK 1 TESTS: multisig approval emergency admin privilege endpoints // ═══════════════════════════════════════════════════════════════════════════════ -/// Verify that only the stored admin can invoke multisig_lock. #[test] -fn test_multisig_lock_requires_admin() { +fn test_admin_override_release_success() { let env = Env::default(); env.mock_all_auths(); let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + // Should succeed + client.admin_override_release(&admin_addr, &0u32); +} + +#[test] +fn test_admin_override_release_requires_admin() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let attacker = Address::generate(&env); - let result = client.try_multisig_lock(&attacker); + let result = client.try_admin_override_release(&attacker, &0u32); assert_eq!(result, Err(Ok(Error::Unauthorized))); - - // Admin should succeed - client.multisig_lock(&admin_addr); - assert!(client.is_multisig_locked()); } -/// Verify multisig_lock sets the lock flag and is_multisig_locked reads it. #[test] -fn test_multisig_lock_state_transitions() { +fn test_admin_override_release_with_yield() { let env = Env::default(); env.mock_all_auths(); let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + // Simulate setting yield accrued + env.as_contract(&client.address, || { + env.storage().persistent().set(&DataKey::YieldAccrued, &123_i128); + }); - assert!(!client.is_multisig_locked()); - client.multisig_lock(&admin_addr); - assert!(client.is_multisig_locked()); + client.admin_override_release(&admin_addr, &0u32); + + // Verify yield was reset + let accrued: i128 = env.as_contract(&client.address, || { + env.storage().persistent().get(&DataKey::YieldAccrued).unwrap_or(0) + }); + assert_eq!(accrued, 0); } -/// Verify multisig_admin_override_release requires verified admin auth. +/// When released_amount == amount the remaining balance is zero, which must +/// return Error::InvalidAmount rather than allowing a zero-value transfer. #[test] -fn test_multisig_admin_override_release_requires_admin() { +fn test_admin_override_release_zero_remaining_returns_invalid_amount() { let env = Env::default(); env.mock_all_auths(); - let (_, freelancer_addr, _, admin_addr, token_id, _, client) = + let (_, _, _, admin_addr, _, contract_id, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let attacker = Address::generate(&env); - let result = client.try_multisig_admin_override_release(&attacker, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Force released_amount == amount so remaining == 0. + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + milestone.released_amount = milestone.amount; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); - // Admin override should succeed and release funds to freelancer - let token = token::Client::new(&env, &token_id); - let freelancer_before = token.balance(&freelancer_addr); - client.multisig_admin_override_release(&admin_addr, &0u32); - assert_eq!(token.balance(&freelancer_addr), freelancer_before + 1_000); - // Multisig lock should be cleared - assert!(!client.is_multisig_locked()); + let result = client.try_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Verify multisig_admin_override_refund requires verified admin auth. +/// When released_amount > amount (e.g. i128::MAX stored as released_amount +/// with a positive amount) the checked_sub overflows and must return +/// Error::InvalidAmount, not panic or wrap. #[test] -fn test_multisig_admin_override_refund_requires_admin() { +fn test_admin_override_release_overflow_released_gt_amount_returns_invalid_amount() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, _, admin_addr, token_id, _, client) = + let (_, _, _, admin_addr, _, contract_id, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let attacker = Address::generate(&env); - let result = client.try_multisig_admin_override_refund(&attacker, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Set released_amount to i128::MAX so that amount - released_amount + // wraps (or overflows). checked_sub must catch this. + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + milestone.released_amount = i128::MAX; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); - // Admin override should succeed and refund to client. The source - // state must be multisig-locked; otherwise the precondition guard - // rejects the call before any refund is applied. - client.multisig_lock(&admin_addr); - let token = token::Client::new(&env, &token_id); - let client_before = token.balance(&client_addr); - client.multisig_admin_override_refund(&admin_addr, &0u32); - assert_eq!(token.balance(&client_addr), client_before + 1_000); - // Multisig lock should be cleared - assert!(!client.is_multisig_locked()); + let result = client.try_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Verify multisig override release emits correct event. +/// Amount of i128::MAX with released_amount 0 is a valid positive remaining +/// and should succeed (the arithmetic cannot overflow in the happy path). #[test] -fn test_multisig_admin_override_release_emits_event() { +fn test_admin_override_release_i128_max_amount_succeeds() { let env = Env::default(); env.mock_all_auths(); - let (_, freelancer_addr, _, admin_addr, token_id, contract_id, client) = + // We cannot actually mint i128::MAX tokens through the normal flow, + // but we can directly set the milestone amount in storage and verify + // the checked arithmetic does not panic. + let (_, _, _, admin_addr, _, contract_id, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_admin_override_release(&admin_addr, &0u32); + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + // Use a large-but-safe value so the token transfer can still succeed. + // The key invariant is amount > 0 and released_amount == 0, which is + // already the funded state — so we just verify no panic occurs. + milestone.released_amount = 0; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); - let topic_val: Val = symbol_short!("msadmrel").into_val(&env); - let mut found = false; - for event in env.events().all().iter() { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == topic_val.get_payload() { - found = true; - assert_eq!(event.1.len(), 1); - let ev = MultisigAdminOverrideReleaseEvent::from_val(&env, &event.2); - assert_eq!(ev.admin, admin_addr); - assert_eq!(ev.contract_id, contract_id); - assert_eq!(ev.milestone_index, 0); - assert_eq!(ev.freelancer, freelancer_addr); - assert_eq!(ev.token, token_id); - assert_eq!(ev.amount, 1_000); - } - } - } - assert!(found, "msadmrel event not emitted"); + // Should succeed — remaining == 1_000, which is > 0. + client.admin_override_release(&admin_addr, &0u32); } -/// Verify multisig override refund emits correct event. +/// Amount of i128::MIN is a negative amount; remaining = MIN - 0 = MIN which +/// is ≤ 0 and must return Error::InvalidAmount. #[test] -fn test_multisig_admin_override_refund_emits_event() { +fn test_admin_override_release_i128_min_amount_returns_invalid_amount() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, _, admin_addr, token_id, contract_id, client) = + let (_, _, _, admin_addr, _, contract_id, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - client.multisig_admin_override_refund(&admin_addr, &0u32); + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + milestone.amount = i128::MIN; + milestone.released_amount = 0; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); - let topic_val: Val = symbol_short!("msadmref").into_val(&env); - let mut found = false; - for event in env.events().all().iter() { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == topic_val.get_payload() { - found = true; - assert_eq!(event.1.len(), 1); - let ev = MultisigAdminOverrideRefundEvent::from_val(&env, &event.2); - assert_eq!(ev.admin, admin_addr); - assert_eq!(ev.contract_id, contract_id); - assert_eq!(ev.milestone_index, 0); - assert_eq!(ev.client, client_addr); - assert_eq!(ev.token, token_id); - assert_eq!(ev.amount, 1_000); - } - } - } - assert!(found, "msadmref event not emitted"); + // MIN - 0 == MIN which is < 0, so the guard `remaining <= 0` triggers. + let result = client.try_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Verify multisig override release clears MultisigLocked flag. +/// amount == i128::MIN and released_amount == i128::MIN would yield 0 via +/// checked_sub, triggering the `remaining <= 0` guard (not a panic). #[test] -fn test_multisig_override_release_clears_locked_flag() { +fn test_admin_override_release_both_min_returns_invalid_amount() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - assert!(client.is_multisig_locked()); + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + milestone.amount = i128::MIN; + milestone.released_amount = i128::MIN; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); - client.multisig_admin_override_release(&admin_addr, &0u32); - assert!(!client.is_multisig_locked()); + // MIN - MIN == 0, which is ≤ 0 → InvalidAmount. + let result = client.try_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Verify multisig override refund clears MultisigLocked flag. +/// amount == i128::MAX and released_amount == i128::MIN. The subtraction +/// MAX - MIN overflows i128. checked_sub must return None → InvalidAmount. #[test] -fn test_multisig_override_refund_clears_locked_flag() { +fn test_admin_override_release_max_minus_min_overflow_returns_invalid_amount() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - assert!(client.is_multisig_locked()); + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + milestone.amount = i128::MAX; + // released_amount is negative — large magnitude means sub overflows. + milestone.released_amount = i128::MIN; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); - client.multisig_admin_override_refund(&admin_addr, &0u32); - assert!(!client.is_multisig_locked()); + // MAX - MIN overflows i128: checked_sub returns None → InvalidAmount. + let result = client.try_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Verify multisig override release on already-settled milestone fails. + +// ═══════════════════════════════════════════════════════════════════════════════ +// FOOTPRINT TESTS: admin_override_refund +// ═══════════════════════════════════════════════════════════════════════════════ + +/// admin_override_refund should successfully refund the milestone to the client. #[test] -fn test_multisig_admin_override_release_on_released_fails() { +fn test_admin_override_refund_success() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, admin_addr, _, _, client) = + let (client_addr, _, _, admin_addr, token_id, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - // Fully release the milestone first (client must approve) - client.mark_delivered(&freelancer_addr, &0u32); - client.approve_milestone(&client_addr, &0u32); + let token = token::Client::new(&env, &token_id); + let client_before = token.balance(&client_addr); - let result = client.try_multisig_admin_override_release(&admin_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + client.admin_override_refund(&admin_addr, &0u32); + + // Funds must have moved to the client. + assert_eq!(token.balance(&client_addr), client_before + 1_000); } -/// Verify multisig override on unfunded escrow fails. +/// admin_override_refund must reject callers that are not the stored admin. #[test] -fn test_multisig_admin_override_release_not_funded_fails() { +fn test_admin_override_refund_requires_admin() { let env = Env::default(); env.mock_all_auths(); - let admin_addr = Address::generate(&env); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); + let attacker = Address::generate(&env); + let result = client.try_admin_override_refund(&attacker, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); +} - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); +/// When YieldAccrued is non-zero before the refund, the footprint-reduced +/// path must still clear it to zero. +#[test] +fn test_admin_override_refund_clears_nonzero_yield() { + let env = Env::default(); + env.mock_all_auths(); - let amounts = vec![&env, 1_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = client.try_multisig_admin_override_release(&admin_addr, &0u32); - assert_eq!(result, Err(Ok(Error::NotFunded))); + // Seed a non-zero yield value. + env.as_contract(&contract_id, || { + env.storage() + .persistent() + .set(&DataKey::YieldAccrued, &500_i128); + }); + + client.admin_override_refund(&admin_addr, &0u32); + + // YieldAccrued must be zero after the call. + let accrued: i128 = env.as_contract(&contract_id, || { + env.storage() + .persistent() + .get(&DataKey::YieldAccrued) + .unwrap_or(0) + }); + assert_eq!(accrued, 0); } -/// A milestone in `Disputed` status must never be auto-releasable, even once -/// the auto-release deadline has passed. +/// When YieldAccrued is already zero, the optimised path must NOT write to +/// the key at all, reducing the distinct storage keys touched by the call. +/// We verify the key remains absent / zero after the call. #[test] -fn test_claim_auto_release_disputed_status_fails() { +fn test_admin_override_refund_skips_yield_write_when_already_zero() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (_, _, _, admin_addr, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let amounts = vec![&env, 10_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &100, - &amounts, - ); + // Confirm YieldAccrued starts absent (treated as 0). + let before: Option = env.as_contract(&contract_id, || { + env.storage().persistent().get(&DataKey::YieldAccrued) + }); + assert!(before.is_none(), "YieldAccrued should not exist yet"); - client.fund(&client_addr); - client.mark_delivered(&freelancer_addr, &0u32); - client.raise_dispute(&client_addr, &0u32); + client.admin_override_refund(&admin_addr, &0u32); - env.ledger().with_mut(|li| { - li.timestamp += 200; + // The key should still be absent — no spurious write occurred. + let after: Option = env.as_contract(&contract_id, || { + env.storage().persistent().get(&DataKey::YieldAccrued) }); - - let result = client.try_claim_auto_release(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert!( + after.is_none() || after == Some(0), + "YieldAccrued should remain absent/zero when it was already zero" + ); } +/// admin_override_refund on an already-Refunded milestone must return +/// InvalidStatus, not settle twice. #[test] -fn test_time_until_auto_release() { +fn test_admin_override_refund_on_refunded_milestone_fails() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); + let (_, _, _, admin_addr, _, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + // First call settles the milestone. + client.admin_override_refund(&admin_addr, &0u32); - let amounts = vec![&env, 10_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &100, - &amounts, - ); + // Second call must be rejected. + let result = client.try_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} - client.fund(&client_addr); - client.mark_delivered(&freelancer_addr, &0u32); +/// admin_override_refund on a released milestone must return InvalidStatus. +#[test] +fn test_admin_override_refund_on_released_milestone_fails() { + let env = Env::default(); + env.mock_all_auths(); - let time_remaining = client.time_until_auto_release(&0u32); - assert!(time_remaining > 0); - assert_eq!(time_remaining, 100); + let (_, _, _, admin_addr, _, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - env.ledger().with_mut(|li| { - li.timestamp += 50; - }); - let time_remaining2 = client.time_until_auto_release(&0u32); - assert_eq!(time_remaining2, 50); + // Release first. + client.admin_override_release(&admin_addr, &0u32); - env.ledger().with_mut(|li| { - li.timestamp += 100; - }); - let time_remaining3 = client.time_until_auto_release(&0u32); - assert!(time_remaining3 < 0); + let result = client.try_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } +/// admin_override_refund on an unfunded escrow must return NotFunded. #[test] -fn test_approve_milestone_state_transitions() { +fn test_admin_override_refund_not_funded_fails() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token = token::Client::new(&env, &token_contract_id); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - // Setup 5 milestones: one for each invalid status path, plus one for the valid path - let amounts = vec![ - &env, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, - ]; client.initialize( &admin_addr, &client_addr, @@ -3075,316 +3134,267 @@ fn test_approve_milestone_state_transitions() { &arbiter_addr, &token_contract_id, &604800, - &amounts, - ); - client.fund(&client_addr); - - // Test 1: Pending ΓåÆ InvalidStatus (should fail) - let result = client.try_approve_milestone(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - - // Test 2: Delivered ΓåÆ Released (should pass) - client.mark_delivered(&freelancer_addr, &0u32); - client.approve_milestone(&client_addr, &0u32); - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Released + &vec![&env, 1_000_i128], ); + // Deliberately skip fund(). - // Test 3: PartiallyReleased ΓåÆ InvalidStatus (should fail) - client.mark_delivered(&freelancer_addr, &1u32); - client.approve_partial(&client_addr, &1u32, &500_i128); - let result = client.try_approve_milestone(&client_addr, &1u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - - // Test 4: Released ΓåÆ InvalidStatus (should fail) - client.mark_delivered(&freelancer_addr, &2u32); - client.approve_milestone(&client_addr, &2u32); - let result = client.try_approve_milestone(&client_addr, &2u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - - // Test 5: Disputed ΓåÆ InvalidStatus (should fail) - client.mark_delivered(&freelancer_addr, &3u32); - client.raise_dispute(&client_addr, &3u32); - let result = client.try_approve_milestone(&client_addr, &3u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - - // Test 6: Refunded ΓåÆ InvalidStatus (should fail) - client.mark_delivered(&freelancer_addr, &4u32); - client.raise_dispute(&client_addr, &4u32); - client.resolve_dispute(&arbiter_addr, &4u32, &false); - let result = client.try_approve_milestone(&client_addr, &4u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - - // Verify token balances - assert_eq!(token.balance(&freelancer_addr), 2_500); - assert_eq!(token.balance(&contract_id), 1_500); + let result = client.try_admin_override_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::NotFunded))); } #[test] -fn test_mark_delivered_unauthorized_arbiter_fails() { +fn test_multisig_lock_requires_admin() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &1_000); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = client.try_mark_delivered(&arbiter_addr, &0u32); + let attacker = Address::generate(&env); + let result = client.try_multisig_lock(&attacker); assert_eq!(result, Err(Ok(Error::Unauthorized))); + + // Admin should succeed + client.multisig_lock(&admin_addr); + assert!(client.is_multisig_locked()); } +/// Verify multisig_lock sets the lock flag and is_multisig_locked reads it. #[test] -fn test_mark_delivered_unauthorized_freelancer_fails() { +fn test_multisig_lock_state_transitions() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let impostor = Address::generate(&env); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &1_000); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = client.try_mark_delivered(&impostor, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert!(!client.is_multisig_locked()); + client.multisig_lock(&admin_addr); + assert!(client.is_multisig_locked()); } +/// Verify multisig_admin_override_release requires verified admin auth. #[test] -fn test_approve_partial_exceeds_remaining_amount_fails() { +fn test_multisig_admin_override_release_requires_admin() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (_, freelancer_addr, _, admin_addr, token_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let amounts = vec![&env, 10_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); - client.mark_delivered(&freelancer_addr, &0u32); - client.approve_partial(&client_addr, &0u32, &6_000_i128); + let attacker = Address::generate(&env); + let result = client.try_multisig_admin_override_release(&attacker, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); - let result = client.try_approve_partial(&client_addr, &0u32, &5_000_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + // Admin override should succeed and release funds to freelancer + let token = token::Client::new(&env, &token_id); + let freelancer_before = token.balance(&freelancer_addr); + client.multisig_admin_override_release(&admin_addr, &0u32); + assert_eq!(token.balance(&freelancer_addr), freelancer_before + 1_000); + // Multisig lock should be cleared + assert!(!client.is_multisig_locked()); } +/// Verify multisig_admin_override_refund requires verified admin auth. #[test] -fn test_approve_partial_index_out_of_range_fails() { +fn test_multisig_admin_override_refund_requires_admin() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + let (client_addr, _, _, admin_addr, token_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); + let attacker = Address::generate(&env); + let result = client.try_multisig_admin_override_refund(&attacker, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + // Admin override should succeed and refund to client. The source + // state must be multisig-locked; otherwise the precondition guard + // rejects the call before any refund is applied. + client.multisig_lock(&admin_addr); + let token = token::Client::new(&env, &token_id); + let client_before = token.balance(&client_addr); + client.multisig_admin_override_refund(&admin_addr, &0u32); + assert_eq!(token.balance(&client_addr), client_before + 1_000); + // Multisig lock should be cleared + assert!(!client.is_multisig_locked()); +} - let amounts = vec![&env, 5_000_i128, 5_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); +/// Verify multisig override release emits correct event. +#[test] +fn test_multisig_admin_override_release_emits_event() { + let env = Env::default(); + env.mock_all_auths(); - let result = client.try_approve_partial(&client_addr, &2u32, &1_000_i128); - assert_eq!(result, Err(Ok(Error::InvalidMilestone))); + let (_, freelancer_addr, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = client.try_approve_partial(&client_addr, &999u32, &1_000_i128); - assert_eq!(result, Err(Ok(Error::InvalidMilestone))); + client.multisig_admin_override_release(&admin_addr, &0u32); + + let topic_val: Val = symbol_short!("msadmrel").into_val(&env); + let mut found = false; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == topic_val.get_payload() { + found = true; + assert_eq!(event.1.len(), 1); + let ev = MultisigAdminOverrideReleaseEvent::from_val(&env, &event.2); + assert_eq!(ev.admin, admin_addr); + assert_eq!(ev.contract_id, contract_id); + assert_eq!(ev.milestone_index, 0); + assert_eq!(ev.freelancer, freelancer_addr); + assert_eq!(ev.token, token_id); + assert_eq!(ev.amount, 1_000); + } + } + } + assert!(found, "msadmrel event not emitted"); } +/// Verify multisig override refund emits correct event. #[test] -fn test_mark_delivered_state_transitions() { +fn test_multisig_admin_override_refund_emits_event() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &2_000); + let (client_addr, _, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128, 1_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); + client.multisig_lock(&admin_addr); + client.multisig_admin_override_refund(&admin_addr, &0u32); - // Test 1: Pending ΓåÆ Delivered (should pass) - client.mark_delivered(&freelancer_addr, &0u32); - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Delivered - ); + let topic_val: Val = symbol_short!("msadmref").into_val(&env); + let mut found = false; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == topic_val.get_payload() { + found = true; + assert_eq!(event.1.len(), 1); + let ev = MultisigAdminOverrideRefundEvent::from_val(&env, &event.2); + assert_eq!(ev.admin, admin_addr); + assert_eq!(ev.contract_id, contract_id); + assert_eq!(ev.milestone_index, 0); + assert_eq!(ev.client, client_addr); + assert_eq!(ev.token, token_id); + assert_eq!(ev.amount, 1_000); + } + } + } + assert!(found, "msadmref event not emitted"); +} - // Test 2: Delivered ΓåÆ Delivered (should fail) - let result = client.try_mark_delivered(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); +/// Verify multisig override release clears MultisigLocked flag. +#[test] +fn test_multisig_override_release_clears_locked_flag() { + let env = Env::default(); + env.mock_all_auths(); - // Setup milestone 1 for PartiallyReleased - client.mark_delivered(&freelancer_addr, &1u32); - client.approve_partial(&client_addr, &1u32, &500_i128); - let result = client.try_mark_delivered(&freelancer_addr, &1u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - // Reset with new environment for remaining states - let env2 = Env::default(); - env2.mock_all_auths(); - let client_addr2 = Address::generate(&env2); - let freelancer_addr2 = Address::generate(&env2); - let arbiter_addr2 = Address::generate(&env2); - let admin_addr2 = Address::generate(&env2); - let token_contract_id2 = env2 - .register_stellar_asset_contract_v2(admin_addr2.clone()) - .address(); - let token_admin2 = token::StellarAssetClient::new(&env2, &token_contract_id2); - token_admin2.mint(&client_addr2, &4_000); - let contract_id2 = env2.register(MilestoneEscrow, ()); - let client2 = MilestoneEscrowClient::new(&env2, &contract_id2); - let amounts2 = vec![&env2, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128]; - client2.initialize( - &admin_addr2, - &client_addr2, - &freelancer_addr2, - &arbiter_addr2, - &token_contract_id2, - &604800, - &amounts2, - ); - client2.fund(&client_addr2); + client.multisig_lock(&admin_addr); + assert!(client.is_multisig_locked()); - // Released - client2.mark_delivered(&freelancer_addr2, &0u32); - client2.approve_milestone(&client_addr2, &0u32); - let result = client2.try_mark_delivered(&freelancer_addr2, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + client.multisig_admin_override_release(&admin_addr, &0u32); + assert!(!client.is_multisig_locked()); +} - // Disputed - client2.mark_delivered(&freelancer_addr2, &1u32); - client2.raise_dispute(&client_addr2, &1u32); - let result = client2.try_mark_delivered(&freelancer_addr2, &1u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); +/// Verify multisig override refund clears MultisigLocked flag. +#[test] +fn test_multisig_override_refund_clears_locked_flag() { + let env = Env::default(); + env.mock_all_auths(); - // Refunded - client2.mark_delivered(&freelancer_addr2, &2u32); - client2.raise_dispute(&client_addr2, &2u32); - client2.resolve_dispute(&arbiter_addr2, &2u32, &false); - let result = client2.try_mark_delivered(&freelancer_addr2, &2u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.multisig_lock(&admin_addr); + assert!(client.is_multisig_locked()); + + client.multisig_admin_override_refund(&admin_addr, &0u32); + assert!(!client.is_multisig_locked()); } +/// Verify `multisig_admin_override_release` keeps a minimal ledger footprint. +/// +/// The override path persists exactly two distinct storage keys on success: +/// * `Milestone(index)` (persistent) — terminal `Released` status +/// * `MultisigLocked` (instance) — cleared once the deadlock is resolved +/// +/// In particular it must NOT write the `MilestoneReleased(index)` temporary +/// flag that the normal `approve_milestone` path uses as a cheap completion +/// signal. That flag is dead-on-this-path (`is_milestone_released_flag` has no +/// callers) and the persisted `Released` status is authoritative, so writing it +/// would only enlarge the ledger footprint of the call unnecessarily. #[test] -fn test_claim_auto_release_out_of_bounds_index_fails() { +fn test_multisig_admin_override_release_reduced_storage_footprint() { let env = Env::default(); env.mock_all_auths(); - let amounts = vec![&env, 5_000_i128]; - let (_, freelancer_addr, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + let (_, freelancer_addr, _, admin_addr, token_id, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let token = token::Client::new(&env, &token_id); - client.mark_delivered(&freelancer_addr, &0u32); + // Put the workflow in the locked state the override is meant to resolve. + client.multisig_lock(&admin_addr); + assert!(client.is_multisig_locked()); - env.ledger().with_mut(|li| { - li.timestamp += 700_000; + // No terminal flag may exist before the call. + let flag_before: Option = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get(&DataKey::MilestoneReleased(0u32)) }); + assert_eq!(flag_before, None); - // milestone_index 99 is out of bounds (only index 0 exists) - let result = client.try_claim_auto_release(&freelancer_addr, &99u32); - assert_eq!(result, Err(Ok(Error::InvalidMilestone))); + client.multisig_admin_override_release(&admin_addr, &0u32); + + // The temporary completion flag must NOT be written by the override path. + let flag_after: Option = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get(&DataKey::MilestoneReleased(0u32)) + }); + assert_eq!(flag_after, None); + + // The two persistent/instance keys carry the whole result: + // milestone terminal state + lock cleared. + assert!(!client.is_multisig_locked()); + let job = client.get_job(); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.status, MilestoneStatus::Released); + assert_eq!(ms.released_amount, 1_000); + assert_eq!(token.balance(&freelancer_addr), 1_000); + assert_eq!(token.balance(&contract_id), 0); + + // A second override must be rejected — the persistent status is Released. + let result = client.try_multisig_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } +/// Verify multisig override release on already-settled milestone fails. #[test] -fn test_claim_auto_release_zero_auto_release_seconds_fails() { +fn test_multisig_admin_override_release_on_released_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, _, admin_addr, _, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + // Fully release the milestone first (client must approve) + client.mark_delivered(&freelancer_addr, &0u32); + client.approve_milestone(&client_addr, &0u32); + + let result = client.try_multisig_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} + +/// Verify multisig override on unfunded escrow fails. +#[test] +fn test_multisig_admin_override_release_not_funded_fails() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) @@ -3393,24 +3403,25 @@ fn test_claim_auto_release_zero_auto_release_seconds_fails() { let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 5_000_i128]; - // auto_release_seconds = 0 is now rejected by `initialize` itself (#11), - // so a job with this value can never be persisted for claim_auto_release - // to reject later. - let result = client.try_initialize( + let amounts = vec![&env, 1_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &0u64, + &604800, &amounts, ); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + + let result = client.try_multisig_admin_override_release(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::NotFunded))); } +/// A milestone in `Disputed` status must never be auto-releasable, even once +/// the auto-release deadline has passed. #[test] -fn test_claim_auto_release_zero_remaining_amount_fails() { +fn test_claim_auto_release_disputed_status_fails() { let env = Env::default(); env.mock_all_auths(); @@ -3423,186 +3434,36 @@ fn test_claim_auto_release_zero_remaining_amount_fails() { .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 5_000_i128]; + let amounts = vec![&env, 10_000_i128]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &100u64, + &100, &amounts, ); + client.fund(&client_addr); client.mark_delivered(&freelancer_addr, &0u32); + client.raise_dispute(&client_addr, &0u32); - // Client fully approves the milestone first ΓÇö nothing left to release - client.approve_milestone(&client_addr, &0u32); + env.ledger().with_mut(|li| { + li.timestamp += 200; + }); - // Manually reset status back to Delivered to simulate the edge case - // (In practice this can't happen via the normal flow, but we test the guard directly) - // Instead: test via approve_partial releasing everything then trying claim - // We'll do it properly: test that after full approval, status is Released so InvalidStatus fires - // The remaining<=0 guard is hit if released_amount == amount. - // Since approve_milestone sets status=Released, InvalidStatus fires first. - // To isolate the remaining<=0 check, we skip this and note it's covered by the guard. let result = client.try_claim_auto_release(&freelancer_addr, &0u32); - assert_eq!( - result, - Err(Ok(Error::InvalidStatus)) // Released status caught before amount check - ); -} - -// ============================================================================ -// approve_partial ΓÇö hardened test suite -// ============================================================================ - -/// Helper: set up a funded escrow with a single milestone of `amount` tokens, -/// mark it delivered, and return all relevant handles in one call. -fn setup_delivered_single( - env: &Env, - amount: i128, -) -> ( - Address, // client - Address, // freelancer - Address, // arbiter - Address, // token contract - Address, // escrow contract - MilestoneEscrowClient<'_>, -) { - let client_addr = Address::generate(env); - let freelancer_addr = Address::generate(env); - let arbiter_addr = Address::generate(env); - let admin_addr = Address::generate(env); - - let token_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(env, &token_id); - token_admin.mint(&client_addr, &amount); - - let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(env, &contract_id); - - let amounts = vec![env, amount]; - escrow.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_id, - &604800, - &amounts, - ); - escrow.fund(&client_addr); - escrow.mark_delivered(&freelancer_addr, &0u32); - - ( - client_addr, - freelancer_addr, - arbiter_addr, - token_id, - contract_id, - escrow, - ) -} - -/// Test 1 ΓÇö AUTHORIZATION: The freelancer (a known but non-client party) cannot -/// call `approve_partial`. We assert the precise `Error::Unauthorized` variant -/// rather than just `is_err()`. -#[test] -fn test_approve_partial_freelancer_is_unauthorized() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, freelancer_addr, _, _, _, escrow) = setup_delivered_single(&env, 10_000); - - let result = escrow.try_approve_partial(&freelancer_addr, &0u32, &1_000_i128); - assert_eq!(result, Err(Ok(Error::Unauthorized))); -} - -/// Test 5 ΓÇö NON-EXISTENT MILESTONE ID: Supplying a milestone index that is -/// strictly out of the initialised range must return `Error::InvalidMilestone` -/// rather than panicking or silently succeeding. -#[test] -fn test_approve_partial_nonexistent_milestone_index_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let (client_addr, _, _, _, _, escrow) = setup_delivered_single(&env, 10_000); - - // The contract was initialised with exactly 1 milestone (index 0). - // Index 1 does not exist. - let result = escrow.try_approve_partial(&client_addr, &1u32, &1_000_i128); - assert_eq!(result, Err(Ok(Error::InvalidMilestone))); -} - -/// Test 6 ΓÇö EXACT REMAINING BALANCE ON A PARTIALLY-RELEASED MILESTONE: -/// After one partial release the milestone is `PartiallyReleased`. Approving -/// exactly the residual balance must flip the status to `Released` and leave -/// `released_amount == milestone.amount`. No tokens should remain in escrow. -#[test] -fn test_approve_partial_exact_remaining_balance_transitions_to_released() { - let env = Env::default(); - env.mock_all_auths(); - - let (client_addr, freelancer_addr, _, token_id, contract_id, escrow) = - setup_delivered_single(&env, 12_000); - - let token = token::Client::new(&env, &token_id); - - // First installment ΓÇö leaves 7 000 remaining. - escrow.approve_partial(&client_addr, &0u32, &5_000_i128); - assert_eq!(token.balance(&freelancer_addr), 5_000); - - let job = escrow.get_job(); - let ms = job.milestones.get(0).unwrap(); - assert_eq!(ms.status, MilestoneStatus::PartiallyReleased); - assert_eq!(ms.released_amount, 5_000); - - // Second installment ΓÇö exactly the remainder. - escrow.approve_partial(&client_addr, &0u32, &7_000_i128); - - let job2 = escrow.get_job(); - let ms2 = job2.milestones.get(0).unwrap(); - assert_eq!(ms2.status, MilestoneStatus::Released); - assert_eq!(ms2.released_amount, 12_000); - assert_eq!(token.balance(&freelancer_addr), 12_000); - assert_eq!(token.balance(&contract_id), 0); -} - -/// Test 7 ΓÇö OVER-ALLOCATION ON A PARTIALLY-RELEASED MILESTONE: -/// After one partial release the remaining balance is smaller than the -/// original amount. Requesting more than *that residual* must be rejected -/// with `Error::InvalidAmount` even though the requested value is individually -/// less than the milestone's total amount. -#[test] -fn test_approve_partial_over_release_after_prior_partial_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let (client_addr, _, _, _, _, escrow) = setup_delivered_single(&env, 10_000); - - // Release 6 000; only 4 000 remains. - escrow.approve_partial(&client_addr, &0u32, &6_000_i128); - - // Attempt to release 5 000 ΓÇö valid against the original total but exceeds - // the 4 000 residual balance. - let result = escrow.try_approve_partial(&client_addr, &0u32, &5_000_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Test 8 ΓÇö STATE ISOLATION ACROSS MILESTONES: -/// A partial release on milestone 0 must not alter the stored state of -/// milestone 1. `released_amount` and `status` of the untouched milestone -/// must remain exactly as initialised. #[test] -fn test_approve_partial_does_not_mutate_sibling_milestone() { +fn test_time_until_auto_release() { let env = Env::default(); env.mock_all_auths(); @@ -3611,59 +3472,48 @@ fn test_approve_partial_does_not_mutate_sibling_milestone() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token_id = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_id); - token_admin.mint(&client_addr, &20_000); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - // Two milestones of equal size. - let amounts = vec![&env, 10_000_i128, 10_000_i128]; - escrow.initialize( + let amounts = vec![&env, 10_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token_id, - &604800, + &token_contract_id, + &100, &amounts, ); - escrow.fund(&client_addr); - escrow.mark_delivered(&freelancer_addr, &0u32); - - // Partially release milestone 0. - escrow.approve_partial(&client_addr, &0u32, &3_000_i128); - // Milestone 1 must remain completely untouched. - let job = escrow.get_job(); - let ms1 = job.milestones.get(1).unwrap(); - assert_eq!(ms1.status, MilestoneStatus::Pending); - assert_eq!(ms1.released_amount, 0); - assert_eq!(ms1.amount, 10_000); -} + client.fund(&client_addr); + client.mark_delivered(&freelancer_addr, &0u32); -/// Test 9 ΓÇö PRE-INITIALIZATION GUARD: -/// Calling `approve_partial` before the contract has been initialised at all -/// must return `Error::NotInitialized` ΓÇö the function should not panic -/// unexpectedly or return a misleading error variant. -#[test] -fn test_approve_partial_before_initialize_fails() { - let env = Env::default(); - env.mock_all_auths(); + let time_remaining = client.time_until_auto_release(&0u32); + assert!(time_remaining > 0); + assert_eq!(time_remaining, 100); - let caller = Address::generate(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + env.ledger().with_mut(|li| { + li.timestamp += 50; + }); + let time_remaining2 = client.time_until_auto_release(&0u32); + assert_eq!(time_remaining2, 50); - let result = escrow.try_approve_partial(&caller, &0u32, &1_000_i128); - assert_eq!(result, Err(Ok(Error::NotInitialized))); + env.ledger().with_mut(|li| { + li.timestamp += 100; + }); + let time_remaining3 = client.time_until_auto_release(&0u32); + assert!(time_remaining3 < 0); } #[test] -fn test_approve_milestone_emits_event() { +fn test_approve_milestone_state_transitions() { let env = Env::default(); env.mock_all_auths(); @@ -3674,13 +3524,17 @@ fn test_approve_milestone_emits_event() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token = token::Client::new(&env, &token_contract_id); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 10_000_i128]; + // Setup 5 milestones: one for each invalid status path, plus one for the valid path + let amounts = vec![ + &env, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, + ]; client.initialize( &admin_addr, &client_addr, @@ -3691,25 +3545,52 @@ fn test_approve_milestone_emits_event() { &amounts, ); client.fund(&client_addr); + + // Test 1: Pending ΓåÆ InvalidStatus (should fail) + let result = client.try_approve_milestone(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Test 2: Delivered ΓåÆ Released (should pass) client.mark_delivered(&freelancer_addr, &0u32); client.approve_milestone(&client_addr, &0u32); + let job = client.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Released + ); - let approve_topic: Symbol = symbol_short!("approve"); - let approve_topic_val: Val = approve_topic.into_val(&env); - let approve_count = env.events().all().iter().fold(0u32, |acc, e| { - if let Some(topic) = e.1.get(0) { - if topic.get_payload() == approve_topic_val.get_payload() { - return acc + 1; - } - } - acc - }); + // Test 3: PartiallyReleased ΓåÆ InvalidStatus (should fail) + client.mark_delivered(&freelancer_addr, &1u32); + client.approve_partial(&client_addr, &1u32, &500_i128); + let result = client.try_approve_milestone(&client_addr, &1u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!(approve_count, 1); + // Test 4: Released ΓåÆ InvalidStatus (should fail) + client.mark_delivered(&freelancer_addr, &2u32); + client.approve_milestone(&client_addr, &2u32); + let result = client.try_approve_milestone(&client_addr, &2u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Test 5: Disputed ΓåÆ InvalidStatus (should fail) + client.mark_delivered(&freelancer_addr, &3u32); + client.raise_dispute(&client_addr, &3u32); + let result = client.try_approve_milestone(&client_addr, &3u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Test 6: Refunded ΓåÆ InvalidStatus (should fail) + client.mark_delivered(&freelancer_addr, &4u32); + client.raise_dispute(&client_addr, &4u32); + client.resolve_dispute(&arbiter_addr, &4u32, &false); + let result = client.try_approve_milestone(&client_addr, &4u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Verify token balances + assert_eq!(token.balance(&freelancer_addr), 2_500); + assert_eq!(token.balance(&contract_id), 1_500); } #[test] -fn test_approve_milestone_on_disputed_milestone_fails() { +fn test_mark_delivered_unauthorized_arbiter_fails() { let env = Env::default(); env.mock_all_auths(); @@ -3721,12 +3602,11 @@ fn test_approve_milestone_on_disputed_milestone_fails() { .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); + token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 10_000_i128]; + let amounts = vec![&env, 1_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -3737,15 +3617,13 @@ fn test_approve_milestone_on_disputed_milestone_fails() { &amounts, ); client.fund(&client_addr); - client.mark_delivered(&freelancer_addr, &0u32); - client.raise_dispute(&client_addr, &0u32); - let result = client.try_approve_milestone(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + let result = client.try_mark_delivered(&arbiter_addr, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } #[test] -fn test_approve_milestone_on_refunded_milestone_fails() { +fn test_mark_delivered_unauthorized_freelancer_fails() { let env = Env::default(); env.mock_all_auths(); @@ -3753,16 +3631,16 @@ fn test_approve_milestone_on_refunded_milestone_fails() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); + let impostor = Address::generate(&env); let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); + token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 10_000_i128]; + let amounts = vec![&env, 1_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -3773,21 +3651,13 @@ fn test_approve_milestone_on_refunded_milestone_fails() { &amounts, ); client.fund(&client_addr); - client.mark_delivered(&freelancer_addr, &0u32); - client.raise_dispute(&client_addr, &0u32); - client.resolve_dispute(&arbiter_addr, &0u32, &false); - let result = client.try_approve_milestone(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + let result = client.try_mark_delivered(&impostor, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Boundary-value test: verify that `approve_milestone` with a milestone -/// amount of `i128::MAX` does not panic and that the checked arithmetic in -/// the `remaining` event field handles the post-release state gracefully. -/// After a successful full approval `released_amount == milestone.amount`, so -/// `checked_sub` yields `0` ΓÇö confirming no overflow or underflow can occur. #[test] -fn test_approve_milestone_max_i128_checked_math_no_overflow() { +fn test_approve_partial_exceeds_remaining_amount_fails() { let env = Env::default(); env.mock_all_auths(); @@ -3799,16 +3669,13 @@ fn test_approve_milestone_max_i128_checked_math_no_overflow() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token = token::Client::new(&env, &token_contract_id); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - // Mint i128::MAX tokens to the client so the transfer can succeed. - token_admin.mint(&client_addr, &i128::MAX); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - // Single milestone worth i128::MAX. - let amounts = vec![&env, i128::MAX]; + let amounts = vec![&env, 10_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -3820,25 +3687,14 @@ fn test_approve_milestone_max_i128_checked_math_no_overflow() { ); client.fund(&client_addr); client.mark_delivered(&freelancer_addr, &0u32); + client.approve_partial(&client_addr, &0u32, &6_000_i128); - // approve_milestone must not panic; checked_sub on (MAX - MAX) == 0. - client.approve_milestone(&client_addr, &0u32); - - let job = client.get_job(); - let ms = job.milestones.get(0).unwrap(); - assert_eq!(ms.status, MilestoneStatus::Released); - assert_eq!(ms.released_amount, i128::MAX); - assert_eq!(token.balance(&freelancer_addr), i128::MAX); - assert_eq!(token.balance(&contract_id), 0); + let result = client.try_approve_partial(&client_addr, &0u32, &5_000_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Boundary-value test: `approve_partial` must reject an `amount` argument -/// of `i128::MAX` when even a single token has already been released, because -/// `released_amount + i128::MAX` would overflow. The checked addition inside -/// the function must catch this and return `Error::InvalidAmount` rather than -/// panicking. #[test] -fn test_approve_milestone_overflow_checked_math_returns_error() { +fn test_approve_partial_index_out_of_range_fails() { let env = Env::default(); env.mock_all_auths(); @@ -3851,13 +3707,12 @@ fn test_approve_milestone_overflow_checked_math_returns_error() { .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - // Mint i128::MAX so the escrow can be funded. - token_admin.mint(&client_addr, &i128::MAX); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, i128::MAX]; + let amounts = vec![&env, 5_000_i128, 5_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -3868,27 +3723,16 @@ fn test_approve_milestone_overflow_checked_math_returns_error() { &amounts, ); client.fund(&client_addr); - client.mark_delivered(&freelancer_addr, &0u32); - // Release 1 token so released_amount == 1; remaining == i128::MAX - 1. - client.approve_partial(&client_addr, &0u32, &1_i128); + let result = client.try_approve_partial(&client_addr, &2u32, &1_000_i128); + assert_eq!(result, Err(Ok(Error::InvalidMilestone))); - // Now attempt to release i128::MAX ΓÇö this would overflow released_amount. - // The checked_add inside approve_partial must catch it and return InvalidAmount. - let result = client.try_approve_partial(&client_addr, &0u32, &i128::MAX); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let result = client.try_approve_partial(&client_addr, &999u32, &1_000_i128); + assert_eq!(result, Err(Ok(Error::InvalidMilestone))); } -/// Storage-layout optimisation test: verify that `claim_auto_release` correctly -/// reads the delivery deadline from **temporary** storage (written by -/// `mark_delivered`) and that the full happy-path executes without error. -/// -/// This test exercises the optimised code path end-to-end: -/// mark_delivered ΓåÆ stores DeliveredAt(0) in temporary storage -/// claim_auto_release ΓåÆ reads DeliveredAt(0) from temporary storage, -/// confirms deadline has passed, transfers tokens #[test] -fn test_claim_auto_release_uses_temporary_storage_for_deadline() { +fn test_mark_delivered_state_transitions() { let env = Env::default(); env.mock_all_auths(); @@ -3896,62 +3740,111 @@ fn test_claim_auto_release_uses_temporary_storage_for_deadline() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token = token::Client::new(&env, &token_contract_id); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + token_admin.mint(&client_addr, &2_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 5_000_i128]; - // auto_release_seconds = 200 + let amounts = vec![&env, 1_000_i128, 1_000_i128]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &200, + &604800, &amounts, ); client.fund(&client_addr); - // mark_delivered writes delivered_at to both persistent Milestone and - // temporary DeliveredAt(0). The ledger timestamp starts at 0. + // Test 1: Pending ΓåÆ Delivered (should pass) client.mark_delivered(&freelancer_addr, &0u32); + let job = client.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Delivered + ); - // Attempting to claim before the 200-second deadline must fail. - let before = client.try_claim_auto_release(&freelancer_addr, &0u32); - assert_eq!(before, Err(Ok(Error::DeadlineNotPassed))); + // Test 2: Delivered ΓåÆ Delivered (should fail) + let result = client.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); - // Advance the ledger past the auto-release window. - env.ledger().with_mut(|li| { - li.timestamp += 201; - }); + // Setup milestone 1 for PartiallyReleased + client.mark_delivered(&freelancer_addr, &1u32); + client.approve_partial(&client_addr, &1u32, &500_i128); + let result = client.try_mark_delivered(&freelancer_addr, &1u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); - // claim_auto_release reads DeliveredAt(0) from temporary storage. - // Deadline = 0 + 200 = 200; current = 201 ΓëÑ 200 ΓåÆ should succeed. - client.claim_auto_release(&freelancer_addr, &0u32); + // Reset with new environment for remaining states + let env2 = Env::default(); + env2.mock_all_auths(); + let client_addr2 = Address::generate(&env2); + let freelancer_addr2 = Address::generate(&env2); + let arbiter_addr2 = Address::generate(&env2); + let admin_addr2 = Address::generate(&env2); + let token_contract_id2 = env2 + .register_stellar_asset_contract_v2(admin_addr2.clone()) + .address(); + let token_admin2 = token::StellarAssetClient::new(&env2, &token_contract_id2); + token_admin2.mint(&client_addr2, &4_000); + let contract_id2 = env2.register(MilestoneEscrow, ()); + let client2 = MilestoneEscrowClient::new(&env2, &contract_id2); + let amounts2 = vec![&env2, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128]; + client2.initialize( + &admin_addr2, + &client_addr2, + &freelancer_addr2, + &arbiter_addr2, + &token_contract_id2, + &604800, + &amounts2, + ); + client2.fund(&client_addr2); - assert_eq!(token.balance(&freelancer_addr), 5_000); - assert_eq!(token.balance(&contract_id), 0); + // Released + client2.mark_delivered(&freelancer_addr2, &0u32); + client2.approve_milestone(&client_addr2, &0u32); + let result = client2.try_mark_delivered(&freelancer_addr2, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); - let job = client.get_job(); - let ms = job.milestones.get(0).unwrap(); - assert_eq!(ms.status, MilestoneStatus::Released); - assert_eq!(ms.released_amount, 5_000); + // Disputed + client2.mark_delivered(&freelancer_addr2, &1u32); + client2.raise_dispute(&client_addr2, &1u32); + let result = client2.try_mark_delivered(&freelancer_addr2, &1u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Refunded + client2.mark_delivered(&freelancer_addr2, &2u32); + client2.raise_dispute(&client_addr2, &2u32); + client2.resolve_dispute(&arbiter_addr2, &2u32, &false); + let result = client2.try_mark_delivered(&freelancer_addr2, &2u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Storage-layout optimisation test: verify that `time_until_auto_release` -/// reads from the temporary DeliveredAt key and returns the correct countdown, -/// confirming that the deadline calculation is consistent before and after the -/// storage-layout change. #[test] -fn test_time_until_auto_release_reads_temporary_storage() { +fn test_claim_auto_release_out_of_bounds_index_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let amounts = vec![&env, 5_000_i128]; + let (_, freelancer_addr, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + + client.mark_delivered(&freelancer_addr, &0u32); + + env.ledger().with_mut(|li| { + li.timestamp += 700_000; + }); + + // milestone_index 99 is out of bounds (only index 0 exists) + let result = client.try_claim_auto_release(&freelancer_addr, &99u32); + assert_eq!(result, Err(Ok(Error::InvalidMilestone))); +} + +#[test] +fn test_claim_auto_release_zero_auto_release_seconds_fails() { let env = Env::default(); env.mock_all_auths(); @@ -3963,60 +3856,30 @@ fn test_time_until_auto_release_reads_temporary_storage() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( + let amounts = vec![&env, 5_000_i128]; + // auto_release_seconds = 0 is now rejected by `initialize` itself (#11), + // so a job with this value can never be persisted for claim_auto_release + // to reject later. + let result = client.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &300, + &0u64, &amounts, ); - client.fund(&client_addr); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} - // Ledger starts at 0; delivered_at written to temporary storage = 0. - client.mark_delivered(&freelancer_addr, &0u32); - - // Immediately after delivery: deadline = 0 + 300 = 300; current = 0. - let remaining = client.time_until_auto_release(&0u32); - assert_eq!(remaining, 300); - - // Advance by 150 seconds. - env.ledger().with_mut(|li| { - li.timestamp += 150; - }); - let remaining2 = client.time_until_auto_release(&0u32); - assert_eq!(remaining2, 150); - - // Advance past the deadline. - env.ledger().with_mut(|li| { - li.timestamp += 200; - }); - let remaining3 = client.time_until_auto_release(&0u32); - assert!(remaining3 < 0); -} - -/// Storage-layout optimisation test for `approve_milestone`: verify that after -/// a full approval, the `MilestoneReleased(u32)` temporary flag is written and -/// readable via the contract's internal storage tier, and that the milestone -/// state on persistent storage is correctly set to `Released`. -/// -/// This exercises the optimised code path end-to-end: -/// mark_delivered ΓåÆ persists Milestone(0) with status=Delivered -/// approve_milestone ΓåÆ transfers tokens, persists Milestone(0) with -/// status=Released, writes MilestoneReleased(0) to -/// temporary storage as a cheap completion signal -#[test] -fn test_approve_milestone_writes_temporary_released_flag() { - let env = Env::default(); - env.mock_all_auths(); +#[test] +fn test_claim_auto_release_zero_remaining_amount_fails() { + let env = Env::default(); + env.mock_all_auths(); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); @@ -4026,227 +3889,248 @@ fn test_approve_milestone_writes_temporary_released_flag() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token = token::Client::new(&env, &token_contract_id); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &8_000); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 8_000_i128]; + let amounts = vec![&env, 5_000_i128]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &604800, + &100u64, &amounts, ); client.fund(&client_addr); client.mark_delivered(&freelancer_addr, &0u32); - // Before approval the temporary released flag must not be set. - let flag_before: Option = env.as_contract(&contract_id, || { - env.storage() - .temporary() - .get(&DataKey::MilestoneReleased(0u32)) - }); - assert_eq!(flag_before, None); - - // Execute the full approval. + // Client fully approves the milestone first ΓÇö nothing left to release client.approve_milestone(&client_addr, &0u32); - // After approval the temporary released flag must be true. - let flag_after: Option = env.as_contract(&contract_id, || { - env.storage() - .temporary() - .get(&DataKey::MilestoneReleased(0u32)) - }); - assert_eq!(flag_after, Some(true)); - - // Persistent Milestone state must be Released with full released_amount. - let job = client.get_job(); - let ms = job.milestones.get(0).unwrap(); - assert_eq!(ms.status, MilestoneStatus::Released); - assert_eq!(ms.released_amount, 8_000); - - // Token balances must reflect full transfer. - assert_eq!(token.balance(&freelancer_addr), 8_000); - assert_eq!(token.balance(&contract_id), 0); - - // A second approval must be rejected ΓÇö the persistent status is Released. - let result = client.try_approve_milestone(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + // Manually reset status back to Delivered to simulate the edge case + // (In practice this can't happen via the normal flow, but we test the guard directly) + // Instead: test via approve_partial releasing everything then trying claim + // We'll do it properly: test that after full approval, status is Released so InvalidStatus fires + // The remaining<=0 guard is hit if released_amount == amount. + // Since approve_milestone sets status=Released, InvalidStatus fires first. + // To isolate the remaining<=0 check, we skip this and note it's covered by the guard. + let result = client.try_claim_auto_release(&freelancer_addr, &0u32); + assert_eq!( + result, + Err(Ok(Error::InvalidStatus)) // Released status caught before amount check + ); } // ============================================================================ -// mark_delivered ΓÇö hardened test suite (5 new edge-case tests) +// approve_partial ΓÇö hardened test suite // ============================================================================ -/// Edge case 1 ΓÇö FAILED AUTH (wrong caller): -/// A completely unrelated address that is not the registered freelancer must -/// receive `Error::Unauthorized`. Verifies that the identity check in -/// `mark_delivered` cannot be bypassed by any arbitrary signer. -#[test] -fn test_mark_delivered_wrong_caller_is_unauthorized() { - let env = Env::default(); - env.mock_all_auths(); - - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let impostor = Address::generate(&env); +/// Helper: set up a funded escrow with a single milestone of `amount` tokens, +/// mark it delivered, and return all relevant handles in one call. +fn setup_delivered_single( + env: &Env, + amount: i128, +) -> ( + Address, // client + Address, // freelancer + Address, // arbiter + Address, // token contract + Address, // escrow contract + MilestoneEscrowClient<'_>, +) { + let client_addr = Address::generate(env); + let freelancer_addr = Address::generate(env); + let arbiter_addr = Address::generate(env); + let admin_addr = Address::generate(env); - let token_contract_id = env + let token_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + let token_admin = token::StellarAssetClient::new(env, &token_id); + token_admin.mint(&client_addr, &amount); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(env, &contract_id); - let amounts = vec![&env, 5_000_i128]; - client.initialize( + let amounts = vec![env, amount]; + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token_id, &604800, &amounts, ); - client.fund(&client_addr); - - // `impostor` is not the registered freelancer. - let result = client.try_mark_delivered(&impostor, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + escrow.fund(&client_addr); + escrow.mark_delivered(&freelancer_addr, &0u32); - // Confirm the milestone is still Pending ΓÇö no state mutation occurred. - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Pending - ); + ( + client_addr, + freelancer_addr, + arbiter_addr, + token_id, + contract_id, + escrow, + ) } -/// Edge case 2 ΓÇö OVERFLOW / OUT-OF-BOUNDS INDEX (u32::MAX): -/// Supplying `u32::MAX` as the milestone index must be rejected with -/// `Error::InvalidMilestone` without panicking or overflowing. This also -/// covers any large out-of-range index since only index 0 exists. +/// Test 1 ΓÇö AUTHORIZATION: The freelancer (a known but non-client party) cannot +/// call `approve_partial`. We assert the precise `Error::Unauthorized` variant +/// rather than just `is_err()`. #[test] -fn test_mark_delivered_u32_max_index_fails() { +fn test_approve_partial_freelancer_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + let (_, freelancer_addr, _, _, _, escrow) = setup_delivered_single(&env, 10_000); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + let result = escrow.try_approve_partial(&freelancer_addr, &0u32, &1_000_i128); + assert_eq!(result, Err(Ok(Error::Unauthorized))); +} - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); +/// Test 5 ΓÇö NON-EXISTENT MILESTONE ID: Supplying a milestone index that is +/// strictly out of the initialised range must return `Error::InvalidMilestone` +/// rather than panicking or silently succeeding. +#[test] +fn test_approve_partial_nonexistent_milestone_index_fails() { + let env = Env::default(); + env.mock_all_auths(); - let amounts = vec![&env, 5_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); + let (client_addr, _, _, _, _, escrow) = setup_delivered_single(&env, 10_000); - // u32::MAX far exceeds milestone_count (1). - let result = client.try_mark_delivered(&freelancer_addr, &u32::MAX); + // The contract was initialised with exactly 1 milestone (index 0). + // Index 1 does not exist. + let result = escrow.try_approve_partial(&client_addr, &1u32, &1_000_i128); assert_eq!(result, Err(Ok(Error::InvalidMilestone))); } -/// Edge case 3 ΓÇö PRE-CONDITION (contract not initialized): -/// Calling `mark_delivered` before `initialize` has been called must return -/// `Error::NotInitialized`. The function must not panic or produce a -/// misleading error variant. +/// Test 6 ΓÇö EXACT REMAINING BALANCE ON A PARTIALLY-RELEASED MILESTONE: +/// After one partial release the milestone is `PartiallyReleased`. Approving +/// exactly the residual balance must flip the status to `Released` and leave +/// `released_amount == milestone.amount`. No tokens should remain in escrow. #[test] -fn test_mark_delivered_before_initialize_fails() { +fn test_approve_partial_exact_remaining_balance_transitions_to_released() { let env = Env::default(); env.mock_all_auths(); - let freelancer_addr = Address::generate(&env); + let (client_addr, freelancer_addr, _, token_id, contract_id, escrow) = + setup_delivered_single(&env, 12_000); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let token = token::Client::new(&env, &token_id); - let result = client.try_mark_delivered(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::NotInitialized))); + // First installment ΓÇö leaves 7 000 remaining. + escrow.approve_partial(&client_addr, &0u32, &5_000_i128); + assert_eq!(token.balance(&freelancer_addr), 5_000); + + let job = escrow.get_job(); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.status, MilestoneStatus::PartiallyReleased); + assert_eq!(ms.released_amount, 5_000); + + // Second installment ΓÇö exactly the remainder. + escrow.approve_partial(&client_addr, &0u32, &7_000_i128); + + let job2 = escrow.get_job(); + let ms2 = job2.milestones.get(0).unwrap(); + assert_eq!(ms2.status, MilestoneStatus::Released); + assert_eq!(ms2.released_amount, 12_000); + assert_eq!(token.balance(&freelancer_addr), 12_000); + assert_eq!(token.balance(&contract_id), 0); } -/// Edge case 4 ΓÇö INVALID STATE (milestone already Released): -/// Once a milestone has been fully approved and its status is `Released`, a -/// subsequent call to `mark_delivered` must be rejected with -/// `Error::InvalidStatus`. Verifies that the terminal `Released` state is -/// immutable from the freelancer's perspective. +/// Test 7 ΓÇö OVER-ALLOCATION ON A PARTIALLY-RELEASED MILESTONE: +/// After one partial release the remaining balance is smaller than the +/// original amount. Requesting more than *that residual* must be rejected +/// with `Error::InvalidAmount` even though the requested value is individually +/// less than the milestone's total amount. #[test] -fn test_mark_delivered_on_released_milestone_fails() { +fn test_approve_partial_over_release_after_prior_partial_fails() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + let (client_addr, _, _, _, _, escrow) = setup_delivered_single(&env, 10_000); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + // Release 6 000; only 4 000 remains. + escrow.approve_partial(&client_addr, &0u32, &6_000_i128); + + // Attempt to release 5 000 ΓÇö valid against the original total but exceeds + // the 4 000 residual balance. + let result = escrow.try_approve_partial(&client_addr, &0u32, &5_000_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} + +/// Test 8 ΓÇö STATE ISOLATION ACROSS MILESTONES: +/// A partial release on milestone 0 must not alter the stored state of +/// milestone 1. `released_amount` and `status` of the untouched milestone +/// must remain exactly as initialised. +#[test] +fn test_approve_partial_does_not_mutate_sibling_milestone() { + let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_id); + token_admin.mint(&client_addr, &20_000); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 5_000_i128]; - client.initialize( + // Two milestones of equal size. + let amounts = vec![&env, 10_000_i128, 10_000_i128]; + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token_id, &604800, &amounts, ); - client.fund(&client_addr); + escrow.fund(&client_addr); + escrow.mark_delivered(&freelancer_addr, &0u32); - // Drive the milestone to `Released` via the normal happy path. - client.mark_delivered(&freelancer_addr, &0u32); - client.approve_milestone(&client_addr, &0u32); + // Partially release milestone 0. + escrow.approve_partial(&client_addr, &0u32, &3_000_i128); - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Released - ); + // Milestone 1 must remain completely untouched. + let job = escrow.get_job(); + let ms1 = job.milestones.get(1).unwrap(); + assert_eq!(ms1.status, MilestoneStatus::Pending); + assert_eq!(ms1.released_amount, 0); + assert_eq!(ms1.amount, 10_000); +} - // Attempting to mark it delivered again must fail. - let result = client.try_mark_delivered(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); +/// Test 9 ΓÇö PRE-INITIALIZATION GUARD: +/// Calling `approve_partial` before the contract has been initialised at all +/// must return `Error::NotInitialized` ΓÇö the function should not panic +/// unexpectedly or return a misleading error variant. +#[test] +fn test_approve_partial_before_initialize_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let caller = Address::generate(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + + let result = escrow.try_approve_partial(&caller, &0u32, &1_000_i128); + assert_eq!(result, Err(Ok(Error::NotInitialized))); } -/// Edge case 5 ΓÇö INVALID STATE (milestone Refunded): -/// A milestone that was refunded to the client after a dispute is in a terminal -/// state. `mark_delivered` must reject it with `Error::InvalidStatus`, -/// ensuring refunded milestones cannot be re-opened by the freelancer. #[test] -fn test_mark_delivered_on_refunded_milestone_fails() { +fn test_approve_milestone_emits_event() { let env = Env::default(); env.mock_all_auths(); @@ -4254,17 +4138,16 @@ fn test_mark_delivered_on_refunded_milestone_fails() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 5_000_i128]; + let amounts = vec![&env, 10_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -4275,33 +4158,25 @@ fn test_mark_delivered_on_refunded_milestone_fails() { &amounts, ); client.fund(&client_addr); - - // Drive the milestone to `Refunded`: deliver ΓåÆ dispute ΓåÆ resolve for client. client.mark_delivered(&freelancer_addr, &0u32); - client.raise_dispute(&client_addr, &0u32); - client.resolve_dispute(&arbiter_addr, &0u32, &false); + client.approve_milestone(&client_addr, &0u32); - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Refunded - ); + let approve_topic: Symbol = symbol_short!("approve"); + let approve_topic_val: Val = approve_topic.into_val(&env); + let approve_count = env.events().all().iter().fold(0u32, |acc, e| { + if let Some(topic) = e.1.get(0) { + if topic.get_payload() == approve_topic_val.get_payload() { + return acc + 1; + } + } + acc + }); - // The freelancer must not be able to re-open a refunded milestone. - let result = client.try_mark_delivered(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!(approve_count, 1); } -// ============================================================================ -// claim_auto_release ΓÇö checked-arithmetic boundary tests -// ============================================================================ - -/// Boundary test: `auto_release_seconds` = u64::MAX causes the -/// `delivered_at + auto_release_seconds` checked_add in `claim_auto_release` -/// to overflow, which must be caught and returned as `Error::InvalidAmount` -/// rather than panicking. #[test] -fn test_claim_auto_release_max_i128_checked_math_no_overflow() { +fn test_approve_milestone_on_disputed_milestone_fails() { let env = Env::default(); env.mock_all_auths(); @@ -4309,60 +4184,35 @@ fn test_claim_auto_release_max_i128_checked_math_no_overflow() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - // Use a large but representable i128 amount to exercise the checked_sub path. - let amount: i128 = i128::MAX / 2; - token_admin.mint(&client_addr, &amount); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, amount]; - // Use a small auto_release_seconds so the deadline check passes after the - // ledger advance below. + let amounts = vec![&env, 10_000_i128]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &1u64, + &604800, &amounts, ); client.fund(&client_addr); client.mark_delivered(&freelancer_addr, &0u32); + client.raise_dispute(&client_addr, &0u32); - // Advance past the auto-release deadline. - env.ledger().with_mut(|li| { - li.timestamp += 10; - }); - - // claim_auto_release must compute `remaining = amount - released_amount` - // via checked_sub. released_amount is 0 here so the subtraction is safe - // and the call must succeed, releasing i128::MAX / 2 tokens. - client.claim_auto_release(&freelancer_addr, &0u32); - - let token = token::Client::new(&env, &token_contract_id); - assert_eq!(token.balance(&freelancer_addr), amount); - assert_eq!(token.balance(&contract_id), 0); - - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Released - ); + let result = client.try_approve_milestone(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Boundary test: initialising with `auto_release_seconds` = u64::MAX causes -/// `delivered_at.checked_add(u64::MAX)` to overflow (delivered_at is non-zero -/// because the ledger has a positive timestamp). The overflow must be caught -/// and returned as `Error::InvalidAmount`. #[test] -fn test_claim_auto_release_overflow_checked_math_returns_error() { +fn test_approve_milestone_on_refunded_milestone_fails() { let env = Env::default(); env.mock_all_auths(); @@ -4370,54 +4220,41 @@ fn test_claim_auto_release_overflow_checked_math_returns_error() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 5_000_i128]; - // u64::MAX as auto_release_seconds guarantees delivered_at + u64::MAX - // wraps when delivered_at > 0. + let amounts = vec![&env, 10_000_i128]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &u64::MAX, + &604800, &amounts, ); client.fund(&client_addr); - - // Advance the ledger so delivered_at is non-zero, making the overflow - // deterministic: any positive delivered_at + u64::MAX overflows u64. - env.ledger().with_mut(|li| { - li.timestamp = 1; - }); client.mark_delivered(&freelancer_addr, &0u32); + client.raise_dispute(&client_addr, &0u32); + client.resolve_dispute(&arbiter_addr, &0u32, &false); - // The checked_add inside claim_auto_release must catch the overflow and - // return Error::InvalidAmount rather than panicking. - let result = client.try_claim_auto_release(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let result = client.try_approve_milestone(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -// ============================================================================ -// claim_auto_release ΓÇö double-execution / reentrancy guard tests -// ============================================================================ - -/// Double-execution test: invoking `claim_auto_release` a second time in the -/// same environment ΓÇö after a successful first call ΓÇö must be rejected with -/// `Error::InvalidStatus` because the first call committed `Released` to -/// storage before executing the token transfer (CEI pattern). No tokens must -/// be transferred on the second attempt. +/// Boundary-value test: verify that `approve_milestone` with a milestone +/// amount of `i128::MAX` does not panic and that the checked arithmetic in +/// the `remaining` event field handles the post-release state gracefully. +/// After a successful full approval `released_amount == milestone.amount`, so +/// `checked_sub` yields `0` ΓÇö confirming no overflow or underflow can occur. #[test] -fn test_claim_auto_release_double_execution_reverts() { +fn test_approve_milestone_max_i128_checked_math_no_overflow() { let env = Env::default(); env.mock_all_auths(); @@ -4431,57 +4268,46 @@ fn test_claim_auto_release_double_execution_reverts() { .address(); let token = token::Client::new(&env, &token_contract_id); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &10_000); + // Mint i128::MAX tokens to the client so the transfer can succeed. + token_admin.mint(&client_addr, &i128::MAX); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 10_000_i128]; + // Single milestone worth i128::MAX. + let amounts = vec![&env, i128::MAX]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &100u64, + &604800, &amounts, ); client.fund(&client_addr); client.mark_delivered(&freelancer_addr, &0u32); - // Advance past the auto-release deadline. - env.ledger().with_mut(|li| { - li.timestamp += 200; - }); - - // First call must succeed and release all tokens. - client.claim_auto_release(&freelancer_addr, &0u32); - assert_eq!(token.balance(&freelancer_addr), 10_000); - assert_eq!(token.balance(&contract_id), 0); - - // Milestone status is now Released ΓÇö a second call must be rejected. - let result = client.try_claim_auto_release(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + // approve_milestone must not panic; checked_sub on (MAX - MAX) == 0. + client.approve_milestone(&client_addr, &0u32); - // Token balances must be unchanged after the rejected second attempt. - assert_eq!(token.balance(&freelancer_addr), 10_000); + let job = client.get_job(); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.status, MilestoneStatus::Released); + assert_eq!(ms.released_amount, i128::MAX); + assert_eq!(token.balance(&freelancer_addr), i128::MAX); assert_eq!(token.balance(&contract_id), 0); } -// ============================================================================ -// claim_auto_release ΓÇö strict identity authorization tests -// ============================================================================ - -/// Auth test 1 ΓÇö NO SIGNATURE PROVIDED (require_auth enforcement): -/// Calling `claim_auto_release` with no mocked auth at all means the Soroban -/// host receives zero authorization entries for the caller. `require_auth()` -/// fires before any contract logic and the host rejects the invocation. -/// `try_` surfaces this as `Err(Err(_))` (host-level error, not a contract -/// error variant), proving `require_auth()` is the outermost guard. +/// Boundary-value test: `approve_partial` must reject an `amount` argument +/// of `i128::MAX` when even a single token has already been released, because +/// `released_amount + i128::MAX` would overflow. The checked addition inside +/// the function must catch this and return `Error::InvalidAmount` rather than +/// panicking. #[test] -fn test_claim_auto_release_no_auth_provided_fails() { +fn test_approve_milestone_overflow_checked_math_returns_error() { let env = Env::default(); - // Deliberately omit env.mock_all_auths() so the host enforces real auth. + env.mock_all_auths(); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); @@ -4491,60 +4317,45 @@ fn test_claim_auto_release_no_auth_provided_fails() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - - // Use mock_all_auths only for the setup calls so the contract reaches a - // funded+delivered state without touching the auth path under test. - env.mock_all_auths(); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + // Mint i128::MAX so the escrow can be funded. + token_admin.mint(&client_addr, &i128::MAX); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 5_000_i128]; - escrow.initialize( + let amounts = vec![&env, i128::MAX]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &100u64, + &604800, &amounts, ); - escrow.fund(&client_addr); - escrow.mark_delivered(&freelancer_addr, &0u32); - - env.ledger().with_mut(|li| { - li.timestamp += 200; - }); + client.fund(&client_addr); + client.mark_delivered(&freelancer_addr, &0u32); - // Disable mocking so the next call goes through real auth enforcement. - // set_auths([]) clears all mocks without installing any new entries. - env.set_auths(&[]); + // Release 1 token so released_amount == 1; remaining == i128::MAX - 1. + client.approve_partial(&client_addr, &0u32, &1_i128); - // No auth entry exists for freelancer_addr ΓåÆ require_auth() in - // claim_auto_release panics at the host level. try_ captures that as - // Err(Err(_)). - let result = escrow.try_claim_auto_release(&freelancer_addr, &0u32); - assert!(result.is_err()); - // Confirm the outer Result is the host-error arm, not a contract error. - assert!(matches!(result, Err(Err(_)))); + // Now attempt to release i128::MAX ΓÇö this would overflow released_amount. + // The checked_add inside approve_partial must catch it and return InvalidAmount. + let result = client.try_approve_partial(&client_addr, &0u32, &i128::MAX); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Auth test 2 ΓÇö WRONG IDENTITY (identity-check enforcement): -/// An impostor provides a valid signature for their *own* address but passes -/// `freelancer_addr` as the argument. `require_auth()` passes for the -/// impostor's own address, but the subsequent identity comparison -/// (`meta.freelancer != freelancer`) catches the mismatch and returns the -/// explicit `Error::Unauthorized` contract error variant. +/// Storage-layout optimisation test: verify that `claim_auto_release` correctly +/// reads the delivery deadline from **temporary** storage (written by +/// `mark_delivered`) and that the full happy-path executes without error. /// -/// `mock_auths` is used here to grant a real auth entry scoped to the -/// impostor's address, exercising the selective-auth path so both the SDK -/// framework check and the contract-level identity check are verified. +/// This test exercises the optimised code path end-to-end: +/// mark_delivered ΓåÆ stores DeliveredAt(0) in temporary storage +/// claim_auto_release ΓåÆ reads DeliveredAt(0) from temporary storage, +/// confirms deadline has passed, transfers tokens #[test] -fn test_claim_auto_release_wrong_identity_unauthorized() { - use soroban_sdk::testutils::{MockAuth, MockAuthInvoke}; - +fn test_claim_auto_release_uses_temporary_storage_for_deadline() { let env = Env::default(); env.mock_all_auths(); @@ -4552,72 +4363,63 @@ fn test_claim_auto_release_wrong_identity_unauthorized() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let impostor = Address::generate(&env); let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token = token::Client::new(&env, &token_contract_id); let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); let amounts = vec![&env, 5_000_i128]; - escrow.initialize( + // auto_release_seconds = 200 + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &100u64, + &200, &amounts, ); - escrow.fund(&client_addr); - escrow.mark_delivered(&freelancer_addr, &0u32); + client.fund(&client_addr); - env.ledger().with_mut(|li| { - li.timestamp += 200; - }); + // mark_delivered writes delivered_at to both persistent Milestone and + // temporary DeliveredAt(0). The ledger timestamp starts at 0. + client.mark_delivered(&freelancer_addr, &0u32); - // Grant a selective auth entry for `impostor` calling `claim_auto_release` - // with `impostor` as the freelancer argument. This means require_auth() - // passes (impostor signed), but the identity check - // (meta.freelancer != impostor) returns Error::Unauthorized. - let result = escrow - .mock_auths(&[MockAuth { - address: &impostor, - invoke: &MockAuthInvoke { - contract: &contract_id, - fn_name: "claim_auto_release", - args: (&impostor, 0u32).into_val(&env), - sub_invokes: &[], - }, - }]) - .try_claim_auto_release(&impostor, &0u32); + // Attempting to claim before the 200-second deadline must fail. + let before = client.try_claim_auto_release(&freelancer_addr, &0u32); + assert_eq!(before, Err(Ok(Error::DeadlineNotPassed))); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Advance the ledger past the auto-release window. + env.ledger().with_mut(|li| { + li.timestamp += 201; + }); - // Milestone must still be in Delivered state ΓÇö no state mutation occurred. - let job = escrow.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Delivered - ); -} + // claim_auto_release reads DeliveredAt(0) from temporary storage. + // Deadline = 0 + 200 = 200; current = 201 ΓëÑ 200 ΓåÆ should succeed. + client.claim_auto_release(&freelancer_addr, &0u32); -// ============================================================================ -// initialize ΓÇö boundary / edge-case / negative-input test suite -// ============================================================================ + assert_eq!(token.balance(&freelancer_addr), 5_000); + assert_eq!(token.balance(&contract_id), 0); -fn env_without_snapshot() -> Env { - Env::new_with_config(EnvTestConfig { - capture_snapshot_at_drop: false, - }) + let job = client.get_job(); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.status, MilestoneStatus::Released); + assert_eq!(ms.released_amount, 5_000); } -fn initialize_budget_for_milestone_count(count: u32) -> (u64, u64) { - let env = env_without_snapshot(); +/// Storage-layout optimisation test: verify that `time_until_auto_release` +/// reads from the temporary DeliveredAt key and returns the correct countdown, +/// confirming that the deadline calculation is consistent before and after the +/// storage-layout change. +#[test] +fn test_time_until_auto_release_reads_temporary_storage() { + let env = Env::default(); env.mock_all_auths(); let client_addr = Address::generate(&env); @@ -4628,44 +4430,58 @@ fn initialize_budget_for_milestone_count(count: u32) -> (u64, u64) { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); - - let mut amounts = vec![&env]; - for _ in 0..count { - amounts.push_back(1_i128); - } + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &1_000); - let mut budget = env.cost_estimate().budget(); - budget.reset_default(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - escrow.initialize( + let amounts = vec![&env, 1_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &604800, + &300, &amounts, ); + client.fund(&client_addr); - let budget = env.cost_estimate().budget(); - let cpu = budget.cpu_instruction_cost(); - let memory = budget.memory_bytes_cost(); + // Ledger starts at 0; delivered_at written to temporary storage = 0. + client.mark_delivered(&freelancer_addr, &0u32); - let job = escrow.get_job(); - assert_eq!(job.milestones.len(), count); + // Immediately after delivery: deadline = 0 + 300 = 300; current = 0. + let remaining = client.time_until_auto_release(&0u32); + assert_eq!(remaining, 300); - (cpu, memory) + // Advance by 150 seconds. + env.ledger().with_mut(|li| { + li.timestamp += 150; + }); + let remaining2 = client.time_until_auto_release(&0u32); + assert_eq!(remaining2, 150); + + // Advance past the deadline. + env.ledger().with_mut(|li| { + li.timestamp += 200; + }); + let remaining3 = client.time_until_auto_release(&0u32); + assert!(remaining3 < 0); } -/// Boundary test 1 ΓÇö EMPTY MILESTONE VEC: -/// Passing an empty `milestone_amounts` vec must be rejected with -/// `Error::InvalidAmount` because there are no milestones to sum and the -/// contract has no meaningful work to escrow. The contract must remain -/// uninitialized after the rejected call so a valid subsequent call succeeds. +/// Storage-layout optimisation test for `approve_milestone`: verify that after +/// a full approval, the `MilestoneReleased(u32)` temporary flag is written and +/// readable via the contract's internal storage tier, and that the milestone +/// state on persistent storage is correctly set to `Released`. +/// +/// This exercises the optimised code path end-to-end: +/// mark_delivered ΓåÆ persists Milestone(0) with status=Delivered +/// approve_milestone ΓåÆ transfers tokens, persists Milestone(0) with +/// status=Released, writes MilestoneReleased(0) to +/// temporary storage as a cheap completion signal #[test] -fn test_initialize_empty_milestones_fails() { +fn test_approve_milestone_writes_temporary_released_flag() { let env = Env::default(); env.mock_all_auths(); @@ -4677,62 +4493,118 @@ fn test_initialize_empty_milestones_fails() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token = token::Client::new(&env, &token_contract_id); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &8_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let empty_amounts: soroban_sdk::Vec = soroban_sdk::Vec::new(&env); - let result = client.try_initialize( + let amounts = vec![&env, 8_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, &604800, - &empty_amounts, + &amounts, ); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + client.fund(&client_addr); + client.mark_delivered(&freelancer_addr, &0u32); + + // Before approval the temporary released flag must not be set. + let flag_before: Option = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get(&DataKey::MilestoneReleased(0u32)) + }); + assert_eq!(flag_before, None); + + // Execute the full approval. + client.approve_milestone(&client_addr, &0u32); + + // After approval the temporary released flag must be true. + let flag_after: Option = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get(&DataKey::MilestoneReleased(0u32)) + }); + assert_eq!(flag_after, Some(true)); + + // Persistent Milestone state must be Released with full released_amount. + let job = client.get_job(); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.status, MilestoneStatus::Released); + assert_eq!(ms.released_amount, 8_000); + + // Token balances must reflect full transfer. + assert_eq!(token.balance(&freelancer_addr), 8_000); + assert_eq!(token.balance(&contract_id), 0); + + // A second approval must be rejected ΓÇö the persistent status is Released. + let result = client.try_approve_milestone(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } +// ============================================================================ +// mark_delivered ΓÇö hardened test suite (5 new edge-case tests) +// ============================================================================ + +/// Edge case 1 ΓÇö FAILED AUTH (wrong caller): +/// A completely unrelated address that is not the registered freelancer must +/// receive `Error::Unauthorized`. Verifies that the identity check in +/// `mark_delivered` cannot be bypassed by any arbitrary signer. #[test] -fn test_initialize_zero_address_fails() { +fn test_mark_delivered_wrong_caller_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); + let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let zero_address = Address::from_str( - &env, - "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", - ); + let impostor = Address::generate(&env); + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - let result = client.try_initialize( + let amounts = vec![&env, 5_000_i128]; + client.initialize( &admin_addr, - &zero_address, + &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, &604800, &amounts, ); - assert_eq!(result, Err(Ok(Error::InvalidAddress))); -} + client.fund(&client_addr); -/// Boundary test 2 ΓÇö NEGATIVE MILESTONE AMOUNT: -/// A milestone with a negative amount must be rejected with -/// `Error::InvalidAmount`. Negative amounts would allow the contract to be -/// funded with a lower-than-expected total or even drain the contract on -/// release. + // `impostor` is not the registered freelancer. + let result = client.try_mark_delivered(&impostor, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + + // Confirm the milestone is still Pending ΓÇö no state mutation occurred. + let job = client.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Pending + ); +} + +/// Edge case 2 ΓÇö OVERFLOW / OUT-OF-BOUNDS INDEX (u32::MAX): +/// Supplying `u32::MAX` as the milestone index must be rejected with +/// `Error::InvalidMilestone` without panicking or overflowing. This also +/// covers any large out-of-range index since only index 0 exists. #[test] -fn test_initialize_negative_milestone_amount_fails() { +fn test_mark_delivered_u32_max_index_fails() { let env = Env::default(); env.mock_all_auths(); @@ -4744,12 +4616,14 @@ fn test_initialize_negative_milestone_amount_fails() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, -500_i128]; - let result = client.try_initialize( + let amounts = vec![&env, 5_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, @@ -4758,15 +4632,38 @@ fn test_initialize_negative_milestone_amount_fails() { &604800, &amounts, ); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + client.fund(&client_addr); + + // u32::MAX far exceeds milestone_count (1). + let result = client.try_mark_delivered(&freelancer_addr, &u32::MAX); + assert_eq!(result, Err(Ok(Error::InvalidMilestone))); } -/// Boundary test 3 ΓÇö MILESTONE AMOUNT SUM OVERFLOW (i128::MAX + 1): -/// Two milestone amounts whose sum exceeds i128::MAX must trigger the -/// checked_add overflow guard inside `initialize` and return -/// `Error::InvalidAmount` without panicking. +/// Edge case 3 ΓÇö PRE-CONDITION (contract not initialized): +/// Calling `mark_delivered` before `initialize` has been called must return +/// `Error::NotInitialized`. The function must not panic or produce a +/// misleading error variant. #[test] -fn test_initialize_milestone_sum_overflow_fails() { +fn test_mark_delivered_before_initialize_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let freelancer_addr = Address::generate(&env); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::NotInitialized))); +} + +/// Edge case 4 ΓÇö INVALID STATE (milestone already Released): +/// Once a milestone has been fully approved and its status is `Released`, a +/// subsequent call to `mark_delivered` must be rejected with +/// `Error::InvalidStatus`. Verifies that the terminal `Released` state is +/// immutable from the freelancer's perspective. +#[test] +fn test_mark_delivered_on_released_milestone_fails() { let env = Env::default(); env.mock_all_auths(); @@ -4778,13 +4675,14 @@ fn test_initialize_milestone_sum_overflow_fails() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - // i128::MAX + i128::MAX overflows ΓÇö checked_add must catch this. - let amounts = vec![&env, i128::MAX, i128::MAX]; - let result = client.try_initialize( + let amounts = vec![&env, 5_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, @@ -4793,16 +4691,29 @@ fn test_initialize_milestone_sum_overflow_fails() { &604800, &amounts, ); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + client.fund(&client_addr); + + // Drive the milestone to `Released` via the normal happy path. + client.mark_delivered(&freelancer_addr, &0u32); + client.approve_milestone(&client_addr, &0u32); + + let job = client.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Released + ); + + // Attempting to mark it delivered again must fail. + let result = client.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Boundary test 4 ΓÇö SINGLE VALID MILESTONE STATE VERIFICATION: -/// After a successful `initialize` with exactly one milestone, the persisted -/// state must exactly match the inputs: correct addresses, milestone in -/// `Pending` state with the right amount and zero released_amount, unfunded, -/// and the token whitelisted. +/// Edge case 5 ΓÇö INVALID STATE (milestone Refunded): +/// A milestone that was refunded to the client after a dispute is in a terminal +/// state. `mark_delivered` must reject it with `Error::InvalidStatus`, +/// ensuring refunded milestones cannot be re-opened by the freelancer. #[test] -fn test_initialize_single_milestone_state_is_correct() { +fn test_mark_delivered_on_refunded_milestone_fails() { let env = Env::default(); env.mock_all_auths(); @@ -4814,12 +4725,14 @@ fn test_initialize_single_milestone_state_is_correct() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - escrow.initialize( + let amounts = vec![&env, 5_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, @@ -4828,39 +4741,34 @@ fn test_initialize_single_milestone_state_is_correct() { &604800, &amounts, ); + client.fund(&client_addr); - let job = escrow.get_job(); - - // Party addresses must be stored verbatim. - assert_eq!(job.client, client_addr); - assert_eq!(job.freelancer, freelancer_addr); - assert_eq!(job.arbiter, arbiter_addr); - assert_eq!(job.token, token_contract_id); - - // Contract must start unfunded. - assert!(!job.funded); - - // auto_release_seconds must be persisted exactly. - assert_eq!(job.auto_release_seconds, 604800); + // Drive the milestone to `Refunded`: deliver ΓåÆ dispute ΓåÆ resolve for client. + client.mark_delivered(&freelancer_addr, &0u32); + client.raise_dispute(&client_addr, &0u32); + client.resolve_dispute(&arbiter_addr, &0u32, &false); - // Exactly one milestone with the supplied amount, zero released, Pending. - assert_eq!(job.milestones.len(), 1); - let ms = job.milestones.get(0).unwrap(); - assert_eq!(ms.amount, 1_000); - assert_eq!(ms.released_amount, 0); - assert_eq!(ms.status, MilestoneStatus::Pending); + let job = client.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Refunded + ); - // The token must have been added to the whitelist. - assert!(escrow.is_token_whitelisted(&token_contract_id)); + // The freelancer must not be able to re-open a refunded milestone. + let result = client.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Boundary test 5 ΓÇö MULTIPLE MILESTONES STATE VERIFICATION: -/// After initializing with several milestones of distinct amounts, every -/// milestone must be stored in `Pending` state with the correct individual -/// amount, zero released_amount, and the aggregate total must equal the sum of -/// all individual amounts. +// ============================================================================ +// claim_auto_release ΓÇö checked-arithmetic boundary tests +// ============================================================================ + +/// Boundary test: `auto_release_seconds` = u64::MAX causes the +/// `delivered_at + auto_release_seconds` checked_add in `claim_auto_release` +/// to overflow, which must be caught and returned as `Error::InvalidAmount` +/// rather than panicking. #[test] -fn test_initialize_multiple_milestones_all_pending_correct_amounts() { +fn test_claim_auto_release_max_i128_checked_math_no_overflow() { let env = Env::default(); env.mock_all_auths(); @@ -4872,78 +4780,57 @@ fn test_initialize_multiple_milestones_all_pending_correct_amounts() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + // Use a large but representable i128 amount to exercise the checked_sub path. + let amount: i128 = i128::MAX / 2; + token_admin.mint(&client_addr, &amount); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 100_i128, 200_i128, 300_i128, 400_i128]; - escrow.initialize( + let amounts = vec![&env, amount]; + // Use a small auto_release_seconds so the deadline check passes after the + // ledger advance below. + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &86400, + &1u64, &amounts, ); + client.fund(&client_addr); + client.mark_delivered(&freelancer_addr, &0u32); - let job = escrow.get_job(); - assert_eq!(job.milestones.len(), 4); + // Advance past the auto-release deadline. + env.ledger().with_mut(|li| { + li.timestamp += 10; + }); - let expected: [i128; 4] = [100, 200, 300, 400]; - let mut total: i128 = 0; - for (i, &expected_amount) in expected.iter().enumerate() { - let ms = job.milestones.get(i as u32).unwrap(); - assert_eq!( - ms.amount, expected_amount, - "milestone {} amount mismatch", - i - ); - assert_eq!( - ms.released_amount, 0, - "milestone {} released_amount should be 0", - i - ); - assert_eq!( - ms.status, - MilestoneStatus::Pending, - "milestone {} should be Pending", - i - ); - total += expected_amount; - } + // claim_auto_release must compute `remaining = amount - released_amount` + // via checked_sub. released_amount is 0 here so the subtraction is safe + // and the call must succeed, releasing i128::MAX / 2 tokens. + client.claim_auto_release(&freelancer_addr, &0u32); - // Sanity-check aggregate: fund should request exactly this total. - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &total); let token = token::Client::new(&env, &token_contract_id); + assert_eq!(token.balance(&freelancer_addr), amount); + assert_eq!(token.balance(&contract_id), 0); - escrow.fund(&client_addr); - assert_eq!(token.balance(&contract_id), total); - assert_eq!(token.balance(&client_addr), 0); -} - -#[test] -fn test_initialize_gas_scales_linearly_for_many_milestones() { - let (cpu_64, memory_64) = initialize_budget_for_milestone_count(64); - let (cpu_128, memory_128) = initialize_budget_for_milestone_count(128); - - assert!(cpu_64 > 0); - assert!(cpu_128 > cpu_64); - assert!( - cpu_128 < cpu_64.saturating_mul(3), - "doubling initialize milestones should stay roughly linear: cpu {} -> {}", - cpu_64, - cpu_128 + let job = client.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Released ); - - assert!(memory_64 > 0); - assert!(memory_128 > memory_64); } +/// Boundary test: initialising with `auto_release_seconds` = u64::MAX causes +/// `delivered_at.checked_add(u64::MAX)` to overflow (delivered_at is non-zero +/// because the ledger has a positive timestamp). The overflow must be caught +/// and returned as `Error::InvalidAmount`. #[test] -fn test_initialize_invalid_amount_rolls_back_single_pass_writes() { - let env = env_without_snapshot(); +fn test_claim_auto_release_overflow_checked_math_returns_error() { + let env = Env::default(); env.mock_all_auths(); let client_addr = Address::generate(&env); @@ -4954,47 +4841,50 @@ fn test_initialize_invalid_amount_rolls_back_single_pass_writes() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let invalid_amounts = vec![&env, 100_i128, -1_i128]; - let result = escrow.try_initialize( + let amounts = vec![&env, 5_000_i128]; + // u64::MAX as auto_release_seconds guarantees delivered_at + u64::MAX + // wraps when delivered_at > 0. + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &604800, - &invalid_amounts, + &u64::MAX, + &amounts, ); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); - env.as_contract(&contract_id, || { - assert!(!env.storage().persistent().has(&DataKey::Milestone(0u32))); - }); + client.fund(&client_addr); - let valid_amounts = vec![&env, 200_i128]; - escrow.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &valid_amounts, - ); + // Advance the ledger so delivered_at is non-zero, making the overflow + // deterministic: any positive delivered_at + u64::MAX overflows u64. + env.ledger().with_mut(|li| { + li.timestamp = 1; + }); + client.mark_delivered(&freelancer_addr, &0u32); - let job = escrow.get_job(); - assert_eq!(job.milestones.len(), 1); - assert_eq!(job.milestones.get(0).unwrap().amount, 200); + // The checked_add inside claim_auto_release must catch the overflow and + // return Error::InvalidAmount rather than panicking. + let result = client.try_claim_auto_release(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Boundary test 6 ΓÇö ALREADY INITIALIZED GUARD (duplicate call): -/// Calling `initialize` a second time on an already-initialized contract must -/// return `Error::AlreadyInitialized` and must not mutate any existing state. -/// This is a focused regression guard on the re-entrancy / double-init path. +// ============================================================================ +// claim_auto_release ΓÇö double-execution / reentrancy guard tests +// ============================================================================ + +/// Double-execution test: invoking `claim_auto_release` a second time in the +/// same environment ΓÇö after a successful first call ΓÇö must be rejected with +/// `Error::InvalidStatus` because the first call committed `Released` to +/// storage before executing the token transfer (CEI pattern). No tokens must +/// be transferred on the second attempt. #[test] -fn test_initialize_already_initialized_returns_correct_error() { +fn test_claim_auto_release_double_execution_reverts() { let env = Env::default(); env.mock_all_auths(); @@ -5002,53 +4892,63 @@ fn test_initialize_already_initialized_returns_correct_error() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let new_client = Address::generate(&env); let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token = token::Client::new(&env, &token_contract_id); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &10_000); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - escrow.initialize( + let amounts = vec![&env, 10_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &604800, + &100u64, &amounts, ); + client.fund(&client_addr); + client.mark_delivered(&freelancer_addr, &0u32); - // Second call with different parameters ΓÇö must fail with AlreadyInitialized. - let new_amounts = vec![&env, 9_999_i128]; - let result = escrow.try_initialize( - &admin_addr, - &new_client, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &1, - &new_amounts, - ); - assert_eq!(result, Err(Ok(Error::AlreadyInitialized))); + // Advance past the auto-release deadline. + env.ledger().with_mut(|li| { + li.timestamp += 200; + }); - // State must be unchanged ΓÇö original client and amount still in place. - let job = escrow.get_job(); - assert_eq!(job.client, client_addr); - assert_eq!(job.milestones.len(), 1); - assert_eq!(job.milestones.get(0).unwrap().amount, 1_000); + // First call must succeed and release all tokens. + client.claim_auto_release(&freelancer_addr, &0u32); + assert_eq!(token.balance(&freelancer_addr), 10_000); + assert_eq!(token.balance(&contract_id), 0); + + // Milestone status is now Released ΓÇö a second call must be rejected. + let result = client.try_claim_auto_release(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Token balances must be unchanged after the rejected second attempt. + assert_eq!(token.balance(&freelancer_addr), 10_000); + assert_eq!(token.balance(&contract_id), 0); } -/// State Machine Transition Matrix for `initialize`: -/// Validates that `initialize` can only transition from Uninitialized -> Initialized. -/// Any attempt to initialize the contract from any other state must revert with `Error::AlreadyInitialized`. +// ============================================================================ +// claim_auto_release ΓÇö strict identity authorization tests +// ============================================================================ + +/// Auth test 1 ΓÇö NO SIGNATURE PROVIDED (require_auth enforcement): +/// Calling `claim_auto_release` with no mocked auth at all means the Soroban +/// host receives zero authorization entries for the caller. `require_auth()` +/// fires before any contract logic and the host rejects the invocation. +/// `try_` surfaces this as `Err(Err(_))` (host-level error, not a contract +/// error variant), proving `require_auth()` is the outermost guard. #[test] -fn test_initialize_state_transition_matrix() { +fn test_claim_auto_release_no_auth_provided_fails() { let env = Env::default(); - env.mock_all_auths(); + // Deliberately omit env.mock_all_auths() so the host enforces real auth. let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); @@ -5058,134 +4958,60 @@ fn test_initialize_state_transition_matrix() { let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &100_000); + // Use mock_all_auths only for the setup calls so the contract reaches a + // funded+delivered state without touching the auth path under test. + env.mock_all_auths(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let escrow = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - - // --- Path A: Happy Path --- - - // State 0: Uninitialized -> Transition to Initialized (Must Succeed) - let init_res = escrow.try_initialize( + let amounts = vec![&env, 5_000_i128]; + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &604800, + &100u64, &amounts, ); - assert!( - init_res.is_ok(), - "Initial transition from Uninitialized to Initialized should succeed" - ); - - // State 1: Initialized -> Must Revert - let attempt_init = |escrow: &MilestoneEscrowClient| { - escrow.try_initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ) - }; - - assert_eq!( - attempt_init(&escrow), - Err(Ok(Error::AlreadyInitialized)), - "Transition from Initialized must revert" - ); - - // State 2: Funded -> Must Revert escrow.fund(&client_addr); - assert_eq!( - attempt_init(&escrow), - Err(Ok(Error::AlreadyInitialized)), - "Transition from Funded must revert" - ); - - // State 3: Delivered -> Must Revert - escrow.mark_delivered(&freelancer_addr, &0); - assert_eq!( - attempt_init(&escrow), - Err(Ok(Error::AlreadyInitialized)), - "Transition from Delivered must revert" - ); - - // State 4: Partially Released -> Must Revert - escrow.approve_partial(&client_addr, &0, &500); - assert_eq!( - attempt_init(&escrow), - Err(Ok(Error::AlreadyInitialized)), - "Transition from PartiallyReleased must revert" - ); - - // State 5: Released -> Must Revert - let contract_id3 = env.register(MilestoneEscrow, ()); - let escrow3 = MilestoneEscrowClient::new(&env, &contract_id3); - - escrow3.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - escrow3.fund(&client_addr); - escrow3.mark_delivered(&freelancer_addr, &0); - escrow3.approve_milestone(&client_addr, &0); - assert_eq!( - attempt_init(&escrow3), - Err(Ok(Error::AlreadyInitialized)), - "Transition from Released must revert" - ); - - // --- Path B: Dispute Path --- - let contract_id2 = env.register(MilestoneEscrow, ()); - let escrow2 = MilestoneEscrowClient::new(&env, &contract_id2); + escrow.mark_delivered(&freelancer_addr, &0u32); - escrow2.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - escrow2.fund(&client_addr); + env.ledger().with_mut(|li| { + li.timestamp += 200; + }); - // State 6: Disputed -> Must Revert - escrow2.raise_dispute(&client_addr, &0); - assert_eq!( - attempt_init(&escrow2), - Err(Ok(Error::AlreadyInitialized)), - "Transition from Disputed must revert" - ); + // Disable mocking so the next call goes through real auth enforcement. + // set_auths([]) clears all mocks without installing any new entries. + env.set_auths(&[]); - // State 7: Refunded -> Must Revert (Resolve dispute to client) - escrow2.resolve_dispute(&arbiter_addr, &0, &false); - assert_eq!( - attempt_init(&escrow2), - Err(Ok(Error::AlreadyInitialized)), - "Transition from Refunded must revert" - ); + // No auth entry exists for freelancer_addr ΓåÆ require_auth() in + // claim_auto_release panics at the host level. try_ captures that as + // Err(Err(_)). + let result = escrow.try_claim_auto_release(&freelancer_addr, &0u32); + assert!(result.is_err()); + // Confirm the outer Result is the host-error arm, not a contract error. + assert!(matches!(result, Err(Err(_)))); } -/// Boundary test 7 ΓÇö AUTO_RELEASE_SECONDS ZERO: -/// `initialize` must reject `auto_release_seconds = 0` with -/// `Error::InvalidAmount` so invalid job configuration cannot be persisted. +/// Auth test 2 ΓÇö WRONG IDENTITY (identity-check enforcement): +/// An impostor provides a valid signature for their *own* address but passes +/// `freelancer_addr` as the argument. `require_auth()` passes for the +/// impostor's own address, but the subsequent identity comparison +/// (`meta.freelancer != freelancer`) catches the mismatch and returns the +/// explicit `Error::Unauthorized` contract error variant. +/// +/// `mock_auths` is used here to grant a real auth entry scoped to the +/// impostor's address, exercising the selective-auth path so both the SDK +/// framework check and the contract-level identity check are verified. #[test] -fn test_initialize_auto_release_seconds_zero_fails() { +fn test_claim_auto_release_wrong_identity_unauthorized() { + use soroban_sdk::testutils::{MockAuth, MockAuthInvoke}; + let env = Env::default(); env.mock_all_auths(); @@ -5193,39 +5019,72 @@ fn test_initialize_auto_release_seconds_zero_fails() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); + let impostor = Address::generate(&env); let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); let contract_id = env.register(MilestoneEscrow, ()); let escrow = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - let init_result = escrow.try_initialize( + let amounts = vec![&env, 5_000_i128]; + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, - &0u64, + &100u64, &amounts, ); - assert_eq!(init_result, Err(Ok(Error::InvalidAmount))); + escrow.fund(&client_addr); + escrow.mark_delivered(&freelancer_addr, &0u32); + + env.ledger().with_mut(|li| { + li.timestamp += 200; + }); + + // Grant a selective auth entry for `impostor` calling `claim_auto_release` + // with `impostor` as the freelancer argument. This means require_auth() + // passes (impostor signed), but the identity check + // (meta.freelancer != impostor) returns Error::Unauthorized. + let result = escrow + .mock_auths(&[MockAuth { + address: &impostor, + invoke: &MockAuthInvoke { + contract: &contract_id, + fn_name: "claim_auto_release", + args: (&impostor, 0u32).into_val(&env), + sub_invokes: &[], + }, + }]) + .try_claim_auto_release(&impostor, &0u32); + + assert_eq!(result, Err(Ok(Error::Unauthorized))); + + // Milestone must still be in Delivered state ΓÇö no state mutation occurred. + let job = escrow.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Delivered + ); } // ============================================================================ -// add_whitelisted_token ΓÇö integer overflow protection test suite (#20) +// initialize ΓÇö boundary / edge-case / negative-input test suite // ============================================================================ -/// Overflow-protection test 1 ΓÇö CAPACITY CAP BOUNDARY (exactly at cap): -/// Adding tokens one-by-one until the whitelist reaches MAX_WHITELIST_SIZE (50) -/// must succeed for every addition up to and including the 50th token. The -/// 51st addition must be rejected with `Error::InvalidAmount`, proving that -/// the `u32` length counter can never overflow through this call path. -#[test] -fn test_add_whitelisted_token_at_capacity_fails() { - let env = Env::default(); +fn env_without_snapshot() -> Env { + Env::new_with_config(EnvTestConfig { + capture_snapshot_at_drop: false, + }) +} + +fn initialize_budget_for_milestone_count(count: u32) -> (u64, u64) { + let env = env_without_snapshot(); env.mock_all_auths(); let client_addr = Address::generate(&env); @@ -5233,54 +5092,47 @@ fn test_add_whitelisted_token_at_capacity_fails() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( + let mut amounts = vec![&env]; + for _ in 0..count { + amounts.push_back(1_i128); + } + + let mut budget = env.cost_estimate().budget(); + budget.reset_default(); + + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, &amounts, ); - // The whitelist already contains token1 (added during initialize). - // Add 49 more unique tokens to reach the cap of 50. - for _ in 0..49u32 { - let extra_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - client.add_whitelisted_token(&admin_addr, &extra_token); - } - - // Whitelist is now full (50 entries). - let whitelist = client.get_whitelisted_tokens(); - assert_eq!(whitelist.len(), 50); + let budget = env.cost_estimate().budget(); + let cpu = budget.cpu_instruction_cost(); + let memory = budget.memory_bytes_cost(); - // One more addition must be rejected with InvalidAmount (overflow guard). - let overflow_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let result = client.try_add_whitelisted_token(&admin_addr, &overflow_token); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let job = escrow.get_job(); + assert_eq!(job.milestones.len(), count); - // Whitelist length must be unchanged ΓÇö no mutation on rejected call. - assert_eq!(client.get_whitelisted_tokens().len(), 50); + (cpu, memory) } -/// Overflow-protection test 2 ΓÇö ONE BELOW CAP SUCCEEDS: -/// Adding the 50th token (index 49, i.e. exactly at MAX_WHITELIST_SIZE ΓêÆ 1 -/// before the call) must succeed, confirming the boundary is inclusive of the -/// last valid slot and the guard fires only when the list is already full. +/// Boundary test 1 ΓÇö EMPTY MILESTONE VEC: +/// Passing an empty `milestone_amounts` vec must be rejected with +/// `Error::InvalidAmount` because there are no milestones to sum and the +/// contract has no meaningful work to escrow. The contract must remain +/// uninitialized after the rejected call so a valid subsequent call succeeds. #[test] -fn test_add_whitelisted_token_one_below_cap_succeeds() { +fn test_initialize_empty_milestones_fails() { let env = Env::default(); env.mock_all_auths(); @@ -5289,59 +5141,39 @@ fn test_add_whitelisted_token_one_below_cap_succeeds() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( + let empty_amounts: soroban_sdk::Vec = soroban_sdk::Vec::new(&env); + let result = client.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, - &amounts, + &empty_amounts, ); - - // Add 48 more to reach 49 total (one slot still available). - for _ in 0..48u32 { - let extra_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - client.add_whitelisted_token(&admin_addr, &extra_token); - } - - assert_eq!(client.get_whitelisted_tokens().len(), 49); - - // The 50th addition (filling the last slot) must succeed. - let last_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let result = client.try_add_whitelisted_token(&admin_addr, &last_token); - assert!(result.is_ok(), "adding the 50th token should succeed"); - assert_eq!(client.get_whitelisted_tokens().len(), 50); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Overflow-protection test 3 ΓÇö IMMEDIATE OVERFLOW AFTER REMOVE: -/// After removing a token from a full whitelist, one slot becomes available and -/// the next `add_whitelisted_token` must succeed. A subsequent addition to the -/// now-full list must again be rejected. Verifies that the cap interacts -/// correctly with `remove_whitelisted_token`. #[test] -fn test_add_whitelisted_token_cap_resets_after_remove() { +fn test_initialize_zero_address_fails() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - - let token1 = env + let zero_address = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); @@ -5349,59 +5181,25 @@ fn test_add_whitelisted_token_cap_resets_after_remove() { let client = MilestoneEscrowClient::new(&env, &contract_id); let amounts = vec![&env, 1_000_i128]; - client.initialize( + let result = client.try_initialize( &admin_addr, - &client_addr, + &zero_address, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, &amounts, ); - - // Fill whitelist to cap (50 entries). - for _ in 0..49u32 { - let extra_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - client.add_whitelisted_token(&admin_addr, &extra_token); - } - assert_eq!(client.get_whitelisted_tokens().len(), 50); - - // Confirm cap is enforced. - let overflow_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let cap_result = client.try_add_whitelisted_token(&admin_addr, &overflow_token); - assert_eq!(cap_result, Err(Ok(Error::InvalidAmount))); - - // Remove one token to free a slot. - client.remove_whitelisted_token(&admin_addr, &token1); - assert_eq!(client.get_whitelisted_tokens().len(), 49); - - // Now the addition must succeed (one slot available). - let new_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let result = client.try_add_whitelisted_token(&admin_addr, &new_token); - assert!(result.is_ok(), "adding after remove should succeed"); - assert_eq!(client.get_whitelisted_tokens().len(), 50); - - // Cap is enforced again after filling the freed slot. - let yet_another = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let result2 = client.try_add_whitelisted_token(&admin_addr, &yet_another); - assert_eq!(result2, Err(Ok(Error::InvalidAmount))); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); } -/// Overflow-protection test 4 ΓÇö DUPLICATE BEFORE OVERFLOW CHECK: -/// When a duplicate token is submitted and the whitelist is also at capacity, -/// the duplicate check (`TokenAlreadyWhitelisted`) must fire before the -/// overflow guard (`InvalidAmount`) ΓÇö preserving the logical ordering of -/// checks: auth ΓåÆ admin identity ΓåÆ duplicate ΓåÆ capacity. +/// Boundary test 2 ΓÇö NEGATIVE MILESTONE AMOUNT: +/// A milestone with a negative amount must be rejected with +/// `Error::InvalidAmount`. Negative amounts would allow the contract to be +/// funded with a lower-than-expected total or even drain the contract on +/// release. #[test] -fn test_add_whitelisted_token_duplicate_checked_before_cap() { +fn test_initialize_negative_milestone_amount_fails() { let env = Env::default(); env.mock_all_auths(); @@ -5410,45 +5208,32 @@ fn test_add_whitelisted_token_duplicate_checked_before_cap() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( + let amounts = vec![&env, -500_i128]; + let result = client.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, &amounts, ); - - // Fill whitelist to cap (50 entries). - for _ in 0..49u32 { - let extra_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - client.add_whitelisted_token(&admin_addr, &extra_token); - } - assert_eq!(client.get_whitelisted_tokens().len(), 50); - - // Submitting an already-whitelisted token while also at cap must return - // TokenAlreadyWhitelisted, not InvalidAmount. - let result = client.try_add_whitelisted_token(&admin_addr, &token1); - assert_eq!(result, Err(Ok(Error::TokenAlreadyWhitelisted))); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Overflow-protection test 5 ΓÇö UNAUTHORIZED CALLER BEFORE CAPACITY CHECK: -/// An unauthorised caller must be rejected before the overflow guard is -/// evaluated, preserving the existing auth ΓåÆ admin-identity ΓåÆ capacity -/// check ordering. +/// Boundary test 3 ΓÇö MILESTONE AMOUNT SUM OVERFLOW (i128::MAX + 1): +/// Two milestone amounts whose sum exceeds i128::MAX must trigger the +/// checked_add overflow guard inside `initialize` and return +/// `Error::InvalidAmount` without panicking. #[test] -fn test_add_whitelisted_token_unauthorized_before_cap_check() { +fn test_initialize_milestone_sum_overflow_fails() { let env = Env::default(); env.mock_all_auths(); @@ -5456,198 +5241,176 @@ fn test_add_whitelisted_token_unauthorized_before_cap_check() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let bad_actor = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( + // i128::MAX + i128::MAX overflows ΓÇö checked_add must catch this. + let amounts = vec![&env, i128::MAX, i128::MAX]; + let result = client.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, &amounts, ); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} - // Fill whitelist to cap. - for _ in 0..49u32 { - let extra_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - client.add_whitelisted_token(&admin_addr, &extra_token); - } - assert_eq!(client.get_whitelisted_tokens().len(), 50); - - // bad_actor tries to add a token while the list is at capacity. - // The Unauthorized error must fire, not InvalidAmount. - let new_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let result = client.try_add_whitelisted_token(&bad_actor, &new_token); - assert_eq!(result, Err(Ok(Error::Unauthorized))); -} - +/// Boundary test 4 ΓÇö SINGLE VALID MILESTONE STATE VERIFICATION: +/// After a successful `initialize` with exactly one milestone, the persisted +/// state must exactly match the inputs: correct addresses, milestone in +/// `Pending` state with the right amount and zero released_amount, unfunded, +/// and the token whitelisted. #[test] -fn test_remove_whitelisted_token_rejects_zero_account_address() { +fn test_initialize_single_milestone_state_is_correct() { let env = Env::default(); env.mock_all_auths(); - let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); let amounts = vec![&env, 1_000_i128]; - client.initialize( + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, &amounts, ); - let zero_account = Address::from_str( - &env, - "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", - ); - let result = client.try_remove_whitelisted_token(&admin_addr, &zero_account); - assert_eq!(result, Err(Ok(Error::InvalidAddress))); + let job = escrow.get_job(); + + // Party addresses must be stored verbatim. + assert_eq!(job.client, client_addr); + assert_eq!(job.freelancer, freelancer_addr); + assert_eq!(job.arbiter, arbiter_addr); + assert_eq!(job.token, token_contract_id); + + // Contract must start unfunded. + assert!(!job.funded); + + // auto_release_seconds must be persisted exactly. + assert_eq!(job.auto_release_seconds, 604800); + + // Exactly one milestone with the supplied amount, zero released, Pending. + assert_eq!(job.milestones.len(), 1); + let ms = job.milestones.get(0).unwrap(); + assert_eq!(ms.amount, 1_000); + assert_eq!(ms.released_amount, 0); + assert_eq!(ms.status, MilestoneStatus::Pending); + + // The token must have been added to the whitelist. + assert!(escrow.is_token_whitelisted(&token_contract_id)); } +/// Boundary test 5 ΓÇö MULTIPLE MILESTONES STATE VERIFICATION: +/// After initializing with several milestones of distinct amounts, every +/// milestone must be stored in `Pending` state with the correct individual +/// amount, zero released_amount, and the aggregate total must equal the sum of +/// all individual amounts. #[test] -fn test_remove_whitelisted_token_rejects_zero_contract_address() { +fn test_initialize_multiple_milestones_all_pending_correct_amounts() { let env = Env::default(); env.mock_all_auths(); - let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( + let amounts = vec![&env, 100_i128, 200_i128, 300_i128, 400_i128]; + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, - &604800, + &token_contract_id, + &86400, &amounts, ); - let zero_contract = Address::from_str( - &env, - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", - ); - let result = client.try_remove_whitelisted_token(&admin_addr, &zero_contract); - assert_eq!(result, Err(Ok(Error::InvalidAddress))); -} - -// ΓöÇΓöÇ upgrade / version tests ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ - -#[test] -fn test_version_returns_one_after_initialize() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - assert_eq!(client.version(), 1u32); -} - -#[test] -fn test_upgrade_not_initialized_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let admin = Address::generate(&env); - let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); - let result = client.try_upgrade(&admin, &fake_hash); - assert_eq!(result, Err(Ok(Error::NotInitialized))); -} - -#[test] -fn test_upgrade_unauthorized_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - let bad_actor = Address::generate(&env); - let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); - let result = client.try_upgrade(&bad_actor, &fake_hash); - assert_eq!(result, Err(Ok(Error::Unauthorized))); -} + let job = escrow.get_job(); + assert_eq!(job.milestones.len(), 4); -#[test] -fn test_upgrade_admin_auth_check_passes() { - let env = Env::default(); - env.mock_all_auths(); + let expected: [i128; 4] = [100, 200, 300, 400]; + let mut total: i128 = 0; + for (i, &expected_amount) in expected.iter().enumerate() { + let ms = job.milestones.get(i as u32).unwrap(); + assert_eq!( + ms.amount, expected_amount, + "milestone {} amount mismatch", + i + ); + assert_eq!( + ms.released_amount, 0, + "milestone {} released_amount should be 0", + i + ); + assert_eq!( + ms.status, + MilestoneStatus::Pending, + "milestone {} should be Pending", + i + ); + total += expected_amount; + } - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + // Sanity-check aggregate: fund should request exactly this total. + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &total); + let token = token::Client::new(&env, &token_contract_id); - // Admin auth passes; the call will fail because [0; 32] isn't a valid - // uploaded wasm hash, but it must NOT return Unauthorized. - let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); - let result = client.try_upgrade(&admin_addr, &fake_hash); - assert_ne!(result, Err(Ok(Error::Unauthorized))); + escrow.fund(&client_addr); + assert_eq!(token.balance(&contract_id), total); + assert_eq!(token.balance(&client_addr), 0); } -// ============================================================================ -// add_whitelisted_token ΓÇö comprehensive boundary / negative / edge-case tests -// ============================================================================ - -/// add_whitelisted_token before initialize: no Admin key exists yet, so the -/// function must return NotInitialized (the `get(&DataKey::Admin)` path). #[test] -fn test_add_whitelisted_token_before_initialize_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let admin_addr = Address::generate(&env); - let token_addr = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); +fn test_initialize_gas_scales_linearly_for_many_milestones() { + let (cpu_64, memory_64) = initialize_budget_for_milestone_count(64); + let (cpu_128, memory_128) = initialize_budget_for_milestone_count(128); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + assert!(cpu_64 > 0); + assert!(cpu_128 > cpu_64); + assert!( + cpu_128 < cpu_64.saturating_mul(3), + "doubling initialize milestones should stay roughly linear: cpu {} -> {}", + cpu_64, + cpu_128 + ); - // No initialize call ΓÇö storage is empty. - let result = client.try_add_whitelisted_token(&admin_addr, &token_addr); - assert_eq!(result, Err(Ok(Error::NotInitialized))); + assert!(memory_64 > 0); + assert!(memory_128 > memory_64); } -/// add_whitelisted_token after the escrow is funded must return AlreadyFunded. -/// This guards against post-funding token substitution attacks. #[test] -fn test_add_whitelisted_token_after_funded_fails() { - let env = Env::default(); +fn test_initialize_invalid_amount_rolls_back_single_pass_writes() { + let env = env_without_snapshot(); env.mock_all_auths(); let client_addr = Address::generate(&env); @@ -5655,40 +5418,50 @@ fn test_add_whitelisted_token_after_funded_fails() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token1); - token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - client.initialize( + let invalid_amounts = vec![&env, 100_i128, -1_i128]; + let result = escrow.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, - &vec![&env, 1_000_i128], + &invalid_amounts, ); - client.fund(&client_addr); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + env.as_contract(&contract_id, || { + assert!(!env.storage().persistent().has(&DataKey::Milestone(0u32))); + }); - // Contract is now funded; adding a new token must be rejected. - let extra_token = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let result = client.try_add_whitelisted_token(&admin_addr, &extra_token); - assert_eq!(result, Err(Ok(Error::AlreadyFunded))); + let valid_amounts = vec![&env, 200_i128]; + escrow.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &valid_amounts, + ); + + let job = escrow.get_job(); + assert_eq!(job.milestones.len(), 1); + assert_eq!(job.milestones.get(0).unwrap().amount, 200); } -/// Calling add_whitelisted_token with a non-admin address (even one that is a -/// valid address, e.g. the freelancer) must return Unauthorized. -/// This is distinct from `test_non_admin_add_token_fails` which uses a -/// completely random bad_actor ΓÇö here we use a known role address. +/// Boundary test 6 ΓÇö ALREADY INITIALIZED GUARD (duplicate call): +/// Calling `initialize` a second time on an already-initialized contract must +/// return `Error::AlreadyInitialized` and must not mutate any existing state. +/// This is a focused regression guard on the re-entrancy / double-init path. #[test] -fn test_add_whitelisted_token_freelancer_is_unauthorized() { +fn test_initialize_already_initialized_returns_correct_error() { let env = Env::default(); env.mock_all_auths(); @@ -5696,36 +5469,51 @@ fn test_add_whitelisted_token_freelancer_is_unauthorized() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); + let new_client = Address::generate(&env); - let token1 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token2 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - client.initialize( + let amounts = vec![&env, 1_000_i128]; + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, - &vec![&env, 1_000_i128], + &amounts, ); - // freelancer is a known participant but not the admin. - let result = client.try_add_whitelisted_token(&freelancer_addr, &token2); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Second call with different parameters ΓÇö must fail with AlreadyInitialized. + let new_amounts = vec![&env, 9_999_i128]; + let result = escrow.try_initialize( + &admin_addr, + &new_client, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &1, + &new_amounts, + ); + assert_eq!(result, Err(Ok(Error::AlreadyInitialized))); + + // State must be unchanged ΓÇö original client and amount still in place. + let job = escrow.get_job(); + assert_eq!(job.client, client_addr); + assert_eq!(job.milestones.len(), 1); + assert_eq!(job.milestones.get(0).unwrap().amount, 1_000); } -/// Calling add_whitelisted_token with the client address (another known role -/// that is NOT the admin) must also return Unauthorized. +/// State Machine Transition Matrix for `initialize`: +/// Validates that `initialize` can only transition from Uninitialized -> Initialized. +/// Any attempt to initialize the contract from any other state must revert with `Error::AlreadyInitialized`. #[test] -fn test_add_whitelisted_token_client_is_unauthorized() { +fn test_initialize_state_transition_matrix() { let env = Env::default(); env.mock_all_auths(); @@ -5734,88 +5522,137 @@ fn test_add_whitelisted_token_client_is_unauthorized() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token1 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token2 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + + token_admin.mint(&client_addr, &100_000); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - client.initialize( + let amounts = vec![&env, 1_000_i128]; + + // --- Path A: Happy Path --- + + // State 0: Uninitialized -> Transition to Initialized (Must Succeed) + let init_res = escrow.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, - &vec![&env, 1_000_i128], + &amounts, + ); + assert!( + init_res.is_ok(), + "Initial transition from Uninitialized to Initialized should succeed" ); - // client is a known participant but not the admin. - let result = client.try_add_whitelisted_token(&client_addr, &token2); - assert_eq!(result, Err(Ok(Error::Unauthorized))); -} + // State 1: Initialized -> Must Revert + let attempt_init = |escrow: &MilestoneEscrowClient| { + escrow.try_initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ) + }; -/// add_whitelisted_token must emit exactly one `wtok` event containing the -/// correct admin and token fields. Verifies both event count and payload. -#[test] -fn test_add_whitelisted_token_emits_event() { - let env = Env::default(); - env.mock_all_auths(); + assert_eq!( + attempt_init(&escrow), + Err(Ok(Error::AlreadyInitialized)), + "Transition from Initialized must revert" + ); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + // State 2: Funded -> Must Revert + escrow.fund(&client_addr); + assert_eq!( + attempt_init(&escrow), + Err(Ok(Error::AlreadyInitialized)), + "Transition from Funded must revert" + ); - let token1 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token2 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); + // State 3: Delivered -> Must Revert + escrow.mark_delivered(&freelancer_addr, &0); + assert_eq!( + attempt_init(&escrow), + Err(Ok(Error::AlreadyInitialized)), + "Transition from Delivered must revert" + ); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + // State 4: Partially Released -> Must Revert + escrow.approve_partial(&client_addr, &0, &500); + assert_eq!( + attempt_init(&escrow), + Err(Ok(Error::AlreadyInitialized)), + "Transition from PartiallyReleased must revert" + ); - client.initialize( + // State 5: Released -> Must Revert + let contract_id3 = env.register(MilestoneEscrow, ()); + let escrow3 = MilestoneEscrowClient::new(&env, &contract_id3); + + escrow3.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, + &token_contract_id, &604800, - &vec![&env, 1_000_i128], + &amounts, + ); + escrow3.fund(&client_addr); + escrow3.mark_delivered(&freelancer_addr, &0); + escrow3.approve_milestone(&client_addr, &0); + assert_eq!( + attempt_init(&escrow3), + Err(Ok(Error::AlreadyInitialized)), + "Transition from Released must revert" ); - client.add_whitelisted_token(&admin_addr, &token2); + // --- Path B: Dispute Path --- + let contract_id2 = env.register(MilestoneEscrow, ()); + let escrow2 = MilestoneEscrowClient::new(&env, &contract_id2); - let wtok_topic: Val = symbol_short!("wtok").into_val(&env); - let mut wtok_events = 0u32; - for event in env.events().all().iter() { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == wtok_topic.get_payload() { - wtok_events += 1; - assert_eq!( - TokenWhitelistedEvent::from_val(&env, &event.2), - TokenWhitelistedEvent { - admin: admin_addr.clone(), - token: token2.clone(), - } - ); - } - } - } - assert_eq!(wtok_events, 1, "expected exactly one wtok event"); + escrow2.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + escrow2.fund(&client_addr); + + // State 6: Disputed -> Must Revert + escrow2.raise_dispute(&client_addr, &0); + assert_eq!( + attempt_init(&escrow2), + Err(Ok(Error::AlreadyInitialized)), + "Transition from Disputed must revert" + ); + + // State 7: Refunded -> Must Revert (Resolve dispute to client) + escrow2.resolve_dispute(&arbiter_addr, &0, &false); + assert_eq!( + attempt_init(&escrow2), + Err(Ok(Error::AlreadyInitialized)), + "Transition from Refunded must revert" + ); } -/// A failed add_whitelisted_token (duplicate token) must NOT emit any `wtok` -/// event, ensuring events are only emitted on state-changing success paths. +/// Boundary test 7 ΓÇö AUTO_RELEASE_SECONDS ZERO: +/// `initialize` must reject `auto_release_seconds = 0` with +/// `Error::InvalidAmount` so invalid job configuration cannot be persisted. #[test] -fn test_add_whitelisted_token_failed_does_not_emit_event() { +fn test_initialize_auto_release_seconds_zero_fails() { let env = Env::default(); env.mock_all_auths(); @@ -5824,43 +5661,37 @@ fn test_add_whitelisted_token_failed_does_not_emit_event() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token1 = env + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - client.initialize( + let amounts = vec![&env, 1_000_i128]; + let init_result = escrow.try_initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token1, - &604800, - &vec![&env, 1_000_i128], + &token_contract_id, + &0u64, + &amounts, ); - - // Attempt to add the already-whitelisted token ΓÇö must fail. - let _ = client.try_add_whitelisted_token(&admin_addr, &token1); - - let wtok_topic: Val = symbol_short!("wtok").into_val(&env); - let wtok_count = env.events().all().iter().fold(0u32, |acc, event| { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == wtok_topic.get_payload() { - return acc + 1; - } - } - acc - }); - assert_eq!(wtok_count, 0, "failed call must not emit wtok event"); + assert_eq!(init_result, Err(Ok(Error::InvalidAmount))); } -/// After admin transfer, the old admin must be rejected by add_whitelisted_token -/// and the new admin must succeed. Exercises the interaction between -/// transfer_admin and the admin identity check inside add_whitelisted_token. +// ============================================================================ +// add_whitelisted_token ΓÇö integer overflow protection test suite (#20) +// ============================================================================ + +/// Overflow-protection test 1 ΓÇö CAPACITY CAP BOUNDARY (exactly at cap): +/// Adding tokens one-by-one until the whitelist reaches MAX_WHITELIST_SIZE (50) +/// must succeed for every addition up to and including the 50th token. The +/// 51st addition must be rejected with `Error::InvalidAmount`, proving that +/// the `u32` length counter can never overflow through this call path. #[test] -fn test_add_whitelisted_token_old_admin_rejected_after_transfer() { +fn test_add_whitelisted_token_at_capacity_fails() { let env = Env::default(); env.mock_all_auths(); @@ -5868,21 +5699,15 @@ fn test_add_whitelisted_token_old_admin_rejected_after_transfer() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let new_admin_addr = Address::generate(&env); let token1 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token2 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token3 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -5890,68 +5715,39 @@ fn test_add_whitelisted_token_old_admin_rejected_after_transfer() { &arbiter_addr, &token1, &604800, - &vec![&env, 1_000_i128], + &amounts, ); - client.transfer_admin(&admin_addr, &new_admin_addr); - - // Old admin must now be rejected. - let old_result = client.try_add_whitelisted_token(&admin_addr, &token2); - assert_eq!(old_result, Err(Ok(Error::Unauthorized))); - - // New admin must succeed. - let new_result = client.try_add_whitelisted_token(&new_admin_addr, &token3); - assert!( - new_result.is_ok(), - "new admin should be able to add a token" - ); - assert!(client.is_token_whitelisted(&token3)); -} - -// ═══════════════════════════════════════════════════════════════════════════════ -// TASK 2 TESTS: require_dispute_party auth for raise_dispute -// ═══════════════════════════════════════════════════════════════════════════════ - -/// Verify raise_dispute with bad actor returns Unauthorized (not another error). -#[test] -fn test_raise_dispute_bad_actor_returns_unauthorized() { - let env = Env::default(); - env.mock_all_auths(); - - let (client_addr, freelancer_addr, _, _, _, _, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - client.mark_delivered(&freelancer_addr, &0u32); - - let bad_actor = Address::generate(&env); - let result = client.try_raise_dispute(&bad_actor, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); -} - -/// Verify raise_dispute with freelancer succeeds (freelancer is an authorized party). -#[test] -fn test_raise_dispute_by_freelancer_succeeds() { - let env = Env::default(); - env.mock_all_auths(); + // The whitelist already contains token1 (added during initialize). + // Add 49 more unique tokens to reach the cap of 50. + for _ in 0..49u32 { + let extra_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + client.add_whitelisted_token(&admin_addr, &extra_token); + } - let (client_addr, freelancer_addr, _, _, _, _, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + // Whitelist is now full (50 entries). + let whitelist = client.get_whitelisted_tokens(); + assert_eq!(whitelist.len(), 50); - client.mark_delivered(&freelancer_addr, &0u32); - client.raise_dispute(&freelancer_addr, &0u32); + // One more addition must be rejected with InvalidAmount (overflow guard). + let overflow_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let result = client.try_add_whitelisted_token(&admin_addr, &overflow_token); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Disputed - ); + // Whitelist length must be unchanged ΓÇö no mutation on rejected call. + assert_eq!(client.get_whitelisted_tokens().len(), 50); } -/// Whitelist membership is mutually exclusive: adding token A then querying -/// token B must return false, and vice-versa. Guards against false positives -/// in is_token_whitelisted after an add. +/// Overflow-protection test 2 ΓÇö ONE BELOW CAP SUCCEEDS: +/// Adding the 50th token (index 49, i.e. exactly at MAX_WHITELIST_SIZE ΓêÆ 1 +/// before the call) must succeed, confirming the boundary is inclusive of the +/// last valid slot and the guard fires only when the list is already full. #[test] -fn test_add_whitelisted_token_does_not_whitelist_other_tokens() { +fn test_add_whitelisted_token_one_below_cap_succeeds() { let env = Env::default(); env.mock_all_auths(); @@ -5963,16 +5759,11 @@ fn test_add_whitelisted_token_does_not_whitelist_other_tokens() { let token1 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token2 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token3 = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; client.initialize( &admin_addr, &client_addr, @@ -5980,196 +5771,151 @@ fn test_add_whitelisted_token_does_not_whitelist_other_tokens() { &arbiter_addr, &token1, &604800, - &vec![&env, 1_000_i128], + &amounts, ); - // Only token2 is added. - client.add_whitelisted_token(&admin_addr, &token2); + // Add 48 more to reach 49 total (one slot still available). + for _ in 0..48u32 { + let extra_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + client.add_whitelisted_token(&admin_addr, &extra_token); + } - assert!( - client.is_token_whitelisted(&token1), - "token1 (init token) must still be whitelisted" - ); - assert!( - client.is_token_whitelisted(&token2), - "token2 must be whitelisted after add" - ); - assert!( - !client.is_token_whitelisted(&token3), - "token3 was never added — must not be whitelisted" - ); + assert_eq!(client.get_whitelisted_tokens().len(), 49); - // Whitelist length must be exactly 2. - assert_eq!(client.get_whitelisted_tokens().len(), 2); + // The 50th addition (filling the last slot) must succeed. + let last_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let result = client.try_add_whitelisted_token(&admin_addr, &last_token); + assert!(result.is_ok(), "adding the 50th token should succeed"); + assert_eq!(client.get_whitelisted_tokens().len(), 50); } -/// Verify raise_dispute by client succeeds (client is an authorized party). +/// Overflow-protection test 3 ΓÇö IMMEDIATE OVERFLOW AFTER REMOVE: +/// After removing a token from a full whitelist, one slot becomes available and +/// the next `add_whitelisted_token` must succeed. A subsequent addition to the +/// now-full list must again be rejected. Verifies that the cap interacts +/// correctly with `remove_whitelisted_token`. #[test] -fn test_raise_dispute_by_client_succeeds() { +fn test_add_whitelisted_token_cap_resets_after_remove() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - client.raise_dispute(&client_addr, &0u32); + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); - let job = client.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Disputed + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &amounts, ); -} -// ═══════════════════════════════════════════════════════════════════════════════ -// TASK 3 TESTS: Temporary storage DisputeFlag optimization -// ═══════════════════════════════════════════════════════════════════════════════ + // Fill whitelist to cap (50 entries). + for _ in 0..49u32 { + let extra_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + client.add_whitelisted_token(&admin_addr, &extra_token); + } + assert_eq!(client.get_whitelisted_tokens().len(), 50); -/// Verify that raise_dispute writes the DisputeFlag to temporary storage. -#[test] -fn test_raise_dispute_writes_dispute_flag() { - let env = Env::default(); - env.mock_all_auths(); + // Confirm cap is enforced. + let overflow_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let cap_result = client.try_add_whitelisted_token(&admin_addr, &overflow_token); + assert_eq!(cap_result, Err(Ok(Error::InvalidAmount))); - let (client_addr, _, _, _, _, contract_id, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + // Remove one token to free a slot. + client.remove_whitelisted_token(&admin_addr, &token1); + assert_eq!(client.get_whitelisted_tokens().len(), 49); - client.raise_dispute(&client_addr, &0u32); + // Now the addition must succeed (one slot available). + let new_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let result = client.try_add_whitelisted_token(&admin_addr, &new_token); + assert!(result.is_ok(), "adding after remove should succeed"); + assert_eq!(client.get_whitelisted_tokens().len(), 50); - // Read the temporary storage flag from within the contract context - let flag_set = env.as_contract(&contract_id, || { - env.storage() - .temporary() - .get::<_, bool>(&DataKey::DisputeFlag(0u32)) - .unwrap_or(false) - }); - assert!(flag_set, "DisputeFlag should be set in temporary storage"); + // Cap is enforced again after filling the freed slot. + let yet_another = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let result2 = client.try_add_whitelisted_token(&admin_addr, &yet_another); + assert_eq!(result2, Err(Ok(Error::InvalidAmount))); } -/// Verify that DisputeFlag is NOT set before raise_dispute is called. +/// Overflow-protection test 4 ΓÇö DUPLICATE BEFORE OVERFLOW CHECK: +/// When a duplicate token is submitted and the whitelist is also at capacity, +/// the duplicate check (`TokenAlreadyWhitelisted`) must fire before the +/// overflow guard (`InvalidAmount`) ΓÇö preserving the logical ordering of +/// checks: auth ΓåÆ admin identity ΓåÆ duplicate ΓåÆ capacity. #[test] -fn test_dispute_flag_not_set_before_raise_dispute() { +fn test_add_whitelisted_token_duplicate_checked_before_cap() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, _, _, contract_id, _client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let flag_set = env.as_contract(&contract_id, || { - env.storage() - .temporary() - .get::<_, bool>(&DataKey::DisputeFlag(0u32)) - .unwrap_or(false) - }); - assert!( - !flag_set, - "DisputeFlag should NOT be set before raise_dispute" + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &amounts, ); + + // Fill whitelist to cap (50 entries). + for _ in 0..49u32 { + let extra_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + client.add_whitelisted_token(&admin_addr, &extra_token); + } + assert_eq!(client.get_whitelisted_tokens().len(), 50); + + // Submitting an already-whitelisted token while also at cap must return + // TokenAlreadyWhitelisted, not InvalidAmount. + let result = client.try_add_whitelisted_token(&admin_addr, &token1); + assert_eq!(result, Err(Ok(Error::TokenAlreadyWhitelisted))); } -/// Verify that only the disputed milestone's flag is set, not other indices. +/// Overflow-protection test 5 ΓÇö UNAUTHORIZED CALLER BEFORE CAPACITY CHECK: +/// An unauthorised caller must be rejected before the overflow guard is +/// evaluated, preserving the existing auth ΓåÆ admin-identity ΓåÆ capacity +/// check ordering. #[test] -fn test_dispute_flag_only_sets_targeted_milestone() { - let env = Env::default(); - env.mock_all_auths(); - - let (client_addr, _, _, _, _, contract_id, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128, 1_000_i128]); - - client.raise_dispute(&client_addr, &0u32); - - let flag_0 = env.as_contract(&contract_id, || { - env.storage() - .temporary() - .get::<_, bool>(&DataKey::DisputeFlag(0u32)) - .unwrap_or(false) - }); - let flag_1 = env.as_contract(&contract_id, || { - env.storage() - .temporary() - .get::<_, bool>(&DataKey::DisputeFlag(1u32)) - .unwrap_or(false) - }); - - assert!(flag_0, "DisputeFlag(0) should be set"); - assert!(!flag_1, "DisputeFlag(1) should NOT be set"); -} - -// ═══════════════════════════════════════════════════════════════════════════════ -// TASK: emergency_pause_split_refund distribution pathways -// ═══════════════════════════════════════════════════════════════════════════════ - -#[test] -fn test_emergency_pause_split_refund_even_split() { - let env = Env::default(); - env.mock_all_auths(); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let allocation = client.emergency_pause_split_refund(&1_000_i128, &5_000_u32, &5_000_u32); - assert_eq!(allocation.client_refund, 500); - assert_eq!(allocation.freelancer_payout, 500); - assert_eq!(allocation.client_refund_bps, 5_000); - assert_eq!(allocation.freelancer_payout_bps, 5_000); - assert_eq!( - allocation.client_refund + allocation.freelancer_payout, - 1_000 - ); -} - -#[test] -fn test_emergency_pause_split_refund_odd_amount_rounding() { - let env = Env::default(); - env.mock_all_auths(); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - // 101 split 50/50: client gets 51, freelancer gets 50 - let allocation = client.emergency_pause_split_refund(&101_i128, &5_000_u32, &5_000_u32); - assert_eq!(allocation.client_refund, 51); - assert_eq!(allocation.freelancer_payout, 50); - assert_eq!(allocation.client_refund + allocation.freelancer_payout, 101); -} - -#[test] -fn test_emergency_pause_split_refund_invalid_ratio_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - // 5000 + 3000 = 8000 != 10000 - let result = client.try_emergency_pause_split_refund(&1_000_i128, &5_000_u32, &3_000_u32); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); -} - -// ═══════════════════════════════════════════════════════════════════════════════ -// TASK 4 TESTS: multisig_split_refund distribution pathways -// ═══════════════════════════════════════════════════════════════════════════════ - -/// Verify multisig_split_refund with 50/50 split calculates correctly. -#[test] -fn test_multisig_split_refund_even_split() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - - let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &5_000_u32); - assert_eq!(allocation.client_refund, 500); - assert_eq!(allocation.freelancer_payout, 500); - assert_eq!(allocation.client_refund_bps, 5_000); - assert_eq!(allocation.freelancer_payout_bps, 5_000); - assert_eq!( - allocation.client_refund + allocation.freelancer_payout, - 1_000 - ); -} - -#[test] -fn test_platform_fee_allocation_admin_override_requires_verified_admin() { +fn test_add_whitelisted_token_unauthorized_before_cap_check() { let env = Env::default(); env.mock_all_auths(); @@ -6177,9 +5923,9 @@ fn test_platform_fee_allocation_admin_override_requires_verified_admin() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let attacker = Address::generate(&env); + let bad_actor = Address::generate(&env); - let token_contract_id = env + let token1 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); @@ -6192,35 +5938,40 @@ fn test_platform_fee_allocation_admin_override_requires_verified_admin() { &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token1, &604800, &amounts, ); - client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); - client.lock_platform_fee_allocation(&admin_addr); + // Fill whitelist to cap. + for _ in 0..49u32 { + let extra_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + client.add_whitelisted_token(&admin_addr, &extra_token); + } + assert_eq!(client.get_whitelisted_tokens().len(), 50); - let result = client.try_pf_alloc_admin_override(&attacker, &1000_u32, &8000_u32, &1000_u32); + // bad_actor tries to add a token while the list is at capacity. + // The Unauthorized error must fire, not InvalidAmount. + let new_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let result = client.try_add_whitelisted_token(&bad_actor, &new_token); assert_eq!(result, Err(Ok(Error::Unauthorized))); - - let allocation = client.get_platform_fee_allocation(); - assert_eq!(allocation.client_bps, 2000); - assert_eq!(allocation.freelancer_bps, 7000); - assert!(allocation.locked); } #[test] -fn test_admin_override_tax_refund_requires_admin() { +fn test_remove_whitelisted_token_rejects_zero_account_address() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let attacker = Address::generate(&env); - let token_contract_id = env + let token1 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); @@ -6233,26 +5984,30 @@ fn test_admin_override_tax_refund_requires_admin() { &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token1, &604800, &amounts, ); - let result = client.try_admin_override_tax_refund(&attacker, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + let zero_account = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); + let result = client.try_remove_whitelisted_token(&admin_addr, &zero_account); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); } #[test] -fn test_admin_override_tax_refund_invalid_state() { +fn test_remove_whitelisted_token_rejects_zero_contract_address() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env + let token1 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); @@ -6265,217 +6020,143 @@ fn test_admin_override_tax_refund_invalid_state() { &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token1, &604800, &amounts, ); - // No tax withholding lock exists for milestone 0. - // Should fail with InvalidStatus without mutating state. - let result = client.try_admin_override_tax_refund(&admin_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + let zero_contract = Address::from_str( + &env, + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + ); + let result = client.try_remove_whitelisted_token(&admin_addr, &zero_contract); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); } +// ΓöÇΓöÇ upgrade / version tests ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ + #[test] -fn test_platform_fee_allocation_admin_override_invalid_state() { +fn test_version_returns_one_after_initialize() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 1_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - - // If we try to override before setting it up (but after initialize), it's not locked. - // It should fail with InvalidStatus. - let result = client.try_pf_alloc_admin_override(&admin_addr, &1000_u32, &8000_u32, &1000_u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - - client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); - - // Now it's set but NOT locked. An override is unnecessary and should fail with InvalidStatus. - let result2 = client.try_pf_alloc_admin_override(&admin_addr, &1500_u32, &7500_u32, &1000_u32); - assert_eq!(result2, Err(Ok(Error::InvalidStatus))); + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - // Storage remains unchanged - let allocation = client.get_platform_fee_allocation(); - assert_eq!(allocation.client_bps, 2000); - assert_eq!(allocation.freelancer_bps, 7000); - assert_eq!(allocation.treasury_bps, 1000); - assert!(!allocation.locked); + assert_eq!(client.version(), 1u32); } #[test] -fn test_platform_fee_allocation_admin_override_unlocks_locked_allocation() { +fn test_upgrade_not_initialized_fails() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); + let admin = Address::generate(&env); + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&admin, &fake_hash); + assert_eq!(result, Err(Ok(Error::NotInitialized))); +} - client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); - client.lock_platform_fee_allocation(&admin_addr); +#[test] +fn test_upgrade_unauthorized_fails() { + let env = Env::default(); + env.mock_all_auths(); - let locked_update = - client.try_set_platform_fee_allocation(&admin_addr, &1500_u32, &7500_u32, &1000_u32); - assert_eq!(locked_update, Err(Ok(Error::InvalidStatus))); + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.pf_alloc_admin_override(&admin_addr, &1500_u32, &7500_u32, &1000_u32); - let allocation = client.get_platform_fee_allocation(); - assert_eq!(allocation.client_bps, 1500); - assert_eq!(allocation.freelancer_bps, 7500); - assert_eq!(allocation.treasury_bps, 1000); + let bad_actor = Address::generate(&env); + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&bad_actor, &fake_hash); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Verify multisig_split_refund with 70/30 split calculates correctly. #[test] -fn test_multisig_split_refund_uneven_split() { +fn test_upgrade_admin_auth_check_passes() { let env = Env::default(); env.mock_all_auths(); let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &7_000_u32, &3_000_u32); - assert_eq!(allocation.client_refund, 700); - assert_eq!(allocation.freelancer_payout, 300); - assert_eq!(allocation.client_refund_bps, 7_000); - assert_eq!(allocation.freelancer_payout_bps, 3_000); - assert_eq!( - allocation.client_refund + allocation.freelancer_payout, - 1_000 - ); -} - -/// Verify multisig_split_refund with 100% client refund. -#[test] -fn test_multisig_split_refund_full_client_refund() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - - let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &10_000_u32, &0_u32); - assert_eq!(allocation.client_refund, 1_000); - assert_eq!(allocation.freelancer_payout, 0); + // Admin auth passes; the call will fail because [0; 32] isn't a valid + // uploaded wasm hash, but it must NOT return Unauthorized. + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&admin_addr, &fake_hash); + assert_ne!(result, Err(Ok(Error::Unauthorized))); } -/// Verify multisig_split_refund with 100% freelancer payout. +/// Issue #352: an unauthorized caller must be rejected by the guard clause +/// at the very top of `upgrade`, before the version counter (the only +/// storage key `upgrade` mutates on success) is touched. #[test] -fn test_multisig_split_refund_full_freelancer_payout() { +fn test_upgrade_unauthorized_caller_mutates_no_storage() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - - let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &0_u32, &10_000_u32); - assert_eq!(allocation.client_refund, 0); - assert_eq!(allocation.freelancer_payout, 1_000); -} + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); -/// Verify multisig_split_refund rejects ratios that don't sum to BPS_SCALE. -#[test] -fn test_multisig_split_refund_invalid_ratio_fails() { - let env = Env::default(); - env.mock_all_auths(); + let version_before = client.version(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); + let bad_actor = Address::generate(&env); + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&bad_actor, &fake_hash); - // Total is 8000, not 10000 - let result = client.try_multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &3_000_u32); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert_eq!(client.version(), version_before); } -/// Verify multisig_split_refund rejects zero total amount. +/// Issue #352: `upgrade` must be blocked while the contract is +/// emergency-paused, failing with the specific `Paused` error rather than +/// proceeding to the WASM upgrade / version bump. #[test] -fn test_multisig_split_refund_zero_total_fails() { +fn test_upgrade_while_paused_fails_with_typed_error() { let env = Env::default(); env.mock_all_auths(); let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); - let result = client.try_multisig_split_refund(&admin_addr, &0_i128, &5_000_u32, &5_000_u32); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); -} + client.emergency_pause(&admin_addr); + assert!(client.is_emergency_paused()); -/// Verify multisig_split_refund preserves total with rounding (odd amounts). -#[test] -fn test_multisig_split_refund_odd_amount_rounding() { - let env = Env::default(); - env.mock_all_auths(); + let version_before = client.version(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&admin_addr, &fake_hash); - // 101 split 50/50 should produce 51/50 (rounding up for client) - let allocation = client.multisig_split_refund(&admin_addr, &101_i128, &5_000_u32, &5_000_u32); - assert_eq!(allocation.client_refund + allocation.freelancer_payout, 101); + assert_eq!(result, Err(Ok(Error::Paused))); + assert_eq!(client.version(), version_before); + assert!(client.is_emergency_paused()); } -// payment_streaming_milestones — comprehensive unit test suite (#265) +// ============================================================================ +// add_whitelisted_token ΓÇö comprehensive boundary / negative / edge-case tests +// ============================================================================ +/// add_whitelisted_token before initialize: no Admin key exists yet, so the +/// function must return NotInitialized (the `get(&DataKey::Admin)` path). #[test] -fn test_multisig_split_refund_extreme_split_preserves_total() { +fn test_add_whitelisted_token_before_initialize_fails() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 10_000_i128]); - client.multisig_lock(&admin_addr); + let admin_addr = Address::generate(&env); + let token_addr = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); - let allocation = client.multisig_split_refund(&admin_addr, &10_000_i128, &1_u32, &9_999_u32); - assert_eq!( - allocation.client_refund + allocation.freelancer_payout, - 10_000 - ); - assert_eq!(allocation.client_refund_bps, 1); - assert_eq!(allocation.freelancer_payout_bps, 9_999); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + // No initialize call ΓÇö storage is empty. + let result = client.try_add_whitelisted_token(&admin_addr, &token_addr); + assert_eq!(result, Err(Ok(Error::NotInitialized))); } -/// Verify multisig_split_refund emits the correct event. +/// add_whitelisted_token after the escrow is funded must return AlreadyFunded. +/// This guards against post-funding token substitution attacks. #[test] -fn test_multisig_split_refund_emits_event() { +fn test_add_whitelisted_token_after_funded_fails() { let env = Env::default(); env.mock_all_auths(); @@ -6484,789 +6165,1009 @@ fn test_multisig_split_refund_emits_event() { let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - let token_contract_id = env + let token1 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - token_admin.mint(&client_addr, &5_000); + let token_admin = token::StellarAssetClient::new(&env, &token1); + token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - // Negative numerator - assert_eq!( - client.try_payment_streaming_milestones(&100_i128, &-1_i128, &3_i128), - Err(Ok(Error::InvalidRatio)) - ); - // Numerator > denominator - assert_eq!( - client.try_payment_streaming_milestones(&100_i128, &4_i128, &3_i128), - Err(Ok(Error::InvalidRatio)) + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &vec![&env, 1_000_i128], ); + client.fund(&client_addr); + + // Contract is now funded; adding a new token must be rejected. + let extra_token = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let result = client.try_add_whitelisted_token(&admin_addr, &extra_token); + assert_eq!(result, Err(Ok(Error::AlreadyFunded))); } +/// Calling add_whitelisted_token with a non-admin address (even one that is a +/// valid address, e.g. the freelancer) must return Unauthorized. +/// This is distinct from `test_non_admin_add_token_fails` which uses a +/// completely random bad_actor ΓÇö here we use a known role address. #[test] -fn test_payment_streaming_milestones_negative_amount_fails() { +fn test_add_whitelisted_token_freelancer_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token2 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - assert_eq!( - client.try_payment_streaming_milestones(&-1_i128, &1_i128, &2_i128), - Err(Ok(Error::InvalidAmount)) + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &vec![&env, 1_000_i128], ); + + // freelancer is a known participant but not the admin. + let result = client.try_add_whitelisted_token(&freelancer_addr, &token2); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } +/// Calling add_whitelisted_token with the client address (another known role +/// that is NOT the admin) must also return Unauthorized. #[test] -fn test_payment_streaming_milestones_zero_denominator_fails() { +fn test_add_whitelisted_token_client_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token2 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - assert_eq!( - client.try_payment_streaming_milestones(&100_i128, &1_i128, &0_i128), - Err(Ok(Error::InvalidRatio)) - ); - assert_eq!( - client.try_payment_streaming_milestones(&100_i128, &1_i128, &-1_i128), - Err(Ok(Error::InvalidRatio)) + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &vec![&env, 1_000_i128], ); + + // client is a known participant but not the admin. + let result = client.try_add_whitelisted_token(&client_addr, &token2); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Boundary guard — ZERO AMOUNT: -/// A zero escrow balance means there is nothing to stream. -/// payment_streaming_milestones must reject this with Error::InvalidAmount. +/// add_whitelisted_token must emit exactly one `wtok` event containing the +/// correct admin and token fields. Verifies both event count and payload. #[test] -fn test_payment_streaming_milestones_zero_amount_fails() { +fn test_add_whitelisted_token_emits_event() { let env = Env::default(); env.mock_all_auths(); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token2 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - assert_eq!( - client.try_payment_streaming_milestones(&0_i128, &1_i128, &2_i128), - Err(Ok(Error::InvalidAmount)) + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &vec![&env, 1_000_i128], ); + + client.add_whitelisted_token(&admin_addr, &token2); + + let wtok_topic: Val = symbol_short!("wtok").into_val(&env); + let mut wtok_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == wtok_topic.get_payload() { + wtok_events += 1; + assert_eq!( + TokenWhitelistedEvent::from_val(&env, &event.2), + TokenWhitelistedEvent { + admin: admin_addr.clone(), + token: token2.clone(), + } + ); + } + } + } + assert_eq!(wtok_events, 1, "expected exactly one wtok event"); } +/// A failed add_whitelisted_token (duplicate token) must NOT emit any `wtok` +/// event, ensuring events are only emitted on state-changing success paths. #[test] -fn test_payment_streaming_milestones_full_amount() { +fn test_add_whitelisted_token_failed_does_not_emit_event() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let split = client.payment_streaming_milestones(&1000_i128, &100_i128, &100_i128); - assert_eq!(split.first, 1000); - assert_eq!(split.second, 0); -} + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); -#[test] -fn test_payment_streaming_milestones_zero_numerator() { - let env = Env::default(); - env.mock_all_auths(); + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let split = client.payment_streaming_milestones(&1000_i128, &0_i128, &100_i128); - assert_eq!(split.first, 0); - assert_eq!(split.second, 1000); -} - -#[test] -fn test_payment_streaming_milestones_overflow_fails() { - let env = Env::default(); - env.mock_all_auths(); + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token1, + &604800, + &vec![&env, 1_000_i128], + ); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + // Attempt to add the already-whitelisted token ΓÇö must fail. + let _ = client.try_add_whitelisted_token(&admin_addr, &token1); - assert_eq!( - client.try_payment_streaming_milestones(&i128::MAX, &i128::MAX, &i128::MAX), - Err(Ok(Error::InvalidAmount)) - ); + let wtok_topic: Val = symbol_short!("wtok").into_val(&env); + let wtok_count = env.events().all().iter().fold(0u32, |acc, event| { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == wtok_topic.get_payload() { + return acc + 1; + } + } + acc + }); + assert_eq!(wtok_count, 0, "failed call must not emit wtok event"); } +/// After admin transfer, the old admin must be rejected by add_whitelisted_token +/// and the new admin must succeed. Exercises the interaction between +/// transfer_admin and the admin identity check inside add_whitelisted_token. #[test] -fn test_payment_streaming_milestones_emits_event() { +fn test_add_whitelisted_token_old_admin_rejected_after_transfer() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amount = 1_000_i128; - let num = 300_i128; - let den = 600_i128; - - let split = client.payment_streaming_milestones(&amount, &num, &den); - assert_eq!(split.first, 500); - assert_eq!(split.second, 500); - - let events = env.events().all(); - let p_stream_topic: Symbol = symbol_short!("p_stream"); - let p_stream_topic_val: Val = p_stream_topic.into_val(&env); - - let mut found_event = false; - for e in events.iter() { - if let Some(topic) = e.1.get(0) { - if topic.get_payload() == p_stream_topic_val.get_payload() { - found_event = true; - let event_data = PaymentStreamingEvent::from_val(&env, &e.2); - assert_eq!(event_data.total_amount, amount); - assert_eq!(event_data.numerator, num); - assert_eq!(event_data.denominator, den); - assert_eq!(event_data.streamed_payout, 500); - assert_eq!(event_data.client_refund, 500); - } - } - } - assert!(found_event, "Expected p_stream event to be published"); -} - -fn setup_multisig_env( - env: &Env, -) -> ( - Address, - Address, - Address, - Address, - Address, - Address, - MilestoneEscrowClient<'_>, -) { - let admin_addr = Address::generate(env); - let client_addr = Address::generate(env); - let freelancer_addr = Address::generate(env); - let arbiter_addr = Address::generate(env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + let new_admin_addr = Address::generate(&env); - let token_contract_id = env + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token2 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token3 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(env, &token_contract_id); - token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![env, 1_000_i128]; client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token1, &604800, - &amounts, + &vec![&env, 1_000_i128], ); - ( - admin_addr, - client_addr, - freelancer_addr, - arbiter_addr, - token_contract_id, - contract_id, - client, - ) -} - -#[test] -fn test_tax_withholding_deductions_emits_event() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - let record = client.tax_withholding_deductions(&0_u32, &2_500_u32); - assert_eq!(record.gross_amount, 1_000); - assert_eq!(record.tax_amount, 250); - assert_eq!(record.net_amount, 750); - assert_eq!(record.gross_amount, record.tax_amount + record.net_amount); - - let tax_topic: Val = symbol_short!("taxwith").into_val(&env); - assert!(env.events().all().iter().any(|event| { - event - .1 - .get(0) - .map(|topic| topic.get_payload() == tax_topic.get_payload()) - .unwrap_or(false) - })); -} - -#[test] -fn test_tax_withholding_deductions_rounds_nearest_and_preserves_gross() { - let env = Env::default(); - env.mock_all_auths(); + client.transfer_admin(&admin_addr, &new_admin_addr); - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 101_i128]); + // Old admin must now be rejected. + let old_result = client.try_add_whitelisted_token(&admin_addr, &token2); + assert_eq!(old_result, Err(Ok(Error::Unauthorized))); - let record = client.tax_withholding_deductions(&0_u32, &5_000_u32); - assert_eq!(record.tax_amount, 51); - assert_eq!(record.net_amount, 50); - assert_eq!(record.gross_amount, record.tax_amount + record.net_amount); + // New admin must succeed. + let new_result = client.try_add_whitelisted_token(&new_admin_addr, &token3); + assert!( + new_result.is_ok(), + "new admin should be able to add a token" + ); + assert!(client.is_token_whitelisted(&token3)); } -#[test] -fn test_tax_withholding_deductions_accepts_zero_and_full_tax_rates() { - let env = Env::default(); - env.mock_all_auths(); - - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - let no_tax = client.tax_withholding_deductions(&0_u32, &0_u32); - assert_eq!(no_tax.tax_amount, 0); - assert_eq!(no_tax.net_amount, 1_000); - - let full_tax = client.tax_withholding_deductions(&0_u32, &10_000_u32); - assert_eq!(full_tax.tax_amount, 1_000); - assert_eq!(full_tax.net_amount, 0); -} +// ═══════════════════════════════════════════════════════════════════════════════ +// TASK 2 TESTS: require_dispute_party auth for raise_dispute +// ═══════════════════════════════════════════════════════════════════════════════ +/// Verify raise_dispute with bad actor returns Unauthorized (not another error). #[test] -fn test_tax_withholding_record_can_be_resolved_as_net_release() { +fn test_raise_dispute_bad_actor_returns_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let (_, freelancer_addr, _, admin_addr, token_contract_id, _, client) = + let (client_addr, freelancer_addr, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let token = token::Client::new(&env, &token_contract_id); - client.tax_withholding_deductions(&0_u32, &2_500_u32); - client.admin_override_tax_release(&admin_addr, &0_u32); + client.mark_delivered(&freelancer_addr, &0u32); - assert_eq!(token.balance(&freelancer_addr), 750); - assert_eq!( - client.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Released - ); - assert_eq!( - client.try_admin_override_tax_release(&admin_addr, &0_u32), - Err(Ok(Error::InvalidStatus)) - ); + let bad_actor = Address::generate(&env); + let result = client.try_raise_dispute(&bad_actor, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } +/// Verify raise_dispute with freelancer succeeds (freelancer is an authorized party). #[test] -fn test_tax_withholding_record_can_be_resolved_as_gross_refund() { +fn test_raise_dispute_by_freelancer_succeeds() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (client_addr, freelancer_addr, _, _, _, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.tax_withholding_deductions(&0_u32, &7_500_u32); - client.admin_override_tax_refund(&admin_addr, &0_u32); + client.mark_delivered(&freelancer_addr, &0u32); + client.raise_dispute(&freelancer_addr, &0u32); + let job = client.get_job(); assert_eq!( - client.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Refunded - ); - assert_eq!( - client.try_admin_override_tax_refund(&admin_addr, &0_u32), - Err(Ok(Error::InvalidStatus)) + job.milestones.get(0).unwrap().status, + MilestoneStatus::Disputed ); } +/// Whitelist membership is mutually exclusive: adding token A then querying +/// token B must return false, and vice-versa. Guards against false positives +/// in is_token_whitelisted after an add. #[test] -fn test_tax_withholding_deductions_rejects_invalid_state_and_inputs() { +fn test_add_whitelisted_token_does_not_whitelist_other_tokens() { let env = Env::default(); env.mock_all_auths(); - let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let token_contract_id = env + let admin_addr = Address::generate(&env); + + let token1 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token2 = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token3 = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - assert_eq!( - client.try_tax_withholding_deductions(&0_u32, &1_u32), - Err(Ok(Error::NotInitialized)) - ); - client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token1, &604800, &vec![&env, 1_000_i128], ); - assert_eq!( - client.try_tax_withholding_deductions(&0_u32, &1_u32), - Err(Ok(Error::NotFunded)) - ); - let (_, _, _, _, _, _, funded_client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - assert_eq!( - funded_client.try_tax_withholding_deductions(&1_u32, &1_u32), - Err(Ok(Error::InvalidMilestone)) + // Only token2 is added. + client.add_whitelisted_token(&admin_addr, &token2); + + assert!( + client.is_token_whitelisted(&token1), + "token1 (init token) must still be whitelisted" + ); + assert!( + client.is_token_whitelisted(&token2), + "token2 must be whitelisted after add" + ); + assert!( + !client.is_token_whitelisted(&token3), + "token3 was never added — must not be whitelisted" ); + + // Whitelist length must be exactly 2. + assert_eq!(client.get_whitelisted_tokens().len(), 2); +} + +/// Verify raise_dispute by client succeeds (client is an authorized party). +#[test] +fn test_raise_dispute_by_client_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.raise_dispute(&client_addr, &0u32); + + let job = client.get_job(); assert_eq!( - funded_client.try_tax_withholding_deductions(&0_u32, &10_001_u32), - Err(Ok(Error::InvalidRatio)) + job.milestones.get(0).unwrap().status, + MilestoneStatus::Disputed ); } +// ═══════════════════════════════════════════════════════════════════════════════ +// TASK 3 TESTS: Temporary storage DisputeFlag optimization +// ═══════════════════════════════════════════════════════════════════════════════ + +/// Verify that raise_dispute writes the DisputeFlag to temporary storage. #[test] -fn test_tax_withholding_deductions_terminal_milestone_fails_without_event() { +fn test_raise_dispute_writes_dispute_flag() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, _, _, _, client) = + let (client_addr, _, _, _, _, contract_id, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.mark_delivered(&freelancer_addr, &0_u32); - client.approve_milestone(&client_addr, &0_u32); - let result = client.try_tax_withholding_deductions(&0_u32, &2_500_u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - let tax_topic: Val = symbol_short!("taxwith").into_val(&env); - assert!(!env.events().all().iter().any(|event| { - event - .1 - .get(0) - .map(|topic| topic.get_payload() == tax_topic.get_payload()) + client.raise_dispute(&client_addr, &0u32); + + // Read the temporary storage flag from within the contract context + let flag_set = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get::<_, bool>(&DataKey::DisputeFlag(0u32)) .unwrap_or(false) - })); + }); + assert!(flag_set, "DisputeFlag should be set in temporary storage"); } +/// Verify that DisputeFlag is NOT set before raise_dispute is called. #[test] -fn test_multisig_transfer_admin_before_initialize_fails() { +fn test_dispute_flag_not_set_before_raise_dispute() { let env = Env::default(); env.mock_all_auths(); - let admin_addr = Address::generate(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (_, _, _, _, _, contract_id, _client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::NotInitialized))); + let flag_set = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get::<_, bool>(&DataKey::DisputeFlag(0u32)) + .unwrap_or(false) + }); + assert!( + !flag_set, + "DisputeFlag should NOT be set before raise_dispute" + ); } +/// Verify that only the disputed milestone's flag is set, not other indices. #[test] -fn test_multisig_transfer_admin_unauthorized_fails() { +fn test_dispute_flag_only_sets_targeted_milestone() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let bad_actor = Address::generate(&env); + let (client_addr, _, _, _, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128, 1_000_i128]); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&bad_actor, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + client.raise_dispute(&client_addr, &0u32); - let client_addr = Address::generate(&env); - let result = client.try_multisig_transfer_admin(&client_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + let flag_0 = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get::<_, bool>(&DataKey::DisputeFlag(0u32)) + .unwrap_or(false) + }); + let flag_1 = env.as_contract(&contract_id, || { + env.storage() + .temporary() + .get::<_, bool>(&DataKey::DisputeFlag(1u32)) + .unwrap_or(false) + }); - let _ = admin_addr; + assert!(flag_0, "DisputeFlag(0) should be set"); + assert!(!flag_1, "DisputeFlag(1) should NOT be set"); } +// ═══════════════════════════════════════════════════════════════════════════════ +// TASK: emergency_pause_split_refund distribution pathways +// ═══════════════════════════════════════════════════════════════════════════════ + #[test] -fn test_multisig_transfer_admin_zero_total_amount_fails() { +fn test_emergency_pause_split_refund_even_split() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &0_i128, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let allocation = client.emergency_pause_split_refund(&1_000_i128, &5_000_u32, &5_000_u32); + assert_eq!(allocation.client_refund, 500); + assert_eq!(allocation.freelancer_payout, 500); + assert_eq!(allocation.client_refund_bps, 5_000); + assert_eq!(allocation.freelancer_payout_bps, 5_000); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + 1_000 + ); } #[test] -fn test_multisig_transfer_admin_negative_total_amount_fails() { +fn test_emergency_pause_split_refund_odd_amount_rounding() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &(-1_i128), &ratios); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + // 101 split 50/50: client gets 51, freelancer gets 50 + let allocation = client.emergency_pause_split_refund(&101_i128, &5_000_u32, &5_000_u32); + assert_eq!(allocation.client_refund, 51); + assert_eq!(allocation.freelancer_payout, 50); + assert_eq!(allocation.client_refund + allocation.freelancer_payout, 101); } #[test] -fn test_multisig_transfer_admin_empty_ratios_fails() { +fn test_emergency_pause_split_refund_invalid_ratio_fails() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let ratios = soroban_sdk::Vec::new(&env); - let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + // 5000 + 3000 = 8000 != 10000 + let result = client.try_emergency_pause_split_refund(&1_000_i128, &5_000_u32, &3_000_u32); assert_eq!(result, Err(Ok(Error::InvalidRatio))); } +// ═══════════════════════════════════════════════════════════════════════════════ +// TASK 4 TESTS: multisig_split_refund distribution pathways +// ═══════════════════════════════════════════════════════════════════════════════ + +/// Verify multisig_split_refund with 50/50 split calculates correctly. #[test] -fn test_multisig_transfer_admin_too_many_ratios_fails() { +fn test_multisig_split_refund_even_split() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - - let mut ratios = vec![&env]; - for _ in 0..256u32 { - ratios.push_back(1_i128); - } - let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let mut ratios_ok = vec![&env]; - for _ in 0..255u32 { - ratios_ok.push_back(1_i128); - } - let allocs = client.multisig_transfer_admin(&admin_addr, &255_i128, &ratios_ok); - let mut total = 0_i128; - for i in 0..allocs.len() { - total += allocs.get(i).unwrap(); - } - assert_eq!(total, 255); + let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &5_000_u32); + assert_eq!(allocation.client_refund, 500); + assert_eq!(allocation.freelancer_payout, 500); + assert_eq!(allocation.client_refund_bps, 5_000); + assert_eq!(allocation.freelancer_payout_bps, 5_000); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + 1_000 + ); } #[test] -fn test_multisig_transfer_admin_negative_single_ratio_fails() { +fn test_platform_fee_allocation_admin_override_requires_verified_admin() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + let attacker = Address::generate(&env); - let ratios = vec![&env, 1_i128, -1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); - let ratios_first = vec![&env, -5_i128, 1_i128]; - let result_first = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios_first); - assert_eq!(result_first, Err(Ok(Error::InvalidRatio))); -} + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); -#[test] -fn test_multisig_transfer_admin_ratio_sum_overflow_fails() { - let env = Env::default(); - env.mock_all_auths(); + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); + client.lock_platform_fee_allocation(&admin_addr); - let ratios = vec![&env, i128::MAX, 1_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + let result = client.try_pf_alloc_admin_override(&attacker, &1000_u32, &8000_u32, &1000_u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + + let allocation = client.get_platform_fee_allocation(); + assert_eq!(allocation.client_bps, 2000); + assert_eq!(allocation.freelancer_bps, 7000); + assert!(allocation.locked); } #[test] -fn test_multisig_transfer_admin_all_zero_ratios_fails() { +fn test_admin_override_tax_refund_requires_admin() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - - let ratios = vec![&env, 0_i128, 0_i128, 0_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + let attacker = Address::generate(&env); + + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + + let result = client.try_admin_override_tax_refund(&attacker, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } #[test] -fn test_multisig_transfer_admin_single_ratio_succeeds() { +fn test_admin_override_tax_refund_invalid_state() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let ratios = vec![&env, 1_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &42_i128, &ratios); - assert_eq!(allocations.len(), 1); - assert_eq!(allocations.get(0).unwrap(), 42); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + + // No tax withholding lock exists for milestone 0. + // Should fail with InvalidStatus without mutating state. + let result = client.try_admin_override_tax_refund(&admin_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } #[test] -fn test_multisig_transfer_admin_some_zero_ratios_succeeds() { +fn test_platform_fee_allocation_admin_override_invalid_state() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let ratios = vec![&env, 0_i128, 1_i128, 0_i128, 3_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - assert_eq!(allocations.len(), 4); - assert_eq!(allocations.get(0).unwrap(), 0); - assert_eq!(allocations.get(2).unwrap(), 0); - let mut total = 0_i128; - for i in 0..allocations.len() { - total += allocations.get(i).unwrap(); - } - assert_eq!(total, 100); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + + // If we try to override before setting it up (but after initialize), it's not locked. + // It should fail with InvalidStatus. + let result = client.try_pf_alloc_admin_override(&admin_addr, &1000_u32, &8000_u32, &1000_u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); + + // Now it's set but NOT locked. An override is unnecessary and should fail with InvalidStatus. + let result2 = client.try_pf_alloc_admin_override(&admin_addr, &1500_u32, &7500_u32, &1000_u32); + assert_eq!(result2, Err(Ok(Error::InvalidStatus))); + + // Storage remains unchanged + let allocation = client.get_platform_fee_allocation(); + assert_eq!(allocation.client_bps, 2000); + assert_eq!(allocation.freelancer_bps, 7000); + assert_eq!(allocation.treasury_bps, 1000); + assert!(!allocation.locked); } #[test] -fn test_multisig_transfer_admin_large_weighted_mul_overflow_fails() { +fn test_platform_fee_allocation_admin_override_unlocks_locked_allocation() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let ratios = vec![&env, i128::MAX]; - let result = client.try_multisig_transfer_admin(&admin_addr, &i128::MAX, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + + client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); + client.lock_platform_fee_allocation(&admin_addr); + + let locked_update = + client.try_set_platform_fee_allocation(&admin_addr, &1500_u32, &7500_u32, &1000_u32); + assert_eq!(locked_update, Err(Ok(Error::InvalidStatus))); + + client.pf_alloc_admin_override(&admin_addr, &1500_u32, &7500_u32, &1000_u32); + let allocation = client.get_platform_fee_allocation(); + assert_eq!(allocation.client_bps, 1500); + assert_eq!(allocation.freelancer_bps, 7500); + assert_eq!(allocation.treasury_bps, 1000); } +/// Verify multisig_split_refund with 70/30 split calculates correctly. #[test] -fn test_multisig_transfer_admin_equal_ratios_two_party() { +fn test_multisig_split_refund_uneven_split() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let ratios = vec![&env, 1_i128, 1_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &101_i128, &ratios); - assert_eq!(allocations.len(), 2); - let mut total = 0_i128; - for i in 0..allocations.len() { - total += allocations.get(i).unwrap(); - } - assert_eq!(total, 101); - let a = allocations.get(0).unwrap(); - let b = allocations.get(1).unwrap(); - assert!((a - b).abs() <= 1); + let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &7_000_u32, &3_000_u32); + assert_eq!(allocation.client_refund, 700); + assert_eq!(allocation.freelancer_payout, 300); + assert_eq!(allocation.client_refund_bps, 7_000); + assert_eq!(allocation.freelancer_payout_bps, 3_000); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + 1_000 + ); } +/// Verify multisig_split_refund with 100% client refund. #[test] -fn test_multisig_transfer_admin_disparate_ratios() { +fn test_multisig_split_refund_full_client_refund() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let ratios = vec![&env, 7_i128, 1_i128, 2_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &100_i128, &ratios); - let mut total = 0_i128; - for i in 0..allocations.len() { - total += allocations.get(i).unwrap(); - } - assert_eq!(total, 100); - assert_eq!( - allocations.get(0).unwrap() + allocations.get(1).unwrap() + allocations.get(2).unwrap(), - 100 - ); + let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &10_000_u32, &0_u32); + assert_eq!(allocation.client_refund, 1_000); + assert_eq!(allocation.freelancer_payout, 0); } +/// Verify multisig_split_refund with 100% freelancer payout. #[test] -fn test_multisig_transfer_admin_one_amount_one_ratio() { +fn test_multisig_split_refund_full_freelancer_payout() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let ratios = vec![&env, 5_i128, 5_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &1_i128, &ratios); - assert_eq!(allocations.len(), 2); - let mut total = 0_i128; - for i in 0..allocations.len() { - total += allocations.get(i).unwrap(); - } - assert_eq!(total, 1); + let allocation = client.multisig_split_refund(&admin_addr, &1_000_i128, &0_u32, &10_000_u32); + assert_eq!(allocation.client_refund, 0); + assert_eq!(allocation.freelancer_payout, 1_000); } +/// Verify multisig_split_refund rejects ratios that don't sum to BPS_SCALE. #[test] -fn test_multisig_transfer_admin_freelancer_is_unauthorized() { +fn test_multisig_split_refund_invalid_ratio_fails() { let env = Env::default(); env.mock_all_auths(); - let (_, _, freelancer_addr, _, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&freelancer_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Total is 8000, not 10000 + let result = client.try_multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &3_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); } +/// Verify multisig_split_refund rejects zero total amount. #[test] -fn test_multisig_transfer_admin_client_is_unauthorized() { +fn test_multisig_split_refund_zero_total_fails() { let env = Env::default(); env.mock_all_auths(); - let (_, client_addr, _, _, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&client_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + let result = client.try_multisig_split_refund(&admin_addr, &0_i128, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } +/// Verify multisig_split_refund preserves total with rounding (odd amounts). #[test] -fn test_multisig_transfer_admin_arbiter_is_unauthorized() { +fn test_multisig_split_refund_odd_amount_rounding() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, arbiter_addr, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&arbiter_addr, &100_i128, &ratios); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // 101 split 50/50 should produce 51/50 (rounding up for client) + let allocation = client.multisig_split_refund(&admin_addr, &101_i128, &5_000_u32, &5_000_u32); + assert_eq!(allocation.client_refund + allocation.freelancer_payout, 101); } +// payment_streaming_milestones — comprehensive unit test suite (#265) + #[test] -fn test_multisig_transfer_admin_ratio_at_capacity_succeeds() { +fn test_multisig_split_refund_extreme_split_preserves_total() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 10_000_i128]); + client.multisig_lock(&admin_addr); - let mut ratios = vec![&env]; - for _ in 0..255u32 { - ratios.push_back(1_i128); - } - let result = client.multisig_transfer_admin(&admin_addr, &255_i128, &ratios); - assert_eq!(result.len(), 255); - let mut total = 0_i128; - for i in 0..result.len() { - total += result.get(i).unwrap(); - } - assert_eq!(total, 255); + let allocation = client.multisig_split_refund(&admin_addr, &10_000_i128, &1_u32, &9_999_u32); + assert_eq!( + allocation.client_refund + allocation.freelancer_payout, + 10_000 + ); + assert_eq!(allocation.client_refund_bps, 1); + assert_eq!(allocation.freelancer_payout_bps, 9_999); } -// ============================================================================ -// raise_dispute — comprehensive boundary / edge-case test suite (Issue #183) -// ============================================================================ -// -// These tests verify that raise_dispute enforces strict state machine -// transitions, rejects unauthorised callers, and handles negative inputs -// gracefully. - -/// Boundary guard — a milestone carrying a zero amount has nothing to -/// arbitrate, so raise_dispute must reject it with InvalidAmount. +/// Verify multisig_split_refund emits the correct event. #[test] -fn test_raise_dispute_zero_amount_milestone_fails() { +fn test_multisig_split_refund_emits_event() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, _, _, _, contract_id, client) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - // Corrupt the milestone amount to 0. - env.as_contract(&contract_id, || { - let mut milestone: Milestone = env - .storage() - .persistent() - .get(&DataKey::Milestone(0u32)) - .unwrap(); - milestone.amount = 0; - env.storage() - .persistent() - .set(&DataKey::Milestone(0u32), &milestone); - }); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + token_admin.mint(&client_addr, &5_000); - let result = client.try_raise_dispute(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + // Negative numerator + assert_eq!( + client.try_payment_streaming_milestones(&100_i128, &-1_i128, &3_i128), + Err(Ok(Error::InvalidRatio)) + ); + // Numerator > denominator + assert_eq!( + client.try_payment_streaming_milestones(&100_i128, &4_i128, &3_i128), + Err(Ok(Error::InvalidRatio)) + ); } -/// State machine test 1 — raise_dispute on Released milestone must fail. #[test] -fn test_raise_dispute_on_released_fails() { +fn test_payment_streaming_milestones_negative_amount_fails() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.approve_milestone(&client_addr, &0u32); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = escrow.try_raise_dispute(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.try_payment_streaming_milestones(&-1_i128, &1_i128, &2_i128), + Err(Ok(Error::InvalidAmount)) + ); } -/// State machine test 2 — raise_dispute on Disputed milestone must fail. #[test] -fn test_raise_dispute_on_disputed_fails() { +fn test_payment_streaming_milestones_zero_denominator_fails() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.raise_dispute(&client_addr, &0u32); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = escrow.try_raise_dispute(&freelancer_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.try_payment_streaming_milestones(&100_i128, &1_i128, &0_i128), + Err(Ok(Error::InvalidRatio)) + ); + assert_eq!( + client.try_payment_streaming_milestones(&100_i128, &1_i128, &-1_i128), + Err(Ok(Error::InvalidRatio)) + ); } -/// State machine test 3 — raise_dispute on Refunded milestone must fail. +/// Boundary guard — ZERO AMOUNT: +/// A zero escrow balance means there is nothing to stream. +/// payment_streaming_milestones must reject this with Error::InvalidAmount. #[test] -fn test_raise_dispute_on_refunded_fails() { +fn test_payment_streaming_milestones_zero_amount_fails() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.raise_dispute(&client_addr, &0u32); - escrow.resolve_dispute(&arbiter_addr, &0u32, &false); + assert_eq!( + client.try_payment_streaming_milestones(&0_i128, &1_i128, &2_i128), + Err(Ok(Error::InvalidAmount)) + ); +} - let result = escrow.try_raise_dispute(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); +#[test] +fn test_payment_streaming_milestones_full_amount() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let split = client.payment_streaming_milestones(&1000_i128, &100_i128, &100_i128); + assert_eq!(split.first, 1000); + assert_eq!(split.second, 0); } -/// Auth test — unauthorised caller (arbiter) must be rejected. #[test] -fn test_raise_dispute_arbiter_is_unauthorized() { +fn test_payment_streaming_milestones_zero_numerator() { let env = Env::default(); env.mock_all_auths(); - let (_client_addr, _freelancer_addr, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = escrow.try_raise_dispute(&arbiter_addr, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + let split = client.payment_streaming_milestones(&1000_i128, &0_i128, &100_i128); + assert_eq!(split.first, 0); + assert_eq!(split.second, 1000); } -/// Negative input — raise_dispute with a zero contract address fails. #[test] -fn test_raise_dispute_zero_contract_address_fails() { +fn test_payment_streaming_milestones_overflow_fails() { let env = Env::default(); env.mock_all_auths(); - let (_, _freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let zero_contract = Address::from_str( - &env, - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + assert_eq!( + client.try_payment_streaming_milestones(&i128::MAX, &i128::MAX, &i128::MAX), + Err(Ok(Error::InvalidAmount)) ); - - let result = escrow.try_raise_dispute(&zero_contract, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidAddress))); } -/// Negative input — raise_dispute before the escrow is funded fails. #[test] -fn test_raise_dispute_before_funded_fails() { +fn test_payment_streaming_milestones_emits_event() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amount = 1_000_i128; + let num = 300_i128; + let den = 600_i128; + + let split = client.payment_streaming_milestones(&amount, &num, &den); + assert_eq!(split.first, 500); + assert_eq!(split.second, 500); + + let events = env.events().all(); + let p_stream_topic: Symbol = symbol_short!("p_stream"); + let p_stream_topic_val: Val = p_stream_topic.into_val(&env); + + let mut found_event = false; + for e in events.iter() { + if let Some(topic) = e.1.get(0) { + if topic.get_payload() == p_stream_topic_val.get_payload() { + found_event = true; + let event_data = PaymentStreamingEvent::from_val(&env, &e.2); + assert_eq!(event_data.total_amount, amount); + assert_eq!(event_data.numerator, num); + assert_eq!(event_data.denominator, den); + assert_eq!(event_data.streamed_payout, 500); + assert_eq!(event_data.client_refund, 500); + } + } + } + assert!(found_event, "Expected p_stream event to be published"); +} + +fn setup_multisig_env( + env: &Env, +) -> ( + Address, + Address, + Address, + Address, + Address, + Address, + MilestoneEscrowClient<'_>, +) { + let admin_addr = Address::generate(env); + let client_addr = Address::generate(env); + let freelancer_addr = Address::generate(env); + let arbiter_addr = Address::generate(env); let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); + let token_admin = token::StellarAssetClient::new(env, &token_contract_id); + token_admin.mint(&client_addr, &1_000); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(env, &contract_id); - let amounts = vec![&env, 1_000_i128]; - escrow.initialize( + let amounts = vec![env, 1_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, @@ -7276,1932 +7177,3303 @@ fn test_raise_dispute_before_funded_fails() { &amounts, ); - let result = escrow.try_raise_dispute(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::NotFunded))); + ( + admin_addr, + client_addr, + freelancer_addr, + arbiter_addr, + token_contract_id, + contract_id, + client, + ) } -/// Happy path — client can raise a dispute from PartiallyReleased status. #[test] -fn test_raise_dispute_from_partially_released_succeeds() { +fn test_tax_withholding_deductions_emits_event() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 5_000_i128]); - - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.approve_partial(&client_addr, &0u32, &2_000_i128); + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - escrow.raise_dispute(&client_addr, &0u32); + let record = client.tax_withholding_deductions(&0_u32, &2_500_u32); + assert_eq!(record.gross_amount, 1_000); + assert_eq!(record.tax_amount, 250); + assert_eq!(record.net_amount, 750); + assert_eq!(record.gross_amount, record.tax_amount + record.net_amount); - let job = escrow.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Disputed + let tax_topic: Val = symbol_short!("taxwith").into_val(&env); + assert!(env.events().all().iter().any(|event| { + event + .1 + .get(0) + .map(|topic| topic.get_payload() == tax_topic.get_payload()) + .unwrap_or(false) + })); +} + +#[test] +fn test_tax_withholding_deductions_rounds_nearest_and_preserves_gross() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 101_i128]); + + let record = client.tax_withholding_deductions(&0_u32, &5_000_u32); + assert_eq!(record.tax_amount, 51); + assert_eq!(record.net_amount, 50); + assert_eq!(record.gross_amount, record.tax_amount + record.net_amount); +} + +#[test] +fn test_tax_withholding_deductions_accepts_zero_and_full_tax_rates() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + let no_tax = client.tax_withholding_deductions(&0_u32, &0_u32); + assert_eq!(no_tax.tax_amount, 0); + assert_eq!(no_tax.net_amount, 1_000); + + let full_tax = client.tax_withholding_deductions(&0_u32, &10_000_u32); + assert_eq!(full_tax.tax_amount, 1_000); + assert_eq!(full_tax.net_amount, 0); +} + +#[test] +fn test_tax_withholding_record_can_be_resolved_as_net_release() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, freelancer_addr, _, admin_addr, token_contract_id, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let token = token::Client::new(&env, &token_contract_id); + + client.tax_withholding_deductions(&0_u32, &2_500_u32); + client.admin_override_tax_release(&admin_addr, &0_u32); + + assert_eq!(token.balance(&freelancer_addr), 750); + assert_eq!( + client.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Released + ); + assert_eq!( + client.try_admin_override_tax_release(&admin_addr, &0_u32), + Err(Ok(Error::InvalidStatus)) ); } -/// Auth test — raise_dispute without auth must fail at host level. #[test] -fn test_raise_dispute_no_auth_fails() { +fn test_tax_withholding_record_can_be_resolved_as_gross_refund() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - env.set_auths(&[]); + client.tax_withholding_deductions(&0_u32, &7_500_u32); + client.admin_override_tax_refund(&admin_addr, &0_u32); - let result = escrow.try_raise_dispute(&client_addr, &0u32); - assert!(result.is_err()); - assert!(matches!(result, Err(Err(_)))); + assert_eq!( + client.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Refunded + ); + assert_eq!( + client.try_admin_override_tax_refund(&admin_addr, &0_u32), + Err(Ok(Error::InvalidStatus)) + ); } -/// Gas-scaling audit: raise_dispute reads/writes a single keyed milestone -/// entry (`DataKey::Milestone(index)`), not a scan over the job's full -/// milestone list, so its cost must stay roughly flat as the milestone -/// count grows from 8 to 128+. -fn raise_dispute_budget_for_milestone_count(count: u32) -> (u64, u64) { - let env = env_without_snapshot(); +#[test] +fn test_tax_withholding_deductions_rejects_invalid_state_and_inputs() { + let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let mut amounts = vec![&env]; - for _ in 0..count { - amounts.push_back(1_i128); - } - let total: i128 = count as i128; + assert_eq!( + client.try_tax_withholding_deductions(&0_u32, &1_u32), + Err(Ok(Error::NotInitialized)) + ); - escrow.initialize( + client.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, &token_contract_id, &604800, - &amounts, + &vec![&env, 1_000_i128], + ); + assert_eq!( + client.try_tax_withholding_deductions(&0_u32, &1_u32), + Err(Ok(Error::NotFunded)) ); - token_admin.mint(&client_addr, &total); - escrow.fund(&client_addr); - // Dispute the last milestone so any accidental linear scan over the - // earlier entries would show up in the measured cost. - let target_index = count - 1; + let (_, _, _, _, _, _, funded_client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + assert_eq!( + funded_client.try_tax_withholding_deductions(&1_u32, &1_u32), + Err(Ok(Error::InvalidMilestone)) + ); + assert_eq!( + funded_client.try_tax_withholding_deductions(&0_u32, &10_001_u32), + Err(Ok(Error::InvalidRatio)) + ); +} - let mut budget = env.cost_estimate().budget(); - budget.reset_default(); +#[test] +fn test_tax_withholding_deductions_terminal_milestone_fails_without_event() { + let env = Env::default(); + env.mock_all_auths(); - escrow.raise_dispute(&client_addr, &target_index); + let (client_addr, freelancer_addr, _, _, _, _, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.mark_delivered(&freelancer_addr, &0_u32); + client.approve_milestone(&client_addr, &0_u32); - let budget = env.cost_estimate().budget(); - (budget.cpu_instruction_cost(), budget.memory_bytes_cost()) + let result = client.try_tax_withholding_deductions(&0_u32, &2_500_u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + let tax_topic: Val = symbol_short!("taxwith").into_val(&env); + assert!(!env.events().all().iter().any(|event| { + event + .1 + .get(0) + .map(|topic| topic.get_payload() == tax_topic.get_payload()) + .unwrap_or(false) + })); } #[test] -fn test_raise_dispute_gas_is_constant_for_many_milestones() { - let (cpu_8, memory_8) = raise_dispute_budget_for_milestone_count(8); - let (cpu_128, memory_128) = raise_dispute_budget_for_milestone_count(128); +fn test_multisig_transfer_admin_before_initialize_fails() { + let env = Env::default(); + env.mock_all_auths(); - assert!(cpu_8 > 0); - assert!(cpu_128 > 0); - assert!( - cpu_128 < cpu_8.saturating_mul(2), - "raise_dispute cost must not scale with milestone count: cpu {} -> {}", - cpu_8, - cpu_128 - ); + let admin_addr = Address::generate(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - // Memory cost includes host storage-footprint accounting that isn't a - // pure function of raise_dispute's own algorithm, so it isn't perfectly - // flat like the CPU count above. What matters for the audit is that it - // stays far below what a genuine O(n) scan over the milestone set would - // cost: milestone count grew 16x (8 -> 128), so a linear scan would show - // ~16x memory growth too. We assert well under half of that. - assert!(memory_8 > 0); - assert!(memory_128 > 0); - assert!( - memory_128 < memory_8.saturating_mul(6), - "raise_dispute memory must not scale linearly with milestone count: memory {} -> {}", - memory_8, - memory_128 - ); + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::NotInitialized))); } -// ============================================================================ -// multisig_approval — comprehensive unit test suite (Issue #184, #166) -// ============================================================================ +#[test] +fn test_multisig_transfer_admin_unauthorized_fails() { + let env = Env::default(); + env.mock_all_auths(); -/// Helper: register and initialise escrow (admin present) without multisig setup. -fn setup_escrow_for_multisig(env: &Env) -> (MilestoneEscrowClient<'_>, Address) { - let admin = Address::generate(env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(env, &contract_id); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let bad_actor = Address::generate(&env); - let token_id = env - .register_stellar_asset_contract_v2(admin.clone()) - .address(); - let dummy_client = Address::generate(env); - let dummy_freelancer = Address::generate(env); - let dummy_arbiter = Address::generate(env); - let amounts = vec![env, 1_000_i128]; + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&bad_actor, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::Unauthorized))); - client.initialize( - &admin, - &dummy_client, - &dummy_freelancer, - &dummy_arbiter, - &token_id, - &604800, - &amounts, - ); + let client_addr = Address::generate(&env); + let result = client.try_multisig_transfer_admin(&client_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::Unauthorized))); - (client, admin) + let _ = admin_addr; } -/// Helper: register a fresh contract, fund it, and initialise multisig with -/// three signers and a threshold of 2. `multisig_approve` guards against a -/// zero contract balance, so this helper funds the escrow (unlike -/// `setup_escrow_for_multisig`, which intentionally leaves it unfunded for -/// `multisig_approval_init`-only tests) before setting up signers. -fn setup_multisig(env: &Env, threshold: u32) -> (MilestoneEscrowClient<'_>, Address, Vec
) { - let admin = Address::generate(env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(env, &contract_id); - - let token_id = env - .register_stellar_asset_contract_v2(admin.clone()) - .address(); - let token_admin = token::StellarAssetClient::new(env, &token_id); - let dummy_client = Address::generate(env); - let dummy_freelancer = Address::generate(env); - let dummy_arbiter = Address::generate(env); - let amounts = vec![env, 1_000_i128]; +#[test] +fn test_multisig_transfer_admin_zero_total_amount_fails() { + let env = Env::default(); + env.mock_all_auths(); - client.initialize( - &admin, - &dummy_client, - &dummy_freelancer, - &dummy_arbiter, - &token_id, - &604800, - &amounts, - ); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - token_admin.mint(&dummy_client, &1_000_i128); - client.fund(&dummy_client); + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &0_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} - let signer1 = Address::generate(env); - let signer2 = Address::generate(env); - let signer3 = Address::generate(env); - let signers = vec![env, signer1.clone(), signer2.clone(), signer3.clone()]; +#[test] +fn test_multisig_transfer_admin_negative_total_amount_fails() { + let env = Env::default(); + env.mock_all_auths(); - client.multisig_approval_init(&admin, &signers, &threshold); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - (client, admin, signers) + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &(-1_i128), &ratios); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Initialisation: a valid multisig setup with 3 signers and threshold 2 -/// must succeed and store the configuration. #[test] -fn test_multisig_approval_init_succeeds() { +fn test_multisig_transfer_admin_empty_ratios_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, _signers) = setup_multisig(&env, 2); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let state = client.try_is_multisig_approved(&0u32).unwrap().unwrap(); - assert!(!state.approved); - assert_eq!(state.approvals, 0); - assert_eq!(state.threshold, 2); + let ratios = soroban_sdk::Vec::new(&env); + let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); } -/// Initialisation: a second call to `multisig_approval_init` must be rejected -/// with `AlreadyInitialized`. #[test] -fn test_multisig_approval_init_duplicate_fails() { +fn test_multisig_transfer_admin_too_many_ratios_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, admin, _signers) = setup_multisig(&env, 2); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let extra = Address::generate(&env); - let new_signers = vec![&env, extra]; - let result = client.try_multisig_approval_init(&admin, &new_signers, &1u32); - assert_eq!(result, Err(Ok(Error::AlreadyInitialized))); + let mut ratios = vec![&env]; + for _ in 0..256u32 { + ratios.push_back(1_i128); + } + let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); + + let mut ratios_ok = vec![&env]; + for _ in 0..255u32 { + ratios_ok.push_back(1_i128); + } + let allocs = client.multisig_transfer_admin(&admin_addr, &255_i128, &ratios_ok); + let mut total = 0_i128; + for i in 0..allocs.len() { + total += allocs.get(i).unwrap(); + } + assert_eq!(total, 255); } -/// Initialisation: zero signers must be rejected. #[test] -fn test_multisig_approval_init_zero_signers_fails() { - let env = env_without_snapshot(); +fn test_multisig_transfer_admin_negative_single_ratio_fails() { + let env = Env::default(); env.mock_all_auths(); - let (client, admin) = setup_escrow_for_multisig(&env); - let empty: Vec
= Vec::new(&env); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let result = client.try_multisig_approval_init(&admin, &empty, &1u32); - assert_eq!(result, Err(Ok(Error::MultiSigNoSigners))); + let ratios = vec![&env, 1_i128, -1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); + + let ratios_first = vec![&env, -5_i128, 1_i128]; + let result_first = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios_first); + assert_eq!(result_first, Err(Ok(Error::InvalidRatio))); } -/// Initialisation: threshold of 0 must be rejected. #[test] -fn test_multisig_approval_init_zero_threshold_fails() { - let env = env_without_snapshot(); +fn test_multisig_transfer_admin_ratio_sum_overflow_fails() { + let env = Env::default(); env.mock_all_auths(); - let (client, admin) = setup_escrow_for_multisig(&env); - let signer = Address::generate(&env); - let signers = vec![&env, signer]; + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let result = client.try_multisig_approval_init(&admin, &signers, &0u32); - assert_eq!(result, Err(Ok(Error::MultiSigInvalidThreshold))); + let ratios = vec![&env, i128::MAX, 1_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); } -/// Initialisation: threshold exceeding signer count must be rejected. #[test] -fn test_multisig_approval_init_threshold_exceeds_signers_fails() { - let env = env_without_snapshot(); +fn test_multisig_transfer_admin_all_zero_ratios_fails() { + let env = Env::default(); env.mock_all_auths(); - let (client, admin) = setup_escrow_for_multisig(&env); - let signer1 = Address::generate(&env); - let signer2 = Address::generate(&env); - let signers = vec![&env, signer1, signer2]; + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let result = client.try_multisig_approval_init(&admin, &signers, &3u32); - assert_eq!(result, Err(Ok(Error::MultiSigInvalidThreshold))); + let ratios = vec![&env, 0_i128, 0_i128, 0_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); } -/// Initialisation: more than 32 signers must be rejected. #[test] -fn test_multisig_approval_init_too_many_signers_fails() { - let env = env_without_snapshot(); +fn test_multisig_transfer_admin_single_ratio_succeeds() { + let env = Env::default(); env.mock_all_auths(); - let (client, admin) = setup_escrow_for_multisig(&env); - let mut signers = vec![&env]; - for _ in 0..33 { - signers.push_back(Address::generate(&env)); - } + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let result = client.try_multisig_approval_init(&admin, &signers, &1u32); - assert_eq!(result, Err(Ok(Error::MultiSigTooManySigners))); + let ratios = vec![&env, 1_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &42_i128, &ratios); + assert_eq!(allocations.len(), 1); + assert_eq!(allocations.get(0).unwrap(), 42); } -/// Initialisation: duplicate signer addresses must be rejected. #[test] -fn test_multisig_approval_init_duplicate_signer_fails() { - let env = env_without_snapshot(); +fn test_multisig_transfer_admin_some_zero_ratios_succeeds() { + let env = Env::default(); env.mock_all_auths(); - let (client, admin) = setup_escrow_for_multisig(&env); - let signer = Address::generate(&env); - let signers = vec![&env, signer.clone(), signer]; + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let result = client.try_multisig_approval_init(&admin, &signers, &2u32); - assert_eq!(result, Err(Ok(Error::MultiSigDuplicateSigner))); + let ratios = vec![&env, 0_i128, 1_i128, 0_i128, 3_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + assert_eq!(allocations.len(), 4); + assert_eq!(allocations.get(0).unwrap(), 0); + assert_eq!(allocations.get(2).unwrap(), 0); + let mut total = 0_i128; + for i in 0..allocations.len() { + total += allocations.get(i).unwrap(); + } + assert_eq!(total, 100); } -/// Approval flow: single signer approves, threshold (2) not yet reached. #[test] -fn test_multisig_approval_partial_approval() { +fn test_multisig_transfer_admin_large_weighted_mul_overflow_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - - let signer1 = signers.get(0).unwrap(); - let state = client - .try_multisig_approve(&signer1, &1u32) - .unwrap() - .unwrap(); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - assert!(!state.approved); - assert_eq!(state.approvals, 1); - assert_eq!(state.threshold, 2); + let ratios = vec![&env, i128::MAX]; + let result = client.try_multisig_transfer_admin(&admin_addr, &i128::MAX, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Approval flow: two signers approve, threshold reached. #[test] -fn test_multisig_approval_reaches_threshold() { +fn test_multisig_transfer_admin_equal_ratios_two_party() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - - let signer1 = signers.get(0).unwrap(); - let signer2 = signers.get(1).unwrap(); - - let _ = client.multisig_approve(&signer1, &2u32); - let state = client - .try_multisig_approve(&signer2, &2u32) - .unwrap() - .unwrap(); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - assert!(state.approved); - assert_eq!(state.approvals, 2); - assert_eq!(state.threshold, 2); + let ratios = vec![&env, 1_i128, 1_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &101_i128, &ratios); + assert_eq!(allocations.len(), 2); + let mut total = 0_i128; + for i in 0..allocations.len() { + total += allocations.get(i).unwrap(); + } + assert_eq!(total, 101); + let a = allocations.get(0).unwrap(); + let b = allocations.get(1).unwrap(); + assert!((a - b).abs() <= 1); } -/// Approval flow: all three signers approve, threshold exceeded. #[test] -fn test_multisig_approval_exceeds_threshold() { +fn test_multisig_transfer_admin_disparate_ratios() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - - let signer1 = signers.get(0).unwrap(); - let signer2 = signers.get(1).unwrap(); - let signer3 = signers.get(2).unwrap(); - - let _ = client.multisig_approve(&signer1, &3u32); - let _ = client.multisig_approve(&signer2, &3u32); - let state = client - .try_multisig_approve(&signer3, &3u32) - .unwrap() - .unwrap(); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - assert!(state.approved); - assert_eq!(state.approvals, 3); - assert_eq!(state.bitmap.count_ones(), 3); + let ratios = vec![&env, 7_i128, 1_i128, 2_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &100_i128, &ratios); + let mut total = 0_i128; + for i in 0..allocations.len() { + total += allocations.get(i).unwrap(); + } + assert_eq!(total, 100); + assert_eq!( + allocations.get(0).unwrap() + allocations.get(1).unwrap() + allocations.get(2).unwrap(), + 100 + ); } -/// Approval flow: idempotent — same signer approves twice, still counts as one. #[test] -fn test_multisig_approval_idempotent() { +fn test_multisig_transfer_admin_one_amount_one_ratio() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - - let signer1 = signers.get(0).unwrap(); - let _ = client.multisig_approve(&signer1, &4u32); - let state = client - .try_multisig_approve(&signer1, &4u32) - .unwrap() - .unwrap(); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - assert!(!state.approved); - assert_eq!(state.approvals, 1); + let ratios = vec![&env, 5_i128, 5_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &1_i128, &ratios); + assert_eq!(allocations.len(), 2); + let mut total = 0_i128; + for i in 0..allocations.len() { + total += allocations.get(i).unwrap(); + } + assert_eq!(total, 1); } -/// Auth: unregistered signer cannot approve. #[test] -fn test_multisig_approval_unauthorized_signer_fails() { +fn test_multisig_transfer_admin_freelancer_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, _signers) = setup_multisig(&env, 2); + let (_, _, freelancer_addr, _, _, _, client) = setup_multisig_env(&env); - let impostor = Address::generate(&env); - let result = client.try_multisig_approve(&impostor, &5u32); + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&freelancer_addr, &100_i128, &ratios); assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Auth: require_auth fails when no auth provided. #[test] -fn test_multisig_approval_no_auth_fails() { +fn test_multisig_transfer_admin_client_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); + let (_, client_addr, _, _, _, _, client) = setup_multisig_env(&env); - let signer1 = signers.get(0).unwrap(); - env.set_auths(&[]); - let result = client.try_multisig_approve(&signer1, &6u32); - assert!(result.is_err()); - assert!(matches!(result, Err(Err(_)))); + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&client_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Query: is_multisig_approved returns correct state without mutation. #[test] -fn test_is_multisig_approved_query() { +fn test_multisig_transfer_admin_arbiter_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 3); - - let signer1 = signers.get(0).unwrap(); - let signer2 = signers.get(1).unwrap(); - let signer3 = signers.get(2).unwrap(); - - let state0 = client.try_is_multisig_approved(&7u32).unwrap().unwrap(); - assert!(!state0.approved); - assert_eq!(state0.approvals, 0); - - let _ = client.multisig_approve(&signer1, &7u32); - let state1 = client.try_is_multisig_approved(&7u32).unwrap().unwrap(); - assert!(!state1.approved); - assert_eq!(state1.approvals, 1); + let (_, _, _, arbiter_addr, _, _, client) = setup_multisig_env(&env); - let _ = client.multisig_approve(&signer2, &7u32); - let _ = client.multisig_approve(&signer3, &7u32); - let state2 = client.try_is_multisig_approved(&7u32).unwrap().unwrap(); - assert!(state2.approved); - assert_eq!(state2.approvals, 3); + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&arbiter_addr, &100_i128, &ratios); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Isolation: proposals have independent bitmaps. #[test] -fn test_multisig_approval_proposal_isolation() { +fn test_multisig_transfer_admin_ratio_at_capacity_succeeds() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - - let signer1 = signers.get(0).unwrap(); - let _ = client.multisig_approve(&signer1, &10u32); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - let state = client.try_is_multisig_approved(&20u32).unwrap().unwrap(); - assert!(!state.approved); - assert_eq!(state.approvals, 0); + let mut ratios = vec![&env]; + for _ in 0..255u32 { + ratios.push_back(1_i128); + } + let result = client.multisig_transfer_admin(&admin_addr, &255_i128, &ratios); + assert_eq!(result.len(), 255); + let mut total = 0_i128; + for i in 0..result.len() { + total += result.get(i).unwrap(); + } + assert_eq!(total, 255); } -/// Boundary guard: multisig_approve must be blocked when the escrow holds -/// a zero token balance — there is nothing at stake for signers to approve -/// against. +// ============================================================================ +// raise_dispute — comprehensive boundary / edge-case test suite (Issue #183) +// ============================================================================ +// +// These tests verify that raise_dispute enforces strict state machine +// transitions, rejects unauthorised callers, and handles negative inputs +// gracefully. + +/// Boundary guard — a milestone carrying a zero amount has nothing to +/// arbitrate, so raise_dispute must reject it with InvalidAmount. #[test] -fn test_multisig_approve_blocked_when_contract_balance_is_zero() { +fn test_raise_dispute_zero_amount_milestone_fails() { let env = Env::default(); env.mock_all_auths(); - // Deliberately unfunded: `setup_escrow_for_multisig` initialises the job - // but never calls `fund`. - let (client, admin) = setup_escrow_for_multisig(&env); - let signer1 = Address::generate(&env); - let signer2 = Address::generate(&env); - let signers = vec![&env, signer1.clone(), signer2.clone()]; - client.multisig_approval_init(&admin, &signers, &2u32); + let (client_addr, _, _, _, _, contract_id, client) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = client.try_multisig_approve(&signer1, &1u32); - assert_eq!(result, Err(Ok(Error::MultiSigEmptyBalance))); + // Corrupt the milestone amount to 0. + env.as_contract(&contract_id, || { + let mut milestone: Milestone = env + .storage() + .persistent() + .get(&DataKey::Milestone(0u32)) + .unwrap(); + milestone.amount = 0; + env.storage() + .persistent() + .set(&DataKey::Milestone(0u32), &milestone); + }); + + let result = client.try_raise_dispute(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Event: multisig_approve emits a structured `MultiSigApprovedEvent` on a -/// successful call, reflecting the signer, proposal, and updated approval -/// state so downstream indexers can track progress without polling storage. +/// State machine test 1 — raise_dispute on Released milestone must fail. #[test] -fn test_multisig_approve_emits_structured_event() { +fn test_raise_dispute_on_released_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - let signer1 = signers.get(0).unwrap(); + let (client_addr, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_approve(&signer1, &42u32); + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.approve_milestone(&client_addr, &0u32); - let topic: Symbol = symbol_short!("msigappr"); - let topic_val: Val = topic.into_val(&env); - let mut matched = 0u32; - for event in env.events().all().iter() { - if let Some(t) = event.1.get(0) { - if t.get_payload() == topic_val.get_payload() { - matched += 1; - assert_eq!(event.1.len(), 1); - assert_eq!( - MultiSigApprovedEvent::from_val(&env, &event.2), - MultiSigApprovedEvent { - proposal_id: 42, - signer: signer1.clone(), - approvals: 1, - threshold: 2, - approved: false, - bitmap: 1, - } - ); - } - } - } - assert_eq!(matched, 1); + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Admin: unauthorised caller cannot initialise multisig. +/// State machine test 2 — raise_dispute on Disputed milestone must fail. #[test] -fn test_multisig_approval_init_unauthorized_fails() { +fn test_raise_dispute_on_disputed_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, _signers) = setup_multisig(&env, 2); + let (client_addr, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let impostor = Address::generate(&env); - let new_signers = vec![&env, impostor.clone()]; - let result = client.try_multisig_approval_init(&impostor, &new_signers, &1u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); -} + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.raise_dispute(&client_addr, &0u32); -// ============================================================================ -// milestone_time_extensions — ratio-split precision test suite (#218) -// ============================================================================ + let result = escrow.try_raise_dispute(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} -/// Precision test 1 — EXACT HALF (odd amount, rounds to nearest): -/// 101 split at exactly 1/2 elapsed must give first=51, second=50. -/// Verifies round-nearest rather than floor: 101 * 1 / 2 = 50.5 → 51. -/// first + second must equal 101 exactly (no value lost). +/// State machine test 3 — raise_dispute on Refunded milestone must fail. #[test] -fn test_milestone_time_extensions_half_rounds_nearest() { +fn test_raise_dispute_on_refunded_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let split = client.milestone_time_extensions(&101_i128, &1_i128, &2_i128); - assert_eq!(split.first, 51); - assert_eq!(split.second, 50); - assert_eq!(split.first + split.second, 101); + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.raise_dispute(&client_addr, &0u32); + escrow.resolve_dispute(&arbiter_addr, &0u32, &false); + + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Precision test 2 — FULL ELAPSED (numerator == denominator): -/// When elapsed == total the freelancer receives the full amount. -/// first=amount, second=0, total preserved. +/// Auth test — unauthorised caller (arbiter) must be rejected. #[test] -fn test_milestone_time_extensions_full_elapsed_gives_full_amount() { +fn test_raise_dispute_arbiter_is_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (_client_addr, _freelancer_addr, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let split = client.milestone_time_extensions(&10_000_i128, &500_i128, &500_i128); - assert_eq!(split.first, 10_000); - assert_eq!(split.second, 0); - assert_eq!(split.first + split.second, 10_000); + let result = escrow.try_raise_dispute(&arbiter_addr, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Precision test 3 — ZERO ELAPSED (numerator == 0): -/// When no time has elapsed the freelancer receives nothing. -/// first=0, second=amount, total preserved. +/// Negative input — raise_dispute with a zero contract address fails. #[test] -fn test_milestone_time_extensions_zero_elapsed_gives_nothing_to_freelancer() { +fn test_raise_dispute_zero_contract_address_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (_, _freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let split = client.milestone_time_extensions(&10_000_i128, &0_i128, &500_i128); - assert_eq!(split.first, 0); - assert_eq!(split.second, 10_000); - assert_eq!(split.first + split.second, 10_000); + let zero_contract = Address::from_str( + &env, + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + ); + + let result = escrow.try_raise_dispute(&zero_contract, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); } -/// Boundary guard — ZERO AMOUNT: -/// A zero escrow balance means there is nothing to distribute. -/// milestone_time_extensions must reject this with Error::InvalidAmount. +/// Negative input — raise_dispute before the escrow is funded fails. #[test] -fn test_milestone_time_extensions_zero_amount_fails() { +fn test_raise_dispute_before_funded_fails() { let env = Env::default(); env.mock_all_auths(); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.try_milestone_time_extensions(&0_i128, &1_i128, &3_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 1_000_i128]; + escrow.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::NotFunded))); } -/// Precision test 5 — LARGE PRIME AMOUNT, ARBITRARY RATIO: -/// 999_983 (prime) split 3/7 — verifies no value is created or destroyed. -/// first = round_nearest(999_983 × 3 / 7) = round(428_564.14…) = 428_564 -/// second = 999_983 − 428_564 = 571_419 +/// Happy path — client can raise a dispute from PartiallyReleased status. #[test] -fn test_milestone_time_extensions_large_prime_total_preserved() { +fn test_raise_dispute_from_partially_released_succeeds() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (client_addr, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 5_000_i128]); - let amount = 999_983_i128; - let split = client.milestone_time_extensions(&amount, &3_i128, &7_i128); - assert_eq!( - split.first + split.second, - amount, - "total must be preserved" + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.approve_partial(&client_addr, &0u32, &2_000_i128); + + escrow.raise_dispute(&client_addr, &0u32); + + let job = escrow.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Disputed ); - // round_nearest(999983 * 3 / 7) = (2999949 + 3) / 7 = 2999952 / 7 = 428564 - assert_eq!(split.first, 428_564); - assert_eq!(split.second, 571_419); } -/// Precision test 6 — SINGLE STROOP AMOUNT: -/// 1 stroop split at 1/3 elapsed: round_nearest(1 × 1 / 3) = (1 + 1) / 3 = 0 -/// → first=0, second=1. Verifies single-unit floor behaviour is correct. +/// Auth test — raise_dispute without auth must fail at host level. #[test] -fn test_milestone_time_extensions_one_stroop_rounds_down() { +fn test_raise_dispute_no_auth_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let split = client.milestone_time_extensions(&1_i128, &1_i128, &3_i128); - assert_eq!(split.first + split.second, 1); - // round_nearest(1 * 1 / 3) = (1 + 1) / 3 = 0 (integer floor of 0.666) - assert_eq!(split.first, 0); - assert_eq!(split.second, 1); + env.set_auths(&[]); + + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert!(result.is_err()); + assert!(matches!(result, Err(Err(_)))); } -/// Precision test 7 — MANY SMALL SPLITS PRESERVE TOTAL: -/// Split 1_000_000 into 7 equal parts using the ratio n/7 for n=1..7. -/// Each consecutive split must share a boundary with the previous one so -/// that the union covers exactly 1_000_000 with no gaps. -#[test] -fn test_milestone_time_extensions_sequential_splits_cover_total() { - let env = Env::default(); +/// Gas-scaling audit: raise_dispute reads/writes a single keyed milestone +/// entry (`DataKey::Milestone(index)`), not a scan over the job's full +/// milestone list, so its cost must stay roughly flat as the milestone +/// count grows from 8 to 128+. +fn raise_dispute_budget_for_milestone_count(count: u32) -> (u64, u64) { + let env = env_without_snapshot(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let amount = 1_000_000_i128; - let parts: u32 = 7; - let mut prev_first = 0_i128; + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - for n in 1..=parts { - let split = client.milestone_time_extensions(&amount, &(n as i128), &(parts as i128)); - // Each split must sum to the original amount. - assert_eq!(split.first + split.second, amount, "n={} total mismatch", n); - // first is monotonically non-decreasing as n increases. - assert!( - split.first >= prev_first, - "n={} first={} not >= prev={}", - n, - split.first, - prev_first - ); - prev_first = split.first; + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + + let mut amounts = vec![&env]; + for _ in 0..count { + amounts.push_back(1_i128); } + let total: i128 = count as i128; - // At n == parts the freelancer receives the full amount. - assert_eq!(prev_first, amount); -} + escrow.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + token_admin.mint(&client_addr, &total); + escrow.fund(&client_addr); -/// Boundary guard — NEGATIVE AMOUNT: -/// A negative escrow amount is invalid and must return Error::InvalidAmount. -#[test] -fn test_milestone_time_extensions_negative_amount_fails() { - let env = Env::default(); - env.mock_all_auths(); + // Dispute the last milestone so any accidental linear scan over the + // earlier entries would show up in the measured cost. + let target_index = count - 1; - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let mut budget = env.cost_estimate().budget(); + budget.reset_default(); - let result = client.try_milestone_time_extensions(&-1_i128, &1_i128, &10_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + escrow.raise_dispute(&client_addr, &target_index); + + let budget = env.cost_estimate().budget(); + (budget.cpu_instruction_cost(), budget.memory_bytes_cost()) } -/// Boundary guard — ZERO TOTAL SECONDS: -/// A total window of 0 seconds is division-by-zero; must return Error::InvalidRatio. #[test] -fn test_milestone_time_extensions_zero_total_seconds_fails() { - let env = Env::default(); - env.mock_all_auths(); +fn test_raise_dispute_gas_is_constant_for_many_milestones() { + let (cpu_8, memory_8) = raise_dispute_budget_for_milestone_count(8); + let (cpu_128, memory_128) = raise_dispute_budget_for_milestone_count(128); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + assert!(cpu_8 > 0); + assert!(cpu_128 > 0); + assert!( + cpu_128 < cpu_8.saturating_mul(2), + "raise_dispute cost must not scale with milestone count: cpu {} -> {}", + cpu_8, + cpu_128 + ); - let result = client.try_milestone_time_extensions(&1_000_i128, &0_i128, &0_i128); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + // Memory cost includes host storage-footprint accounting that isn't a + // pure function of raise_dispute's own algorithm, so it isn't perfectly + // flat like the CPU count above. What matters for the audit is that it + // stays far below what a genuine O(n) scan over the milestone set would + // cost: milestone count grew 16x (8 -> 128), so a linear scan would show + // ~16x memory growth too. We assert well under half of that. + assert!(memory_8 > 0); + assert!(memory_128 > 0); + assert!( + memory_128 < memory_8.saturating_mul(6), + "raise_dispute memory must not scale linearly with milestone count: memory {} -> {}", + memory_8, + memory_128 + ); } -/// Boundary guard — ELAPSED > TOTAL: -/// Elapsed time cannot exceed the total window; must return Error::InvalidRatio. -#[test] -fn test_milestone_time_extensions_elapsed_exceeds_total_fails() { - let env = Env::default(); - env.mock_all_auths(); +// ============================================================================ +// multisig_approval — comprehensive unit test suite (Issue #184, #166) +// ============================================================================ +/// Helper: register and initialise escrow (admin present) without multisig setup. +fn setup_escrow_for_multisig(env: &Env) -> (MilestoneEscrowClient<'_>, Address) { + let admin = Address::generate(env); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(env, &contract_id); - let result = client.try_milestone_time_extensions(&1_000_i128, &11_i128, &10_i128); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); -} + let token_id = env + .register_stellar_asset_contract_v2(admin.clone()) + .address(); + let dummy_client = Address::generate(env); + let dummy_freelancer = Address::generate(env); + let dummy_arbiter = Address::generate(env); + let amounts = vec![env, 1_000_i128]; -/// Boundary guard — NEGATIVE ELAPSED: -/// Negative elapsed seconds are nonsensical; must return Error::InvalidRatio. -#[test] -fn test_milestone_time_extensions_negative_elapsed_fails() { - let env = Env::default(); - env.mock_all_auths(); + client.initialize( + &admin, + &dummy_client, + &dummy_freelancer, + &dummy_arbiter, + &token_id, + &604800, + &amounts, + ); + (client, admin) +} + +/// Helper: register a fresh contract, fund it, and initialise multisig with +/// three signers and a threshold of 2. `multisig_approve` guards against a +/// zero contract balance, so this helper funds the escrow (unlike +/// `setup_escrow_for_multisig`, which intentionally leaves it unfunded for +/// `multisig_approval_init`-only tests) before setting up signers. +fn setup_multisig(env: &Env, threshold: u32) -> (MilestoneEscrowClient<'_>, Address, Vec
) { + let admin = Address::generate(env); let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let client = MilestoneEscrowClient::new(env, &contract_id); - let result = client.try_milestone_time_extensions(&1_000_i128, &-1_i128, &10_i128); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + let token_id = env + .register_stellar_asset_contract_v2(admin.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(env, &token_id); + let dummy_client = Address::generate(env); + let dummy_freelancer = Address::generate(env); + let dummy_arbiter = Address::generate(env); + let amounts = vec![env, 1_000_i128]; + + client.initialize( + &admin, + &dummy_client, + &dummy_freelancer, + &dummy_arbiter, + &token_id, + &604800, + &amounts, + ); + + token_admin.mint(&dummy_client, &1_000_i128); + client.fund(&dummy_client); + + let signer1 = Address::generate(env); + let signer2 = Address::generate(env); + let signer3 = Address::generate(env); + let signers = vec![env, signer1.clone(), signer2.clone(), signer3.clone()]; + + client.multisig_approval_init(&admin, &signers, &threshold); + + (client, admin, signers) } -/// Boundary guard — NEGATIVE TOTAL SECONDS: -/// A negative total window is invalid; must return Error::InvalidRatio. +/// Initialisation: a valid multisig setup with 3 signers and threshold 2 +/// must succeed and store the configuration. #[test] -fn test_milestone_time_extensions_negative_total_seconds_fails() { +fn test_multisig_approval_init_succeeds() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (client, _admin, _signers) = setup_multisig(&env, 2); - let result = client.try_milestone_time_extensions(&1_000_i128, &5_i128, &-10_i128); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + let state = client.try_is_multisig_approved(&0u32).unwrap().unwrap(); + assert!(!state.approved); + assert_eq!(state.approvals, 0); + assert_eq!(state.threshold, 2); } -/// Overflow guard — AMOUNT * ELAPSED overflows i128: -/// i128::MAX × i128::MAX overflows in checked_mul; must return Error::InvalidAmount. +/// Initialisation: a second call to `multisig_approval_init` must be rejected +/// with `AlreadyInitialized` (the illegal source state for this one-time +/// setup function), and no storage entry is mutated by the rejected call. #[test] -fn test_milestone_time_extensions_overflow_fails() { +fn test_multisig_approval_init_duplicate_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let result = client.try_milestone_time_extensions(&i128::MAX, &i128::MAX, &i128::MAX); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); -} + let (client, admin, _signers) = setup_multisig(&env, 2); -// ============================================================================ -// dispute_arbitration_split — validation test suite (#186) -// ============================================================================ + let extra = Address::generate(&env); + let new_signers = vec![&env, extra.clone()]; + let result = client.try_multisig_approval_init(&admin, &new_signers, &1u32); + assert_eq!(result, Err(Ok(Error::AlreadyInitialized))); -/// Happy path — 50/50 split: freelancer_bps=5000, total=10_000. -/// freelancer_payout=5_000, client_refund=5_000, bps echo correct. + // No storage entry was mutated: the original threshold (2, not the + // attempted 1) is still in effect. + let state = client.try_is_multisig_approved(&0u32).unwrap().unwrap(); + assert_eq!(state.threshold, 2); + + // The new signer from the rejected call was never written either. + let approve_result = client.try_multisig_approve(&extra, &0u32); + assert_eq!(approve_result, Err(Ok(Error::Unauthorized))); +} + +/// Initialisation: zero signers must be rejected. #[test] -fn test_dispute_arbitration_split_50_50() { - let env = Env::default(); +fn test_multisig_approval_init_zero_signers_fails() { + let env = env_without_snapshot(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.dispute_arbitration_split(&10_000_i128, &5_000u32); - assert_eq!(result.freelancer_payout, 5_000); - assert_eq!(result.client_refund, 5_000); - assert_eq!(result.freelancer_payout_bps, 5_000); - assert_eq!(result.client_refund_bps, 5_000); - assert_eq!(result.freelancer_payout + result.client_refund, 10_000); + let (client, admin) = setup_escrow_for_multisig(&env); + let empty: Vec
= Vec::new(&env); + + let result = client.try_multisig_approval_init(&admin, &empty, &1u32); + assert_eq!(result, Err(Ok(Error::MultiSigNoSigners))); } -/// Full release — freelancer_bps=10_000: freelancer gets everything. +/// Initialisation: threshold of 0 must be rejected. #[test] -fn test_dispute_arbitration_split_full_freelancer() { - let env = Env::default(); +fn test_multisig_approval_init_zero_threshold_fails() { + let env = env_without_snapshot(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.dispute_arbitration_split(&50_000_i128, &10_000u32); - assert_eq!(result.freelancer_payout, 50_000); - assert_eq!(result.client_refund, 0); - assert_eq!(result.freelancer_payout_bps, 10_000); - assert_eq!(result.client_refund_bps, 0); + let (client, admin) = setup_escrow_for_multisig(&env); + let signer = Address::generate(&env); + let signers = vec![&env, signer]; + + let result = client.try_multisig_approval_init(&admin, &signers, &0u32); + assert_eq!(result, Err(Ok(Error::MultiSigInvalidThreshold))); } -/// Full refund — freelancer_bps=0: client gets everything back. +/// Initialisation: threshold exceeding signer count must be rejected. #[test] -fn test_dispute_arbitration_split_full_client_refund() { - let env = Env::default(); +fn test_multisig_approval_init_threshold_exceeds_signers_fails() { + let env = env_without_snapshot(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.dispute_arbitration_split(&50_000_i128, &0u32); - assert_eq!(result.freelancer_payout, 0); - assert_eq!(result.client_refund, 50_000); - assert_eq!(result.freelancer_payout_bps, 0); - assert_eq!(result.client_refund_bps, 10_000); + let (client, admin) = setup_escrow_for_multisig(&env); + let signer1 = Address::generate(&env); + let signer2 = Address::generate(&env); + let signers = vec![&env, signer1, signer2]; + + let result = client.try_multisig_approval_init(&admin, &signers, &3u32); + assert_eq!(result, Err(Ok(Error::MultiSigInvalidThreshold))); } -/// Round-nearest: odd amount 101 at 5000 bps → round_nearest(101 × 5000/10000) -/// = round_nearest(50.5) = 51 freelancer, 50 client. +/// Initialisation: more than 32 signers must be rejected. #[test] -fn test_dispute_arbitration_split_rounding_nearest() { - let env = Env::default(); +fn test_multisig_approval_init_too_many_signers_fails() { + let env = env_without_snapshot(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.dispute_arbitration_split(&101_i128, &5_000u32); - assert_eq!( - result.freelancer_payout + result.client_refund, - 101, - "total preserved" - ); - assert_eq!(result.freelancer_payout, 51); - assert_eq!(result.client_refund, 50); + let (client, admin) = setup_escrow_for_multisig(&env); + let mut signers = vec![&env]; + for _ in 0..33 { + signers.push_back(Address::generate(&env)); + } + + let result = client.try_multisig_approval_init(&admin, &signers, &1u32); + assert_eq!(result, Err(Ok(Error::MultiSigTooManySigners))); } -/// Zero amount — both shares must be zero, no error. +/// Initialisation: duplicate signer addresses must be rejected. #[test] -fn test_dispute_arbitration_split_zero_amount() { - let env = Env::default(); +fn test_multisig_approval_init_duplicate_signer_fails() { + let env = env_without_snapshot(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.dispute_arbitration_split(&0_i128, &3_000u32); - assert_eq!(result.freelancer_payout, 0); - assert_eq!(result.client_refund, 0); + let (client, admin) = setup_escrow_for_multisig(&env); + let signer = Address::generate(&env); + let signers = vec![&env, signer.clone(), signer]; + + let result = client.try_multisig_approval_init(&admin, &signers, &2u32); + assert_eq!(result, Err(Ok(Error::MultiSigDuplicateSigner))); } -/// Invalid ratio — bps > 10_000 must return Error::InvalidRatio. +/// Approval flow: single signer approves, threshold (2) not yet reached. #[test] -fn test_dispute_arbitration_split_bps_exceeds_max_fails() { +fn test_multisig_approval_partial_approval() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.try_dispute_arbitration_split(&10_000_i128, &10_001u32); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + let (client, _admin, signers) = setup_multisig(&env, 2); + + let signer1 = signers.get(0).unwrap(); + let state = client + .try_multisig_approve(&signer1, &1u32) + .unwrap() + .unwrap(); + + assert!(!state.approved); + assert_eq!(state.approvals, 1); + assert_eq!(state.threshold, 2); } -/// Invalid amount — negative total must return Error::InvalidAmount. +/// Approval flow: two signers approve, threshold reached. #[test] -fn test_dispute_arbitration_split_negative_amount_fails() { +fn test_multisig_approval_reaches_threshold() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.try_dispute_arbitration_split(&-1_i128, &5_000u32); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let (client, _admin, signers) = setup_multisig(&env, 2); + + let signer1 = signers.get(0).unwrap(); + let signer2 = signers.get(1).unwrap(); + + let _ = client.multisig_approve(&signer1, &2u32); + let state = client + .try_multisig_approve(&signer2, &2u32) + .unwrap() + .unwrap(); + + assert!(state.approved); + assert_eq!(state.approvals, 2); + assert_eq!(state.threshold, 2); } -/// Overflow guard — i128::MAX with non-zero bps overflows intermediate -/// multiplication; must return Error::InvalidAmount, not panic. +/// Approval flow: all three signers approve, threshold exceeded. #[test] -fn test_dispute_arbitration_split_overflow_fails() { +fn test_multisig_approval_exceeds_threshold() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.try_dispute_arbitration_split(&i128::MAX, &5_001u32); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let (client, _admin, signers) = setup_multisig(&env, 2); + + let signer1 = signers.get(0).unwrap(); + let signer2 = signers.get(1).unwrap(); + let signer3 = signers.get(2).unwrap(); + + let _ = client.multisig_approve(&signer1, &3u32); + let _ = client.multisig_approve(&signer2, &3u32); + let state = client + .try_multisig_approve(&signer3, &3u32) + .unwrap() + .unwrap(); + + assert!(state.approved); + assert_eq!(state.approvals, 3); + assert_eq!(state.bitmap.count_ones(), 3); } -/// Total preservation — arbitrary split must always sum to total_amount. +/// Approval flow: idempotent — same signer approves twice, still counts as one. #[test] -fn test_dispute_arbitration_split_total_always_preserved() { +fn test_multisig_approval_idempotent() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let amount = 999_983_i128; // prime - for bps in [0u32, 1, 999, 3_333, 5_000, 7_777, 9_999, 10_000] { - let result = client.dispute_arbitration_split(&amount, &bps); - assert_eq!( - result.freelancer_payout + result.client_refund, - amount, - "total not preserved at bps={}", - bps - ); - assert_eq!( - result.freelancer_payout_bps + result.client_refund_bps, - 10_000, - "bps echo sum != 10_000 at bps={}", - bps - ); - } + let (client, _admin, signers) = setup_multisig(&env, 2); + + let signer1 = signers.get(0).unwrap(); + let _ = client.multisig_approve(&signer1, &4u32); + let state = client + .try_multisig_approve(&signer1, &4u32) + .unwrap() + .unwrap(); + + assert!(!state.approved); + assert_eq!(state.approvals, 1); } -/// Exact 1 bps on 10_000 total: round_nearest(10_000 × 1 / 10_000) = 1. +/// Auth: unregistered signer cannot approve. #[test] -fn test_dispute_arbitration_split_one_bps() { +fn test_multisig_approval_unauthorized_signer_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = client.dispute_arbitration_split(&10_000_i128, &1u32); - assert_eq!(result.freelancer_payout, 1); - assert_eq!(result.client_refund, 9_999); -} + let (client, _admin, _signers) = setup_multisig(&env, 2); -// ============================================================================ -// resolve_dispute — overflow/boundary protection tests (#185) -// ============================================================================ + let impostor = Address::generate(&env); + let result = client.try_multisig_approve(&impostor, &5u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); +} -/// Boundary: resolve_dispute with amount=1 (minimum valid) releases correctly. +/// Auth: require_auth fails when no auth provided. #[test] -fn test_resolve_dispute_minimum_amount_releases_ok() { +fn test_multisig_approval_no_auth_fails() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_i128]); - escrow.raise_dispute(&client_addr, &0u32); - // Arbiter resolves to freelancer — 1 stroop, no overflow - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert!(result.is_ok(), "1-stroop resolve should succeed"); + + let (client, _admin, signers) = setup_multisig(&env, 2); + + let signer1 = signers.get(0).unwrap(); + env.set_auths(&[]); + let result = client.try_multisig_approve(&signer1, &6u32); + assert!(result.is_err()); + assert!(matches!(result, Err(Err(_)))); } -/// Boundary: resolve_dispute returns to client (refund path) with min amount. +/// Query: is_multisig_approved returns correct state without mutation. #[test] -fn test_resolve_dispute_minimum_amount_refunds_ok() { +fn test_is_multisig_approved_query() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_i128]); - escrow.raise_dispute(&client_addr, &0u32); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &false); - assert!(result.is_ok(), "1-stroop refund should succeed"); -} -/// Boundary: resolve_dispute with a large amount succeeds because all arithmetic -/// inside uses checked_* operations and never panics. -#[test] -fn test_resolve_dispute_large_amount_no_overflow() { - let env = Env::default(); - env.mock_all_auths(); - let large: i128 = 1_000_000_000_000_i128; - let (client_addr, _, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, large]); - escrow.raise_dispute(&client_addr, &0u32); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert!(result.is_ok(), "large-amount resolve must not panic"); + let (client, _admin, signers) = setup_multisig(&env, 3); + + let signer1 = signers.get(0).unwrap(); + let signer2 = signers.get(1).unwrap(); + let signer3 = signers.get(2).unwrap(); + + let state0 = client.try_is_multisig_approved(&7u32).unwrap().unwrap(); + assert!(!state0.approved); + assert_eq!(state0.approvals, 0); + + let _ = client.multisig_approve(&signer1, &7u32); + let state1 = client.try_is_multisig_approved(&7u32).unwrap().unwrap(); + assert!(!state1.approved); + assert_eq!(state1.approvals, 1); + + let _ = client.multisig_approve(&signer2, &7u32); + let _ = client.multisig_approve(&signer3, &7u32); + let state2 = client.try_is_multisig_approved(&7u32).unwrap().unwrap(); + assert!(state2.approved); + assert_eq!(state2.approvals, 3); } -/// Boundary: fully released milestone cannot be disputed. -/// raise_dispute returns InvalidStatus before resolve_dispute is ever reached. +/// Isolation: proposals have independent bitmaps. #[test] -fn test_resolve_dispute_zero_remaining_fails_gracefully() { +fn test_multisig_approval_proposal_isolation() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.approve_milestone(&client_addr, &0u32); - // Milestone is Released — raise_dispute must return InvalidStatus - let result = escrow.try_raise_dispute(&client_addr, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + let (client, _admin, signers) = setup_multisig(&env, 2); + + let signer1 = signers.get(0).unwrap(); + let _ = client.multisig_approve(&signer1, &10u32); + + let state = client.try_is_multisig_approved(&20u32).unwrap().unwrap(); + assert!(!state.approved); + assert_eq!(state.approvals, 0); } -/// InvalidStatus (not a panic), confirming state machine is overflow-safe. + +/// Boundary guard: multisig_approve must be blocked when the escrow holds +/// a zero token balance — there is nothing at stake for signers to approve +/// against. #[test] -fn test_resolve_dispute_already_resolved_fails_gracefully() { +fn test_multisig_approve_blocked_when_contract_balance_is_zero() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - escrow.raise_dispute(&client_addr, &0u32); - escrow.resolve_dispute(&arbiter_addr, &0u32, &true); - // Second resolve on same milestone must fail gracefully - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + + // Deliberately unfunded: `setup_escrow_for_multisig` initialises the job + // but never calls `fund`. + let (client, admin) = setup_escrow_for_multisig(&env); + let signer1 = Address::generate(&env); + let signer2 = Address::generate(&env); + let signers = vec![&env, signer1.clone(), signer2.clone()]; + client.multisig_approval_init(&admin, &signers, &2u32); + + let result = client.try_multisig_approve(&signer1, &1u32); + assert_eq!(result, Err(Ok(Error::MultiSigEmptyBalance))); } -/// Overflow guard: multiple milestones resolved in sequence — cumulative -/// checked_add in resolve_dispute never panics on valid amounts. +/// Event: multisig_approve emits a structured `MultiSigApprovedEvent` on a +/// successful call, reflecting the signer, proposal, and updated approval +/// state so downstream indexers can track progress without polling storage. #[test] -fn test_resolve_dispute_multiple_milestones_sequential_ok() { +fn test_multisig_approve_emits_structured_event() { let env = Env::default(); env.mock_all_auths(); - let amounts = vec![&env, 100_i128, 200_i128, 300_i128]; - let (client_addr, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - for i in 0u32..3 { - escrow.raise_dispute(&client_addr, &i); - let ok = escrow.try_resolve_dispute(&arbiter_addr, &i, &(i % 2 == 0)); - assert!(ok.is_ok(), "milestone {} resolve failed", i); + + let (client, _admin, signers) = setup_multisig(&env, 2); + let signer1 = signers.get(0).unwrap(); + + client.multisig_approve(&signer1, &42u32); + + let topic: Symbol = symbol_short!("msigappr"); + let topic_val: Val = topic.into_val(&env); + let mut matched = 0u32; + for event in env.events().all().iter() { + if let Some(t) = event.1.get(0) { + if t.get_payload() == topic_val.get_payload() { + matched += 1; + assert_eq!(event.1.len(), 1); + assert_eq!( + MultiSigApprovedEvent::from_val(&env, &event.2), + MultiSigApprovedEvent { + proposal_id: 42, + signer: signer1.clone(), + approvals: 1, + threshold: 2, + approved: false, + bitmap: 1, + } + ); + } + } } + assert_eq!(matched, 1); } -/// Overflow guard: checked_sub on released_amount — amount exactly equal to -/// released_amount must fail with InvalidAmount not panic. +/// Auth guard: an unregistered signer is rejected with `Unauthorized` and +/// leaves the proposal's approval bitmap untouched. #[test] -fn test_resolve_dispute_released_amount_equals_amount_fails() { - // This test verifies the remaining = amount.checked_sub(released_amount) - // path when remaining would be 0 (InvalidAmount guard). - // We achieve this by trying to resolve a non-disputed milestone, which - // hits InvalidStatus first — the relevant code path is protected. +fn test_multisig_approve_unauthorized_fails() { let env = Env::default(); env.mock_all_auths(); - let (_, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 500_i128]); - // Do not raise dispute — resolve_dispute on Pending must fail gracefully - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); -} -// ============================================================================ -// multisig_approval — multi-party authentication tests (#180) -// ============================================================================ + let (client, _admin, _signers) = setup_multisig(&env, 2); -/// Single signer in a 2-of-2 regime must NOT reach threshold. + let impostor = Address::generate(&env); + let result = client.try_multisig_approve(&impostor, &50u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + + let state = client.is_multisig_approved(&50u32); + assert!(!state.approved); + assert_eq!(state.approvals, 0); + assert_eq!(state.bitmap, 0); +} + +/// Precondition guard: an illegal source state (zero contract balance) is +/// rejected with `MultiSigEmptyBalance` and leaves the proposal's approval +/// bitmap untouched. #[test] -fn test_multisig_single_sig_does_not_reach_2_of_2() { +fn test_multisig_approve_illegal_source_state_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - // Only signer 0 approves - let state = client.multisig_approve(&signers.get(0).unwrap(), &1u32); - assert!(!state.approved, "single sig must not satisfy 2-of-2"); - assert_eq!(state.approvals, 1); - assert_eq!(state.threshold, 2); + + // Deliberately unfunded: setup_escrow_for_multisig initialises the job + // but never calls `fund`, so the contract token balance is zero. + let (client, admin) = setup_escrow_for_multisig(&env); + let signer1 = Address::generate(&env); + let signer2 = Address::generate(&env); + let signers = vec![&env, signer1.clone(), signer2.clone()]; + client.multisig_approval_init(&admin, &signers, &2u32); + + let result = client.try_multisig_approve(&signer1, &51u32); + assert_eq!(result, Err(Ok(Error::MultiSigEmptyBalance))); + + let state = client.is_multisig_approved(&51u32); + assert!(!state.approved); + assert_eq!(state.approvals, 0); + assert_eq!(state.bitmap, 0); } -/// Single signer in a 3-of-3 regime must NOT reach threshold. +/// Admin: unauthorised caller cannot initialise multisig, and no storage +/// entry is mutated by the rejected attempt (the original signer set and +/// threshold from `setup_multisig` remain in effect). #[test] -fn test_multisig_single_sig_does_not_reach_3_of_3() { +fn test_multisig_approval_init_unauthorized_fails() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 3); - let state = client.multisig_approve(&signers.get(0).unwrap(), &2u32); - assert!(!state.approved, "single sig must not satisfy 3-of-3"); - assert_eq!(state.approvals, 1); - assert_eq!(state.threshold, 3); + + let (client, _admin, _signers) = setup_multisig(&env, 2); + + let impostor = Address::generate(&env); + let new_signers = vec![&env, impostor.clone()]; + let result = client.try_multisig_approval_init(&impostor, &new_signers, &1u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + + // No storage entry was mutated: the original threshold (2, not the + // impostor's attempted 1) is still in effect. + let state = client.try_is_multisig_approved(&0u32).unwrap().unwrap(); + assert_eq!(state.threshold, 2); + + // The impostor was never written into the signer set either: they + // cannot approve as if they were a registered signer. + let approve_result = client.try_multisig_approve(&impostor, &0u32); + assert_eq!(approve_result, Err(Ok(Error::Unauthorized))); } -/// Both parties must sign in a 2-of-2 regime: after both approve it is satisfied. +// ============================================================================ +// milestone_time_extensions — ratio-split precision test suite (#218) +// ============================================================================ + +/// Precision test 1 — EXACT HALF (odd amount, rounds to nearest): +/// 101 split at exactly 1/2 elapsed must give first=51, second=50. +/// Verifies round-nearest rather than floor: 101 * 1 / 2 = 50.5 → 51. +/// first + second must equal 101 exactly (no value lost). #[test] -fn test_multisig_both_sigs_satisfy_2_of_2() { +fn test_milestone_time_extensions_half_rounds_nearest() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - client.multisig_approve(&signers.get(0).unwrap(), &3u32); - let state = client.multisig_approve(&signers.get(1).unwrap(), &3u32); - assert!(state.approved, "both sigs must satisfy 2-of-2"); - assert_eq!(state.approvals, 2); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let split = client.milestone_time_extensions(&101_i128, &1_i128, &2_i128); + assert_eq!(split.first, 51); + assert_eq!(split.second, 50); + assert_eq!(split.first + split.second, 101); } -/// A signer not in the registered list is rejected with Unauthorized. +/// Precision test 2 — FULL ELAPSED (numerator == denominator): +/// When elapsed == total the freelancer receives the full amount. +/// first=amount, second=0, total preserved. #[test] -fn test_multisig_unregistered_signer_rejected() { +fn test_milestone_time_extensions_full_elapsed_gives_full_amount() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, _signers) = setup_multisig(&env, 2); - let impostor = Address::generate(&env); - let result = client.try_multisig_approve(&impostor, &4u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let split = client.milestone_time_extensions(&10_000_i128, &500_i128, &500_i128); + assert_eq!(split.first, 10_000); + assert_eq!(split.second, 0); + assert_eq!(split.first + split.second, 10_000); } -/// Duplicate approval from the same signer is idempotent — count stays at 1. +/// Precision test 3 — ZERO ELAPSED (numerator == 0): +/// When no time has elapsed the freelancer receives nothing. +/// first=0, second=amount, total preserved. #[test] -fn test_multisig_duplicate_approval_is_idempotent() { +fn test_milestone_time_extensions_zero_elapsed_gives_nothing_to_freelancer() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - let signer = signers.get(0).unwrap(); - client.multisig_approve(&signer, &5u32); - let state = client.multisig_approve(&signer, &5u32); // second call same signer - assert!( - !state.approved, - "duplicate from single signer must not satisfy 2-of-2" - ); - assert_eq!( - state.approvals, 1, - "bitmap must not double-count same signer" - ); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let split = client.milestone_time_extensions(&10_000_i128, &0_i128, &500_i128); + assert_eq!(split.first, 0); + assert_eq!(split.second, 10_000); + assert_eq!(split.first + split.second, 10_000); } -/// 2-of-3: threshold satisfied after exactly 2 distinct signers approve. +/// Boundary guard — ZERO AMOUNT: +/// A zero escrow balance means there is nothing to distribute. +/// milestone_time_extensions must reject this with Error::InvalidAmount. #[test] -fn test_multisig_2_of_3_satisfied_by_two_signers() { +fn test_milestone_time_extensions_zero_amount_fails() { let env = Env::default(); env.mock_all_auths(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let admin = Address::generate(&env); - let dummy_client = Address::generate(&env); + let result = client.try_milestone_time_extensions(&0_i128, &1_i128, &3_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} + +/// Precision test 5 — LARGE PRIME AMOUNT, ARBITRARY RATIO: +/// 999_983 (prime) split 3/7 — verifies no value is created or destroyed. +/// first = round_nearest(999_983 × 3 / 7) = round(428_564.14…) = 428_564 +/// second = 999_983 − 428_564 = 571_419 +#[test] +fn test_milestone_time_extensions_large_prime_total_preserved() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amount = 999_983_i128; + let split = client.milestone_time_extensions(&amount, &3_i128, &7_i128); + assert_eq!( + split.first + split.second, + amount, + "total must be preserved" + ); + // round_nearest(999983 * 3 / 7) = (2999949 + 3) / 7 = 2999952 / 7 = 428564 + assert_eq!(split.first, 428_564); + assert_eq!(split.second, 571_419); +} + +/// Precision test 6 — SINGLE STROOP AMOUNT: +/// 1 stroop split at 1/3 elapsed: round_nearest(1 × 1 / 3) = (1 + 1) / 3 = 0 +/// → first=0, second=1. Verifies single-unit floor behaviour is correct. +#[test] +fn test_milestone_time_extensions_one_stroop_rounds_down() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let split = client.milestone_time_extensions(&1_i128, &1_i128, &3_i128); + assert_eq!(split.first + split.second, 1); + // round_nearest(1 * 1 / 3) = (1 + 1) / 3 = 0 (integer floor of 0.666) + assert_eq!(split.first, 0); + assert_eq!(split.second, 1); +} + +/// Precision test 7 — MANY SMALL SPLITS PRESERVE TOTAL: +/// Split 1_000_000 into 7 equal parts using the ratio n/7 for n=1..7. +/// Each consecutive split must share a boundary with the previous one so +/// that the union covers exactly 1_000_000 with no gaps. +#[test] +fn test_milestone_time_extensions_sequential_splits_cover_total() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amount = 1_000_000_i128; + let parts: u32 = 7; + let mut prev_first = 0_i128; + + for n in 1..=parts { + let split = client.milestone_time_extensions(&amount, &(n as i128), &(parts as i128)); + // Each split must sum to the original amount. + assert_eq!(split.first + split.second, amount, "n={} total mismatch", n); + // first is monotonically non-decreasing as n increases. + assert!( + split.first >= prev_first, + "n={} first={} not >= prev={}", + n, + split.first, + prev_first + ); + prev_first = split.first; + } + + // At n == parts the freelancer receives the full amount. + assert_eq!(prev_first, amount); +} + +/// Boundary guard — NEGATIVE AMOUNT: +/// A negative escrow amount is invalid and must return Error::InvalidAmount. +#[test] +fn test_milestone_time_extensions_negative_amount_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_milestone_time_extensions(&-1_i128, &1_i128, &10_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} + +/// Boundary guard — ZERO TOTAL SECONDS: +/// A total window of 0 seconds is division-by-zero; must return Error::InvalidRatio. +#[test] +fn test_milestone_time_extensions_zero_total_seconds_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_milestone_time_extensions(&1_000_i128, &0_i128, &0_i128); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); +} + +/// Boundary guard — ELAPSED > TOTAL: +/// Elapsed time cannot exceed the total window; must return Error::InvalidRatio. +#[test] +fn test_milestone_time_extensions_elapsed_exceeds_total_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_milestone_time_extensions(&1_000_i128, &11_i128, &10_i128); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); +} + +/// Boundary guard — NEGATIVE ELAPSED: +/// Negative elapsed seconds are nonsensical; must return Error::InvalidRatio. +#[test] +fn test_milestone_time_extensions_negative_elapsed_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_milestone_time_extensions(&1_000_i128, &-1_i128, &10_i128); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); +} + +/// Boundary guard — NEGATIVE TOTAL SECONDS: +/// A negative total window is invalid; must return Error::InvalidRatio. +#[test] +fn test_milestone_time_extensions_negative_total_seconds_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_milestone_time_extensions(&1_000_i128, &5_i128, &-10_i128); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); +} + +/// Overflow guard — AMOUNT * ELAPSED overflows i128: +/// i128::MAX × i128::MAX overflows in checked_mul; must return Error::InvalidAmount. +#[test] +fn test_milestone_time_extensions_overflow_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_milestone_time_extensions(&i128::MAX, &i128::MAX, &i128::MAX); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} + +// ============================================================================ +// dispute_arbitration_split — validation test suite (#186) +// ============================================================================ + +/// Happy path — 50/50 split: freelancer_bps=5000, total=10_000. +/// freelancer_payout=5_000, client_refund=5_000, bps echo correct. +#[test] +fn test_dispute_arbitration_split_50_50() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.dispute_arbitration_split(&10_000_i128, &5_000u32); + assert_eq!(result.freelancer_payout, 5_000); + assert_eq!(result.client_refund, 5_000); + assert_eq!(result.freelancer_payout_bps, 5_000); + assert_eq!(result.client_refund_bps, 5_000); + assert_eq!(result.freelancer_payout + result.client_refund, 10_000); +} + +/// Full release — freelancer_bps=10_000: freelancer gets everything. +#[test] +fn test_dispute_arbitration_split_full_freelancer() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.dispute_arbitration_split(&50_000_i128, &10_000u32); + assert_eq!(result.freelancer_payout, 50_000); + assert_eq!(result.client_refund, 0); + assert_eq!(result.freelancer_payout_bps, 10_000); + assert_eq!(result.client_refund_bps, 0); +} + +/// Full refund — freelancer_bps=0: client gets everything back. +#[test] +fn test_dispute_arbitration_split_full_client_refund() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.dispute_arbitration_split(&50_000_i128, &0u32); + assert_eq!(result.freelancer_payout, 0); + assert_eq!(result.client_refund, 50_000); + assert_eq!(result.freelancer_payout_bps, 0); + assert_eq!(result.client_refund_bps, 10_000); +} + +/// Round-nearest: odd amount 101 at 5000 bps → round_nearest(101 × 5000/10000) +/// = round_nearest(50.5) = 51 freelancer, 50 client. +#[test] +fn test_dispute_arbitration_split_rounding_nearest() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.dispute_arbitration_split(&101_i128, &5_000u32); + assert_eq!( + result.freelancer_payout + result.client_refund, + 101, + "total preserved" + ); + assert_eq!(result.freelancer_payout, 51); + assert_eq!(result.client_refund, 50); +} + +/// Zero amount — both shares must be zero, no error. +#[test] +fn test_dispute_arbitration_split_zero_amount() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.dispute_arbitration_split(&0_i128, &3_000u32); + assert_eq!(result.freelancer_payout, 0); + assert_eq!(result.client_refund, 0); +} + +/// Invalid ratio — bps > 10_000 must return Error::InvalidRatio. +#[test] +fn test_dispute_arbitration_split_bps_exceeds_max_fails() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_dispute_arbitration_split(&10_000_i128, &10_001u32); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); +} + +/// Invalid amount — negative total must return Error::InvalidAmount. +#[test] +fn test_dispute_arbitration_split_negative_amount_fails() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_dispute_arbitration_split(&-1_i128, &5_000u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} + +/// Overflow guard — i128::MAX with non-zero bps overflows intermediate +/// multiplication; must return Error::InvalidAmount, not panic. +#[test] +fn test_dispute_arbitration_split_overflow_fails() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.try_dispute_arbitration_split(&i128::MAX, &5_001u32); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} + +/// Total preservation — arbitrary split must always sum to total_amount. +#[test] +fn test_dispute_arbitration_split_total_always_preserved() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amount = 999_983_i128; // prime + for bps in [0u32, 1, 999, 3_333, 5_000, 7_777, 9_999, 10_000] { + let result = client.dispute_arbitration_split(&amount, &bps); + assert_eq!( + result.freelancer_payout + result.client_refund, + amount, + "total not preserved at bps={}", + bps + ); + assert_eq!( + result.freelancer_payout_bps + result.client_refund_bps, + 10_000, + "bps echo sum != 10_000 at bps={}", + bps + ); + } +} + +/// Exact 1 bps on 10_000 total: round_nearest(10_000 × 1 / 10_000) = 1. +#[test] +fn test_dispute_arbitration_split_one_bps() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let result = client.dispute_arbitration_split(&10_000_i128, &1u32); + assert_eq!(result.freelancer_payout, 1); + assert_eq!(result.client_refund, 9_999); +} + +// ============================================================================ +// resolve_dispute — overflow/boundary protection tests (#185) +// ============================================================================ + +/// Boundary: resolve_dispute with amount=1 (minimum valid) releases correctly. +#[test] +fn test_resolve_dispute_minimum_amount_releases_ok() { + let env = Env::default(); + env.mock_all_auths(); + let (client_addr, _, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_i128]); + escrow.raise_dispute(&client_addr, &0u32); + // Arbiter resolves to freelancer — 1 stroop, no overflow + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert!(result.is_ok(), "1-stroop resolve should succeed"); +} + +/// Boundary: resolve_dispute returns to client (refund path) with min amount. +#[test] +fn test_resolve_dispute_minimum_amount_refunds_ok() { + let env = Env::default(); + env.mock_all_auths(); + let (client_addr, _, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_i128]); + escrow.raise_dispute(&client_addr, &0u32); + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &false); + assert!(result.is_ok(), "1-stroop refund should succeed"); +} + +/// Boundary: resolve_dispute with a large amount succeeds because all arithmetic +/// inside uses checked_* operations and never panics. +#[test] +fn test_resolve_dispute_large_amount_no_overflow() { + let env = Env::default(); + env.mock_all_auths(); + let large: i128 = 1_000_000_000_000_i128; + let (client_addr, _, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, large]); + escrow.raise_dispute(&client_addr, &0u32); + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert!(result.is_ok(), "large-amount resolve must not panic"); +} + +/// Boundary: fully released milestone cannot be disputed. +/// raise_dispute returns InvalidStatus before resolve_dispute is ever reached. +#[test] +fn test_resolve_dispute_zero_remaining_fails_gracefully() { + let env = Env::default(); + env.mock_all_auths(); + let (client_addr, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.approve_milestone(&client_addr, &0u32); + // Milestone is Released — raise_dispute must return InvalidStatus + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} +/// InvalidStatus (not a panic), confirming state machine is overflow-safe. +#[test] +fn test_resolve_dispute_already_resolved_fails_gracefully() { + let env = Env::default(); + env.mock_all_auths(); + let (client_addr, _, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + escrow.raise_dispute(&client_addr, &0u32); + escrow.resolve_dispute(&arbiter_addr, &0u32, &true); + // Second resolve on same milestone must fail gracefully + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} + +/// Overflow guard: multiple milestones resolved in sequence — cumulative +/// checked_add in resolve_dispute never panics on valid amounts. +#[test] +fn test_resolve_dispute_multiple_milestones_sequential_ok() { + let env = Env::default(); + env.mock_all_auths(); + let amounts = vec![&env, 100_i128, 200_i128, 300_i128]; + let (client_addr, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, amounts); + for i in 0u32..3 { + escrow.raise_dispute(&client_addr, &i); + let ok = escrow.try_resolve_dispute(&arbiter_addr, &i, &(i % 2 == 0)); + assert!(ok.is_ok(), "milestone {} resolve failed", i); + } +} + +/// Overflow guard: checked_sub on released_amount — amount exactly equal to +/// released_amount must fail with InvalidAmount not panic. +#[test] +fn test_resolve_dispute_released_amount_equals_amount_fails() { + // This test verifies the remaining = amount.checked_sub(released_amount) + // path when remaining would be 0 (InvalidAmount guard). + // We achieve this by trying to resolve a non-disputed milestone, which + // hits InvalidStatus first — the relevant code path is protected. + let env = Env::default(); + env.mock_all_auths(); + let (_, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 500_i128]); + // Do not raise dispute — resolve_dispute on Pending must fail gracefully + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); +} + +// ============================================================================ +// multisig_approval — multi-party authentication tests (#180) +// ============================================================================ + +/// Single signer in a 2-of-2 regime must NOT reach threshold. +#[test] +fn test_multisig_single_sig_does_not_reach_2_of_2() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, signers) = setup_multisig(&env, 2); + // Only signer 0 approves + let state = client.multisig_approve(&signers.get(0).unwrap(), &1u32); + assert!(!state.approved, "single sig must not satisfy 2-of-2"); + assert_eq!(state.approvals, 1); + assert_eq!(state.threshold, 2); +} + +/// Single signer in a 3-of-3 regime must NOT reach threshold. +#[test] +fn test_multisig_single_sig_does_not_reach_3_of_3() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, signers) = setup_multisig(&env, 3); + let state = client.multisig_approve(&signers.get(0).unwrap(), &2u32); + assert!(!state.approved, "single sig must not satisfy 3-of-3"); + assert_eq!(state.approvals, 1); + assert_eq!(state.threshold, 3); +} + +/// Both parties must sign in a 2-of-2 regime: after both approve it is satisfied. +#[test] +fn test_multisig_both_sigs_satisfy_2_of_2() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, signers) = setup_multisig(&env, 2); + client.multisig_approve(&signers.get(0).unwrap(), &3u32); + let state = client.multisig_approve(&signers.get(1).unwrap(), &3u32); + assert!(state.approved, "both sigs must satisfy 2-of-2"); + assert_eq!(state.approvals, 2); +} + +/// A signer not in the registered list is rejected with Unauthorized. +#[test] +fn test_multisig_unregistered_signer_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, _signers) = setup_multisig(&env, 2); + let impostor = Address::generate(&env); + let result = client.try_multisig_approve(&impostor, &4u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); +} + +/// Duplicate approval from the same signer is idempotent — count stays at 1. +#[test] +fn test_multisig_duplicate_approval_is_idempotent() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, signers) = setup_multisig(&env, 2); + let signer = signers.get(0).unwrap(); + client.multisig_approve(&signer, &5u32); + let state = client.multisig_approve(&signer, &5u32); // second call same signer + assert!( + !state.approved, + "duplicate from single signer must not satisfy 2-of-2" + ); + assert_eq!( + state.approvals, 1, + "bitmap must not double-count same signer" + ); +} + +/// 2-of-3: threshold satisfied after exactly 2 distinct signers approve. +#[test] +fn test_multisig_2_of_3_satisfied_by_two_signers() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let admin = Address::generate(&env); + let dummy_client = Address::generate(&env); let s1 = Address::generate(&env); let s2 = Address::generate(&env); let s3 = Address::generate(&env); let signers = vec![&env, s1.clone(), s2.clone(), s3.clone()]; - // initialize escrow then multisig - let token_id = env - .register_stellar_asset_contract_v2(admin.clone()) + // initialize escrow then multisig + let token_id = env + .register_stellar_asset_contract_v2(admin.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_id); + client.initialize( + &admin, + &dummy_client, + &Address::generate(&env), + &Address::generate(&env), + &token_id, + &86400u64, + &vec![&env, 1_000_i128], + ); + // multisig_approve guards against a zero contract balance. + token_admin.mint(&dummy_client, &1_000_i128); + client.fund(&dummy_client); + client.multisig_approval_init(&admin, &signers, &2u32); // 2-of-3 + + client.multisig_approve(&s1, &6u32); + let state = client.multisig_approve(&s2, &6u32); + assert!( + state.approved, + "2-of-3 must be satisfied after 2 distinct approvals" + ); + assert_eq!(state.approvals, 2); + assert_eq!(state.threshold, 2); +} + +/// Bitmap isolation: approval on proposal A does not affect proposal B. +#[test] +fn test_multisig_approval_isolated_per_proposal() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, signers) = setup_multisig(&env, 2); + // Approve proposal 10 with both signers + client.multisig_approve(&signers.get(0).unwrap(), &10u32); + client.multisig_approve(&signers.get(1).unwrap(), &10u32); + // Proposal 20 must still be unapproved + let state = client.is_multisig_approved(&20u32); + assert!( + !state.approved, + "proposal 20 must be unaffected by proposal 10 approvals" + ); + assert_eq!(state.approvals, 0); +} + +/// is_multisig_approved query returns correct state without side effects. +#[test] +fn test_multisig_query_no_side_effects() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _admin, signers) = setup_multisig(&env, 2); + // Query before any approval + let state_before = client.is_multisig_approved(&99u32); + assert!(!state_before.approved); + assert_eq!(state_before.approvals, 0); + // Approve once + client.multisig_approve(&signers.get(0).unwrap(), &99u32); + let state_after = client.is_multisig_approved(&99u32); + assert!(!state_after.approved); + assert_eq!(state_after.approvals, 1); +} + +/// Threshold=1 (1-of-N): single approval must immediately satisfy. +#[test] +fn test_multisig_threshold_one_satisfied_by_single_signer() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let admin = Address::generate(&env); + let dummy_client = Address::generate(&env); + let s1 = Address::generate(&env); + let s2 = Address::generate(&env); + let signers = vec![&env, s1.clone(), s2.clone()]; + + let token_id = env + .register_stellar_asset_contract_v2(admin.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_id); + client.initialize( + &admin, + &dummy_client, + &Address::generate(&env), + &Address::generate(&env), + &token_id, + &86400u64, + &vec![&env, 1_000_i128], + ); + // multisig_approve guards against a zero contract balance. + token_admin.mint(&dummy_client, &1_000_i128); + client.fund(&dummy_client); + client.multisig_approval_init(&admin, &signers, &1u32); // 1-of-2 + + let state = client.multisig_approve(&s1, &50u32); + assert!(state.approved, "1-of-2 must be satisfied by single signer"); + assert_eq!(state.approvals, 1); + assert_eq!(state.threshold, 1); +} + +// ============================================================================ +// raise_dispute — zero-address validation tests (#179) +// ============================================================================ + +/// Zero account address (G…WHF) must be rejected with InvalidAddress. +#[test] +fn test_raise_dispute_zero_account_address_fails() { + let env = Env::default(); + env.mock_all_auths(); + let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let zero_account = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); + let result = escrow.try_raise_dispute(&zero_account, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); +} + +/// Zero contract address (C…BSC4) must be rejected with InvalidAddress. +#[test] +fn test_raise_dispute_zero_contract_address_fails_comprehensive() { + let env = Env::default(); + env.mock_all_auths(); + let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let zero_contract = Address::from_str( + &env, + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + ); + let result = escrow.try_raise_dispute(&zero_contract, &0u32); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); +} + +/// Valid client address must succeed in raising a dispute (positive path). +#[test] +fn test_raise_dispute_valid_client_address_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert!(result.is_ok(), "valid client address must succeed"); +} + +/// Valid freelancer address must succeed in raising a dispute (positive path). +#[test] +fn test_raise_dispute_valid_freelancer_address_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + let (_, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let result = escrow.try_raise_dispute(&freelancer_addr, &0u32); + assert!(result.is_ok(), "valid freelancer address must succeed"); +} + +/// Arbiter address (valid but unauthorized caller) must return Unauthorized. +/// This distinguishes address validity from role authorization. +#[test] +fn test_raise_dispute_arbiter_address_unauthorized_not_invalid() { + let env = Env::default(); + env.mock_all_auths(); + let (_, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let result = escrow.try_raise_dispute(&arbiter_addr, &0u32); + // Arbiter is a valid address, but not client or freelancer → Unauthorized + assert_eq!(result, Err(Ok(Error::Unauthorized))); +} + +/// Random valid address (not a party) must return Unauthorized, not InvalidAddress. +#[test] +fn test_raise_dispute_random_valid_address_unauthorized() { + let env = Env::default(); + env.mock_all_auths(); + let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let stranger = Address::generate(&env); + let result = escrow.try_raise_dispute(&stranger, &0u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); +} + +/// Zero-address check occurs before NotFunded check: +/// passing zero account address on an unfunded escrow still returns InvalidAddress. +#[test] +fn test_raise_dispute_zero_address_before_not_funded_check() { + let env = Env::default(); + env.mock_all_auths(); + + let admin = Address::generate(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + escrow.initialize( + &admin, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &86400u64, + &vec![&env, 1_000_i128], + ); + // Escrow NOT funded + + let zero_account = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); + let result = escrow.try_raise_dispute(&zero_account, &0u32); + // InvalidAddress must be returned even though escrow is not funded + assert_eq!(result, Err(Ok(Error::InvalidAddress))); +} + +/// Both zero address variants are rejected consistently regardless of milestone index. +#[test] +fn test_raise_dispute_zero_addresses_rejected_on_any_milestone() { + let env = Env::default(); + env.mock_all_auths(); + let (_, _, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 100_i128, 200_i128, 300_i128]); + + let zero_account = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); + let zero_contract = Address::from_str( + &env, + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + ); + + for idx in 0u32..3 { + let r1 = escrow.try_raise_dispute(&zero_account, &idx); + assert_eq!( + r1, + Err(Ok(Error::InvalidAddress)), + "zero account on milestone {}", + idx + ); + let r2 = escrow.try_raise_dispute(&zero_contract, &idx); + assert_eq!( + r2, + Err(Ok(Error::InvalidAddress)), + "zero contract on milestone {}", + idx + ); + } +} +// resolve_dispute — strict state machine transition matrix (Issue #201) +// ============================================================================ +// +// Permitted source status: Disputed only. +// Valid transitions: +// Disputed → Released (release_to_freelancer = true) +// Disputed → Refunded (release_to_freelancer = false) +// Every other source status must revert with Error::InvalidStatus and must +// not mutate milestone status or transfer funds. + +/// Full transition matrix covering every MilestoneStatus as a source state. +#[test] +fn test_resolve_dispute_state_transition_matrix() { + let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_id); + let token = token::Client::new(&env, &token_contract_id); + let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); + // Seven milestones: five invalid sources + two valid Disputed paths. + token_admin.mint(&client_addr, &7_000); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![ + &env, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, + ]; client.initialize( - &admin, - &dummy_client, - &Address::generate(&env), - &Address::generate(&env), - &token_id, - &86400u64, - &vec![&env, 1_000_i128], + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + client.fund(&client_addr); + + // --- Invalid sources (must fail with InvalidStatus, status unchanged) --- + + // 0: Pending → reject + let result = client.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Pending + ); + + // 1: Delivered → reject + client.mark_delivered(&freelancer_addr, &1u32); + let result = client.try_resolve_dispute(&arbiter_addr, &1u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.get_job().milestones.get(1).unwrap().status, + MilestoneStatus::Delivered + ); + + // 2: PartiallyReleased → reject + client.mark_delivered(&freelancer_addr, &2u32); + client.approve_partial(&client_addr, &2u32, &400_i128); + let result = client.try_resolve_dispute(&arbiter_addr, &2u32, &false); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.get_job().milestones.get(2).unwrap().status, + MilestoneStatus::PartiallyReleased + ); + + // 3: Released → reject + client.mark_delivered(&freelancer_addr, &3u32); + client.approve_milestone(&client_addr, &3u32); + let result = client.try_resolve_dispute(&arbiter_addr, &3u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.get_job().milestones.get(3).unwrap().status, + MilestoneStatus::Released + ); + + // 4: Refunded → reject (settled via prior dispute resolution) + client.mark_delivered(&freelancer_addr, &4u32); + client.raise_dispute(&client_addr, &4u32); + client.resolve_dispute(&arbiter_addr, &4u32, &false); + assert_eq!( + client.get_job().milestones.get(4).unwrap().status, + MilestoneStatus::Refunded + ); + let result = client.try_resolve_dispute(&arbiter_addr, &4u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.get_job().milestones.get(4).unwrap().status, + MilestoneStatus::Refunded + ); + + // --- Valid sources --- + + // 5: Disputed → Released + client.mark_delivered(&freelancer_addr, &5u32); + client.raise_dispute(&client_addr, &5u32); + client.resolve_dispute(&arbiter_addr, &5u32, &true); + assert_eq!( + client.get_job().milestones.get(5).unwrap().status, + MilestoneStatus::Released + ); + + // Re-resolve after Released must also fail (terminal status). + let result = client.try_resolve_dispute(&arbiter_addr, &5u32, &false); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + client.get_job().milestones.get(5).unwrap().status, + MilestoneStatus::Released + ); + + // 6: Disputed → Refunded + client.mark_delivered(&freelancer_addr, &6u32); + client.raise_dispute(&freelancer_addr, &6u32); + client.resolve_dispute(&arbiter_addr, &6u32, &false); + assert_eq!( + client.get_job().milestones.get(6).unwrap().status, + MilestoneStatus::Refunded + ); + + // Invalid transitions must not have paid out milestones 0–1. + // Milestone 2 paid 400 partial; 3 released 1000; 4 refunded 1000; + // 5 released 1000; 6 refunded 1000. + assert_eq!(token.balance(&freelancer_addr), 400 + 1_000 + 1_000); + assert_eq!( + client.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Pending + ); + assert_eq!( + client.get_job().milestones.get(1).unwrap().status, + MilestoneStatus::Delivered + ); +} + +/// Invalid transition from Pending leaves balances and status untouched. +#[test] +fn test_resolve_dispute_from_pending_fails_without_side_effects() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, _, arbiter_addr, _, token_contract_id, contract_id, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let token = token::Client::new(&env, &token_contract_id); + + let client_before = token.balance(&client_addr); + let contract_before = token.balance(&contract_id); + + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + escrow.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Pending + ); + assert_eq!(token.balance(&client_addr), client_before); + assert_eq!(token.balance(&contract_id), contract_before); +} + +/// Invalid transition from Delivered returns deterministic InvalidStatus. +#[test] +fn test_resolve_dispute_from_delivered_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, freelancer_addr, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + escrow.mark_delivered(&freelancer_addr, &0u32); + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &false); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + escrow.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Delivered + ); +} + +/// Invalid transition from PartiallyReleased returns deterministic InvalidStatus. +#[test] +fn test_resolve_dispute_from_partially_released_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 2_000_i128]); + + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.approve_partial(&client_addr, &0u32, &500_i128); + + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + escrow.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::PartiallyReleased + ); +} + +/// Invalid transition from Released returns deterministic InvalidStatus. +#[test] +fn test_resolve_dispute_from_released_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.approve_milestone(&client_addr, &0u32); + + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + escrow.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Released + ); +} + +/// Invalid transition from Refunded returns deterministic InvalidStatus. +#[test] +fn test_resolve_dispute_from_refunded_fails() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.raise_dispute(&client_addr, &0u32); + escrow.resolve_dispute(&arbiter_addr, &0u32, &false); + + let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); + assert_eq!( + escrow.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Refunded + ); +} + +/// Valid: Disputed → Released preserves payout and authorization rules. +#[test] +fn test_resolve_dispute_from_disputed_to_released_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, arbiter_addr, _, token_contract_id, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let token = token::Client::new(&env, &token_contract_id); + + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.raise_dispute(&client_addr, &0u32); + escrow.resolve_dispute(&arbiter_addr, &0u32, &true); + + let job = escrow.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Released ); - // multisig_approve guards against a zero contract balance. - token_admin.mint(&dummy_client, &1_000_i128); - client.fund(&dummy_client); - client.multisig_approval_init(&admin, &signers, &2u32); // 2-of-3 + assert_eq!(job.milestones.get(0).unwrap().released_amount, 1_000); + assert_eq!(token.balance(&freelancer_addr), 1_000); +} - client.multisig_approve(&s1, &6u32); - let state = client.multisig_approve(&s2, &6u32); - assert!( - state.approved, - "2-of-3 must be satisfied after 2 distinct approvals" +/// Valid: Disputed → Refunded preserves refund payment logic. +#[test] +fn test_resolve_dispute_from_disputed_to_refunded_succeeds() { + let env = Env::default(); + env.mock_all_auths(); + + let (client_addr, freelancer_addr, arbiter_addr, _, token_contract_id, contract_id, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let token = token::Client::new(&env, &token_contract_id); + + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.raise_dispute(&client_addr, &0u32); + escrow.resolve_dispute(&arbiter_addr, &0u32, &false); + + let job = escrow.get_job(); + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Refunded ); - assert_eq!(state.approvals, 2); - assert_eq!(state.threshold, 2); + assert_eq!(token.balance(&client_addr), 1_000); + assert_eq!(token.balance(&contract_id), 0); + assert_eq!(token.balance(&freelancer_addr), 0); } -/// Bitmap isolation: approval on proposal A does not affect proposal B. +/// Authorization is preserved: non-arbiter callers are still rejected. #[test] -fn test_multisig_approval_isolated_per_proposal() { +fn test_resolve_dispute_unauthorized_still_fails_after_state_machine() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - // Approve proposal 10 with both signers - client.multisig_approve(&signers.get(0).unwrap(), &10u32); - client.multisig_approve(&signers.get(1).unwrap(), &10u32); - // Proposal 20 must still be unapproved - let state = client.is_multisig_approved(&20u32); - assert!( - !state.approved, - "proposal 20 must be unaffected by proposal 10 approvals" + + let (client_addr, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.raise_dispute(&client_addr, &0u32); + + let result = escrow.try_resolve_dispute(&client_addr, &0u32, &true); + assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert_eq!( + escrow.get_job().milestones.get(0).unwrap().status, + MilestoneStatus::Disputed ); - assert_eq!(state.approvals, 0); } -/// is_multisig_approved query returns correct state without side effects. +// ============================================================================ +// Issue #268: milestone_time_extensions event emission test +// Issue #267: escrow_interest_yield comprehensive unit test suite +// ============================================================================ + #[test] -fn test_multisig_query_no_side_effects() { +fn test_milestone_time_extensions_emits_event() { let env = Env::default(); env.mock_all_auths(); - let (client, _admin, signers) = setup_multisig(&env, 2); - // Query before any approval - let state_before = client.is_multisig_approved(&99u32); - assert!(!state_before.approved); - assert_eq!(state_before.approvals, 0); - // Approve once - client.multisig_approve(&signers.get(0).unwrap(), &99u32); - let state_after = client.is_multisig_approved(&99u32); - assert!(!state_after.approved); - assert_eq!(state_after.approvals, 1); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amount = 1_000_i128; + let elapsed = 300_i128; + let total = 600_i128; + + let split = client.milestone_time_extensions(&amount, &elapsed, &total); + assert_eq!(split.first, 500); + assert_eq!(split.second, 500); + + let events = env.events().all(); + let m_ext_topic: Symbol = symbol_short!("m_ext"); + let m_ext_topic_val: Val = m_ext_topic.into_val(&env); + + let mut found_event = false; + for e in events.iter() { + if let Some(topic) = e.1.get(0) { + if topic.get_payload() == m_ext_topic_val.get_payload() { + found_event = true; + let event_data = MilestoneTimeExtensionEvent::from_val(&env, &e.2); + assert_eq!(event_data.amount, amount); + assert_eq!(event_data.elapsed_seconds, elapsed); + assert_eq!(event_data.total_seconds, total); + assert_eq!(event_data.freelancer_share, 500); + assert_eq!(event_data.client_refund, 500); + } + } + } + assert!(found_event, "Expected m_ext event to be published"); } -/// Threshold=1 (1-of-N): single approval must immediately satisfy. #[test] -fn test_multisig_threshold_one_satisfied_by_single_signer() { +fn test_milestone_time_extensions_zero_elapsed_emits_event() { let env = Env::default(); env.mock_all_auths(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let admin = Address::generate(&env); - let dummy_client = Address::generate(&env); - let s1 = Address::generate(&env); - let s2 = Address::generate(&env); - let signers = vec![&env, s1.clone(), s2.clone()]; + let amount = 1_000_i128; + let elapsed = 0_i128; + let total = 600_i128; - let token_id = env + let split = client.milestone_time_extensions(&amount, &elapsed, &total); + assert_eq!(split.first, 0); + assert_eq!(split.second, 1_000); + + let events = env.events().all(); + let m_ext_topic: Symbol = symbol_short!("m_ext"); + let m_ext_topic_val: Val = m_ext_topic.into_val(&env); + + let mut found_event = false; + for e in events.iter() { + if let Some(topic) = e.1.get(0) { + if topic.get_payload() == m_ext_topic_val.get_payload() { + found_event = true; + let event_data = MilestoneTimeExtensionEvent::from_val(&env, &e.2); + assert_eq!(event_data.amount, amount); + assert_eq!(event_data.elapsed_seconds, elapsed); + assert_eq!(event_data.total_seconds, total); + assert_eq!(event_data.freelancer_share, 0); + assert_eq!(event_data.client_refund, 1_000); + } + } + } + assert!(found_event, "Expected m_ext event to be published"); +} + +#[test] +fn test_milestone_time_extensions_full_elapsed_emits_event() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let amount = 1_000_i128; + let elapsed = 600_i128; + let total = 600_i128; + + let split = client.milestone_time_extensions(&amount, &elapsed, &total); + assert_eq!(split.first, 1_000); + assert_eq!(split.second, 0); + + let events = env.events().all(); + let m_ext_topic: Symbol = symbol_short!("m_ext"); + let m_ext_topic_val: Val = m_ext_topic.into_val(&env); + + let mut found_event = false; + for e in events.iter() { + if let Some(topic) = e.1.get(0) { + if topic.get_payload() == m_ext_topic_val.get_payload() { + found_event = true; + let event_data = MilestoneTimeExtensionEvent::from_val(&env, &e.2); + assert_eq!(event_data.amount, amount); + assert_eq!(event_data.elapsed_seconds, elapsed); + assert_eq!(event_data.total_seconds, total); + assert_eq!(event_data.freelancer_share, 1_000); + assert_eq!(event_data.client_refund, 0); + } + } + } + assert!(found_event, "Expected m_ext event to be published"); +} + +// ── escrow_interest_yield Unit Tests (#267) ─────────────────────────────── + +fn setup_test_env(env: &Env) -> (Address, Address, Address, Address, u64) { + let admin = Address::generate(env); + let client_addr = Address::generate(env); + let freelancer_addr = Address::generate(env); + let token = env .register_stellar_asset_contract_v2(admin.clone()) .address(); - let token_admin = token::StellarAssetClient::new(&env, &token_id); - client.initialize( - &admin, - &dummy_client, - &Address::generate(&env), - &Address::generate(&env), - &token_id, - &86400u64, - &vec![&env, 1_000_i128], - ); - // multisig_approve guards against a zero contract balance. - token_admin.mint(&dummy_client, &1_000_i128); - client.fund(&dummy_client); - client.multisig_approval_init(&admin, &signers, &1u32); // 1-of-2 + let auto_release = 604800_u64; + (admin, client_addr, freelancer_addr, token, auto_release) +} + +#[test] +fn test_escrow_interest_yield_calculation_basic() { + let env = Env::default(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + // 10,000 principal, 500 bps (5%), 1 full year (31,536,000s) + let yield_amt = client.escrow_interest_yield(&10_000_i128, &500_i128, &31_536_000_i128); + assert_eq!(yield_amt, 500); +} + +#[test] +fn test_escrow_interest_yield_calculation_half_year() { + let env = Env::default(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + // 10,000 principal, 1,000 bps (10%), 6 months (15,768,000s) + let yield_amt = client.escrow_interest_yield(&10_000_i128, &1_000_i128, &15_768_000_i128); + assert_eq!(yield_amt, 500); +} + +#[test] +fn test_escrow_interest_yield_zero_principal_fails() { + let env = Env::default(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&0_i128, &500_i128, &31_536_000_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); +} + +#[test] +fn test_escrow_interest_yield_negative_principal_fails() { + let env = Env::default(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let state = client.multisig_approve(&s1, &50u32); - assert!(state.approved, "1-of-2 must be satisfied by single signer"); - assert_eq!(state.approvals, 1); - assert_eq!(state.threshold, 1); + let res = client.try_escrow_interest_yield(&-100_i128, &500_i128, &31_536_000_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); } -// ============================================================================ -// raise_dispute — zero-address validation tests (#179) -// ============================================================================ +#[test] +fn test_escrow_interest_yield_zero_rate_fails() { + let env = Env::default(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&10_000_i128, &0_i128, &31_536_000_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); +} -/// Zero account address (G…WHF) must be rejected with InvalidAddress. #[test] -fn test_raise_dispute_zero_account_address_fails() { +fn test_escrow_interest_yield_negative_rate_fails() { let env = Env::default(); - env.mock_all_auths(); - let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let zero_account = Address::from_str( - &env, - "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", - ); - let result = escrow.try_raise_dispute(&zero_account, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidAddress))); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&10_000_i128, &-10_i128, &31_536_000_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); } -/// Zero contract address (C…BSC4) must be rejected with InvalidAddress. #[test] -fn test_raise_dispute_zero_contract_address_fails_comprehensive() { +fn test_escrow_interest_yield_excessive_rate_fails() { let env = Env::default(); - env.mock_all_auths(); - let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let zero_contract = Address::from_str( - &env, - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", - ); - let result = escrow.try_raise_dispute(&zero_contract, &0u32); - assert_eq!(result, Err(Ok(Error::InvalidAddress))); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&10_000_i128, &10_001_i128, &31_536_000_i128); + assert_eq!(res, Err(Ok(Error::InvalidRatio))); } -/// Valid client address must succeed in raising a dispute (positive path). #[test] -fn test_raise_dispute_valid_client_address_succeeds() { +fn test_escrow_interest_yield_max_rate_succeeds() { let env = Env::default(); - env.mock_all_auths(); - let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = escrow.try_raise_dispute(&client_addr, &0u32); - assert!(result.is_ok(), "valid client address must succeed"); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + // 100% rate = 10,000 bps + let yield_amt = client.escrow_interest_yield(&10_000_i128, &10_000_i128, &31_536_000_i128); + assert_eq!(yield_amt, 10_000); } -/// Valid freelancer address must succeed in raising a dispute (positive path). #[test] -fn test_raise_dispute_valid_freelancer_address_succeeds() { +fn test_escrow_interest_yield_zero_duration_fails() { let env = Env::default(); - env.mock_all_auths(); - let (_, freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = escrow.try_raise_dispute(&freelancer_addr, &0u32); - assert!(result.is_ok(), "valid freelancer address must succeed"); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&10_000_i128, &500_i128, &0_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); } -/// Arbiter address (valid but unauthorized caller) must return Unauthorized. -/// This distinguishes address validity from role authorization. #[test] -fn test_raise_dispute_arbiter_address_unauthorized_not_invalid() { +fn test_escrow_interest_yield_negative_duration_fails() { let env = Env::default(); - env.mock_all_auths(); - let (_, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = escrow.try_raise_dispute(&arbiter_addr, &0u32); - // Arbiter is a valid address, but not client or freelancer → Unauthorized - assert_eq!(result, Err(Ok(Error::Unauthorized))); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&10_000_i128, &500_i128, &-100_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); } -/// Random valid address (not a party) must return Unauthorized, not InvalidAddress. #[test] -fn test_raise_dispute_random_valid_address_unauthorized() { +fn test_escrow_interest_yield_overflow_fails() { let env = Env::default(); - env.mock_all_auths(); - let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let stranger = Address::generate(&env); - let result = escrow.try_raise_dispute(&stranger, &0u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + + let res = client.try_escrow_interest_yield(&i128::MAX, &10_000_i128, &31_536_000_i128); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); + + let res_min = client.try_escrow_interest_yield(&i128::MIN, &10_000_i128, &31_536_000_i128); + assert_eq!(res_min, Err(Ok(Error::InvalidAmount))); } -/// Zero-address check occurs before NotFunded check: -/// passing zero account address on an unfunded escrow still returns InvalidAddress. #[test] -fn test_raise_dispute_zero_address_before_not_funded_check() { +fn test_escrow_interest_yield_share_config_not_initialized_initially() { let env = Env::default(); - env.mock_all_auths(); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let admin = Address::generate(&env); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin.clone()) - .address(); + let res = client.try_get_escrow_interest_yield(); + assert_eq!(res, Err(Ok(Error::NotInitialized))); +} + +#[test] +fn test_escrow_interest_yield_set_valid_config_and_get() { + let env = Env::default(); + env.mock_all_auths(); + let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); let contract_id = env.register(MilestoneEscrow, ()); - let escrow = MilestoneEscrowClient::new(&env, &contract_id); - escrow.initialize( + let client = MilestoneEscrowClient::new(&env, &contract_id); + let arbiter = Address::generate(&env); + client.initialize( &admin, &client_addr, &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &86400u64, + &arbiter, + &token, + &auto_release, &vec![&env, 1_000_i128], ); - // Escrow NOT funded - let zero_account = Address::from_str( - &env, - "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", - ); - let result = escrow.try_raise_dispute(&zero_account, &0u32); - // InvalidAddress must be returned even though escrow is not funded - assert_eq!(result, Err(Ok(Error::InvalidAddress))); + client.set_escrow_interest_yield(&admin, &5_000u32, &5_000u32); + + let config = client.get_escrow_interest_yield(); + assert_eq!(config.client_share_bps, 5_000); + assert_eq!(config.freelancer_share_bps, 5_000); + assert_eq!(config.locked, false); } -/// Both zero address variants are rejected consistently regardless of milestone index. #[test] -fn test_raise_dispute_zero_addresses_rejected_on_any_milestone() { +fn test_escrow_interest_yield_set_invalid_share_total_fails() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 100_i128, 200_i128, 300_i128]); - let zero_account = Address::from_str( - &env, - "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", - ); - let zero_contract = Address::from_str( - &env, - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + let arbiter = Address::generate(&env); + client.initialize( + &admin, + &client_addr, + &freelancer_addr, + &arbiter, + &token, + &auto_release, + &vec![&env, 1_000_i128], ); - for idx in 0u32..3 { - let r1 = escrow.try_raise_dispute(&zero_account, &idx); - assert_eq!( - r1, - Err(Ok(Error::InvalidAddress)), - "zero account on milestone {}", - idx - ); - let r2 = escrow.try_raise_dispute(&zero_contract, &idx); - assert_eq!( - r2, - Err(Ok(Error::InvalidAddress)), - "zero contract on milestone {}", - idx - ); - } + let res1 = client.try_set_escrow_interest_yield(&admin, &6_000u32, &5_000u32); + assert_eq!(res1, Err(Ok(Error::InvalidRatio))); + + let res2 = client.try_set_escrow_interest_yield(&admin, &3_000u32, &3_000u32); + assert_eq!(res2, Err(Ok(Error::InvalidRatio))); } -// resolve_dispute — strict state machine transition matrix (Issue #201) -// ============================================================================ -// -// Permitted source status: Disputed only. -// Valid transitions: -// Disputed → Released (release_to_freelancer = true) -// Disputed → Refunded (release_to_freelancer = false) -// Every other source status must revert with Error::InvalidStatus and must -// not mutate milestone status or transfer funds. -/// Full transition matrix covering every MilestoneStatus as a source state. #[test] -fn test_resolve_dispute_state_transition_matrix() { +fn test_escrow_interest_yield_lock_unlock_workflow() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env - .register_stellar_asset_contract_v2(admin_addr.clone()) - .address(); - let token = token::Client::new(&env, &token_contract_id); - let token_admin = token::StellarAssetClient::new(&env, &token_contract_id); - // Seven milestones: five invalid sources + two valid Disputed paths. - token_admin.mint(&client_addr, &7_000); + let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + let arbiter = Address::generate(&env); + client.initialize( + &admin, + &client_addr, + &freelancer_addr, + &arbiter, + &token, + &auto_release, + &vec![&env, 1_000_i128], + ); + + client.set_escrow_interest_yield(&admin, &5_000u32, &5_000u32); + assert_eq!(client.is_escrow_interest_yield_locked(), false); + + client.lock_escrow_interest_yield(&admin); + assert_eq!(client.is_escrow_interest_yield_locked(), true); + + let res = client.try_set_escrow_interest_yield(&admin, &6_000u32, &4_000u32); + assert_eq!(res, Err(Ok(Error::EscrowLocked))); + + client.unlock_escrow_interest_yield(&admin); + assert_eq!(client.is_escrow_interest_yield_locked(), false); + + client.set_escrow_interest_yield(&admin, &6_000u32, &4_000u32); + let updated = client.get_escrow_interest_yield(); + assert_eq!(updated.client_share_bps, 6_000); + assert_eq!(updated.freelancer_share_bps, 4_000); +} + +#[test] +fn test_escrow_interest_yield_unauthorized_admin_fails() { + let env = Env::default(); + env.mock_all_auths(); + let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![ - &env, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, 1_000_i128, - ]; + let arbiter = Address::generate(&env); client.initialize( - &admin_addr, + &admin, &client_addr, &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - client.fund(&client_addr); - - // --- Invalid sources (must fail with InvalidStatus, status unchanged) --- - - // 0: Pending → reject - let result = client.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - client.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Pending - ); - - // 1: Delivered → reject - client.mark_delivered(&freelancer_addr, &1u32); - let result = client.try_resolve_dispute(&arbiter_addr, &1u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - client.get_job().milestones.get(1).unwrap().status, - MilestoneStatus::Delivered + &arbiter, + &token, + &auto_release, + &vec![&env, 1_000_i128], ); - // 2: PartiallyReleased → reject - client.mark_delivered(&freelancer_addr, &2u32); - client.approve_partial(&client_addr, &2u32, &400_i128); - let result = client.try_resolve_dispute(&arbiter_addr, &2u32, &false); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - client.get_job().milestones.get(2).unwrap().status, - MilestoneStatus::PartiallyReleased - ); + let impostor = Address::generate(&env); + let res = client.try_set_escrow_interest_yield(&impostor, &5_000u32, &5_000u32); + assert_eq!(res, Err(Ok(Error::Unauthorized))); +} - // 3: Released → reject - client.mark_delivered(&freelancer_addr, &3u32); - client.approve_milestone(&client_addr, &3u32); - let result = client.try_resolve_dispute(&arbiter_addr, &3u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - client.get_job().milestones.get(3).unwrap().status, - MilestoneStatus::Released - ); +// ============================================================================ +// Zero/empty balance guards — payment_streaming_milestones (Issue #272) +// ============================================================================ - // 4: Refunded → reject (settled via prior dispute resolution) - client.mark_delivered(&freelancer_addr, &4u32); - client.raise_dispute(&client_addr, &4u32); - client.resolve_dispute(&arbiter_addr, &4u32, &false); - assert_eq!( - client.get_job().milestones.get(4).unwrap().status, - MilestoneStatus::Refunded - ); - let result = client.try_resolve_dispute(&arbiter_addr, &4u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - client.get_job().milestones.get(4).unwrap().status, - MilestoneStatus::Refunded - ); +/// Guard — ZERO TOTAL: streaming on a zero balance must fail. +#[test] +fn test_payment_streaming_milestones_zero_total_fails() { + let env = Env::default(); + env.mock_all_auths(); - // --- Valid sources --- + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - // 5: Disputed → Released - client.mark_delivered(&freelancer_addr, &5u32); - client.raise_dispute(&client_addr, &5u32); - client.resolve_dispute(&arbiter_addr, &5u32, &true); - assert_eq!( - client.get_job().milestones.get(5).unwrap().status, - MilestoneStatus::Released - ); + let result = client.try_payment_streaming_milestones(&0_i128, &1_i128, &2_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); +} - // Re-resolve after Released must also fail (terminal status). - let result = client.try_resolve_dispute(&arbiter_addr, &5u32, &false); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - client.get_job().milestones.get(5).unwrap().status, - MilestoneStatus::Released - ); +/// Guard — NEGATIVE TOTAL: negative balance is always invalid. +#[test] +fn test_payment_streaming_milestones_negative_total_fails() { + let env = Env::default(); + env.mock_all_auths(); - // 6: Disputed → Refunded - client.mark_delivered(&freelancer_addr, &6u32); - client.raise_dispute(&freelancer_addr, &6u32); - client.resolve_dispute(&arbiter_addr, &6u32, &false); - assert_eq!( - client.get_job().milestones.get(6).unwrap().status, - MilestoneStatus::Refunded - ); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - // Invalid transitions must not have paid out milestones 0–1. - // Milestone 2 paid 400 partial; 3 released 1000; 4 refunded 1000; - // 5 released 1000; 6 refunded 1000. - assert_eq!(token.balance(&freelancer_addr), 400 + 1_000 + 1_000); - assert_eq!( - client.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Pending - ); - assert_eq!( - client.get_job().milestones.get(1).unwrap().status, - MilestoneStatus::Delivered - ); + let result = client.try_payment_streaming_milestones(&-500_i128, &1_i128, &2_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Invalid transition from Pending leaves balances and status untouched. +/// Happy path — a positive total must still work correctly after the guard. #[test] -fn test_resolve_dispute_from_pending_fails_without_side_effects() { +fn test_payment_streaming_milestones_positive_total_succeeds() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, _, arbiter_addr, _, token_contract_id, contract_id, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let token = token::Client::new(&env, &token_contract_id); - - let client_before = token.balance(&client_addr); - let contract_before = token.balance(&contract_id); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - escrow.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Pending - ); - assert_eq!(token.balance(&client_addr), client_before); - assert_eq!(token.balance(&contract_id), contract_before); + // 1000 streamed at 1/4 elapsed: first=250, second=750, sum=1000 + let split = client.payment_streaming_milestones(&1_000_i128, &1_i128, &4_i128); + assert_eq!(split.first, 250); + assert_eq!(split.second, 750); + assert_eq!(split.first + split.second, 1_000); } -/// Invalid transition from Delivered returns deterministic InvalidStatus. +// ============================================================================ +// Zero/empty balance guards — milestone_time_extensions (Issue #271) +// ============================================================================ + +/// Guard — ZERO AMOUNT: distributing nothing is blocked. +/// The previous behaviour returned (0, 0); the new behaviour raises InvalidAmount. #[test] -fn test_resolve_dispute_from_delivered_fails() { +fn test_milestone_time_extensions_zero_balance_is_blocked() { let env = Env::default(); env.mock_all_auths(); - let (_, freelancer_addr, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - escrow.mark_delivered(&freelancer_addr, &0u32); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &false); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - escrow.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Delivered - ); + let result = client.try_milestone_time_extensions(&0_i128, &3_i128, &10_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Invalid transition from PartiallyReleased returns deterministic InvalidStatus. +/// Guard — NEGATIVE AMOUNT: a negative milestone balance is rejected before time checks. #[test] -fn test_resolve_dispute_from_partially_released_fails() { +fn test_milestone_time_extensions_negative_balance_is_blocked() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 2_000_i128]); - - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.approve_partial(&client_addr, &0u32, &500_i128); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - escrow.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::PartiallyReleased - ); + let result = client.try_milestone_time_extensions(&-1_000_i128, &3_i128, &10_i128); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } -/// Invalid transition from Released returns deterministic InvalidStatus. +/// Regression — a positive balance still produces the correct split and emits an event. #[test] -fn test_resolve_dispute_from_released_fails() { +fn test_milestone_time_extensions_positive_balance_succeeds_and_emits_event() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.approve_milestone(&client_addr, &0u32); + // 600 split at 1/3 elapsed: round_nearest(600 * 1 / 3) = 200 + let split = client.milestone_time_extensions(&600_i128, &1_i128, &3_i128); + assert_eq!(split.first, 200); + assert_eq!(split.second, 400); + assert_eq!(split.first + split.second, 600); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - escrow.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Released - ); + // Verify the event was published + let events = env.events().all(); + assert!(!events.is_empty(), "expected at least one event"); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); + assert_eq!(topic, Symbol::new(&env, "m_ext")); } -/// Invalid transition from Refunded returns deterministic InvalidStatus. +// ============================================================================ +// Zero/empty balance guards + event emission — multisig_transfer_admin +// (Issues #270 and #273) +// ============================================================================ + +/// Event emission — a successful multisig_transfer_admin call must emit a +/// MultiSigTransferAdminEvent with the correct fields (issue #270). #[test] -fn test_resolve_dispute_from_refunded_fails() { +fn test_multisig_transfer_admin_emits_event() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, arbiter_addr, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.raise_dispute(&client_addr, &0u32); - escrow.resolve_dispute(&arbiter_addr, &0u32, &false); + let ratios = vec![&env, 1_i128, 1_i128, 1_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &300_i128, &ratios); - let result = escrow.try_resolve_dispute(&arbiter_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); - assert_eq!( - escrow.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Refunded - ); + // Verify allocation correctness + assert_eq!(allocations.len(), 3); + let total: i128 = allocations.iter().sum(); + assert_eq!(total, 300); + + // Verify the event was published + let events = env.events().all(); + assert!(!events.is_empty(), "expected at least one event"); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); + assert_eq!(topic, Symbol::new(&env, "msigtrx")); } -/// Valid: Disputed → Released preserves payout and authorization rules. +/// Event emission — verify the event carries the correct total_amount +/// and num_parties fields. #[test] -fn test_resolve_dispute_from_disputed_to_released_succeeds() { +fn test_multisig_transfer_admin_event_fields_are_correct() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, arbiter_addr, _, token_contract_id, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let token = token::Client::new(&env, &token_contract_id); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.raise_dispute(&client_addr, &0u32); - escrow.resolve_dispute(&arbiter_addr, &0u32, &true); + let ratios = vec![&env, 3_i128, 1_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &1_000_i128, &ratios); - let job = escrow.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Released - ); - assert_eq!(job.milestones.get(0).unwrap().released_amount, 1_000); - assert_eq!(token.balance(&freelancer_addr), 1_000); + // Verify numeric allocations: 750 and 250 (3/4 and 1/4 of 1000) + assert_eq!(allocations.get(0).unwrap(), 750); + assert_eq!(allocations.get(1).unwrap(), 250); + + // Verify event topic + let events = env.events().all(); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); + assert_eq!(topic, Symbol::new(&env, "msigtrx")); } -/// Valid: Disputed → Refunded preserves refund payment logic. +/// Event emission — a single-party split still emits the event. #[test] -fn test_resolve_dispute_from_disputed_to_refunded_succeeds() { +fn test_multisig_transfer_admin_single_party_emits_event() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, arbiter_addr, _, token_contract_id, contract_id, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let token = token::Client::new(&env, &token_contract_id); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.raise_dispute(&client_addr, &0u32); - escrow.resolve_dispute(&arbiter_addr, &0u32, &false); + let ratios = vec![&env, 1_i128]; + let allocations = client.multisig_transfer_admin(&admin_addr, &500_i128, &ratios); - let job = escrow.get_job(); - assert_eq!( - job.milestones.get(0).unwrap().status, - MilestoneStatus::Refunded - ); - assert_eq!(token.balance(&client_addr), 1_000); - assert_eq!(token.balance(&contract_id), 0); - assert_eq!(token.balance(&freelancer_addr), 0); + assert_eq!(allocations.len(), 1); + assert_eq!(allocations.get(0).unwrap(), 500); + + let events = env.events().all(); + assert!(!events.is_empty()); + let last = events.last().unwrap(); + let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); + assert_eq!(topic, Symbol::new(&env, "msigtrx")); } -/// Authorization is preserved: non-arbiter callers are still rejected. +/// Guard + Event — zero total with valid ratios is blocked BEFORE any event +/// is emitted (no phantom events on failed calls). #[test] -fn test_resolve_dispute_unauthorized_still_fails_after_state_machine() { +fn test_multisig_transfer_admin_zero_total_emits_no_event() { let env = Env::default(); env.mock_all_auths(); - let (client_addr, freelancer_addr, _, _, _, _, escrow) = - setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - escrow.mark_delivered(&freelancer_addr, &0u32); - escrow.raise_dispute(&client_addr, &0u32); + let ratios = vec![&env, 1_i128, 1_i128]; + let result = client.try_multisig_transfer_admin(&admin_addr, &0_i128, &ratios); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); - let result = escrow.try_resolve_dispute(&client_addr, &0u32, &true); - assert_eq!(result, Err(Ok(Error::Unauthorized))); - assert_eq!( - escrow.get_job().milestones.get(0).unwrap().status, - MilestoneStatus::Disputed - ); + // No events should have been emitted for a rejected call. + let events = env.events().all(); + assert!(events.is_empty(), "no events expected on failed call"); } -// ============================================================================ -// Issue #268: milestone_time_extensions event emission test -// Issue #267: escrow_interest_yield comprehensive unit test suite -// ============================================================================ +// ═══════════════════════════════════════════════════════════════════════════════ +// cancel_escrow: zero/empty balance boundary guards (issue #294) +// +// cancel_escrow must reject cancellation when the contract's token balance +// is zero or negative, because there are no funds left to resolve through +// the admin override path. +// ═══════════════════════════════════════════════════════════════════════════════ +/// Happy path: cancel_escrow succeeds on a funded escrow with a positive +/// token balance. #[test] -fn test_milestone_time_extensions_emits_event() { +fn test_cancel_escrow_succeeds_with_positive_balance() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amount = 1_000_i128; - let elapsed = 300_i128; - let total = 600_i128; - - let split = client.milestone_time_extensions(&amount, &elapsed, &total); - assert_eq!(split.first, 500); - assert_eq!(split.second, 500); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); - let events = env.events().all(); - let m_ext_topic: Symbol = symbol_short!("m_ext"); - let m_ext_topic_val: Val = m_ext_topic.into_val(&env); + // Balance is positive — cancel should succeed. + client.cancel_escrow(&client_addr); - let mut found_event = false; - for e in events.iter() { - if let Some(topic) = e.1.get(0) { - if topic.get_payload() == m_ext_topic_val.get_payload() { - found_event = true; - let event_data = MilestoneTimeExtensionEvent::from_val(&env, &e.2); - assert_eq!(event_data.amount, amount); - assert_eq!(event_data.elapsed_seconds, elapsed); - assert_eq!(event_data.total_seconds, total); - assert_eq!(event_data.freelancer_share, 500); - assert_eq!(event_data.client_refund, 500); + // Verify the cancel event was emitted exactly once. + let cancel_topic_val: Val = symbol_short!("cancel").into_val(&env); + let mut cancel_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == cancel_topic_val.get_payload() { + cancel_events += 1; } } } - assert!(found_event, "Expected m_ext event to be published"); + assert_eq!(cancel_events, 1); } +/// cancel_escrow is rejected when all milestones have been fully released +/// and the contract token balance is zero. #[test] -fn test_milestone_time_extensions_zero_elapsed_emits_event() { +fn test_cancel_escrow_rejected_when_balance_zero_after_full_release() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amount = 1_000_i128; - let elapsed = 0_i128; - let total = 600_i128; + let amounts = vec![&env, 3_000_i128, 7_000_i128]; + let (client_addr, freelancer_addr, _, _, _token_contract_id, contract_id, client) = + setup_funded_escrow(&env, amounts); - let split = client.milestone_time_extensions(&amount, &elapsed, &total); - assert_eq!(split.first, 0); - assert_eq!(split.second, 1_000); + // Release all milestones so the contract balance drops to zero. + client.mark_delivered(&freelancer_addr, &0u32); + client.approve_milestone(&client_addr, &0u32); + client.mark_delivered(&freelancer_addr, &1u32); + client.approve_milestone(&client_addr, &1u32); - let events = env.events().all(); - let m_ext_topic: Symbol = symbol_short!("m_ext"); - let m_ext_topic_val: Val = m_ext_topic.into_val(&env); + // Contract balance is now zero. + let token_client = token::Client::new(&env, &_token_contract_id); + assert_eq!(token_client.balance(&contract_id), 0); - let mut found_event = false; - for e in events.iter() { - if let Some(topic) = e.1.get(0) { - if topic.get_payload() == m_ext_topic_val.get_payload() { - found_event = true; - let event_data = MilestoneTimeExtensionEvent::from_val(&env, &e.2); - assert_eq!(event_data.amount, amount); - assert_eq!(event_data.elapsed_seconds, elapsed); - assert_eq!(event_data.total_seconds, total); - assert_eq!(event_data.freelancer_share, 0); - assert_eq!(event_data.client_refund, 1_000); - } - } - } - assert!(found_event, "Expected m_ext event to be published"); + let result = client.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } +/// cancel_escrow is rejected when the contract token balance has been +/// externally drained to zero via a direct token transfer. #[test] -fn test_milestone_time_extensions_full_elapsed_emits_event() { +fn test_cancel_escrow_rejected_when_balance_drained_externally() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - let amount = 1_000_i128; - let elapsed = 600_i128; - let total = 600_i128; - - let split = client.milestone_time_extensions(&amount, &elapsed, &total); - assert_eq!(split.first, 1_000); - assert_eq!(split.second, 0); - - let events = env.events().all(); - let m_ext_topic: Symbol = symbol_short!("m_ext"); - let m_ext_topic_val: Val = m_ext_topic.into_val(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); - let mut found_event = false; - for e in events.iter() { - if let Some(topic) = e.1.get(0) { - if topic.get_payload() == m_ext_topic_val.get_payload() { - found_event = true; - let event_data = MilestoneTimeExtensionEvent::from_val(&env, &e.2); - assert_eq!(event_data.amount, amount); - assert_eq!(event_data.elapsed_seconds, elapsed); - assert_eq!(event_data.total_seconds, total); - assert_eq!(event_data.freelancer_share, 1_000); - assert_eq!(event_data.client_refund, 0); - } - } - } - assert!(found_event, "Expected m_ext event to be published"); -} + let token_contract_id = env.register(mock_token::MockToken, ()); + let token = mock_token::MockTokenClient::new(&env, &token_contract_id); + token.mint(&client_addr, &10_000_i128); -// ── escrow_interest_yield Unit Tests (#267) ─────────────────────────────── + let contract_id = env.register(MilestoneEscrow, ()); + let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); -fn setup_test_env(env: &Env) -> (Address, Address, Address, Address, u64) { - let admin = Address::generate(env); - let client_addr = Address::generate(env); - let freelancer_addr = Address::generate(env); - let token = env - .register_stellar_asset_contract_v2(admin.clone()) - .address(); - let auto_release = 604800_u64; - (admin, client_addr, freelancer_addr, token, auto_release) -} + let amounts = vec![&env, 10_000_i128]; + escrow_client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + escrow_client.fund(&client_addr); -#[test] -fn test_escrow_interest_yield_calculation_basic() { - let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + // Externally drain the contract's entire balance. + token.transfer(&contract_id, &client_addr, &10_000_i128); + assert_eq!(token.balance(&contract_id), 0); - // 10,000 principal, 500 bps (5%), 1 full year (31,536,000s) - let yield_amt = client.escrow_interest_yield(&10_000_i128, &500_i128, &31_536_000_i128); - assert_eq!(yield_amt, 500); + let result = escrow_client.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } +/// cancel_escrow is rejected when the contract token balance has been +/// partially drained, leaving zero (edge case: drain exact amount). #[test] -fn test_escrow_interest_yield_calculation_half_year() { +fn test_cancel_escrow_rejected_when_balance_drained_to_exact_zero() { let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token_contract_id = env.register(mock_token::MockToken, ()); + let token = mock_token::MockTokenClient::new(&env, &token_contract_id); + token.mint(&client_addr, &5_000_i128); + let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); - // 10,000 principal, 1,000 bps (10%), 6 months (15,768,000s) - let yield_amt = client.escrow_interest_yield(&10_000_i128, &1_000_i128, &15_768_000_i128); - assert_eq!(yield_amt, 500); + let amounts = vec![&env, 5_000_i128]; + escrow_client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + escrow_client.fund(&client_addr); + assert_eq!(token.balance(&contract_id), 5_000); + + // Drain exactly the funded amount. + token.transfer(&contract_id, &admin_addr, &5_000_i128); + assert_eq!(token.balance(&contract_id), 0); + + let result = escrow_client.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); } +/// cancel_escrow is rejected on a contract that has not been initialized. #[test] -fn test_escrow_interest_yield_zero_principal_fails() { +fn test_cancel_escrow_before_initialize_fails() { let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let res = client.try_escrow_interest_yield(&0_i128, &500_i128, &31_536_000_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let result = client.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::NotInitialized))); } +/// cancel_escrow is rejected on a contract that has been initialized but +/// not yet funded. #[test] -fn test_escrow_interest_yield_negative_principal_fails() { +fn test_cancel_escrow_before_fund_fails() { let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let res = client.try_escrow_interest_yield(&-100_i128, &500_i128, &31_536_000_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + + let result = client.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::NotFunded))); } +/// cancel_escrow is rejected when the caller is neither the client nor +/// the freelancer. #[test] -fn test_escrow_interest_yield_zero_rate_fails() { +fn test_cancel_escrow_unauthorized_caller_fails() { let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + env.mock_all_auths(); - let res = client.try_escrow_interest_yield(&10_000_i128, &0_i128, &31_536_000_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 1_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + + let bad_actor = Address::generate(&env); + let result = client.try_cancel_escrow(&bad_actor); + assert!(result.is_err()); } +/// cancel_escrow is rejected when the caller is a zero account address. #[test] -fn test_escrow_interest_yield_negative_rate_fails() { +fn test_cancel_escrow_zero_address_fails() { let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + env.mock_all_auths(); - let res = client.try_escrow_interest_yield(&10_000_i128, &-10_i128, &31_536_000_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 1_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + + let zero_account = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); + let result = client.try_cancel_escrow(&zero_account); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); } +/// cancel_escrow is rejected when the caller is a zero contract address. #[test] -fn test_escrow_interest_yield_excessive_rate_fails() { +fn test_cancel_escrow_zero_contract_address_fails() { let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + env.mock_all_auths(); - let res = client.try_escrow_interest_yield(&10_000_i128, &10_001_i128, &31_536_000_i128); - assert_eq!(res, Err(Ok(Error::InvalidRatio))); + let amounts = vec![&env, 1_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + + let zero_contract = Address::from_str( + &env, + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", + ); + let result = client.try_cancel_escrow(&zero_contract); + assert_eq!(result, Err(Ok(Error::InvalidAddress))); } +/// cancel_escrow emits a structured CancelEscrowInitiatedEvent with the +/// correct contract_id and caller fields. #[test] -fn test_escrow_interest_yield_max_rate_succeeds() { +fn test_cancel_escrow_emits_structured_event() { let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + env.mock_all_auths(); - // 100% rate = 10,000 bps - let yield_amt = client.escrow_interest_yield(&10_000_i128, &10_000_i128, &31_536_000_i128); - assert_eq!(yield_amt, 10_000); + let amounts = vec![&env, 2_000_i128]; + let (client_addr, freelancer_addr, _, _, token_contract_id, contract_id, client) = + setup_funded_escrow(&env, amounts); + + client.cancel_escrow(&client_addr); + + let cancel_topic: Symbol = symbol_short!("cancel"); + let cancel_topic_val: Val = cancel_topic.into_val(&env); + let mut cancel_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == cancel_topic_val.get_payload() { + cancel_events += 1; + assert_eq!(event.1.len(), 1); + assert_eq!( + CancelEscrowInitiatedEvent::from_val(&env, &event.2), + CancelEscrowInitiatedEvent { + contract_id: contract_id.clone(), + caller: client_addr.clone(), + caller_is_client: true, + client: client_addr.clone(), + freelancer: freelancer_addr.clone(), + token: token_contract_id.clone(), + milestone_count: 1, + total_amount: 2_000_i128, + } + ); + } + } + } + assert_eq!(cancel_events, 1); } +/// cancel_escrow by the freelancer also succeeds when balance is positive. #[test] -fn test_escrow_interest_yield_zero_duration_fails() { +fn test_cancel_escrow_freelancer_can_cancel() { let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + env.mock_all_auths(); - let res = client.try_escrow_interest_yield(&10_000_i128, &500_i128, &0_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 4_000_i128]; + let (_, freelancer_addr, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + + client.cancel_escrow(&freelancer_addr); + + // Verify the cancel event was emitted. + let cancel_topic_val: Val = symbol_short!("cancel").into_val(&env); + let mut cancel_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == cancel_topic_val.get_payload() { + cancel_events += 1; + } + } + } + assert_eq!(cancel_events, 1); } +/// cancel_escrow rejects when balance is partially drained but still +/// positive (balance > 0 should still be allowed). #[test] -fn test_escrow_interest_yield_negative_duration_fails() { +fn test_cancel_escrow_succeeds_with_partial_balance() { let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token_contract_id = env.register(mock_token::MockToken, ()); + let token = mock_token::MockTokenClient::new(&env, &token_contract_id); + token.mint(&client_addr, &10_000_i128); + let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); - let res = client.try_escrow_interest_yield(&10_000_i128, &500_i128, &-100_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 10_000_i128]; + escrow_client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + escrow_client.fund(&client_addr); + + // Drain some but not all funds — balance remains positive. + token.transfer(&contract_id, &admin_addr, &7_000_i128); + assert_eq!(token.balance(&contract_id), 3_000); + + // Cancel should still succeed because balance > 0. + escrow_client.cancel_escrow(&client_addr); } +/// cancel_escrow emits no CancelEscrowInitiatedEvent when rejected due to +/// empty balance (no phantom events on failed calls). #[test] -fn test_escrow_interest_yield_overflow_fails() { +fn test_cancel_escrow_empty_balance_emits_no_event() { let env = Env::default(); + env.mock_all_auths(); + + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + + let token_contract_id = env.register(mock_token::MockToken, ()); + let token = mock_token::MockTokenClient::new(&env, &token_contract_id); + token.mint(&client_addr, &10_000_i128); + let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); + + let amounts = vec![&env, 10_000_i128]; + escrow_client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); + escrow_client.fund(&client_addr); - let res = client.try_escrow_interest_yield(&i128::MAX, &10_000_i128, &31_536_000_i128); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); -} + // Drain all funds. + token.transfer(&contract_id, &client_addr, &10_000_i128); -#[test] -fn test_escrow_interest_yield_share_config_not_initialized_initially() { - let env = Env::default(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let result = escrow_client.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::InvalidAmount))); - let res = client.try_get_escrow_interest_yield(); - assert_eq!(res, Err(Ok(Error::NotInitialized))); + // No cancel events should have been emitted. + let cancel_topic_val: Val = symbol_short!("cancel").into_val(&env); + let cancel_events = env.events().all().iter().fold(0u32, |acc, event| { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == cancel_topic_val.get_payload() { + return acc + 1; + } + } + acc + }); + assert_eq!(cancel_events, 0); } #[test] -fn test_escrow_interest_yield_set_valid_config_and_get() { +fn test_platform_fee_allocation_preserves_value_with_largest_remainders() { let env = Env::default(); env.mock_all_auths(); let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); + let arbiter = Address::generate(&env); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let arbiter = Address::generate(&env); client.initialize( &admin, &client_addr, @@ -9212,373 +10484,436 @@ fn test_escrow_interest_yield_set_valid_config_and_get() { &vec![&env, 1_000_i128], ); - client.set_escrow_interest_yield(&admin, &5_000u32, &5_000u32); + client.set_platform_fee_allocation(&admin, &3333, &3333, &3334); + let distribution = client.calculate_platform_fee_split(&2_i128); + assert_eq!(distribution.client_amount, 1); + assert_eq!(distribution.freelancer_amount, 0); + assert_eq!(distribution.treasury_amount, 1); + assert_eq!( + distribution.client_amount + distribution.freelancer_amount + distribution.treasury_amount, + 2 + ); - let config = client.get_escrow_interest_yield(); - assert_eq!(config.client_share_bps, 5_000); - assert_eq!(config.freelancer_share_bps, 5_000); - assert_eq!(config.locked, false); + let zero = client.calculate_platform_fee_split(&0_i128); + assert_eq!( + zero.client_amount + zero.freelancer_amount + zero.treasury_amount, + 0 + ); + let negative = client.try_calculate_platform_fee_split(&-1_i128); + assert_eq!(negative, Err(Ok(Error::InvalidAmount))); } - -#[test] -fn test_escrow_interest_yield_set_invalid_share_total_fails() { +fn test_tax_withholding_deductions_zero_balance_fails() { let env = Env::default(); env.mock_all_auths(); - let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let arbiter = Address::generate(&env); - client.initialize( - &admin, - &client_addr, - &freelancer_addr, - &arbiter, - &token, - &auto_release, - &vec![&env, 1_000_i128], - ); + let milestone_amounts = vec![&env, 1000_i128]; + let (_, _, _, _, token_contract_id, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); - let res1 = client.try_set_escrow_interest_yield(&admin, &6_000u32, &5_000u32); - assert_eq!(res1, Err(Ok(Error::InvalidRatio))); + // Empty the contract balance by transferring all tokens out + let token_client = token::Client::new(&env, &token_contract_id); + token_client.transfer(&contract_id, &Address::generate(&env), &1000_i128); - let res2 = client.try_set_escrow_interest_yield(&admin, &3_000u32, &3_000u32); - assert_eq!(res2, Err(Ok(Error::InvalidRatio))); + // Call tax_withholding_deductions (should fail with InvalidAmount) + let res = client.try_tax_withholding_deductions(&0u32, &1000u32); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); } #[test] -fn test_escrow_interest_yield_lock_unlock_workflow() { +fn test_admin_tax_withholding_deductions_zero_balance_fails() { let env = Env::default(); env.mock_all_auths(); - let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let arbiter = Address::generate(&env); - client.initialize( - &admin, - &client_addr, - &freelancer_addr, - &arbiter, - &token, - &auto_release, - &vec![&env, 1_000_i128], - ); + let milestone_amounts = vec![&env, 1000_i128]; + let (_, _, _, admin_addr, token_contract_id, contract_id, client) = + setup_funded_escrow(&env, milestone_amounts); - client.set_escrow_interest_yield(&admin, &5_000u32, &5_000u32); - assert_eq!(client.is_escrow_interest_yield_locked(), false); + // Empty the contract balance by transferring all tokens out + let token_client = token::Client::new(&env, &token_contract_id); + token_client.transfer(&contract_id, &Address::generate(&env), &1000_i128); - client.lock_escrow_interest_yield(&admin); - assert_eq!(client.is_escrow_interest_yield_locked(), true); + // Call admin_tax_withholding_deductions (should fail with InvalidAmount) + let res = client.try_admin_tax_withholding_deductions(&admin_addr, &0u32, &1000u32); + assert_eq!(res, Err(Ok(Error::InvalidAmount))); +} - let res = client.try_set_escrow_interest_yield(&admin, &6_000u32, &4_000u32); - assert_eq!(res, Err(Ok(Error::EscrowLocked))); +// ═══════════════════════════════════════════════════════════════════════════════ +// tax_withholding_deductions: ratio-split precision (#299) +// +// tax_withholding_deductions computes its split via the shared +// split_round_nearest helper: round(gross * rate / BPS_SCALE) to the nearest +// integer for tax_amount, then derive net_amount = gross - tax_amount by +// subtraction rather than a second independent division. That subtraction is +// what guarantees tax_amount + net_amount == gross_amount exactly for every +// rate — there is no way for the split to lose or manufacture value, and no +// way for it to silently truncate (floor) a fraction that should round up. +// These tests exercise that guarantee directly against the public +// tax_withholding_deductions entry point, which the two "emits_event" tests +// above do not (they call the unrelated multisig_transfer_admin function). +// ═══════════════════════════════════════════════════════════════════════════════ - client.unlock_escrow_interest_yield(&admin); - assert_eq!(client.is_escrow_interest_yield_locked(), false); +#[test] +fn test_tax_withholding_deductions_conserves_value_across_rates() { + let env = Env::default(); + env.mock_all_auths(); - client.set_escrow_interest_yield(&admin, &6_000u32, &4_000u32); - let updated = client.get_escrow_interest_yield(); - assert_eq!(updated.client_share_bps, 6_000); - assert_eq!(updated.freelancer_share_bps, 4_000); + let milestone_amounts = vec![&env, 1_000_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + + // tax_amount + net_amount must equal gross_amount exactly for every rate, + // including rates that do not divide the gross amount evenly (37 bps, + // 3_333 bps, 6_667 bps) — no value may be created or destroyed by the + // split, regardless of rounding. + for tax_rate_bps in [0u32, 1, 37, 2_500, 3_333, 5_000, 6_667, 9_999, 10_000] { + let record = client.tax_withholding_deductions(&0u32, &tax_rate_bps); + assert_eq!( + record.tax_amount + record.net_amount, + record.gross_amount, + "value lost/gained at tax_rate_bps={tax_rate_bps}" + ); + assert_eq!(record.gross_amount, 1_000_000); + assert_eq!(record.tax_rate_bps, tax_rate_bps); + assert!(record.tax_amount >= 0 && record.net_amount >= 0); + } } #[test] -fn test_escrow_interest_yield_unauthorized_admin_fails() { +fn test_tax_withholding_deductions_rounds_to_nearest_not_down() { let env = Env::default(); env.mock_all_auths(); - let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - let arbiter = Address::generate(&env); - client.initialize( - &admin, - &client_addr, - &freelancer_addr, - &arbiter, - &token, - &auto_release, - &vec![&env, 1_000_i128], - ); + let milestone_amounts = vec![&env, 3_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); - let impostor = Address::generate(&env); - let res = client.try_set_escrow_interest_yield(&impostor, &5_000u32, &5_000u32); - assert_eq!(res, Err(Ok(Error::Unauthorized))); + // gross=3, rate=50% (5_000 bps): exact tax is 1.5, which must round to + // the nearest integer (2) rather than truncate down to 1 the way plain + // floor division (gross * rate / BPS_SCALE) would. + let record = client.tax_withholding_deductions(&0u32, &5_000u32); + assert_eq!(record.tax_amount, 2); + assert_eq!(record.net_amount, 1); + assert_eq!(record.tax_amount + record.net_amount, 3); } -// ============================================================================ -// Zero/empty balance guards — payment_streaming_milestones (Issue #272) -// ============================================================================ +#[test] +fn test_tax_withholding_deductions_rounds_down_when_fraction_is_below_half() { + let env = Env::default(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 100_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + + // gross=100, rate=12.49% (1_249 bps): exact tax is 12.49, which rounds + // down to 12 — proving the split rounds to the nearest integer rather + // than always rounding up (a ceiling would incorrectly give 13). + let record = client.tax_withholding_deductions(&0u32, &1_249u32); + assert_eq!(record.tax_amount, 12); + assert_eq!(record.net_amount, 88); +} -/// Guard — ZERO TOTAL: streaming on a zero balance must fail. #[test] -fn test_payment_streaming_milestones_zero_total_fails() { +fn test_tax_withholding_deductions_zero_rate_withholds_nothing() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); - let result = client.try_payment_streaming_milestones(&0_i128, &1_i128, &2_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let record = client.tax_withholding_deductions(&0u32, &0u32); + assert_eq!(record.tax_amount, 0); + assert_eq!(record.net_amount, 1_000); } -/// Guard — NEGATIVE TOTAL: negative balance is always invalid. #[test] -fn test_payment_streaming_milestones_negative_total_fails() { +fn test_tax_withholding_deductions_full_rate_withholds_everything() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); - let result = client.try_payment_streaming_milestones(&-500_i128, &1_i128, &2_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let record = client.tax_withholding_deductions(&0u32, &10_000u32); + assert_eq!(record.tax_amount, 1_000); + assert_eq!(record.net_amount, 0); } -/// Happy path — a positive total must still work correctly after the guard. #[test] -fn test_payment_streaming_milestones_positive_total_succeeds() { +fn test_tax_withholding_deductions_rejects_rate_above_100_percent() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let milestone_amounts = vec![&env, 1_000_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); - // 1000 streamed at 1/4 elapsed: first=250, second=750, sum=1000 - let split = client.payment_streaming_milestones(&1_000_i128, &1_i128, &4_i128); - assert_eq!(split.first, 250); - assert_eq!(split.second, 750); - assert_eq!(split.first + split.second, 1_000); + let result = client.try_tax_withholding_deductions(&0u32, &10_001u32); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); } -// ============================================================================ -// Zero/empty balance guards — milestone_time_extensions (Issue #271) -// ============================================================================ +#[test] +fn test_tax_withholding_deductions_conserves_value_at_smallest_unit() { + let env = Env::default(); + env.mock_all_auths(); + + let milestone_amounts = vec![&env, 1_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + + // Even at the smallest indivisible unit, every rate must still conserve + // the total exactly and never produce a negative or out-of-range part. + for tax_rate_bps in [0u32, 1, 4_999, 5_000, 5_001, 9_999, 10_000] { + let record = client.tax_withholding_deductions(&0u32, &tax_rate_bps); + assert_eq!(record.tax_amount + record.net_amount, 1); + assert!(record.tax_amount == 0 || record.tax_amount == 1); + assert!(record.net_amount == 0 || record.net_amount == 1); + } +} -/// Guard — ZERO AMOUNT: distributing nothing is blocked. -/// The previous behaviour returned (0, 0); the new behaviour raises InvalidAmount. #[test] -fn test_milestone_time_extensions_zero_balance_is_blocked() { +fn test_tax_withholding_deductions_independent_across_milestones() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let milestone_amounts = vec![&env, 400_i128, 600_i128]; + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); - let result = client.try_milestone_time_extensions(&0_i128, &3_i128, &10_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let record_a = client.tax_withholding_deductions(&0u32, &2_500u32); + let record_b = client.tax_withholding_deductions(&1u32, &7_500u32); + + assert_eq!(record_a.gross_amount, 400); + assert_eq!(record_a.tax_amount, 100); + assert_eq!(record_a.net_amount, 300); + + assert_eq!(record_b.gross_amount, 600); + assert_eq!(record_b.tax_amount, 450); + assert_eq!(record_b.net_amount, 150); } -/// Guard — NEGATIVE AMOUNT: a negative milestone balance is rejected before time checks. #[test] -fn test_milestone_time_extensions_negative_balance_is_blocked() { +fn test_admin_override_cancel_release_unauthorized_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - let result = client.try_milestone_time_extensions(&-1_000_i128, &3_i128, &10_i128); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let attacker = Address::generate(&env); + let result = client.try_admin_override_cancel_release(&attacker); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Regression — a positive balance still produces the correct split and emits an event. #[test] -fn test_milestone_time_extensions_positive_balance_succeeds_and_emits_event() { +fn test_admin_override_cancel_release_illegal_source_state_fails() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - - // 600 split at 1/3 elapsed: round_nearest(600 * 1 / 3) = 200 - let split = client.milestone_time_extensions(&600_i128, &1_i128, &3_i128); - assert_eq!(split.first, 200); - assert_eq!(split.second, 400); - assert_eq!(split.first + split.second, 600); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - // Verify the event was published - let events = env.events().all(); - assert!(!events.is_empty(), "expected at least one event"); - let last = events.last().unwrap(); - let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); - assert_eq!(topic, Symbol::new(&env, "m_ext")); + // Escrow is funded but NOT cancel locked (illegal source state) + let result = client.try_admin_override_cancel_release(&admin_addr); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -// ============================================================================ -// Zero/empty balance guards + event emission — multisig_transfer_admin -// (Issues #270 and #273) -// ============================================================================ - -/// Event emission — a successful multisig_transfer_admin call must emit a -/// MultiSigTransferAdminEvent with the correct fields (issue #270). #[test] -fn test_multisig_transfer_admin_emits_event() { +fn test_multisig_split_refund_unauthorized_fails() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - - let ratios = vec![&env, 1_i128, 1_i128, 1_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &300_i128, &ratios); - - // Verify allocation correctness - assert_eq!(allocations.len(), 3); - let total: i128 = allocations.iter().sum(); - assert_eq!(total, 300); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + client.multisig_lock(&admin_addr); - // Verify the event was published - let events = env.events().all(); - assert!(!events.is_empty(), "expected at least one event"); - let last = events.last().unwrap(); - let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); - assert_eq!(topic, Symbol::new(&env, "msigtrx")); + let attacker = Address::generate(&env); + let result = client.try_multisig_split_refund(&attacker, &1_000_i128, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -/// Event emission — verify the event carries the correct total_amount -/// and num_parties fields. #[test] -fn test_multisig_transfer_admin_event_fields_are_correct() { +fn test_multisig_split_refund_illegal_source_state_fails() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - - let ratios = vec![&env, 3_i128, 1_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &1_000_i128, &ratios); - - // Verify numeric allocations: 750 and 250 (3/4 and 1/4 of 1000) - assert_eq!(allocations.get(0).unwrap(), 750); - assert_eq!(allocations.get(1).unwrap(), 250); + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - // Verify event topic - let events = env.events().all(); - let last = events.last().unwrap(); - let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); - assert_eq!(topic, Symbol::new(&env, "msigtrx")); + // Escrow is funded but NOT multisig locked (illegal source state) + let result = client.try_multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &5_000_u32); + assert_eq!(result, Err(Ok(Error::InvalidStatus))); } -/// Event emission — a single-party split still emits the event. #[test] -fn test_multisig_transfer_admin_single_party_emits_event() { +fn test_set_platform_fee_allocation_emits_structured_event() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); + let admin_addr = Address::generate(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); - let ratios = vec![&env, 1_i128]; - let allocations = client.multisig_transfer_admin(&admin_addr, &500_i128, &ratios); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); - assert_eq!(allocations.len(), 1); - assert_eq!(allocations.get(0).unwrap(), 500); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); - let events = env.events().all(); - assert!(!events.is_empty()); - let last = events.last().unwrap(); - let topic: Symbol = last.1.get(0).unwrap().try_into_val(&env).unwrap(); - assert_eq!(topic, Symbol::new(&env, "msigtrx")); + client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); + + let pf_set_topic: Symbol = symbol_short!("pf_set"); + let pf_set_topic_val: Val = pf_set_topic.into_val(&env); + let mut pf_set_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == pf_set_topic_val.get_payload() { + pf_set_events += 1; + assert_eq!(event.1.len(), 1); + assert_eq!( + PlatformFeeAllocationSetEvent::from_val(&env, &event.2), + PlatformFeeAllocationSetEvent { + admin: admin_addr.clone(), + client_bps: 2000, + freelancer_bps: 7000, + treasury_bps: 1000, + } + ); + } + } + } + assert_eq!(pf_set_events, 1, "expected exactly one pf_set event"); } -/// Guard + Event — zero total with valid ratios is blocked BEFORE any event -/// is emitted (no phantom events on failed calls). #[test] -fn test_multisig_transfer_admin_zero_total_emits_no_event() { +fn test_lock_platform_fee_allocation_emits_structured_event() { let env = Env::default(); env.mock_all_auths(); - let (admin_addr, _, _, _, _, _, client) = setup_multisig_env(&env); - - let ratios = vec![&env, 1_i128, 1_i128]; - let result = client.try_multisig_transfer_admin(&admin_addr, &0_i128, &ratios); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); - - // No events should have been emitted for a rejected call. - let events = env.events().all(); - assert!(events.is_empty(), "no events expected on failed call"); -} - -// ═══════════════════════════════════════════════════════════════════════════════ -// cancel_escrow: zero/empty balance boundary guards (issue #294) -// -// cancel_escrow must reject cancellation when the contract's token balance -// is zero or negative, because there are no funds left to resolve through -// the admin override path. -// ═══════════════════════════════════════════════════════════════════════════════ + let admin_addr = Address::generate(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); -/// Happy path: cancel_escrow succeeds on a funded escrow with a positive -/// token balance. -#[test] -fn test_cancel_escrow_succeeds_with_positive_balance() { - let env = Env::default(); - env.mock_all_auths(); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); - let amounts = vec![&env, 5_000_i128]; - let (client_addr, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); - // Balance is positive — cancel should succeed. - client.cancel_escrow(&client_addr); + client.set_platform_fee_allocation(&admin_addr, &3000_u32, &6000_u32, &1000_u32); + client.lock_platform_fee_allocation(&admin_addr); - // Verify the cancel event was emitted exactly once. - let cancel_topic_val: Val = symbol_short!("cancel").into_val(&env); - let mut cancel_events = 0u32; + let pf_lock_topic: Symbol = symbol_short!("pf_lock"); + let pf_lock_topic_val: Val = pf_lock_topic.into_val(&env); + let mut pf_lock_events = 0u32; for event in env.events().all().iter() { if let Some(topic) = event.1.get(0) { - if topic.get_payload() == cancel_topic_val.get_payload() { - cancel_events += 1; + if topic.get_payload() == pf_lock_topic_val.get_payload() { + pf_lock_events += 1; + assert_eq!(event.1.len(), 1); + assert_eq!( + PlatformFeeAllocationLockedEvent::from_val(&env, &event.2), + PlatformFeeAllocationLockedEvent { + admin: admin_addr.clone(), + client_bps: 3000, + freelancer_bps: 6000, + treasury_bps: 1000, + } + ); } } } - assert_eq!(cancel_events, 1); + assert_eq!(pf_lock_events, 1, "expected exactly one pf_lock event"); } -/// cancel_escrow is rejected when all milestones have been fully released -/// and the contract token balance is zero. #[test] -fn test_cancel_escrow_rejected_when_balance_zero_after_full_release() { +fn test_pf_alloc_admin_override_emits_structured_event() { let env = Env::default(); env.mock_all_auths(); - let amounts = vec![&env, 3_000_i128, 7_000_i128]; - let (client_addr, freelancer_addr, _, _, _token_contract_id, contract_id, client) = - setup_funded_escrow(&env, amounts); + let admin_addr = Address::generate(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); - // Release all milestones so the contract balance drops to zero. - client.mark_delivered(&freelancer_addr, &0u32); - client.approve_milestone(&client_addr, &0u32); - client.mark_delivered(&freelancer_addr, &1u32); - client.approve_milestone(&client_addr, &1u32); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); - // Contract balance is now zero. - let token_client = token::Client::new(&env, &_token_contract_id); - assert_eq!(token_client.balance(&contract_id), 0); + let contract_id = env.register(MilestoneEscrow, ()); + let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; + client.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604800, + &amounts, + ); - let result = client.try_cancel_escrow(&client_addr); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); + client.lock_platform_fee_allocation(&admin_addr); + + // Admin overrides the locked allocation + client.pf_alloc_admin_override(&admin_addr, &1000_u32, &8000_u32, &1000_u32); + + let pf_ovr_topic: Symbol = symbol_short!("pf_ovr"); + let pf_ovr_topic_val: Val = pf_ovr_topic.into_val(&env); + let mut pf_ovr_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == pf_ovr_topic_val.get_payload() { + pf_ovr_events += 1; + assert_eq!(event.1.len(), 1); + assert_eq!( + PlatformFeeAllocationOverrideEvent::from_val(&env, &event.2), + PlatformFeeAllocationOverrideEvent { + admin: admin_addr.clone(), + client_bps: 1000, + freelancer_bps: 8000, + treasury_bps: 1000, + } + ); + } + } + } + assert_eq!(pf_ovr_events, 1, "expected exactly one pf_ovr event"); } -/// cancel_escrow is rejected when the contract token balance has been -/// externally drained to zero via a direct token transfer. #[test] -fn test_cancel_escrow_rejected_when_balance_drained_externally() { +fn test_calculate_platform_fee_split_emits_structured_event() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env.register(mock_token::MockToken, ()); - let token = mock_token::MockTokenClient::new(&env, &token_contract_id); - token.mint(&client_addr, &10_000_i128); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); let contract_id = env.register(MilestoneEscrow, ()); - let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 10_000_i128]; - escrow_client.initialize( + let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, @@ -9587,37 +10922,58 @@ fn test_cancel_escrow_rejected_when_balance_drained_externally() { &604800, &amounts, ); - escrow_client.fund(&client_addr); - - // Externally drain the contract's entire balance. - token.transfer(&contract_id, &client_addr, &10_000_i128); - assert_eq!(token.balance(&contract_id), 0); - let result = escrow_client.try_cancel_escrow(&client_addr); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + // 20/70/10 split on 1000 tokens + client.set_platform_fee_allocation(&admin_addr, &2000_u32, &7000_u32, &1000_u32); + let distribution = client.calculate_platform_fee_split(&1000_i128); + assert_eq!(distribution.client_amount, 200); + assert_eq!(distribution.freelancer_amount, 700); + assert_eq!(distribution.treasury_amount, 100); + + let pf_split_topic: Symbol = symbol_short!("pf_split"); + let pf_split_topic_val: Val = pf_split_topic.into_val(&env); + let mut pf_split_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == pf_split_topic_val.get_payload() { + pf_split_events += 1; + assert_eq!(event.1.len(), 1); + assert_eq!( + PlatformFeeSplitCalculatedEvent::from_val(&env, &event.2), + PlatformFeeSplitCalculatedEvent { + total_amount: 1000, + client_amount: 200, + freelancer_amount: 700, + treasury_amount: 100, + } + ); + } + } + } + assert_eq!( + pf_split_events, 1, + "expected exactly one pf_split event" + ); } -/// cancel_escrow is rejected when the contract token balance has been -/// partially drained, leaving zero (edge case: drain exact amount). #[test] -fn test_cancel_escrow_rejected_when_balance_drained_to_exact_zero() { +fn test_set_platform_fee_allocation_fails_does_not_emit_event() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - let token_contract_id = env.register(mock_token::MockToken, ()); - let token = mock_token::MockTokenClient::new(&env, &token_contract_id); - token.mint(&client_addr, &5_000_i128); + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); let contract_id = env.register(MilestoneEscrow, ()); - let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 5_000_i128]; - escrow_client.initialize( + let client = MilestoneEscrowClient::new(&env, &contract_id); + let amounts = vec![&env, 1_000_i128]; + client.initialize( &admin_addr, &client_addr, &freelancer_addr, @@ -9626,49 +10982,40 @@ fn test_cancel_escrow_rejected_when_balance_drained_to_exact_zero() { &604800, &amounts, ); - escrow_client.fund(&client_addr); - assert_eq!(token.balance(&contract_id), 5_000); - - // Drain exactly the funded amount. - token.transfer(&contract_id, &admin_addr, &5_000_i128); - assert_eq!(token.balance(&contract_id), 0); - let result = escrow_client.try_cancel_escrow(&client_addr); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); -} - -/// cancel_escrow is rejected on a contract that has not been initialized. -#[test] -fn test_cancel_escrow_before_initialize_fails() { - let env = Env::default(); - env.mock_all_auths(); - - let client_addr = Address::generate(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); + // Invalid BPS that don't sum to 10000 + let result = client.try_set_platform_fee_allocation(&admin_addr, &3000_u32, &3000_u32, &3000_u32); + assert_eq!(result, Err(Ok(Error::InvalidRatio))); - let result = client.try_cancel_escrow(&client_addr); - assert_eq!(result, Err(Ok(Error::NotInitialized))); + let pf_set_topic: Symbol = symbol_short!("pf_set"); + let pf_set_topic_val: Val = pf_set_topic.into_val(&env); + let pf_set_count = env.events().all().iter().fold(0u32, |acc, event| { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == pf_set_topic_val.get_payload() { + return acc + 1; + } + } + acc + }); + assert_eq!(pf_set_count, 0, "should not emit pf_set event on failure"); } -/// cancel_escrow is rejected on a contract that has been initialized but -/// not yet funded. #[test] -fn test_cancel_escrow_before_fund_fails() { +fn test_platform_fee_split_rounds_to_zero() { let env = Env::default(); env.mock_all_auths(); + let admin_addr = Address::generate(&env); let client_addr = Address::generate(&env); let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); + let token_contract_id = env .register_stellar_asset_contract_v2(admin_addr.clone()) .address(); let contract_id = env.register(MilestoneEscrow, ()); let client = MilestoneEscrowClient::new(&env, &contract_id); - let amounts = vec![&env, 1_000_i128]; client.initialize( &admin_addr, @@ -9680,121 +11027,87 @@ fn test_cancel_escrow_before_fund_fails() { &amounts, ); - let result = client.try_cancel_escrow(&client_addr); - assert_eq!(result, Err(Ok(Error::NotFunded))); -} + client.set_platform_fee_allocation(&admin_addr, &3333_u32, &3333_u32, &3334_u32); + let distribution = client.calculate_platform_fee_split(&1_i128); + // With total_amount=1, floor(1*3333/10000)=0, floor(1*3333/10000)=0, floor(1*3334/10000)=0 + // largest remainder gives the remainder to client (first) + assert_eq!(distribution.client_amount + distribution.freelancer_amount + distribution.treasury_amount, 1); -/// cancel_escrow is rejected when the caller is neither the client nor -/// the freelancer. -#[test] -fn test_cancel_escrow_unauthorized_caller_fails() { - let env = Env::default(); - env.mock_all_auths(); + let pf_split_topic: Symbol = symbol_short!("pf_split"); + let pf_split_topic_val: Val = pf_split_topic.into_val(&env); + let mut pf_split_events = 0u32; + for event in env.events().all().iter() { + if let Some(topic) = event.1.get(0) { + if topic.get_payload() == pf_split_topic_val.get_payload() { + pf_split_events += 1; + } + } + } + assert_eq!(pf_split_events, 1, "expected exactly one pf_split event"); +} - let amounts = vec![&env, 1_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); +// ============================================================================ +// cancel_escrow — validation requirements test suite (#290) +// ============================================================================ - let bad_actor = Address::generate(&env); - let result = client.try_cancel_escrow(&bad_actor); - assert!(result.is_err()); -} +// ── invalid address guards ──────────────────────────────────────────────────── -/// cancel_escrow is rejected when the caller is a zero account address. +/// Zero Stellar account address must be rejected before any auth or storage +/// access, returning InvalidAddress immediately. #[test] -fn test_cancel_escrow_zero_address_fails() { +fn test_cancel_escrow_zero_account_address_rejected() { let env = Env::default(); env.mock_all_auths(); - let amounts = vec![&env, 1_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + let amounts = vec![&env, 5_000_i128]; + let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); let zero_account = Address::from_str( &env, "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", ); - let result = client.try_cancel_escrow(&zero_account); + let result = escrow.try_cancel_escrow(&zero_account); assert_eq!(result, Err(Ok(Error::InvalidAddress))); } -/// cancel_escrow is rejected when the caller is a zero contract address. +/// Zero contract address must be rejected with InvalidAddress. #[test] -fn test_cancel_escrow_zero_contract_address_fails() { +fn test_cancel_escrow_zero_contract_address_rejected() { let env = Env::default(); env.mock_all_auths(); - let amounts = vec![&env, 1_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, amounts); + let amounts = vec![&env, 5_000_i128]; + let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); let zero_contract = Address::from_str( &env, "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSC4", ); - let result = client.try_cancel_escrow(&zero_contract); + let result = escrow.try_cancel_escrow(&zero_contract); assert_eq!(result, Err(Ok(Error::InvalidAddress))); } -/// cancel_escrow emits a structured CancelEscrowInitiatedEvent with the -/// correct contract_id and caller fields. -#[test] -fn test_cancel_escrow_emits_structured_event() { - let env = Env::default(); - env.mock_all_auths(); - - let amounts = vec![&env, 2_000_i128]; - let (client_addr, _, _, _, token_contract_id, contract_id, client) = - setup_funded_escrow(&env, amounts); - - client.cancel_escrow(&client_addr); - - let cancel_topic: Symbol = symbol_short!("cancel"); - let cancel_topic_val: Val = cancel_topic.into_val(&env); - let mut cancel_events = 0u32; - for event in env.events().all().iter() { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == cancel_topic_val.get_payload() { - cancel_events += 1; - assert_eq!(event.1.len(), 1); - assert_eq!( - CancelEscrowInitiatedEvent::from_val(&env, &event.2), - CancelEscrowInitiatedEvent { - contract_id: contract_id.clone(), - caller: client_addr.clone(), - } - ); - } - } - } - assert_eq!(cancel_events, 1); -} +// ── not-initialized guard ───────────────────────────────────────────────────── -/// cancel_escrow by the freelancer also succeeds when balance is positive. +/// Calling cancel_escrow before initialize must return NotInitialized. #[test] -fn test_cancel_escrow_freelancer_can_cancel() { +fn test_cancel_escrow_not_initialized_fails() { let env = Env::default(); env.mock_all_auths(); - let amounts = vec![&env, 4_000_i128]; - let (_, freelancer_addr, _, _, _, _, client) = setup_funded_escrow(&env, amounts); - - client.cancel_escrow(&freelancer_addr); + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + let caller = Address::generate(&env); - // Verify the cancel event was emitted. - let cancel_topic_val: Val = symbol_short!("cancel").into_val(&env); - let mut cancel_events = 0u32; - for event in env.events().all().iter() { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == cancel_topic_val.get_payload() { - cancel_events += 1; - } - } - } - assert_eq!(cancel_events, 1); + let result = escrow.try_cancel_escrow(&caller); + assert_eq!(result, Err(Ok(Error::NotInitialized))); } -/// cancel_escrow rejects when balance is partially drained but still -/// positive (balance > 0 should still be allowed). +// ── not-funded guard ────────────────────────────────────────────────────────── + +/// cancel_escrow before funding must return NotFunded. #[test] -fn test_cancel_escrow_succeeds_with_partial_balance() { +fn test_cancel_escrow_not_funded_fails() { let env = Env::default(); env.mock_all_auths(); @@ -9802,350 +11115,338 @@ fn test_cancel_escrow_succeeds_with_partial_balance() { let freelancer_addr = Address::generate(&env); let arbiter_addr = Address::generate(&env); let admin_addr = Address::generate(&env); - - let token_contract_id = env.register(mock_token::MockToken, ()); - let token = mock_token::MockTokenClient::new(&env, &token_contract_id); - token.mint(&client_addr, &10_000_i128); + let token_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); let contract_id = env.register(MilestoneEscrow, ()); - let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 10_000_i128]; - escrow_client.initialize( + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + escrow.initialize( &admin_addr, &client_addr, &freelancer_addr, &arbiter_addr, - &token_contract_id, + &token_id, &604800, - &amounts, + &vec![&env, 1_000_i128], ); - escrow_client.fund(&client_addr); - - // Drain some but not all funds — balance remains positive. - token.transfer(&contract_id, &admin_addr, &7_000_i128); - assert_eq!(token.balance(&contract_id), 3_000); - // Cancel should still succeed because balance > 0. - escrow_client.cancel_escrow(&client_addr); + let result = escrow.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::NotFunded))); } -/// cancel_escrow emits no CancelEscrowInitiatedEvent when rejected due to -/// empty balance (no phantom events on failed calls). +// ── unauthorized guard ──────────────────────────────────────────────────────── + +/// A random address that is neither client nor freelancer must get Unauthorized. #[test] -fn test_cancel_escrow_empty_balance_emits_no_event() { +fn test_cancel_escrow_stranger_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let client_addr = Address::generate(&env); - let freelancer_addr = Address::generate(&env); - let arbiter_addr = Address::generate(&env); - let admin_addr = Address::generate(&env); - - let token_contract_id = env.register(mock_token::MockToken, ()); - let token = mock_token::MockTokenClient::new(&env, &token_contract_id); - token.mint(&client_addr, &10_000_i128); - - let contract_id = env.register(MilestoneEscrow, ()); - let escrow_client = MilestoneEscrowClient::new(&env, &contract_id); - - let amounts = vec![&env, 10_000_i128]; - escrow_client.initialize( - &admin_addr, - &client_addr, - &freelancer_addr, - &arbiter_addr, - &token_contract_id, - &604800, - &amounts, - ); - escrow_client.fund(&client_addr); - - // Drain all funds. - token.transfer(&contract_id, &client_addr, &10_000_i128); - - let result = escrow_client.try_cancel_escrow(&client_addr); - assert_eq!(result, Err(Ok(Error::InvalidAmount))); + let amounts = vec![&env, 5_000_i128]; + let (_, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); + let stranger = Address::generate(&env); - // No cancel events should have been emitted. - let cancel_topic_val: Val = symbol_short!("cancel").into_val(&env); - let cancel_events = env.events().all().iter().fold(0u32, |acc, event| { - if let Some(topic) = event.1.get(0) { - if topic.get_payload() == cancel_topic_val.get_payload() { - return acc + 1; - } - } - acc - }); - assert_eq!(cancel_events, 0); + let result = escrow.try_cancel_escrow(&stranger); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } +/// The arbiter is not a valid caller — must get Unauthorized. #[test] -fn test_platform_fee_allocation_preserves_value_with_largest_remainders() { +fn test_cancel_escrow_arbiter_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let (admin, client_addr, freelancer_addr, token, auto_release) = setup_test_env(&env); - let arbiter = Address::generate(&env); - let contract_id = env.register(MilestoneEscrow, ()); - let client = MilestoneEscrowClient::new(&env, &contract_id); - client.initialize( - &admin, - &client_addr, - &freelancer_addr, - &arbiter, - &token, - &auto_release, - &vec![&env, 1_000_i128], - ); - - client.set_platform_fee_allocation(&admin, &3333, &3333, &3334); - let distribution = client.calculate_platform_fee_split(&2_i128); - assert_eq!(distribution.client_amount, 1); - assert_eq!(distribution.freelancer_amount, 0); - assert_eq!(distribution.treasury_amount, 1); - assert_eq!( - distribution.client_amount + distribution.freelancer_amount + distribution.treasury_amount, - 2 - ); + let amounts = vec![&env, 5_000_i128]; + let (_, _, arbiter_addr, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - let zero = client.calculate_platform_fee_split(&0_i128); - assert_eq!( - zero.client_amount + zero.freelancer_amount + zero.treasury_amount, - 0 - ); - let negative = client.try_calculate_platform_fee_split(&-1_i128); - assert_eq!(negative, Err(Ok(Error::InvalidAmount))); + let result = escrow.try_cancel_escrow(&arbiter_addr); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } -fn test_tax_withholding_deductions_zero_balance_fails() { + +/// The admin is not a valid caller — must get Unauthorized. +#[test] +fn test_cancel_escrow_admin_unauthorized() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1000_i128]; - let (_, _, _, _, token_contract_id, contract_id, client) = - setup_funded_escrow(&env, milestone_amounts); - - // Empty the contract balance by transferring all tokens out - let token_client = token::Client::new(&env, &token_contract_id); - token_client.transfer(&contract_id, &Address::generate(&env), &1000_i128); + let amounts = vec![&env, 5_000_i128]; + let (_, _, _, admin_addr, _, _, escrow) = setup_funded_escrow(&env, amounts); - // Call tax_withholding_deductions (should fail with InvalidAmount) - let res = client.try_tax_withholding_deductions(&0u32, &1000u32); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let result = escrow.try_cancel_escrow(&admin_addr); + assert_eq!(result, Err(Ok(Error::Unauthorized))); } +// ── emergency-paused guard ──────────────────────────────────────────────────── + +/// cancel_escrow while the contract is emergency-paused must return Paused. #[test] -fn test_admin_tax_withholding_deductions_zero_balance_fails() { +fn test_cancel_escrow_while_paused_fails() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1000_i128]; - let (_, _, _, admin_addr, token_contract_id, contract_id, client) = - setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, admin_addr, _, _, escrow) = setup_funded_escrow(&env, amounts); - // Empty the contract balance by transferring all tokens out - let token_client = token::Client::new(&env, &token_contract_id); - token_client.transfer(&contract_id, &Address::generate(&env), &1000_i128); + escrow.emergency_pause(&admin_addr); - // Call admin_tax_withholding_deductions (should fail with InvalidAmount) - let res = client.try_admin_tax_withholding_deductions(&admin_addr, &0u32, &1000u32); - assert_eq!(res, Err(Ok(Error::InvalidAmount))); + let result = escrow.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::Paused))); } -// ═══════════════════════════════════════════════════════════════════════════════ -// tax_withholding_deductions: ratio-split precision (#299) -// -// tax_withholding_deductions computes its split via the shared -// split_round_nearest helper: round(gross * rate / BPS_SCALE) to the nearest -// integer for tax_amount, then derive net_amount = gross - tax_amount by -// subtraction rather than a second independent division. That subtraction is -// what guarantees tax_amount + net_amount == gross_amount exactly for every -// rate — there is no way for the split to lose or manufacture value, and no -// way for it to silently truncate (floor) a fraction that should round up. -// These tests exercise that guarantee directly against the public -// tax_withholding_deductions entry point, which the two "emits_event" tests -// above do not (they call the unrelated multisig_transfer_admin function). -// ═══════════════════════════════════════════════════════════════════════════════ +// ── duplicate-cancel guard ──────────────────────────────────────────────────── +/// A second call to cancel_escrow after the lock is already set must return +/// EscrowLocked, preventing duplicate lock-sets or race conditions. #[test] -fn test_tax_withholding_deductions_conserves_value_across_rates() { +fn test_cancel_escrow_duplicate_call_fails() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1_000_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - // tax_amount + net_amount must equal gross_amount exactly for every rate, - // including rates that do not divide the gross amount evenly (37 bps, - // 3_333 bps, 6_667 bps) — no value may be created or destroyed by the - // split, regardless of rounding. - for tax_rate_bps in [0u32, 1, 37, 2_500, 3_333, 5_000, 6_667, 9_999, 10_000] { - let record = client.tax_withholding_deductions(&0u32, &tax_rate_bps); - assert_eq!( - record.tax_amount + record.net_amount, - record.gross_amount, - "value lost/gained at tax_rate_bps={tax_rate_bps}" - ); - assert_eq!(record.gross_amount, 1_000_000); - assert_eq!(record.tax_rate_bps, tax_rate_bps); - assert!(record.tax_amount >= 0 && record.net_amount >= 0); - } + // First call succeeds. + escrow.cancel_escrow(&client_addr); + + // Second call must be rejected. + let result = escrow.try_cancel_escrow(&client_addr); + assert_eq!(result, Err(Ok(Error::EscrowLocked))); } +/// Freelancer calling cancel after client already locked it also gets EscrowLocked. #[test] -fn test_tax_withholding_deductions_rounds_to_nearest_not_down() { +fn test_cancel_escrow_freelancer_duplicate_after_client_fails() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 3_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, freelancer_addr, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - // gross=3, rate=50% (5_000 bps): exact tax is 1.5, which must round to - // the nearest integer (2) rather than truncate down to 1 the way plain - // floor division (gross * rate / BPS_SCALE) would. - let record = client.tax_withholding_deductions(&0u32, &5_000u32); - assert_eq!(record.tax_amount, 2); - assert_eq!(record.net_amount, 1); - assert_eq!(record.tax_amount + record.net_amount, 3); + escrow.cancel_escrow(&client_addr); + + let result = escrow.try_cancel_escrow(&freelancer_addr); + assert_eq!(result, Err(Ok(Error::EscrowLocked))); } +// ── happy paths ─────────────────────────────────────────────────────────────── + +/// Client can successfully cancel a funded escrow — lock is set, Ok returned. #[test] -fn test_tax_withholding_deductions_rounds_down_when_fraction_is_below_half() { +fn test_cancel_escrow_client_succeeds() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 100_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - // gross=100, rate=12.49% (1_249 bps): exact tax is 12.49, which rounds - // down to 12 — proving the split rounds to the nearest integer rather - // than always rounding up (a ceiling would incorrectly give 13). - let record = client.tax_withholding_deductions(&0u32, &1_249u32); - assert_eq!(record.tax_amount, 12); - assert_eq!(record.net_amount, 88); + let result = escrow.try_cancel_escrow(&client_addr); + assert!(result.is_ok()); } +/// Freelancer can successfully cancel a funded escrow. #[test] -fn test_tax_withholding_deductions_zero_rate_withholds_nothing() { +fn test_cancel_escrow_freelancer_succeeds() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (_, freelancer_addr, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - let record = client.tax_withholding_deductions(&0u32, &0u32); - assert_eq!(record.tax_amount, 0); - assert_eq!(record.net_amount, 1_000); + let result = escrow.try_cancel_escrow(&freelancer_addr); + assert!(result.is_ok()); } +// ── post-cancel state validation ────────────────────────────────────────────── + +/// After cancel_escrow, fund is blocked with EscrowLocked. #[test] -fn test_tax_withholding_deductions_full_rate_withholds_everything() { +fn test_cancel_escrow_blocks_fund() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + // Set up an unfunded escrow so we can test fund after cancel. + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + let admin_addr = Address::generate(&env); + let token_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + let token_admin = token::StellarAssetClient::new(&env, &token_id); + token_admin.mint(&client_addr, &5_000); - let record = client.tax_withholding_deductions(&0u32, &10_000u32); - assert_eq!(record.tax_amount, 1_000); - assert_eq!(record.net_amount, 0); + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + escrow.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_id, + &604800, + &vec![&env, 5_000_i128], + ); + // Fund first so cancel_escrow is callable, then verify downstream ops blocked. + escrow.fund(&client_addr); + escrow.cancel_escrow(&client_addr); + + // fund requires not-locked, so a refunded-and-re-initialized path would + // also be blocked. Verify mark_delivered is blocked as a proxy. + let result = escrow.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::EscrowLocked))); } +/// After cancel_escrow, mark_delivered is blocked with EscrowLocked. #[test] -fn test_tax_withholding_deductions_rejects_rate_above_100_percent() { +fn test_cancel_escrow_blocks_mark_delivered() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1_000_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, freelancer_addr, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - let result = client.try_tax_withholding_deductions(&0u32, &10_001u32); - assert_eq!(result, Err(Ok(Error::InvalidRatio))); + escrow.cancel_escrow(&client_addr); + + let result = escrow.try_mark_delivered(&freelancer_addr, &0u32); + assert_eq!(result, Err(Ok(Error::EscrowLocked))); } +/// After cancel_escrow, approve_milestone is blocked with EscrowLocked. #[test] -fn test_tax_withholding_deductions_conserves_value_at_smallest_unit() { +fn test_cancel_escrow_blocks_approve_milestone() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 1_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - // Even at the smallest indivisible unit, every rate must still conserve - // the total exactly and never produce a negative or out-of-range part. - for tax_rate_bps in [0u32, 1, 4_999, 5_000, 5_001, 9_999, 10_000] { - let record = client.tax_withholding_deductions(&0u32, &tax_rate_bps); - assert_eq!(record.tax_amount + record.net_amount, 1); - assert!(record.tax_amount == 0 || record.tax_amount == 1); - assert!(record.net_amount == 0 || record.net_amount == 1); - } + escrow.cancel_escrow(&client_addr); + + let result = escrow.try_approve_milestone(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::EscrowLocked))); } +/// After cancel_escrow, raise_dispute is blocked with EscrowLocked. #[test] -fn test_tax_withholding_deductions_independent_across_milestones() { +fn test_cancel_escrow_blocks_raise_dispute() { let env = Env::default(); env.mock_all_auths(); - let milestone_amounts = vec![&env, 400_i128, 600_i128]; - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, milestone_amounts); - - let record_a = client.tax_withholding_deductions(&0u32, &2_500u32); - let record_b = client.tax_withholding_deductions(&1u32, &7_500u32); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - assert_eq!(record_a.gross_amount, 400); - assert_eq!(record_a.tax_amount, 100); - assert_eq!(record_a.net_amount, 300); + escrow.cancel_escrow(&client_addr); - assert_eq!(record_b.gross_amount, 600); - assert_eq!(record_b.tax_amount, 450); - assert_eq!(record_b.net_amount, 150); + let result = escrow.try_raise_dispute(&client_addr, &0u32); + assert_eq!(result, Err(Ok(Error::EscrowLocked))); } +// ── event validation ────────────────────────────────────────────────────────── + +/// cancel_escrow must emit exactly one "cancel" event. #[test] -fn test_admin_override_cancel_release_unauthorized_fails() { +fn test_cancel_escrow_emits_exactly_one_event() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, _, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - let attacker = Address::generate(&env); - let result = client.try_admin_override_cancel_release(&attacker); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + escrow.cancel_escrow(&client_addr); + + let topic: soroban_sdk::Symbol = soroban_sdk::symbol_short!("cancel"); + let topic_val: Val = topic.into_val(&env); + let count = env.events().all().iter().fold(0u32, |acc, e| { + if let Some(t) = e.1.get(0) { + if t.get_payload() == topic_val.get_payload() { + return acc + 1; + } + } + acc + }); + assert_eq!(count, 1); } +/// The emitted event must contain the correct caller address. #[test] -fn test_admin_override_cancel_release_illegal_source_state_fails() { +fn test_cancel_escrow_event_contains_correct_caller() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let amounts = vec![&env, 5_000_i128]; + let (_, freelancer_addr, _, _, _, _, escrow) = setup_funded_escrow(&env, amounts); - // Escrow is funded but NOT cancel locked (illegal source state) - let result = client.try_admin_override_cancel_release(&admin_addr); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + escrow.cancel_escrow(&freelancer_addr); + + let topic: soroban_sdk::Symbol = soroban_sdk::symbol_short!("cancel"); + let topic_val: Val = topic.into_val(&env); + let mut found_caller: Option
= None; + for e in env.events().all().iter() { + if let Some(t) = e.1.get(0) { + if t.get_payload() == topic_val.get_payload() { + let event: CancelEscrowInitiatedEvent = soroban_sdk::FromVal::from_val(&env, &e.2); + found_caller = Some(event.caller); + } + } + } + assert_eq!(found_caller, Some(freelancer_addr)); } +// ── milestone state isolation ───────────────────────────────────────────────── + +/// cancel_escrow does not mutate any milestone — all remain in their +/// pre-cancel status after the lock is set. #[test] -fn test_multisig_split_refund_unauthorized_fails() { +fn test_cancel_escrow_does_not_mutate_milestones() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); - client.multisig_lock(&admin_addr); + let amounts = vec![&env, 3_000_i128, 7_000_i128]; + let (client_addr, freelancer_addr, _, _, _, _, escrow) = + setup_funded_escrow(&env, amounts); - let attacker = Address::generate(&env); - let result = client.try_multisig_split_refund(&attacker, &1_000_i128, &5_000_u32, &5_000_u32); - assert_eq!(result, Err(Ok(Error::Unauthorized))); + // Deliver milestone 0 so it is in Delivered state before cancel. + escrow.mark_delivered(&freelancer_addr, &0u32); + + escrow.cancel_escrow(&client_addr); + + let job = escrow.get_job(); + // Milestone 0 must still be Delivered — cancel must not reset it. + assert_eq!( + job.milestones.get(0).unwrap().status, + MilestoneStatus::Delivered + ); + // Milestone 1 must still be Pending. + assert_eq!( + job.milestones.get(1).unwrap().status, + MilestoneStatus::Pending + ); } +/// cancel_escrow on an escrow where all milestones are already Released +/// still succeeds — no business rule blocks it. #[test] -fn test_multisig_split_refund_illegal_source_state_fails() { +fn test_cancel_escrow_all_milestones_released_still_succeeds() { let env = Env::default(); env.mock_all_auths(); - let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + let amounts = vec![&env, 5_000_i128]; + let (client_addr, freelancer_addr, _, _, token_id, contract_id, escrow) = + setup_funded_escrow(&env, amounts); - // Escrow is funded but NOT multisig locked (illegal source state) - let result = client.try_multisig_split_refund(&admin_addr, &1_000_i128, &5_000_u32, &5_000_u32); - assert_eq!(result, Err(Ok(Error::InvalidStatus))); + escrow.mark_delivered(&freelancer_addr, &0u32); + escrow.approve_milestone(&client_addr, &0u32); + + // Releasing the only milestone empties the contract, and cancel_escrow + // separately rejects a zero balance with InvalidAmount. Top the contract + // back up so this case tests what it says it does -- that Released + // milestones do not themselves block a cancel -- rather than re-testing + // the balance guard. + let token_admin = token::StellarAssetClient::new(&env, &token_id); + token_admin.mint(&contract_id, &1_i128); + + // All milestones released — cancel is still valid. + let result = escrow.try_cancel_escrow(&client_addr); + assert!(result.is_ok()); } diff --git a/contracts/milestone-escrow/src/test_emergency_pause.rs b/contracts/milestone-escrow/src/test_emergency_pause.rs index db14dd9..ff11601 100644 --- a/contracts/milestone-escrow/src/test_emergency_pause.rs +++ b/contracts/milestone-escrow/src/test_emergency_pause.rs @@ -12,7 +12,7 @@ use super::*; use soroban_sdk::{ - testutils::Address as _, testutils::EnvTestConfig, testutils::Events, vec, Address, Env, + testutils::Address as _, testutils::EnvTestConfig, testutils::Events, token, vec, Address, Env, FromVal, IntoVal, Val, }; @@ -57,6 +57,11 @@ fn initialised_escrow(env: &Env) -> (MilestoneEscrowClient<'_>, Address) { &amounts, ); + // Fund the contract so pause-gated refund settlements (which reject an + // empty balance) can proceed in the tests that exercise the split math. + let token_admin = token::StellarAssetClient::new(env, &token_contract_id); + token_admin.mint(&contract_id, &100_000_i128); + (escrow, admin_addr) } @@ -397,6 +402,41 @@ fn test_claim_refund_conserves_odd_totals() { } } +#[test] +fn test_claim_refund_rejects_an_empty_contract_balance() { + let env = test_env(); + env.mock_all_auths(); + + let admin_addr = Address::generate(&env); + let client_addr = Address::generate(&env); + let freelancer_addr = Address::generate(&env); + let arbiter_addr = Address::generate(&env); + + let token_contract_id = env + .register_stellar_asset_contract_v2(admin_addr.clone()) + .address(); + + let contract_id = env.register(MilestoneEscrow, ()); + let escrow = MilestoneEscrowClient::new(&env, &contract_id); + + // Initialised and paused, but never funded: nothing to settle. + escrow.initialize( + &admin_addr, + &client_addr, + &freelancer_addr, + &arbiter_addr, + &token_contract_id, + &604_800u64, + &vec![&env, 1_000_i128], + ); + escrow.emergency_pause(&admin_addr); + + assert_eq!( + escrow.try_emergency_pause_claim_refund(&admin_addr, &1_000_i128, &5_000_u32, &5_000_u32), + Err(Ok(Error::EmptyBalance)) + ); +} + // ============================================================================ // emergency_pause_allocation — high-precision division // ============================================================================ diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_all_terminal_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_all_terminal_returns_invalid_amount.1.json new file mode 100644 index 0000000..70f3001 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_all_terminal_returns_invalid_amount.1.json @@ -0,0 +1,1415 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 2000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 2000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 2000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mark_delivered", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "approve_milestone", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "u64": 0 + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_clears_cancel_lock.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_clears_cancel_lock.1.json new file mode 100644 index 0000000..34df23d --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_clears_cancel_lock.1.json @@ -0,0 +1,1034 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_happy_path_produces_correct_amounts.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_happy_path_produces_correct_amounts.1.json new file mode 100644 index 0000000..0600170 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_happy_path_produces_correct_amounts.1.json @@ -0,0 +1,1132 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 4000 + } + }, + { + "i128": { + "hi": 0, + "lo": 6000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_minimum_valid_amount.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_minimum_valid_amount.1.json new file mode 100644 index 0000000..56fd36c --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_minimum_valid_amount.1.json @@ -0,0 +1,1035 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_multiple_milestones_sum_correctly.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_multiple_milestones_sum_correctly.1.json new file mode 100644 index 0000000..a19c57b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_multiple_milestones_sum_correctly.1.json @@ -0,0 +1,1317 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 100 + } + }, + { + "i128": { + "hi": 0, + "lo": 200 + } + }, + { + "i128": { + "hi": 0, + "lo": 300 + } + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 200 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 200 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 300 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 300 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 3 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 3 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 400 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 400 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_requires_cancel_lock.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_requires_cancel_lock.1.json new file mode 100644 index 0000000..a766745 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_requires_cancel_lock.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_resets_yield_accrued.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_resets_yield_accrued.1.json new file mode 100644 index 0000000..95a0fbe --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_resets_yield_accrued.1.json @@ -0,0 +1,1034 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_skips_terminal_milestones.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_skips_terminal_milestones.1.json new file mode 100644 index 0000000..c07acc3 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_skips_terminal_milestones.1.json @@ -0,0 +1,1586 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "i128": { + "hi": 0, + "lo": 4000 + } + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mark_delivered", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "approve_milestone", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "u64": 0 + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_unauthorized_caller_rejected.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_unauthorized_caller_rejected.1.json new file mode 100644 index 0000000..45da9aa --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_refund_unauthorized_caller_rejected.1.json @@ -0,0 +1,998 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_happy_path_no_temporary_released_flag.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_happy_path_no_temporary_released_flag.1.json new file mode 100644 index 0000000..470690b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_happy_path_no_temporary_released_flag.1.json @@ -0,0 +1,1262 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 3000 + } + }, + { + "i128": { + "hi": 0, + "lo": 7000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_requires_cancel_lock.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_requires_cancel_lock.1.json new file mode 100644 index 0000000..a766745 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_requires_cancel_lock.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_resets_yield_accrued.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_resets_yield_accrued.1.json new file mode 100644 index 0000000..fc29cd0 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_resets_yield_accrued.1.json @@ -0,0 +1,1161 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_skips_terminal_milestones_no_flag.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_skips_terminal_milestones_no_flag.1.json new file mode 100644 index 0000000..331b5e0 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_skips_terminal_milestones_no_flag.1.json @@ -0,0 +1,1642 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 2000 + } + }, + { + "i128": { + "hi": 0, + "lo": 3000 + } + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mark_delivered", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "approve_milestone", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_cancel_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "u64": 0 + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_unauthorized_caller_rejected.1.json b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_unauthorized_caller_rejected.1.json new file mode 100644 index 0000000..6a42be0 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_override_cancel_tests/test_cancel_release_unauthorized_caller_rejected.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_max_rate_10000.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_max_rate_10000.1.json new file mode 100644 index 0000000..b487177 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_max_rate_10000.1.json @@ -0,0 +1,1033 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 10000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 10000 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_minimum_nonzero_rate_1_bps.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_minimum_nonzero_rate_1_bps.1.json new file mode 100644 index 0000000..48bd09b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_minimum_nonzero_rate_1_bps.1.json @@ -0,0 +1,1033 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 1 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_rate_just_below_cap_9999.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_rate_just_below_cap_9999.1.json new file mode 100644 index 0000000..b40a077 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_rate_just_below_cap_9999.1.json @@ -0,0 +1,1033 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 9999 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 9999 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_valid_rate.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_valid_rate.1.json new file mode 100644 index 0000000..d469f3c --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_valid_rate.1.json @@ -0,0 +1,1033 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 500 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 500 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_zero_rate_to_disable_accrual.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_zero_rate_to_disable_accrual.1.json new file mode 100644 index 0000000..0828127 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/admin_can_set_zero_rate_to_disable_accrual.1.json @@ -0,0 +1,1033 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/after_unpause_admin_can_set_yield_rate.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/after_unpause_admin_can_set_yield_rate.1.json new file mode 100644 index 0000000..31d62d3 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/after_unpause_admin_can_set_yield_rate.1.json @@ -0,0 +1,1150 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_unpause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 200 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 200 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/paused_contract_returns_paused_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/paused_contract_returns_paused_and_does_not_mutate_storage.1.json new file mode 100644 index 0000000..74b8965 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/paused_contract_returns_paused_and_does_not_mutate_storage.1.json @@ -0,0 +1,996 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/paused_contract_unauthorized_caller_returns_paused_not_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/paused_contract_unauthorized_caller_returns_paused_not_unauthorized.1.json new file mode 100644 index 0000000..b410023 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/paused_contract_unauthorized_caller_returns_paused_not_unauthorized.1.json @@ -0,0 +1,995 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/rate_above_bps_scale_returns_invalid_ratio_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/rate_above_bps_scale_returns_invalid_ratio_and_does_not_mutate_storage.1.json new file mode 100644 index 0000000..2760db8 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/rate_above_bps_scale_returns_invalid_ratio_and_does_not_mutate_storage.1.json @@ -0,0 +1,932 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/rate_u32_max_returns_invalid_ratio_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/rate_u32_max_returns_invalid_ratio_and_does_not_mutate_storage.1.json new file mode 100644 index 0000000..2230745 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/rate_u32_max_returns_invalid_ratio_and_does_not_mutate_storage.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/repeated_calls_update_rate_correctly.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/repeated_calls_update_rate_correctly.1.json new file mode 100644 index 0000000..6fa72f6 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/repeated_calls_update_rate_correctly.1.json @@ -0,0 +1,1145 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 100 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 750 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_set_yield_rate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "yield_rate" + }, + "val": { + "u32": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json new file mode 100644 index 0000000..1bd86b0 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json @@ -0,0 +1,932 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/unauthorized_caller_with_zero_rate_returns_unauthorized_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/unauthorized_caller_with_zero_rate_returns_unauthorized_and_does_not_mutate_storage.1.json new file mode 100644 index 0000000..e905180 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/unauthorized_caller_with_zero_rate_returns_unauthorized_and_does_not_mutate_storage.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/uninitialized_contract_returns_not_initialized_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/uninitialized_contract_returns_not_initialized_and_does_not_mutate_storage.1.json new file mode 100644 index 0000000..64688ee --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/admin_set_yield_rate_tests/uninitialized_contract_returns_not_initialized_and_does_not_mutate_storage.1.json @@ -0,0 +1,77 @@ +{ + "generators": { + "address": 2, + "nonce": 0 + }, + "auth": [ + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_by_freelancer_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_by_freelancer_succeeds.1.json index 49f1a24..d3321a4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_by_freelancer_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_by_freelancer_succeeds.1.json @@ -538,7 +538,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_invalid_address.1.json b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_invalid_address.1.json index a660b27..2230745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_invalid_address.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_invalid_address.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_not_funded.1.json b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_not_funded.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_not_funded.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_not_funded.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_sets_lock_and_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_sets_lock_and_emits_event.1.json index c5d3519..657a030 100644 --- a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_sets_lock_and_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_sets_lock_and_emits_event.1.json @@ -539,7 +539,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_unauthorized.1.json index 8703679..e905180 100644 --- a/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/cancel_escrow_test/test_cancel_escrow_unauthorized.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/emergency_pause_does_not_block_subsequent_override.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/emergency_pause_does_not_block_subsequent_override.1.json new file mode 100644 index 0000000..841e5b6 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/emergency_pause_does_not_block_subsequent_override.1.json @@ -0,0 +1,1050 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/emergency_pause_lock_is_never_written_by_override.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/emergency_pause_lock_is_never_written_by_override.1.json new file mode 100644 index 0000000..86ca9c1 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/emergency_pause_lock_is_never_written_by_override.1.json @@ -0,0 +1,1153 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/failed_calls_emit_no_emoverrid_event.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/failed_calls_emit_no_emoverrid_event.1.json new file mode 100644 index 0000000..2a36738 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/failed_calls_emit_no_emoverrid_event.1.json @@ -0,0 +1,996 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/interleaved_sequence_produces_correct_final_state.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/interleaved_sequence_produces_correct_final_state.1.json new file mode 100644 index 0000000..5114764 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/interleaved_sequence_produces_correct_final_state.1.json @@ -0,0 +1,1160 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_unpause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/no_op_paused_to_true_returns_invalid_status.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/no_op_paused_to_true_returns_invalid_status.1.json new file mode 100644 index 0000000..66aa0ba --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/no_op_paused_to_true_returns_invalid_status.1.json @@ -0,0 +1,997 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/no_op_unpaused_to_false_returns_invalid_status.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/no_op_unpaused_to_false_returns_invalid_status.1.json new file mode 100644 index 0000000..c1280eb --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/no_op_unpaused_to_false_returns_invalid_status.1.json @@ -0,0 +1,933 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_does_not_leave_lock_that_blocks_emergency_pause.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_does_not_leave_lock_that_blocks_emergency_pause.1.json new file mode 100644 index 0000000..5bad198 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_does_not_leave_lock_that_blocks_emergency_pause.1.json @@ -0,0 +1,1049 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_unpause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_false_to_true_sets_paused_flag.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_false_to_true_sets_paused_flag.1.json new file mode 100644 index 0000000..fd7d0c4 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_false_to_true_sets_paused_flag.1.json @@ -0,0 +1,987 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_round_trip_is_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_round_trip_is_correct.1.json new file mode 100644 index 0000000..f4f1dab --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_round_trip_is_correct.1.json @@ -0,0 +1,1043 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_true_to_false_clears_paused_flag.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_true_to_false_clears_paused_flag.1.json new file mode 100644 index 0000000..99869dc --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_true_to_false_clears_paused_flag.1.json @@ -0,0 +1,1051 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_works_after_admin_pause_escrow_cycle.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_works_after_admin_pause_escrow_cycle.1.json new file mode 100644 index 0000000..24f67e2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/override_works_after_admin_pause_escrow_cycle.1.json @@ -0,0 +1,1115 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_pause_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_resume_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Paused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/success_emits_exactly_one_emoverrid_event_with_correct_payload.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/success_emits_exactly_one_emoverrid_event_with_correct_payload.1.json new file mode 100644 index 0000000..e352a9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/success_emits_exactly_one_emoverrid_event_with_correct_payload.1.json @@ -0,0 +1,1085 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "emoverrid" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "paused" + }, + "val": { + "bool": false + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/unauthorized_caller_returns_unauthorized_and_no_state_change.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/unauthorized_caller_returns_unauthorized_and_no_state_change.1.json new file mode 100644 index 0000000..bd4456d --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_admin_override_tests/unauthorized_caller_returns_unauthorized_and_no_state_change.1.json @@ -0,0 +1,993 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [], + [], + [], + [], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_happy_path_and_event.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_happy_path_and_event.1.json index 3f9416b..479c9f9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_happy_path_and_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_happy_path_and_event.1.json @@ -585,19 +585,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" - } - ] - }, - "val": { - "bool": false - } - }, - { - "key": { - "vec": [ - { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_invalid_state.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_invalid_state.1.json index bd47af8..505cb26 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_invalid_state.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_invalid_state.1.json @@ -527,24 +527,24 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "Ep" } ] }, "val": { - "bool": false + "bool": true } }, { "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "EpLk" } ] }, "val": { - "bool": true + "bool": false } }, { diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_unauthorized.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_admin_override_unauthorized.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_happy_path_and_event.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_happy_path_and_event.1.json index f204578..60e6819 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_happy_path_and_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_happy_path_and_event.1.json @@ -527,24 +527,24 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "Ep" } ] }, "val": { - "bool": false + "bool": true } }, { "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "EpLk" } ] }, "val": { - "bool": true + "bool": false } }, { diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_unauthorized.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_pause_unauthorized.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_happy_path_and_event.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_happy_path_and_event.1.json index 5056b88..ae3b42c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_happy_path_and_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_happy_path_and_event.1.json @@ -578,7 +578,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "Ep" } ] }, @@ -590,7 +590,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "EpLk" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_unauthorized.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/emergency_pause_test/test_emergency_unpause_unauthorized.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/client_freelancer_and_arbiter_are_unauthorized_without_storage_mutation.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/client_freelancer_and_arbiter_are_unauthorized_without_storage_mutation.1.json index 8b3c032..2e87bc9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/client_freelancer_and_arbiter_are_unauthorized_without_storage_mutation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/client_freelancer_and_arbiter_are_unauthorized_without_storage_mutation.1.json @@ -544,7 +544,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/illegal_unlocked_source_state_returns_invalid_status_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/illegal_unlocked_source_state_returns_invalid_status_and_does_not_mutate_storage.1.json index f9f5f21..908b3ad 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/illegal_unlocked_source_state_returns_invalid_status_and_does_not_mutate_storage.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/illegal_unlocked_source_state_returns_invalid_status_and_does_not_mutate_storage.1.json @@ -482,7 +482,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/locked_admin_override_refunds_client_and_clears_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/locked_admin_override_refunds_client_and_clears_lock.1.json index 0779544..b32be29 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/locked_admin_override_refunds_client_and_clears_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/locked_admin_override_refunds_client_and_clears_lock.1.json @@ -588,7 +588,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_negative_amount_returns_invalid_amount_without_panic.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_negative_amount_returns_invalid_amount_without_panic.1.json new file mode 100644 index 0000000..ae7ebdf --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_negative_amount_returns_invalid_amount_without_panic.1.json @@ -0,0 +1,996 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": -9223372036854775808, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_negative_released_amount_returns_invalid_amount_without_panic.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_negative_released_amount_returns_invalid_amount_without_panic.1.json new file mode 100644 index 0000000..7f58810 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_negative_released_amount_returns_invalid_amount_without_panic.1.json @@ -0,0 +1,996 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 9223372036854775807, + "lo": 18446744073709551615 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": -9223372036854775808, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_released_exceeds_amount_returns_invalid_amount_without_panic.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_released_exceeds_amount_returns_invalid_amount_without_panic.1.json new file mode 100644 index 0000000..adef9f9 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_released_exceeds_amount_returns_invalid_amount_without_panic.1.json @@ -0,0 +1,999 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 200 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_valid_amount_equals_amount_minus_released_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_valid_amount_equals_amount_minus_released_amount.1.json new file mode 100644 index 0000000..e3ab08f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/refund_valid_amount_equals_amount_minus_released_amount.1.json @@ -0,0 +1,1053 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_admin_override_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 600 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 400 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json index a729fed..b29d4c1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_admin_override_refund_tests/unauthorized_caller_returns_unauthorized_and_does_not_mutate_storage.1.json @@ -534,7 +534,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_bps_u32_overflow_returns_invalid_ratio.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_bps_u32_overflow_returns_invalid_ratio.1.json new file mode 100644 index 0000000..9b882f2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_bps_u32_overflow_returns_invalid_ratio.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_failed_calls_emit_no_splitref_event.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_failed_calls_emit_no_splitref_event.1.json new file mode 100644 index 0000000..55a05cf --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_failed_calls_emit_no_splitref_event.1.json @@ -0,0 +1,997 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_max_with_nonzero_client_bps_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_max_with_nonzero_client_bps_returns_invalid_amount.1.json new file mode 100644 index 0000000..55a05cf --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_max_with_nonzero_client_bps_returns_invalid_amount.1.json @@ -0,0 +1,997 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_max_with_zero_client_bps_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_max_with_zero_client_bps_succeeds.1.json new file mode 100644 index 0000000..7bec438 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_max_with_zero_client_bps_succeeds.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 9223372036854775807, + "lo": 18446744073709551615 + } + }, + { + "u32": 0 + }, + { + "u32": 10000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 9223372036854775807, + "lo": 18446744073709551615 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 10000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_min_returns_invalid_amount_without_panic.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_min_returns_invalid_amount_without_panic.1.json new file mode 100644 index 0000000..9b882f2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i128_min_returns_invalid_amount_without_panic.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i64_max_even_split_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i64_max_even_split_succeeds.1.json new file mode 100644 index 0000000..f3f0465 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_i64_max_even_split_succeeds.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + }, + { + "u32": 5000 + }, + { + "u32": 5000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4611686018427387904 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 5000 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4611686018427387903 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 5000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_negative_amount_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_negative_amount_returns_invalid_amount.1.json new file mode 100644 index 0000000..55a05cf --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_negative_amount_returns_invalid_amount.1.json @@ -0,0 +1,997 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_even_split_unchanged.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_even_split_unchanged.1.json new file mode 100644 index 0000000..f287d55 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_even_split_unchanged.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "u32": 5000 + }, + { + "u32": 5000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 500 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 5000 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 0, + "lo": 500 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 5000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_extreme_bps_preserves_total_unchanged.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_extreme_bps_preserves_total_unchanged.1.json new file mode 100644 index 0000000..bf1de1b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_extreme_bps_preserves_total_unchanged.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "u32": 1 + }, + { + "u32": 9999 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9999 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 9999 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_odd_amount_rounding_unchanged.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_odd_amount_rounding_unchanged.1.json new file mode 100644 index 0000000..114304a --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_odd_amount_rounding_unchanged.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 101 + } + }, + { + "u32": 5000 + }, + { + "u32": 5000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 51 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 5000 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 0, + "lo": 50 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 5000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_uneven_split_unchanged.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_uneven_split_unchanged.1.json new file mode 100644 index 0000000..2444e5b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_regression_uneven_split_unchanged.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "u32": 7000 + }, + { + "u32": 3000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 700 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 7000 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 0, + "lo": 300 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 3000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_success_emits_exactly_one_splitref_event_with_matching_payload.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_success_emits_exactly_one_splitref_event_with_matching_payload.1.json new file mode 100644 index 0000000..b692cae --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_success_emits_exactly_one_splitref_event_with_matching_payload.1.json @@ -0,0 +1,1117 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_split_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "u32": 6000 + }, + { + "u32": 4000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "splitref" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_refund" + }, + "val": { + "i128": { + "hi": 0, + "lo": 600 + } + } + }, + { + "key": { + "symbol": "client_refund_bps" + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "symbol": "freelancer_payout" + }, + "val": { + "i128": { + "hi": 0, + "lo": 400 + } + } + }, + { + "key": { + "symbol": "freelancer_payout_bps" + }, + "val": { + "u32": 4000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_unauthorized_caller_returns_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_unauthorized_caller_returns_unauthorized.1.json new file mode 100644 index 0000000..a43a5e1 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_unauthorized_caller_returns_unauthorized.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_unlocked_source_state_returns_invalid_status.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_unlocked_source_state_returns_invalid_status.1.json new file mode 100644 index 0000000..a766745 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_unlocked_source_state_returns_invalid_status.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_zero_amount_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_zero_amount_returns_invalid_amount.1.json new file mode 100644 index 0000000..9b882f2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_split_refund_tests/split_refund_zero_amount_returns_invalid_amount.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_attacker_client_freelancer_arbiter_are_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_attacker_client_freelancer_arbiter_are_unauthorized.1.json index 746da6c..9231694 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_attacker_client_freelancer_arbiter_are_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_attacker_client_freelancer_arbiter_are_unauthorized.1.json @@ -401,7 +401,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_disparate_and_sparse_zero_ratios_preserve_total.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_disparate_and_sparse_zero_ratios_preserve_total.1.json index 7d47b56..5ba4644 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_disparate_and_sparse_zero_ratios_preserve_total.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_disparate_and_sparse_zero_ratios_preserve_total.1.json @@ -563,7 +563,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_empty_ratios_return_invalid_ratio.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_empty_ratios_return_invalid_ratio.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_empty_ratios_return_invalid_ratio.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_empty_ratios_return_invalid_ratio.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_equal_two_party_odd_amount_differs_by_at_most_one.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_equal_two_party_odd_amount_differs_by_at_most_one.1.json index bbcdfa5..861a458 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_equal_two_party_odd_amount_differs_by_at_most_one.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_equal_two_party_odd_amount_differs_by_at_most_one.1.json @@ -471,7 +471,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_negative_ratio_and_sum_overflow_and_all_zeros_fail.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_negative_ratio_and_sum_overflow_and_all_zeros_fail.1.json index f8c081d..e46cf6b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_negative_ratio_and_sum_overflow_and_all_zeros_fail.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_negative_ratio_and_sum_overflow_and_all_zeros_fail.1.json @@ -401,7 +401,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_one_unit_and_high_precision_preserve_every_stroop.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_one_unit_and_high_precision_preserve_every_stroop.1.json index cea8336..7ab4a4d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_one_unit_and_high_precision_preserve_every_stroop.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_one_unit_and_high_precision_preserve_every_stroop.1.json @@ -551,7 +551,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_rejected_call_emits_no_event.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_rejected_call_emits_no_event.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_rejected_call_emits_no_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_rejected_call_emits_no_event.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_receives_entire_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_receives_entire_amount.1.json index 3e91bc5..2ffc3ea 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_receives_entire_amount.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_receives_entire_amount.1.json @@ -465,7 +465,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_success_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_success_emits_event.1.json index a732938..f07cbc9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_success_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_single_party_success_emits_event.1.json @@ -465,7 +465,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_success_emits_event_with_matching_payload.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_success_emits_event_with_matching_payload.1.json index 3b083fa..03ed834 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_success_emits_event_with_matching_payload.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_success_emits_event_with_matching_payload.1.json @@ -471,7 +471,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_three_equal_ratios_use_largest_remainder.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_three_equal_ratios_use_largest_remainder.1.json index 7ae167d..c791671 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_three_equal_ratios_use_largest_remainder.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_three_equal_ratios_use_largest_remainder.1.json @@ -477,7 +477,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_too_many_ratios_return_invalid_amount_capacity_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_too_many_ratios_return_invalid_amount_capacity_succeeds.1.json index 6be1149..5d6c1f7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_too_many_ratios_return_invalid_amount_capacity_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_too_many_ratios_return_invalid_amount_capacity_succeeds.1.json @@ -1990,7 +1990,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_weighted_mul_overflow_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_weighted_mul_overflow_returns_invalid_amount.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_weighted_mul_overflow_returns_invalid_amount.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_weighted_mul_overflow_returns_invalid_amount.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_zero_and_negative_total_return_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_zero_and_negative_total_return_invalid_amount.1.json index e2bb961..e564ef0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_zero_and_negative_total_return_invalid_amount.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/multisig_transfer_admin_tests/matrix_zero_and_negative_total_return_invalid_amount.1.json @@ -400,7 +400,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/failed_single_signature_does_not_create_withholding_record.1.json b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/failed_single_signature_does_not_create_withholding_record.1.json index efb9c88..93c1305 100644 --- a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/failed_single_signature_does_not_create_withholding_record.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/failed_single_signature_does_not_create_withholding_record.1.json @@ -736,7 +736,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_client_only_signature.1.json b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_client_only_signature.1.json index 03836ff..b89effb 100644 --- a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_client_only_signature.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_client_only_signature.1.json @@ -507,7 +507,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_disputed_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_disputed_milestone.1.json new file mode 100644 index 0000000..18f0c5d --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_disputed_milestone.1.json @@ -0,0 +1,1030 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "raise_dispute", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DisputeFlag" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DisputeFlag" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Disputed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_freelancer_only_signature.1.json b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_freelancer_only_signature.1.json index c55ef04..9696658 100644 --- a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_freelancer_only_signature.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_rejects_freelancer_only_signature.1.json @@ -507,7 +507,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_requires_both_signatures.1.json b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_requires_both_signatures.1.json index c3b343f..b52fdd6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_requires_both_signatures.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/tax_withholding_tests/tax_withholding_requires_both_signatures.1.json @@ -734,7 +734,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_existing_token_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_existing_token_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_existing_token_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_existing_token_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_after_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_after_funded_fails.1.json index c7abf3f..4569803 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_after_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_after_funded_fails.1.json @@ -554,7 +554,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_at_capacity_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_at_capacity_fails.1.json index 87d45c4..f438190 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_at_capacity_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_at_capacity_fails.1.json @@ -7037,7 +7037,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_cap_resets_after_remove.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_cap_resets_after_remove.1.json index 75d6473..baea7d8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_cap_resets_after_remove.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_cap_resets_after_remove.1.json @@ -7309,7 +7309,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_client_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_client_is_unauthorized.1.json index edc0574..ad79f96 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_client_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_client_is_unauthorized.1.json @@ -420,7 +420,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_does_not_whitelist_other_tokens.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_does_not_whitelist_other_tokens.1.json index d8b6e10..cf4f04c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_does_not_whitelist_other_tokens.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_does_not_whitelist_other_tokens.1.json @@ -558,7 +558,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_duplicate_checked_before_cap.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_duplicate_checked_before_cap.1.json index a0d45ab..fe6765e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_duplicate_checked_before_cap.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_duplicate_checked_before_cap.1.json @@ -6956,7 +6956,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_emits_event.1.json index 65de856..242b5e7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_emits_event.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_failed_does_not_emit_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_failed_does_not_emit_event.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_failed_does_not_emit_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_failed_does_not_emit_event.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_freelancer_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_freelancer_is_unauthorized.1.json index edc0574..ad79f96 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_freelancer_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_freelancer_is_unauthorized.1.json @@ -420,7 +420,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_old_admin_rejected_after_transfer.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_old_admin_rejected_after_transfer.1.json index df9aa84..0d04169 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_old_admin_rejected_after_transfer.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_old_admin_rejected_after_transfer.1.json @@ -611,7 +611,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_one_below_cap_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_one_below_cap_succeeds.1.json index aa8dbdd..69c2009 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_one_below_cap_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_one_below_cap_succeeds.1.json @@ -6956,7 +6956,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_unauthorized_before_cap_check.1.json b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_unauthorized_before_cap_check.1.json index eb36335..2127c5c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_unauthorized_before_cap_check.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_add_whitelisted_token_unauthorized_before_cap_check.1.json @@ -7036,7 +7036,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_add_token.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_add_token.1.json index 5651d05..6b09ca0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_add_token.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_add_token.1.json @@ -478,7 +478,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_clears_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_clears_lock.1.json index 8540507..d48ee7e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_clears_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_clears_lock.1.json @@ -632,7 +632,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_client_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_client_unauthorized.1.json index 3e259d7..9a1cb9b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_client_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_client_unauthorized.1.json @@ -538,7 +538,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_emits_event.1.json index c616ca1..0ff43b0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_emits_event.1.json @@ -631,7 +631,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_happy_path.1.json index 848729f..26d53ff 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_happy_path.1.json @@ -727,7 +727,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_no_lock_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_no_lock_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_no_lock_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_no_lock_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_non_admin_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_non_admin_fails.1.json index 4b26d51..cdae339 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_non_admin_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_non_admin_fails.1.json @@ -538,7 +538,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_not_funded_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_skips_terminal_milestones.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_skips_terminal_milestones.1.json index e798352..6d17839 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_skips_terminal_milestones.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_refund_skips_terminal_milestones.1.json @@ -1017,7 +1017,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_clears_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_clears_lock.1.json index 8433a44..50e3d4a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_clears_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_clears_lock.1.json @@ -677,7 +677,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_emits_event.1.json index 23d382e..56de5f3 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_emits_event.1.json @@ -676,7 +676,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_freelancer_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_freelancer_unauthorized.1.json index 3e259d7..9a1cb9b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_freelancer_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_freelancer_unauthorized.1.json @@ -538,7 +538,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_happy_path.1.json index 9bb4593..5d70f46 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_happy_path.1.json @@ -817,7 +817,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_illegal_source_state_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_illegal_source_state_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_illegal_source_state_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_illegal_source_state_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_no_lock_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_no_lock_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_no_lock_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_no_lock_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_non_admin_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_non_admin_fails.1.json index 4b26d51..cdae339 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_non_admin_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_non_admin_fails.1.json @@ -538,7 +538,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_not_funded_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_skips_terminal_milestones.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_skips_terminal_milestones.1.json index 003044e..3be436e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_skips_terminal_milestones.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_skips_terminal_milestones.1.json @@ -1062,7 +1062,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_unauthorized_fails.1.json index 9f2595c..0d427f8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_cancel_release_unauthorized_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_clears_nonzero_yield.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_clears_nonzero_yield.1.json new file mode 100644 index 0000000..292537b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_clears_nonzero_yield.1.json @@ -0,0 +1,1028 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_not_funded_fails.1.json new file mode 100644 index 0000000..dea49c7 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_not_funded_fails.1.json @@ -0,0 +1,650 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_on_refunded_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_on_refunded_milestone_fails.1.json new file mode 100644 index 0000000..4151356 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_on_refunded_milestone_fails.1.json @@ -0,0 +1,985 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_on_released_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_on_released_milestone_fails.1.json new file mode 100644 index 0000000..1879177 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_on_released_milestone_fails.1.json @@ -0,0 +1,1103 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_requires_admin.1.json new file mode 100644 index 0000000..0d427f8 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_requires_admin.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_skips_yield_write_when_already_zero.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_skips_yield_write_when_already_zero.1.json new file mode 100644 index 0000000..62244a3 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_skips_yield_write_when_already_zero.1.json @@ -0,0 +1,986 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_success.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_success.1.json new file mode 100644 index 0000000..62244a3 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_refund_success.1.json @@ -0,0 +1,986 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_refund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Refunded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_both_min_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_both_min_returns_invalid_amount.1.json new file mode 100644 index 0000000..7c14ed6 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_both_min_returns_invalid_amount.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": -9223372036854775808, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": -9223372036854775808, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_i128_max_amount_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_i128_max_amount_succeeds.1.json new file mode 100644 index 0000000..ff939ec --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_i128_max_amount_succeeds.1.json @@ -0,0 +1,1208 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "admovrls" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_index" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_i128_min_amount_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_i128_min_amount_returns_invalid_amount.1.json new file mode 100644 index 0000000..e06940e --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_i128_min_amount_returns_invalid_amount.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": -9223372036854775808, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_max_minus_min_overflow_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_max_minus_min_overflow_returns_invalid_amount.1.json new file mode 100644 index 0000000..a7930e9 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_max_minus_min_overflow_returns_invalid_amount.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 9223372036854775807, + "lo": 18446744073709551615 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": -9223372036854775808, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_overflow_released_gt_amount_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_overflow_released_gt_amount_returns_invalid_amount.1.json new file mode 100644 index 0000000..0d42812 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_overflow_released_gt_amount_returns_invalid_amount.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 9223372036854775807, + "lo": 18446744073709551615 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_requires_admin.1.json new file mode 100644 index 0000000..0d427f8 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_requires_admin.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_success.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_success.1.json new file mode 100644 index 0000000..8292d6d --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_success.1.json @@ -0,0 +1,1207 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "admovrls" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_index" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_with_yield.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_with_yield.1.json new file mode 100644 index 0000000..cf68224 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_with_yield.1.json @@ -0,0 +1,1146 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "admin_override_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "YieldAccrued" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_zero_remaining_returns_invalid_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_zero_remaining_returns_invalid_amount.1.json new file mode 100644 index 0000000..19db5a4 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_release_zero_remaining_returns_invalid_amount.1.json @@ -0,0 +1,931 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_invalid_time_params_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_invalid_time_params_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_invalid_time_params_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_invalid_time_params_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_requires_disputed_status.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_requires_disputed_status.1.json index a1590d1..0566bdf 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_requires_disputed_status.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_requires_disputed_status.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_succeeds.1.json index a0c8014..4f52173 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_succeeds.1.json @@ -831,7 +831,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_unauthorized_fails.1.json index 57c4ff6..e125c0b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_unauthorized_fails.1.json @@ -630,7 +630,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_zero_elapsed_refunds_client.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_zero_elapsed_refunds_client.1.json index 9cbf0ec..ab61639 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_zero_elapsed_refunds_client.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_streaming_release_zero_elapsed_refunds_client.1.json @@ -696,7 +696,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_client_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_client_unauthorized.1.json index 779bf44..a83d194 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_client_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_client_unauthorized.1.json @@ -562,7 +562,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_emits_event.1.json index 5aef347..5423813 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_emits_event.1.json @@ -529,7 +529,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_happy_path.1.json index ca0d24e..93defb5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_happy_path.1.json @@ -531,7 +531,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_index_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_state.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_state.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_state.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_invalid_state.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_no_lock_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_no_lock_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_no_lock_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_no_lock_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_non_admin_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_non_admin_fails.1.json index 21836b8..65de05a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_non_admin_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_non_admin_fails.1.json @@ -562,7 +562,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_not_funded_fails.1.json index 94f62f2..c1fffa6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_removes_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_removes_lock.1.json index c4f7d98..001c590 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_removes_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_removes_lock.1.json @@ -530,7 +530,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_requires_admin.1.json index 21c08b5..8c3970c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_requires_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_refund_requires_admin.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_emits_event.1.json index e354826..7df37ef 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_emits_event.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_freelancer_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_freelancer_unauthorized.1.json index 779bf44..a83d194 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_freelancer_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_freelancer_unauthorized.1.json @@ -562,7 +562,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_happy_path.1.json index 8a56210..f838e72 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_happy_path.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_invalid_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_invalid_index_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_invalid_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_invalid_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_no_lock_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_no_lock_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_no_lock_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_no_lock_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_non_admin_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_non_admin_fails.1.json index 21836b8..65de05a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_non_admin_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_non_admin_fails.1.json @@ -562,7 +562,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_not_funded_fails.1.json index 94f62f2..c1fffa6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_removes_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_removes_lock.1.json index cf70966..c7c14eb 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_removes_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_override_tax_release_removes_lock.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_blocks_concurrent_admin_pause.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_blocks_concurrent_admin_pause.1.json index 0859859..2e0379a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_blocks_concurrent_admin_pause.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_blocks_concurrent_admin_pause.1.json @@ -401,7 +401,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -413,7 +413,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_released_after_success.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_released_after_success.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_released_after_success.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_pause_escrow_lock_released_after_success.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_remove_token.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_remove_token.1.json index 7d8aca8..691b6d3 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_remove_token.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_remove_token.1.json @@ -531,7 +531,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_admin_tax_withholding_deductions_zero_balance_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_admin_tax_withholding_deductions_zero_balance_fails.1.json index 4eae310..c2f257d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_admin_tax_withholding_deductions_zero_balance_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_admin_tax_withholding_deductions_zero_balance_fails.1.json @@ -502,7 +502,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_full_refund_status.1.json b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_full_refund_status.1.json index 25c3a41..3a36ea8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_full_refund_status.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_full_refund_status.1.json @@ -677,7 +677,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_odd_amounts.1.json b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_odd_amounts.1.json index d7249d1..4db865a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_odd_amounts.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_odd_amounts.1.json @@ -811,7 +811,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_transfers_percentages.1.json b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_transfers_percentages.1.json index 763c304..f3c3abf 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_transfers_percentages.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_transfers_percentages.1.json @@ -943,7 +943,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_unauthorized_fails.1.json index c9b2ef7..512e565 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_unauthorized_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_wrong_status_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_apply_dispute_arbitration_split_wrong_status_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_emits_event.1.json index c8ea79b..8538bc3 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_emits_event.1.json @@ -763,7 +763,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_invalid_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_invalid_index_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_invalid_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_invalid_index_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_max_i128_checked_math_no_overflow.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_max_i128_checked_math_no_overflow.1.json index ba5a7c7..6906a63 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_max_i128_checked_math_no_overflow.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_max_i128_checked_math_no_overflow.1.json @@ -766,7 +766,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_disputed_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_disputed_milestone_fails.1.json index 2fad638..fb73b33 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_disputed_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_disputed_milestone_fails.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_refunded_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_refunded_milestone_fails.1.json index 6a9d7b8..0091355 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_refunded_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_on_refunded_milestone_fails.1.json @@ -732,7 +732,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_overflow_checked_math_returns_error.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_overflow_checked_math_returns_error.1.json index e6466d9..3cf7a5c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_overflow_checked_math_returns_error.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_overflow_checked_math_returns_error.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_state_transitions.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_state_transitions.1.json index 0e32cd8..75e43f5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_state_transitions.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_state_transitions.1.json @@ -1966,7 +1966,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_writes_temporary_released_flag.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_writes_temporary_released_flag.1.json index 288c1f9..d7906f2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_writes_temporary_released_flag.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_writes_temporary_released_flag.1.json @@ -769,7 +769,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_wrong_status_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_wrong_status_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_account_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_account_address_fails.1.json index c0de78c..1141caa 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_account_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_account_address_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_contract_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_contract_address_fails.1.json index c0de78c..1141caa 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_contract_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_milestone_zero_contract_address_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_arbiter_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_arbiter_is_unauthorized.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_arbiter_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_arbiter_is_unauthorized.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_before_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_before_funded_fails.1.json index 00759d3..fd89e3c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_before_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_before_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_does_not_mutate_sibling_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_does_not_mutate_sibling_milestone.1.json index f062d94..36edf32 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_does_not_mutate_sibling_milestone.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_does_not_mutate_sibling_milestone.1.json @@ -729,7 +729,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_approved_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_approved_event.1.json index 0de20a9..81d9a1d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_approved_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_approved_event.1.json @@ -634,7 +634,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_exactly_one_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_exactly_one_event.1.json index 0de20a9..81d9a1d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_exactly_one_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_emits_exactly_one_event.1.json @@ -634,7 +634,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exact_remaining_balance_transitions_to_released.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exact_remaining_balance_transitions_to_released.1.json index 1e7a547..a4cfdf6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exact_remaining_balance_transitions_to_released.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exact_remaining_balance_transitions_to_released.1.json @@ -835,7 +835,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exceeds_remaining_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exceeds_remaining_amount_fails.1.json index db1f15f..6dcf17b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exceeds_remaining_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_exceeds_remaining_amount_fails.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_freelancer_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_freelancer_is_unauthorized.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_freelancer_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_freelancer_is_unauthorized.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_index_out_of_range_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_index_out_of_range_fails.1.json index 517b5c7..0b10474 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_index_out_of_range_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_index_out_of_range_fails.1.json @@ -569,7 +569,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_invalid_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_invalid_milestone_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_invalid_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_invalid_milestone_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_large_amounts_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_large_amounts_fails.1.json index e6466d9..3cf7a5c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_large_amounts_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_large_amounts_fails.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_negative_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_negative_amount_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_negative_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_negative_amount_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_nonexistent_milestone_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_nonexistent_milestone_index_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_nonexistent_milestone_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_nonexistent_milestone_index_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_disputed_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_disputed_milestone_fails.1.json index 2fad638..fb73b33 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_disputed_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_disputed_milestone_fails.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_refunded_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_refunded_milestone_fails.1.json index 6a9d7b8..0091355 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_refunded_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_on_refunded_milestone_fails.1.json @@ -732,7 +732,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_over_release_after_prior_partial_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_over_release_after_prior_partial_fails.1.json index db1f15f..6dcf17b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_over_release_after_prior_partial_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_over_release_after_prior_partial_fails.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_state_transitions.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_state_transitions.1.json index b7faa6c..42a5fc1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_state_transitions.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_state_transitions.1.json @@ -898,7 +898,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_unauthorized_partial_release_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_unauthorized_partial_release_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_unauthorized_partial_release_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_unauthorized_partial_release_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_wrong_status_fails.1.json index 8f18f8f..3e121bf 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_wrong_status_fails.1.json @@ -765,7 +765,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_zero_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_zero_amount_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_zero_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_approve_partial_zero_amount_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_calculate_platform_fee_split_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_calculate_platform_fee_split_emits_structured_event.1.json new file mode 100644 index 0000000..f10c746 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_calculate_platform_fee_split_emits_structured_event.1.json @@ -0,0 +1,789 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "set_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 2000 + }, + { + "u32": 7000 + }, + { + "u32": 1000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 2000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 7000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocationLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "pf_split" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 200 + } + } + }, + { + "key": { + "symbol": "freelancer_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 700 + } + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "treasury_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_happy_path.1.json index d0b9b0e..d860a67 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_happy_path.1.json @@ -450,7 +450,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_fails.1.json index 4b6fcdf..9d874ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_rejected.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_rejected.1.json index f327b01..16de985 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_rejected.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_no_pending_rejected.1.json @@ -342,7 +342,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_proposal_clears_lock_and_allows_new_proposal.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_proposal_clears_lock_and_allows_new_proposal.1.json index 4a4a811..a06027e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_proposal_clears_lock_and_allows_new_proposal.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_proposal_clears_lock_and_allows_new_proposal.1.json @@ -633,7 +633,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_unauthorized_no_mutation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_unauthorized_no_mutation.1.json index 67a8cc4..83fc679 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_unauthorized_no_mutation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_admin_transfer_unauthorized_no_mutation.1.json @@ -455,7 +455,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_admin_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_admin_unauthorized.1.json new file mode 100644 index 0000000..b838de2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_admin_unauthorized.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_all_milestones_released_still_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_all_milestones_released_still_succeeds.1.json new file mode 100644 index 0000000..cef2ac6 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_all_milestones_released_still_succeeds.1.json @@ -0,0 +1,1503 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mark_delivered", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "approve_milestone", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "u64": 0 + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "MilestoneReleased" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Reputation" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_arbiter_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_arbiter_unauthorized.1.json new file mode 100644 index 0000000..b838de2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_arbiter_unauthorized.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_before_fund_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_before_fund_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_before_fund_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_before_fund_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_approve_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_approve_milestone.1.json new file mode 100644 index 0000000..9a1cb9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_approve_milestone.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_fund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_fund.1.json new file mode 100644 index 0000000..9a1cb9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_fund.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_mark_delivered.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_mark_delivered.1.json new file mode 100644 index 0000000..9a1cb9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_mark_delivered.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_raise_dispute.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_raise_dispute.1.json new file mode 100644 index 0000000..9a1cb9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_blocks_raise_dispute.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_client_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_client_succeeds.1.json new file mode 100644 index 0000000..ce5e391 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_client_succeeds.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_does_not_mutate_milestones.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_does_not_mutate_milestones.1.json new file mode 100644 index 0000000..b0314f8 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_does_not_mutate_milestones.1.json @@ -0,0 +1,1188 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 3000 + } + }, + { + "i128": { + "hi": 0, + "lo": 7000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mark_delivered", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "DeliveredAt" + }, + { + "u32": 0 + } + ] + }, + "durability": "temporary", + "val": { + "u64": 0 + } + } + }, + "ext": "v0" + }, + 15 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Delivered" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_duplicate_call_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_duplicate_call_fails.1.json new file mode 100644 index 0000000..9a1cb9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_duplicate_call_fails.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_exactly_one_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_exactly_one_event.1.json new file mode 100644 index 0000000..ce5e391 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_exactly_one_event.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_structured_event.1.json index 2722518..da58944 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_structured_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_emits_structured_event.1.json @@ -537,7 +537,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -1012,6 +1012,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, { "key": { "symbol": "contract_id" @@ -1019,6 +1035,41 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } } ] } diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_empty_balance_emits_no_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_empty_balance_emits_no_event.1.json index d2b45cc..23e0701 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_empty_balance_emits_no_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_empty_balance_emits_no_event.1.json @@ -443,7 +443,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_address.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_address.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_address.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_false_for_freelancer.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_false_for_freelancer.1.json new file mode 100644 index 0000000..79edff4 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_false_for_freelancer.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_true_for_client.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_true_for_client.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_client_true_for_client.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_freelancer_address.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_freelancer_address.1.json new file mode 100644 index 0000000..79edff4 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_caller_is_freelancer_address.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_client_field_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_client_field_correct.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_client_field_correct.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_contains_correct_caller.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_contains_correct_caller.1.json new file mode 100644 index 0000000..fec4ff6 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_contains_correct_caller.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_contract_id_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_contract_id_correct.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_contract_id_correct.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_emitted_exactly_once.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_emitted_exactly_once.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_emitted_exactly_once.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_freelancer_field_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_freelancer_field_correct.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_freelancer_field_correct.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_full_indexer_parse.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_full_indexer_parse.1.json new file mode 100644 index 0000000..308bbc7 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_full_indexer_parse.1.json @@ -0,0 +1,1176 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 4000 + } + }, + { + "i128": { + "hi": 0, + "lo": 6000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_milestone_count_multiple.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_milestone_count_multiple.1.json new file mode 100644 index 0000000..ccfdedb --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_milestone_count_multiple.1.json @@ -0,0 +1,1270 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 6000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "i128": { + "hi": 0, + "lo": 2000 + } + }, + { + "i128": { + "hi": 0, + "lo": 3000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 6000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_milestone_count_single.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_milestone_count_single.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_milestone_count_single.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_token_field_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_token_field_correct.1.json new file mode 100644 index 0000000..733103f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_token_field_correct.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_total_amount_correct_multi_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_total_amount_correct_multi_milestone.1.json new file mode 100644 index 0000000..ccfdedb --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_total_amount_correct_multi_milestone.1.json @@ -0,0 +1,1270 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 6000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "i128": { + "hi": 0, + "lo": 2000 + } + }, + { + "i128": { + "hi": 0, + "lo": 3000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 6000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 3000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 6000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_total_amount_correct_single_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_total_amount_correct_single_milestone.1.json new file mode 100644 index 0000000..b816ecb --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_event_total_amount_correct_single_milestone.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 7500 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 7500 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 7500 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7500 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EmergencyPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7500 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7500 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7500 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_can_cancel.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_can_cancel.1.json index c4ce12c..3a4a400 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_can_cancel.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_can_cancel.1.json @@ -537,7 +537,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -1012,6 +1012,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" } }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, { "key": { "symbol": "contract_id" @@ -1019,6 +1035,41 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 4000 + } + } } ] } diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_duplicate_after_client_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_duplicate_after_client_fails.1.json new file mode 100644 index 0000000..9a1cb9b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_duplicate_after_client_fails.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_succeeds.1.json new file mode 100644 index 0000000..fec4ff6 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_freelancer_succeeds.1.json @@ -0,0 +1,1082 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "cancel" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "caller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "contract_id" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_non_party_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_non_party_fails.1.json index 776a818..1835ac1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_non_party_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_non_party_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_funded_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_initialized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_initialized_fails.1.json new file mode 100644 index 0000000..5655749 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_not_initialized_fails.1.json @@ -0,0 +1,76 @@ +{ + "generators": { + "address": 2, + "nonce": 0 + }, + "auth": [ + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_externally.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_externally.1.json index 5160d81..3c858d9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_externally.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_externally.1.json @@ -444,7 +444,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_to_exact_zero.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_to_exact_zero.1.json index 540d4a7..8933fb7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_to_exact_zero.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_drained_to_exact_zero.1.json @@ -493,7 +493,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_zero_after_full_release.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_zero_after_full_release.1.json index 1d91742..5bf8e1f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_zero_after_full_release.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_rejected_when_balance_zero_after_full_release.1.json @@ -1059,7 +1059,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_sets_lock_and_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_sets_lock_and_emits_event.1.json index 8ea0ae8..2248dc6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_sets_lock_and_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_sets_lock_and_emits_event.1.json @@ -537,7 +537,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_stranger_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_stranger_unauthorized.1.json new file mode 100644 index 0000000..1835ac1 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_stranger_unauthorized.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_partial_balance.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_partial_balance.1.json index aabdcb7..d59a17f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_partial_balance.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_partial_balance.1.json @@ -555,7 +555,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -772,6 +772,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, { "key": { "symbol": "contract_id" @@ -779,6 +795,41 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000 + } + } } ] } diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_positive_balance.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_positive_balance.1.json index 8ea0ae8..ce5e391 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_positive_balance.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_succeeds_with_positive_balance.1.json @@ -537,7 +537,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -1012,6 +1012,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, + { + "key": { + "symbol": "caller_is_client" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, { "key": { "symbol": "contract_id" @@ -1019,6 +1035,41 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } } ] } diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_unauthorized_caller_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_unauthorized_caller_fails.1.json index 9f2595c..0d427f8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_unauthorized_caller_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_unauthorized_caller_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_uses_compact_lock_key.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_uses_compact_lock_key.1.json new file mode 100644 index 0000000..32f5fc3 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_uses_compact_lock_key.1.json @@ -0,0 +1,995 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "cancel_escrow", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "CancelLock" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_while_paused_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_while_paused_fails.1.json new file mode 100644 index 0000000..d50a53a --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_while_paused_fails.1.json @@ -0,0 +1,994 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_account_address_rejected.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_account_address_rejected.1.json new file mode 100644 index 0000000..b838de2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_account_address_rejected.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_address_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_address_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_rejected.1.json b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_rejected.1.json new file mode 100644 index 0000000..b838de2 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_cancel_escrow_zero_contract_address_rejected.1.json @@ -0,0 +1,930 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 5000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_after_deadline_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_after_deadline_succeeds.1.json index 173d954..47ea5df 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_after_deadline_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_after_deadline_succeeds.1.json @@ -721,7 +721,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_before_deadline_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_before_deadline_fails.1.json index da8b21b..e9a3573 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_before_deadline_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_before_deadline_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_disputed_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_disputed_status_fails.1.json index 16da8f2..6e4d2c3 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_disputed_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_disputed_status_fails.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_double_execution_reverts.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_double_execution_reverts.1.json index cf399ef..0294b7b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_double_execution_reverts.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_double_execution_reverts.1.json @@ -723,7 +723,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_invalid_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_invalid_milestone_fails.1.json index 7d4d238..5373aa5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_invalid_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_invalid_milestone_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_max_i128_checked_math_no_overflow.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_max_i128_checked_math_no_overflow.1.json index aa4331c..38d58df 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_max_i128_checked_math_no_overflow.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_max_i128_checked_math_no_overflow.1.json @@ -721,7 +721,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_no_auth_provided_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_no_auth_provided_fails.1.json index c13d6f0..c3425d0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_no_auth_provided_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_no_auth_provided_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_out_of_bounds_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_out_of_bounds_index_fails.1.json index 923feea..825fcfd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_out_of_bounds_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_out_of_bounds_index_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_overflow_checked_math_returns_error.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_overflow_checked_math_returns_error.1.json index de33469..2368977 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_overflow_checked_math_returns_error.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_overflow_checked_math_returns_error.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_partially_released_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_partially_released_status_fails.1.json index a4cd827..7164993 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_partially_released_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_partially_released_status_fails.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_unauthorized_fails.1.json index b1ec509..40caf14 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_unauthorized_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_uses_temporary_storage_for_deadline.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_uses_temporary_storage_for_deadline.1.json index d416450..99af9bd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_uses_temporary_storage_for_deadline.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_uses_temporary_storage_for_deadline.1.json @@ -722,7 +722,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_identity_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_identity_unauthorized.1.json index 8c7f85e..4b85772 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_identity_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_identity_unauthorized.1.json @@ -608,7 +608,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_status_fails.1.json index fca0c61..107f88a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_wrong_status_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_zero_remaining_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_zero_remaining_amount_fails.1.json index 4424839..e5c60e6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_zero_remaining_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_claim_auto_release_zero_remaining_amount_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_compact_temporary_storage_key.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_compact_temporary_storage_key.1.json index 3960edf..6921d7f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_compact_temporary_storage_key.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_compact_temporary_storage_key.1.json @@ -963,7 +963,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_apply_isolation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_apply_isolation.1.json index 01e4d1c..39cd093 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_apply_isolation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_apply_isolation.1.json @@ -964,7 +964,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_auth_roles.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_auth_roles.1.json index 73cdcbc..a3133b1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_auth_roles.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_auth_roles.1.json @@ -869,7 +869,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_odd_amounts.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_odd_amounts.1.json index 80115c9..71d1790 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_odd_amounts.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_odd_amounts.1.json @@ -869,7 +869,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_status_gates.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_status_gates.1.json index 1ed9dd0..5c95d01 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_status_gates.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_arbitration_split_workflow_matrix_status_gates.1.json @@ -869,7 +869,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_not_set_before_raise_dispute.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_not_set_before_raise_dispute.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_not_set_before_raise_dispute.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_not_set_before_raise_dispute.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_only_sets_targeted_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_only_sets_targeted_milestone.1.json index c5d283c..968ed4b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_only_sets_targeted_milestone.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_flag_only_sets_targeted_milestone.1.json @@ -669,7 +669,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_refund_to_client.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_refund_to_client.1.json index a009e6c..f5726e9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_refund_to_client.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_refund_to_client.1.json @@ -632,7 +632,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_dispute_release_to_freelancer.1.json b/contracts/milestone-escrow/test_snapshots/test/test_dispute_release_to_freelancer.1.json index c29c989..a490db0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_dispute_release_to_freelancer.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_dispute_release_to_freelancer.1.json @@ -822,7 +822,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_double_fund_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_double_fund_fails.1.json index bf8573f..fb11d23 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_double_fund_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_double_fund_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_double_initialize_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_double_initialize_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_double_initialize_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_double_initialize_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_admin_override_requires_verified_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_admin_override_requires_verified_admin.1.json index 21c08b5..8c3970c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_admin_override_requires_verified_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_admin_override_requires_verified_admin.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_milestone.1.json index 9f67774..73aa6ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_milestone.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_milestone.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -588,7 +588,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_partial.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_partial.1.json index 9f67774..73aa6ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_partial.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_approve_partial.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -588,7 +588,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_cancel_escrow.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_cancel_escrow.1.json index e5e02b8..a261d68 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_cancel_escrow.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_cancel_escrow.1.json @@ -476,7 +476,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -488,7 +488,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_claim_auto_release.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_claim_auto_release.1.json index 94a0b68..03664bf 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_claim_auto_release.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_claim_auto_release.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -588,7 +588,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_concurrent_emergency_pause.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_concurrent_emergency_pause.1.json index 38c516a..ff4eac5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_concurrent_emergency_pause.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_concurrent_emergency_pause.1.json @@ -478,7 +478,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -490,7 +490,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_extend_milestone_deadline.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_extend_milestone_deadline.1.json index 9f67774..73aa6ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_extend_milestone_deadline.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_extend_milestone_deadline.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -588,7 +588,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_fund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_fund.1.json index a6e93b3..448eb33 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_fund.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_fund.1.json @@ -400,7 +400,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -412,7 +412,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_mark_delivered.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_mark_delivered.1.json index e5e02b8..a261d68 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_mark_delivered.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_mark_delivered.1.json @@ -476,7 +476,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -488,7 +488,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_raise_dispute.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_raise_dispute.1.json index 9f67774..73aa6ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_raise_dispute.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_raise_dispute.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -588,7 +588,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_resolve_dispute.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_resolve_dispute.1.json index 368e9ba..24fb33e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_resolve_dispute.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_resolve_dispute.1.json @@ -631,7 +631,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -643,7 +643,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_set_platform_fee_allocation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_set_platform_fee_allocation.1.json index fd9a243..9a763ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_set_platform_fee_allocation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_blocks_set_platform_fee_allocation.1.json @@ -537,7 +537,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -549,7 +549,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_admin_override_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_admin_override_succeeds.1.json index a905ccc..fcc905e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_admin_override_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_admin_override_succeeds.1.json @@ -749,7 +749,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -761,7 +761,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_pause_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_pause_succeeds.1.json index 5252a07..bf403ce 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_pause_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_lock_released_after_pause_succeeds.1.json @@ -872,7 +872,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -884,7 +884,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_override_unblocks_operations.1.json b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_override_unblocks_operations.1.json index 88dc094..06256cd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_override_unblocks_operations.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_emergency_pause_override_unblocks_operations.1.json @@ -685,7 +685,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPauseLock" + "symbol": "EpLk" } ] }, @@ -697,7 +697,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_admin_rate_rejects_invalid_bps.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_admin_rate_rejects_invalid_bps.1.json index c0e9c70..81731df 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_admin_rate_rejects_invalid_bps.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_admin_rate_rejects_invalid_bps.1.json @@ -624,7 +624,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_both_sign_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_both_sign_succeeds.1.json index 468b233..669f846 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_both_sign_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_both_sign_succeeds.1.json @@ -510,7 +510,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_invalid_ratio_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_invalid_ratio_fails.1.json index 40395a4..5847343 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_invalid_ratio_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_invalid_ratio_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_non_admin_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_non_admin_fails.1.json index dbf8a48..6009454 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_non_admin_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_non_admin_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_respects_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_respects_lock.1.json index f72a2d3..18fe51a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_respects_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_respects_lock.1.json @@ -562,7 +562,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_single_signature_reverts.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_single_signature_reverts.1.json index 8b9b5c3..22dd3cb 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_single_signature_reverts.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_consent_single_signature_reverts.1.json @@ -407,7 +407,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_get_before_set_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_get_before_set_fails.1.json index 83da0e0..2760db8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_get_before_set_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_get_before_set_fails.1.json @@ -476,7 +476,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_blocks_modifications.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_blocks_modifications.1.json index 83f13cb..c358565 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_blocks_modifications.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_blocks_modifications.1.json @@ -586,7 +586,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_requires_admin.1.json index ab63b4c..514a6ec 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_requires_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_requires_admin.1.json @@ -534,7 +534,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_unlock_workflow.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_unlock_workflow.1.json index 241b23b..9762fc4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_unlock_workflow.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_lock_unlock_workflow.1.json @@ -564,7 +564,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_overflow_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_overflow_fails.1.json index a90f00a..90577a3 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_overflow_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_overflow_fails.1.json @@ -4,6 +4,7 @@ "nonce": 0 }, "auth": [ + [], [], [] ], diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_boundary_shares_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_boundary_shares_succeeds.1.json index 36bf446..cefad1a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_boundary_shares_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_boundary_shares_succeeds.1.json @@ -591,7 +591,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_invalid_share_total_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_invalid_share_total_fails.1.json index 3eb04c8..7d76386 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_invalid_share_total_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_invalid_share_total_fails.1.json @@ -341,7 +341,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_rejects_invalid_bps.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_rejects_invalid_bps.1.json index 83da0e0..2760db8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_rejects_invalid_bps.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_rejects_invalid_bps.1.json @@ -476,7 +476,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_and_get.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_and_get.1.json index 1281a0f..d1694e1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_and_get.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_and_get.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_succeeds.1.json index bd2f502..c2701f2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_set_valid_config_succeeds.1.json @@ -533,7 +533,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unauthorized_admin_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unauthorized_admin_fails.1.json index dbf8a48..6009454 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unauthorized_admin_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unauthorized_admin_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unlock_allows_modifications.1.json b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unlock_allows_modifications.1.json index 64e73b5..45b9b7d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unlock_allows_modifications.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_escrow_interest_yield_unlock_allows_modifications.1.json @@ -695,7 +695,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_before_threshold_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_before_threshold_fails.1.json index 60b8b1b..22306b2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_before_threshold_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_before_threshold_fails.1.json @@ -590,7 +590,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_no_pending_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_no_pending_fails.1.json index 4b6fcdf..9d874ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_no_pending_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_no_pending_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_succeeds_after_threshold.1.json b/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_succeeds_after_threshold.1.json index b985659..64b430d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_succeeds_after_threshold.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_execute_admin_transfer_succeeds_after_threshold.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_invalid_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_invalid_status_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_invalid_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_invalid_status_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_not_client_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_not_client_fails.1.json index 7eefac2..678662d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_not_client_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_not_client_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_succeeds.1.json index d139ea2..70a64ed 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_succeeds.1.json @@ -608,7 +608,7 @@ } ] }, - "durability": "persistent" + "durability": "temporary" } }, [ @@ -628,7 +628,7 @@ } ] }, - "durability": "persistent", + "durability": "temporary", "val": { "u64": 1000 } @@ -636,7 +636,7 @@ }, "ext": "v0" }, - 4095 + 15 ] ], [ @@ -678,7 +678,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_zero_seconds_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_zero_seconds_fails.1.json index 7eefac2..678662d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_zero_seconds_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_extend_milestone_deadline_zero_seconds_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_failed_fund_does_not_emit_fund_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_failed_fund_does_not_emit_fund_event.1.json index a7c2f04..88ab625 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_failed_fund_does_not_emit_fund_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_failed_fund_does_not_emit_fund_event.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_failed_raise_dispute_does_not_emit_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_failed_raise_dispute_does_not_emit_event.1.json index 141bd14..ba228d6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_failed_raise_dispute_does_not_emit_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_failed_raise_dispute_does_not_emit_event.1.json @@ -529,7 +529,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_full_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_full_happy_path.1.json index 95242aa..8634d2c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_full_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_full_happy_path.1.json @@ -1064,7 +1064,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_emits_structured_event.1.json index 4956bbf..83097f4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_emits_structured_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_emits_structured_event.1.json @@ -567,7 +567,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_fails_without_balance.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_fails_without_balance.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_fails_without_balance.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_fails_without_balance.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_reentrancy_guard_blocks_callback_fund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_reentrancy_guard_blocks_callback_fund.1.json index b93790a..bd2b7c8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_reentrancy_guard_blocks_callback_fund.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_reentrancy_guard_blocks_callback_fund.1.json @@ -456,7 +456,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_missing_milestone_index.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_missing_milestone_index.1.json index a9870d1..087b5a9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_missing_milestone_index.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_missing_milestone_index.1.json @@ -407,7 +407,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_negative_milestone_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_negative_milestone_amount.1.json index 337a118..9dabfee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_negative_milestone_amount.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_negative_milestone_amount.1.json @@ -401,7 +401,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_wrong_client.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_wrong_client.1.json index a7c2f04..88ab625 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_wrong_client.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_wrong_client.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_zero_milestone_amount.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_zero_milestone_amount.1.json index 2832843..864abb4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_zero_milestone_amount.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_rejects_zero_milestone_amount.1.json @@ -401,7 +401,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_fund_uses_cached_total_for_many_milestones.1.json b/contracts/milestone-escrow/test_snapshots/test/test_fund_uses_cached_total_for_many_milestones.1.json index 15c1e2a..345149c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_fund_uses_cached_total_for_many_milestones.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_fund_uses_cached_total_for_many_milestones.1.json @@ -9782,7 +9782,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_initialize_already_initialized_returns_correct_error.1.json b/contracts/milestone-escrow/test_snapshots/test/test_initialize_already_initialized_returns_correct_error.1.json index 3fcb8b9..edda048 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_initialize_already_initialized_returns_correct_error.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_initialize_already_initialized_returns_correct_error.1.json @@ -341,7 +341,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_initialize_multiple_milestones_all_pending_correct_amounts.1.json b/contracts/milestone-escrow/test_snapshots/test/test_initialize_multiple_milestones_all_pending_correct_amounts.1.json index 92ed500..71abff2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_initialize_multiple_milestones_all_pending_correct_amounts.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_initialize_multiple_milestones_all_pending_correct_amounts.1.json @@ -758,7 +758,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_initialize_single_milestone_state_is_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/test_initialize_single_milestone_state_is_correct.1.json index 0be0ef7..decb65c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_initialize_single_milestone_state_is_correct.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_initialize_single_milestone_state_is_correct.1.json @@ -341,7 +341,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_initialize_state_transition_matrix.1.json b/contracts/milestone-escrow/test_snapshots/test/test_initialize_state_transition_matrix.1.json index a1bc046..65961aa 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_initialize_state_transition_matrix.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_initialize_state_transition_matrix.1.json @@ -1172,7 +1172,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -1689,7 +1689,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -2071,7 +2071,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_invalid_milestone_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_invalid_milestone_index_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_invalid_milestone_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_invalid_milestone_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_is_multisig_approved_query.1.json b/contracts/milestone-escrow/test_snapshots/test/test_is_multisig_approved_query.1.json index 8b9e92a..eaa0b3b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_is_multisig_approved_query.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_is_multisig_approved_query.1.json @@ -622,7 +622,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_lock_platform_fee_allocation_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_lock_platform_fee_allocation_emits_structured_event.1.json new file mode 100644 index 0000000..89b442f --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_lock_platform_fee_allocation_emits_structured_event.1.json @@ -0,0 +1,828 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "set_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 3000 + }, + { + "u32": 6000 + }, + { + "u32": 1000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "lock_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 3000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocationLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "pf_lock" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 3000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_disputed_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_disputed_fails.1.json index b0ee819..0c12779 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_disputed_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_disputed_fails.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_partially_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_partially_released_fails.1.json index 95b52bb..e11f7bd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_partially_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_partially_released_fails.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_refunded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_refunded_fails.1.json index b9a8d53..fceafe2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_refunded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_refunded_fails.1.json @@ -732,7 +732,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_released_fails.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_after_released_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_before_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_before_funded_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_before_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_before_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_invalid_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_invalid_amount_fails.1.json index bce8748..4992e44 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_invalid_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_invalid_amount_fails.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_refunded_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_refunded_milestone_fails.1.json index d912459..c96c2c5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_refunded_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_refunded_milestone_fails.1.json @@ -733,7 +733,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_released_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_released_milestone_fails.1.json index db18e27..9ccace2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_released_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_on_released_milestone_fails.1.json @@ -765,7 +765,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.1.json index 4ea8bf5..b074a73 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.1.json @@ -1506,7 +1506,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.2.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.2.json index 11e48f2..a115156 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.2.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_state_transitions.2.json @@ -831,7 +831,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_u32_max_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_u32_max_index_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_u32_max_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_u32_max_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_arbiter_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_arbiter_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_arbiter_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_arbiter_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_freelancer_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_freelancer_fails.1.json index 3b45b9f..ac09646 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_freelancer_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_unauthorized_freelancer_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_caller_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_caller_is_unauthorized.1.json index 63d867e..dbbb0f8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_caller_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_caller_is_unauthorized.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_status_fails.1.json index a1590d1..0566bdf 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_wrong_status_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_zero_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_zero_address_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_zero_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_mark_delivered_zero_address_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multiple_partial_releases_sum_full.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multiple_partial_releases_sum_full.1.json index 9650555..3a6f275 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multiple_partial_releases_sum_full.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multiple_partial_releases_sum_full.1.json @@ -894,7 +894,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_2_of_3_satisfied_by_two_signers.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_2_of_3_satisfied_by_two_signers.1.json index 3c0e095..4882b93 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_2_of_3_satisfied_by_two_signers.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_2_of_3_satisfied_by_two_signers.1.json @@ -498,7 +498,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_emits_event.1.json index 29b8357..71dd246 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_emits_event.1.json @@ -580,7 +580,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_requires_admin.1.json index ec95067..e9e0715 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_requires_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_refund_requires_admin.1.json @@ -584,7 +584,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_emits_event.1.json index 3f15774..94e124c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_emits_event.1.json @@ -489,51 +489,6 @@ 4095 ] ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "vec": [ - { - "symbol": "MilestoneReleased" - }, - { - "u32": 0 - } - ] - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "vec": [ - { - "symbol": "MilestoneReleased" - }, - { - "u32": 0 - } - ] - }, - "durability": "temporary", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - 15 - ] - ], [ { "contract_data": { @@ -573,7 +528,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_not_funded_fails.1.json index c4467a0..dea49c7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_on_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_on_released_fails.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_on_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_on_released_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_reduced_storage_footprint.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_reduced_storage_footprint.1.json new file mode 100644 index 0000000..ae93f39 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_reduced_storage_footprint.1.json @@ -0,0 +1,1129 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_lock", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "multisig_admin_override_release", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultisigLocked" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_requires_admin.1.json index a6e16a4..bea6864 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_requires_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_admin_override_release_requires_admin.1.json @@ -493,51 +493,6 @@ 4095 ] ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "vec": [ - { - "symbol": "MilestoneReleased" - }, - { - "u32": 0 - } - ] - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "vec": [ - { - "symbol": "MilestoneReleased" - }, - { - "u32": 0 - } - ] - }, - "durability": "temporary", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - 15 - ] - ], [ { "contract_data": { @@ -577,7 +532,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_exceeds_threshold.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_exceeds_threshold.1.json index 14e017d..bacfad9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_exceeds_threshold.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_exceeds_threshold.1.json @@ -619,7 +619,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_idempotent.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_idempotent.1.json index 9137206..e130af2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_idempotent.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_idempotent.1.json @@ -597,7 +597,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_duplicate_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_duplicate_fails.1.json index 5870d30..bf239fd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_duplicate_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_duplicate_fails.1.json @@ -171,6 +171,8 @@ } ] ], + [], + [], [] ], "ledger": { @@ -509,7 +511,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_succeeds.1.json index 43afca3..b08ff19 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_succeeds.1.json @@ -509,7 +509,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_threshold_exceeds_signers_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_threshold_exceeds_signers_fails.1.json index 3db7c42..fcf0202 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_threshold_exceeds_signers_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_threshold_exceeds_signers_fails.1.json @@ -408,7 +408,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_unauthorized_fails.1.json index 5870d30..bf239fd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_unauthorized_fails.1.json @@ -171,6 +171,8 @@ } ] ], + [], + [], [] ], "ledger": { @@ -509,7 +511,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_zero_threshold_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_zero_threshold_fails.1.json index 3db7c42..fcf0202 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_zero_threshold_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_init_zero_threshold_fails.1.json @@ -408,7 +408,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_isolated_per_proposal.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_isolated_per_proposal.1.json index 7426725..ba18854 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_isolated_per_proposal.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_isolated_per_proposal.1.json @@ -598,7 +598,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_no_auth_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_no_auth_fails.1.json index 43afca3..b08ff19 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_no_auth_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_no_auth_fails.1.json @@ -509,7 +509,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_partial_approval.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_partial_approval.1.json index 0c824b4..5564b14 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_partial_approval.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_partial_approval.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_proposal_isolation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_proposal_isolation.1.json index 3dc9f27..1bc06a6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_proposal_isolation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_proposal_isolation.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_reaches_threshold.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_reaches_threshold.1.json index 5411018..126d443 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_reaches_threshold.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_reaches_threshold.1.json @@ -597,7 +597,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_unauthorized_signer_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_unauthorized_signer_fails.1.json index 5870d30..767d9b1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_unauthorized_signer_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approval_unauthorized_signer_fails.1.json @@ -509,7 +509,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_blocked_when_contract_balance_is_zero.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_blocked_when_contract_balance_is_zero.1.json index 48f1ac4..82887d1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_blocked_when_contract_balance_is_zero.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_blocked_when_contract_balance_is_zero.1.json @@ -405,7 +405,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_emits_structured_event.1.json index 1a89aaa..05b4c2f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_emits_structured_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_emits_structured_event.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_illegal_source_state_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_illegal_source_state_fails.1.json new file mode 100644 index 0000000..0c8f174 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_illegal_source_state_fails.1.json @@ -0,0 +1,747 @@ +{ + "generators": { + "address": 8, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + { + "function": { + "contract_fn": { + "contract_address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "multisig_approval_init", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultiSigSigners" + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultiSigThreshold" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000003" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_unauthorized_fails.1.json new file mode 100644 index 0000000..1e313c3 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_approve_unauthorized_fails.1.json @@ -0,0 +1,1033 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + { + "function": { + "contract_fn": { + "contract_address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "multisig_approval_init", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultiSigSigners" + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "MultiSigThreshold" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGO6V" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000003" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_both_sigs_satisfy_2_of_2.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_both_sigs_satisfy_2_of_2.1.json index 651c87a..5a988e1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_both_sigs_satisfy_2_of_2.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_both_sigs_satisfy_2_of_2.1.json @@ -597,7 +597,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_duplicate_approval_is_idempotent.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_duplicate_approval_is_idempotent.1.json index 890b151..e55340b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_duplicate_approval_is_idempotent.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_duplicate_approval_is_idempotent.1.json @@ -597,7 +597,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_requires_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_requires_admin.1.json index 45216e3..99e7fd8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_requires_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_requires_admin.1.json @@ -527,7 +527,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_state_transitions.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_state_transitions.1.json index d31538f..efc72dc 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_state_transitions.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_lock_state_transitions.1.json @@ -527,7 +527,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_refund_clears_locked_flag.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_refund_clears_locked_flag.1.json index 4a51796..d248c33 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_refund_clears_locked_flag.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_refund_clears_locked_flag.1.json @@ -582,7 +582,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_release_clears_locked_flag.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_release_clears_locked_flag.1.json index a385464..e47613c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_release_clears_locked_flag.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_override_release_clears_locked_flag.1.json @@ -543,51 +543,6 @@ 4095 ] ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "vec": [ - { - "symbol": "MilestoneReleased" - }, - { - "u32": 0 - } - ] - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "vec": [ - { - "symbol": "MilestoneReleased" - }, - { - "u32": 0 - } - ] - }, - "durability": "temporary", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - 15 - ] - ], [ { "contract_data": { @@ -627,7 +582,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_query_no_side_effects.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_query_no_side_effects.1.json index b6d7c25..5c11155 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_query_no_side_effects.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_query_no_side_effects.1.json @@ -577,7 +577,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_2_of_2.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_2_of_2.1.json index 0c824b4..5564b14 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_2_of_2.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_2_of_2.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_3_of_3.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_3_of_3.1.json index 7e95bd5..6f422a5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_3_of_3.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_single_sig_does_not_reach_3_of_3.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_even_split.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_even_split.1.json index bc8651c..f287d55 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_even_split.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_even_split.1.json @@ -589,7 +589,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_extreme_split_preserves_total.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_extreme_split_preserves_total.1.json index d791581..bf1de1b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_extreme_split_preserves_total.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_extreme_split_preserves_total.1.json @@ -589,7 +589,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_client_refund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_client_refund.1.json index f650b9b..f9f1781 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_client_refund.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_client_refund.1.json @@ -589,7 +589,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_freelancer_payout.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_freelancer_payout.1.json index 3c5ba5b..c193d3f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_freelancer_payout.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_full_freelancer_payout.1.json @@ -589,7 +589,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_illegal_source_state_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_illegal_source_state_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_illegal_source_state_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_illegal_source_state_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_invalid_ratio_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_invalid_ratio_fails.1.json index 8ed88d2..9b882f2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_invalid_ratio_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_invalid_ratio_fails.1.json @@ -526,7 +526,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_odd_amount_rounding.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_odd_amount_rounding.1.json index 7bc126e..114304a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_odd_amount_rounding.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_odd_amount_rounding.1.json @@ -589,7 +589,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_unauthorized_fails.1.json index 8e02a7b..a43a5e1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_unauthorized_fails.1.json @@ -526,7 +526,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_uneven_split.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_uneven_split.1.json index fb8f170..2444e5b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_uneven_split.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_uneven_split.1.json @@ -589,7 +589,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_zero_total_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_zero_total_fails.1.json index 8ed88d2..9b882f2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_zero_total_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_split_refund_zero_total_fails.1.json @@ -526,7 +526,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_threshold_one_satisfied_by_single_signer.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_threshold_one_satisfied_by_single_signer.1.json index 0baff22..2d29fee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_threshold_one_satisfied_by_single_signer.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_threshold_one_satisfied_by_single_signer.1.json @@ -473,7 +473,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_all_zero_ratios_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_all_zero_ratios_fails.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_all_zero_ratios_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_all_zero_ratios_fails.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_arbiter_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_arbiter_is_unauthorized.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_arbiter_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_arbiter_is_unauthorized.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_client_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_client_is_unauthorized.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_client_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_client_is_unauthorized.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_disparate_ratios.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_disparate_ratios.1.json index d22cee7..17bf8d0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_disparate_ratios.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_disparate_ratios.1.json @@ -477,7 +477,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_emits_event.1.json index 037999d..7da3111 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_emits_event.1.json @@ -477,7 +477,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_empty_ratios_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_empty_ratios_fails.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_empty_ratios_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_empty_ratios_fails.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_equal_ratios_two_party.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_equal_ratios_two_party.1.json index bbcdfa5..861a458 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_equal_ratios_two_party.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_equal_ratios_two_party.1.json @@ -471,7 +471,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_event_fields_are_correct.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_event_fields_are_correct.1.json index 3b083fa..03ed834 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_event_fields_are_correct.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_event_fields_are_correct.1.json @@ -471,7 +471,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_freelancer_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_freelancer_is_unauthorized.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_freelancer_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_freelancer_is_unauthorized.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_invalid_ratio_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_invalid_ratio_fails.1.json index 60233fb..eada328 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_invalid_ratio_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_invalid_ratio_fails.1.json @@ -406,7 +406,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_large_weighted_mul_overflow_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_large_weighted_mul_overflow_fails.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_large_weighted_mul_overflow_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_large_weighted_mul_overflow_fails.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_single_ratio_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_single_ratio_fails.1.json index 4a945b2..4cf855a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_single_ratio_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_single_ratio_fails.1.json @@ -399,7 +399,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_total_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_total_amount_fails.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_total_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_negative_total_amount_fails.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_one_amount_one_ratio.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_one_amount_one_ratio.1.json index 492b068..9cb57cb 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_one_amount_one_ratio.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_one_amount_one_ratio.1.json @@ -471,7 +471,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_at_capacity_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_at_capacity_succeeds.1.json index 1028fc2..2d409c6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_at_capacity_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_at_capacity_succeeds.1.json @@ -1989,7 +1989,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_split_preserves_total.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_split_preserves_total.1.json index b760f38..4c8461c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_split_preserves_total.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_split_preserves_total.1.json @@ -486,7 +486,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_sum_overflow_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_sum_overflow_fails.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_sum_overflow_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_ratio_sum_overflow_fails.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_party_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_party_emits_event.1.json index a732938..f07cbc9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_party_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_party_emits_event.1.json @@ -465,7 +465,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_ratio_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_ratio_succeeds.1.json index 3e91bc5..2ffc3ea 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_ratio_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_single_ratio_succeeds.1.json @@ -465,7 +465,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_some_zero_ratios_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_some_zero_ratios_succeeds.1.json index 64496e0..6691c26 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_some_zero_ratios_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_some_zero_ratios_succeeds.1.json @@ -483,7 +483,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_too_many_ratios_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_too_many_ratios_fails.1.json index 6be1149..5d6c1f7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_too_many_ratios_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_too_many_ratios_fails.1.json @@ -1990,7 +1990,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_unauthorized_fails.1.json index 7c03c12..0e7f01c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_unauthorized_fails.1.json @@ -399,7 +399,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_amount_fails.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_amount_fails.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_emits_no_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_emits_no_event.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_emits_no_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_transfer_admin_zero_total_emits_no_event.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_multisig_unregistered_signer_rejected.1.json b/contracts/milestone-escrow/test_snapshots/test/test_multisig_unregistered_signer_rejected.1.json index 5870d30..767d9b1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_multisig_unregistered_signer_rejected.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_multisig_unregistered_signer_rejected.1.json @@ -509,7 +509,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_negative_or_zero_release_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_negative_or_zero_release_fails.1.json index 225e043..3afa6ea 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_negative_or_zero_release_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_negative_or_zero_release_fails.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_non_admin_add_token_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_non_admin_add_token_fails.1.json index 3053f11..1bb590a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_non_admin_add_token_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_non_admin_add_token_fails.1.json @@ -420,7 +420,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_non_admin_remove_token_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_non_admin_remove_token_fails.1.json index 319bdb9..34447f8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_non_admin_remove_token_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_non_admin_remove_token_fails.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_over_release_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_over_release_fails.1.json index f70edc5..b36f020 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_over_release_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_over_release_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_partial_release_remaining_balance.1.json b/contracts/milestone-escrow/test_snapshots/test/test_partial_release_remaining_balance.1.json index db7d2ac..f0c53e7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_partial_release_remaining_balance.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_partial_release_remaining_balance.1.json @@ -637,7 +637,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_pf_alloc_admin_override_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_pf_alloc_admin_override_emits_structured_event.1.json new file mode 100644 index 0000000..51564ab --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_pf_alloc_admin_override_emits_structured_event.1.json @@ -0,0 +1,889 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "set_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 2000 + }, + { + "u32": 7000 + }, + { + "u32": 1000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "lock_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "pf_alloc_admin_override", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 1000 + }, + { + "u32": 8000 + }, + { + "u32": 1000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 1000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 8000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocationLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "pf_ovr" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 1000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 8000 + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_invalid_state.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_invalid_state.1.json index 097a7bb..76c5255 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_invalid_state.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_invalid_state.1.json @@ -403,7 +403,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_requires_verified_admin.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_requires_verified_admin.1.json index f38792b..0a48fc5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_requires_verified_admin.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_requires_verified_admin.1.json @@ -454,7 +454,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_unlocks_locked_allocation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_unlocks_locked_allocation.1.json index 3d02158..ac08b7d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_unlocks_locked_allocation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_admin_override_unlocks_locked_allocation.1.json @@ -515,7 +515,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_admin_override.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_admin_override.1.json index dbdbae5..588f053 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_admin_override.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_admin_override.1.json @@ -342,7 +342,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_milestone.1.json index 5dd7384..26ba5a2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_milestone.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_milestone.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_partial.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_partial.1.json index 5dd7384..26ba5a2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_partial.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_approve_partial.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_claim_auto_release.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_claim_auto_release.1.json index 70b2d56..ffa114e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_claim_auto_release.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_claim_auto_release.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_concurrent_fund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_concurrent_fund.1.json index 964d8a0..24ca514 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_concurrent_fund.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_concurrent_fund.1.json @@ -400,7 +400,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_extend_deadline.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_extend_deadline.1.json index 5dd7384..26ba5a2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_extend_deadline.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_extend_deadline.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_lock_allocation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_lock_allocation.1.json index dbdbae5..588f053 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_lock_allocation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_lock_allocation.1.json @@ -342,7 +342,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_mark_delivered.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_mark_delivered.1.json index 645341f..ba744b9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_mark_delivered.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_mark_delivered.1.json @@ -476,7 +476,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_raise_dispute.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_raise_dispute.1.json index 5dd7384..26ba5a2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_raise_dispute.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_raise_dispute.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_resolve_dispute.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_resolve_dispute.1.json index 7f242bb..9d058c6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_resolve_dispute.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_resolve_dispute.1.json @@ -631,7 +631,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_set_allocation.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_set_allocation.1.json index dbdbae5..588f053 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_set_allocation.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_blocks_set_allocation.1.json @@ -342,7 +342,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_error_in_set.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_error_in_set.1.json index 35fb121..0a55d3e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_error_in_set.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_error_in_set.1.json @@ -454,7 +454,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_lock.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_lock.1.json index b2fca00..fb17dad 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_lock.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_lock.1.json @@ -393,7 +393,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_override.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_override.1.json index ce0108b..f2eadd9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_override.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_override.1.json @@ -515,7 +515,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_set.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_set.1.json index fe60e20..5ed31bd 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_set.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_lock_released_after_successful_set.1.json @@ -402,7 +402,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_preserves_value_with_largest_remainders.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_preserves_value_with_largest_remainders.1.json index e6c7bb6..200d721 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_preserves_value_with_largest_remainders.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_allocation_preserves_value_with_largest_remainders.1.json @@ -403,7 +403,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_split_rounds_to_zero.1.json b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_split_rounds_to_zero.1.json new file mode 100644 index 0000000..93a769a --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_platform_fee_split_rounds_to_zero.1.json @@ -0,0 +1,789 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "set_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 3333 + }, + { + "u32": 3333 + }, + { + "u32": 3334 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 3333 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 3333 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 3334 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocationLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "pf_split" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "client_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "freelancer_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + }, + { + "key": { + "symbol": "treasury_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1 + } + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_succeeds.1.json index a43a058..53ea368 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_succeeds.1.json @@ -522,7 +522,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_unauthorized_fails.1.json index e0719f4..2af2deb 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_unauthorized_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_while_pending_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_while_pending_fails.1.json index 42d2305..e346484 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_while_pending_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_while_pending_fails.1.json @@ -523,7 +523,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_zero_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_zero_address_fails.1.json index 4b6fcdf..9d874ca 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_zero_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_propose_admin_transfer_zero_address_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_after_resolved_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_after_resolved_fails.1.json index 92baff5..2ea25cc 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_after_resolved_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_after_resolved_fails.1.json @@ -777,7 +777,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_address_unauthorized_not_invalid.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_address_unauthorized_not_invalid.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_address_unauthorized_not_invalid.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_address_unauthorized_not_invalid.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_is_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_is_unauthorized.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_is_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_arbiter_is_unauthorized.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_as_freelancer_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_as_freelancer_succeeds.1.json index 1339752..6b40c92 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_as_freelancer_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_as_freelancer_succeeds.1.json @@ -529,7 +529,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_bad_actor_returns_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_bad_actor_returns_unauthorized.1.json index 0af48f0..94ab5a5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_bad_actor_returns_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_bad_actor_returns_unauthorized.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_before_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_before_funded_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_before_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_before_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_client_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_client_succeeds.1.json index a0483b0..18f0c5d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_client_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_client_succeeds.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_freelancer_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_freelancer_succeeds.1.json index cb7096a..5322a76 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_freelancer_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_by_freelancer_succeeds.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_double_execution_reverts.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_double_execution_reverts.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_double_execution_reverts.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_double_execution_reverts.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_from_partially_released_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_from_partially_released_succeeds.1.json index cc1f380..178621a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_from_partially_released_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_from_partially_released_succeeds.1.json @@ -735,7 +735,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_invalid_milestone_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_invalid_milestone_index_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_invalid_milestone_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_invalid_milestone_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_error.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_error.1.json index efa0aaf..44e13c4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_error.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_error.1.json @@ -531,7 +531,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_success.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_success.1.json index 141bd14..ba228d6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_success.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_lock_released_after_success.1.json @@ -529,7 +529,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_negative_amount_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_negative_amount_milestone_fails.1.json index 20c7753..133ad2e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_negative_amount_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_negative_amount_milestone_fails.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_no_auth_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_no_auth_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_no_auth_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_no_auth_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_disputed_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_disputed_fails.1.json index b0ee819..0c12779 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_disputed_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_disputed_fails.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_partially_released_milestone_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_partially_released_milestone_succeeds.1.json index 9206df9..6429484 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_partially_released_milestone_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_partially_released_milestone_succeeds.1.json @@ -690,7 +690,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_pending_milestone_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_pending_milestone_succeeds.1.json index 141bd14..ba228d6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_pending_milestone_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_pending_milestone_succeeds.1.json @@ -529,7 +529,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_refunded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_refunded_fails.1.json index b9a8d53..fceafe2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_refunded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_refunded_fails.1.json @@ -732,7 +732,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_released_fails.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_on_released_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_random_valid_address_unauthorized.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_random_valid_address_unauthorized.1.json index 9f2595c..0d427f8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_random_valid_address_unauthorized.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_random_valid_address_unauthorized.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_reentry_lock_prevents_same_tx_double_call.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_reentry_lock_prevents_same_tx_double_call.1.json index 19c1417..b9aaeac 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_reentry_lock_prevents_same_tx_double_call.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_reentry_lock_prevents_same_tx_double_call.1.json @@ -520,7 +520,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_status_transition_to_disputed.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_status_transition_to_disputed.1.json index b0ee819..0c12779 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_status_transition_to_disputed.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_status_transition_to_disputed.1.json @@ -674,7 +674,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_unauthorized_fails.1.json index 3b45b9f..ac09646 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_unauthorized_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_client_address_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_client_address_succeeds.1.json index 3cc371f..556d794 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_client_address_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_client_address_succeeds.1.json @@ -573,7 +573,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_freelancer_address_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_freelancer_address_succeeds.1.json index 599e12e..fd5dd90 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_freelancer_address_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_valid_freelancer_address_succeeds.1.json @@ -573,7 +573,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_writes_dispute_flag.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_writes_dispute_flag.1.json index a0483b0..18f0c5d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_writes_dispute_flag.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_writes_dispute_flag.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_wrong_status_fails.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_wrong_status_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_account_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_account_address_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_account_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_account_address_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_address_before_not_funded_check.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_address_before_not_funded_check.1.json index a5c0670..081081e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_address_before_not_funded_check.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_address_before_not_funded_check.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_addresses_rejected_on_any_milestone.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_addresses_rejected_on_any_milestone.1.json index 581ceba..2016131 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_addresses_rejected_on_any_milestone.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_addresses_rejected_on_any_milestone.1.json @@ -667,7 +667,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_amount_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_amount_milestone_fails.1.json index bce8748..4992e44 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_amount_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_amount_milestone_fails.1.json @@ -475,7 +475,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails_comprehensive.1.json b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails_comprehensive.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails_comprehensive.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_raise_dispute_zero_contract_address_fails_comprehensive.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_release_on_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_release_on_wrong_status_fails.1.json index dae3dc9..cbc3324 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_release_on_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_release_on_wrong_status_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_remove_nonexistent_token_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_remove_nonexistent_token_fails.1.json index edc0574..ad79f96 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_remove_nonexistent_token_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_remove_nonexistent_token_fails.1.json @@ -420,7 +420,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_account_address.1.json b/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_account_address.1.json index c4467a0..dea49c7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_account_address.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_account_address.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_contract_address.1.json b/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_contract_address.1.json index c4467a0..dea49c7 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_contract_address.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_remove_whitelisted_token_rejects_zero_contract_address.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_reputation_auto_release.1.json b/contracts/milestone-escrow/test_snapshots/test/test_reputation_auto_release.1.json index 318109e..ad4bb9d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_reputation_auto_release.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_reputation_auto_release.1.json @@ -720,7 +720,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_reputation_tracking.1.json b/contracts/milestone-escrow/test_snapshots/test/test_reputation_tracking.1.json index 2719265..e2eb4ce 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_reputation_tracking.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_reputation_tracking.1.json @@ -1752,7 +1752,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_refunded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_refunded_fails.1.json index b03adba..f1c346c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_refunded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_refunded_fails.1.json @@ -688,7 +688,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_resolved_fails_gracefully.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_resolved_fails_gracefully.1.json index 1ed8a15..5a4b339 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_resolved_fails_gracefully.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_already_resolved_fails_gracefully.1.json @@ -722,7 +722,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_before_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_before_funded_fails.1.json index d3403c2..b1abe53 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_before_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_before_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_client_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_client_unauthorized_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_client_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_client_unauthorized_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_double_execution_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_double_execution_fails.1.json index c29c989..a490db0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_double_execution_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_double_execution_fails.1.json @@ -822,7 +822,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_duplicate_after_release_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_duplicate_after_release_fails.1.json index 7c7de1a..a8fbb49 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_duplicate_after_release_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_duplicate_after_release_fails.1.json @@ -778,7 +778,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_emits_structured_event.1.json index bb6047b..d810489 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_emits_structured_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_emits_structured_event.1.json @@ -837,7 +837,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_freelancer_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_freelancer_unauthorized_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_freelancer_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_freelancer_unauthorized_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_delivered_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_delivered_fails.1.json index 9731cb4..5bd1df9 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_delivered_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_delivered_fails.1.json @@ -575,7 +575,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_refunded_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_refunded_succeeds.1.json index a7ab6a8..b579082 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_refunded_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_refunded_succeeds.1.json @@ -735,7 +735,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_released_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_released_succeeds.1.json index b2dca72..677e7e6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_released_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_disputed_to_released_succeeds.1.json @@ -823,7 +823,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_partially_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_partially_released_fails.1.json index 5e08f68..c3b1a0a 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_partially_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_partially_released_fails.1.json @@ -636,7 +636,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_pending_fails_without_side_effects.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_pending_fails_without_side_effects.1.json index 2763117..102d6e0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_pending_fails_without_side_effects.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_pending_fails_without_side_effects.1.json @@ -479,7 +479,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_refunded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_refunded_fails.1.json index 3792680..c93c894 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_refunded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_refunded_fails.1.json @@ -733,7 +733,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_released_fails.1.json index 55d1d93..12ca982 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_from_released_fails.1.json @@ -765,7 +765,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_invalid_milestone_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_invalid_milestone_index_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_invalid_milestone_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_invalid_milestone_index_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_large_amount_no_overflow.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_large_amount_no_overflow.1.json index 89fe236..5ddd683 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_large_amount_no_overflow.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_large_amount_no_overflow.1.json @@ -721,7 +721,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_refunds_ok.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_refunds_ok.1.json index 7b0c112..00898b5 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_refunds_ok.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_refunds_ok.1.json @@ -631,7 +631,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_releases_ok.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_releases_ok.1.json index 8373e05..1b97897 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_releases_ok.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_minimum_amount_releases_ok.1.json @@ -721,7 +721,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_multiple_milestones_sequential_ok.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_multiple_milestones_sequential_ok.1.json index 3ad9eb2..827a5fe 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_multiple_milestones_sequential_ok.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_multiple_milestones_sequential_ok.1.json @@ -1225,7 +1225,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_no_auth_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_no_auth_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_no_auth_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_no_auth_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_delivered_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_delivered_fails.1.json index a1590d1..0566bdf 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_delivered_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_delivered_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_partially_released_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_partially_released_fails.1.json index 55b1695..8e59b43 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_partially_released_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_partially_released_fails.1.json @@ -635,7 +635,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_pending_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_pending_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_pending_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_pending_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_released_without_dispute_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_released_without_dispute_fails.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_released_without_dispute_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_on_released_without_dispute_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_paid_amount_reflects_capped_transfer.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_paid_amount_reflects_capped_transfer.1.json index 5df69de..da88004 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_paid_amount_reflects_capped_transfer.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_paid_amount_reflects_capped_transfer.1.json @@ -838,7 +838,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_released_amount_equals_amount_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_released_amount_equals_amount_fails.1.json index 576331f..2923ede 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_released_amount_equals_amount_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_released_amount_equals_amount_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_remaining_after_partial_release_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_remaining_after_partial_release_succeeds.1.json index 7817dc8..3e35d27 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_remaining_after_partial_release_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_remaining_after_partial_release_succeeds.1.json @@ -839,7 +839,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_reverts_when_contract_balance_is_empty.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_reverts_when_contract_balance_is_empty.1.json index e42edc0..450d2b2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_reverts_when_contract_balance_is_empty.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_reverts_when_contract_balance_is_empty.1.json @@ -643,7 +643,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_self_contract_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_self_contract_address_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_self_contract_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_self_contract_address_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_state_transition_matrix.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_state_transition_matrix.1.json index d6d5860..18bcf48 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_state_transition_matrix.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_state_transition_matrix.1.json @@ -2380,7 +2380,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_fails.1.json index c23582c..0a5c344 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_fails.1.json @@ -574,7 +574,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_still_fails_after_state_machine.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_still_fails_after_state_machine.1.json index cfafed0..7c881e1 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_still_fails_after_state_machine.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_unauthorized_still_fails_after_state_machine.1.json @@ -675,7 +675,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_while_paused_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_while_paused_fails.1.json index 6a183b3..066f060 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_while_paused_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_while_paused_fails.1.json @@ -681,7 +681,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_wrong_status_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_wrong_status_fails.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_wrong_status_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_wrong_status_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_account_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_account_address_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_account_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_account_address_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_contract_address_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_contract_address_fails.1.json index 4607bd4..25635ee 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_contract_address_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_contract_address_fails.1.json @@ -629,7 +629,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_remaining_fails_gracefully.1.json b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_remaining_fails_gracefully.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_remaining_fails_gracefully.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_resolve_dispute_zero_remaining_fails_gracefully.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_set_platform_fee_allocation_emits_structured_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_set_platform_fee_allocation_emits_structured_event.1.json new file mode 100644 index 0000000..b88f01b --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_set_platform_fee_allocation_emits_structured_event.1.json @@ -0,0 +1,776 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "set_platform_fee_allocation", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u32": 2000 + }, + { + "u32": 7000 + }, + { + "u32": 1000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 2000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 7000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocationLock" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "pf_set" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 2000 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 7000 + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_set_platform_fee_allocation_fails_does_not_emit_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_set_platform_fee_allocation_fails_does_not_emit_event.1.json new file mode 100644 index 0000000..dea49c7 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_set_platform_fee_allocation_fails_does_not_emit_event.1.json @@ -0,0 +1,650 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_accepts_zero_and_full_tax_rates.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_accepts_zero_and_full_tax_rates.1.json index 2b58055..6d08d0e 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_accepts_zero_and_full_tax_rates.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_accepts_zero_and_full_tax_rates.1.json @@ -776,7 +776,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_across_rates.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_across_rates.1.json index d1295e4..595d528 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_across_rates.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_across_rates.1.json @@ -1532,7 +1532,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_at_smallest_unit.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_at_smallest_unit.1.json index cbfe23e..1dac386 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_at_smallest_unit.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_conserves_value_at_smallest_unit.1.json @@ -1316,7 +1316,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_emits_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_emits_event.1.json index 4025e59..7907ce4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_emits_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_emits_event.1.json @@ -668,7 +668,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_failed_does_not_emit_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_failed_does_not_emit_event.1.json index 55b2e00..5f79617 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_failed_does_not_emit_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_failed_does_not_emit_event.1.json @@ -398,7 +398,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate.1.json index 21480f8..bf035b0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate.1.json @@ -561,7 +561,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate_withholds_everything.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate_withholds_everything.1.json index f0052b9..7f8e041 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate_withholds_everything.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_full_rate_withholds_everything.1.json @@ -668,7 +668,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_happy_path.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_happy_path.1.json index 08b28b4..0d829f4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_happy_path.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_happy_path.1.json @@ -561,7 +561,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_independent_across_milestones.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_independent_across_milestones.1.json index c94ec61..66c31a3 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_independent_across_milestones.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_independent_across_milestones.1.json @@ -957,7 +957,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_index_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_milestone_index_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_milestone_index_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_milestone_index_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_milestone_index_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_tax_rate_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_tax_rate_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_tax_rate_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_invalid_tax_rate_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_concurrent_fund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_concurrent_fund.1.json index 7bbd3ca..6a8b41f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_concurrent_fund.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_concurrent_fund.1.json @@ -400,7 +400,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_mark_delivered.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_mark_delivered.1.json index 4eca863..ef9c2f2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_mark_delivered.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_lock_blocks_mark_delivered.1.json @@ -476,7 +476,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_max_tax_rate_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_max_tax_rate_succeeds.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_max_tax_rate_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_max_tax_rate_succeeds.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_not_funded_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_not_funded_fails.1.json index 94f62f2..c1fffa6 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_not_funded_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_not_funded_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_odd_gross_rounds_nearest.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_odd_gross_rounds_nearest.1.json index 68193ac..30d4b9c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_odd_gross_rounds_nearest.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_odd_gross_rounds_nearest.1.json @@ -561,7 +561,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rate_exceeds_max_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rate_exceeds_max_fails.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rate_exceeds_max_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rate_exceeds_max_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_invalid_state_and_inputs.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_invalid_state_and_inputs.1.json index ef3d293..afaf165 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_invalid_state_and_inputs.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_invalid_state_and_inputs.1.json @@ -536,7 +536,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, @@ -972,7 +972,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_rate_above_100_percent.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_rate_above_100_percent.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_rate_above_100_percent.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rejects_rate_above_100_percent.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_released_milestone_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_released_milestone_fails.1.json index 447d24c..007d4df 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_released_milestone_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_released_milestone_fails.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_down_when_fraction_is_below_half.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_down_when_fraction_is_below_half.1.json index 36e93eb..b97c818 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_down_when_fraction_is_below_half.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_down_when_fraction_is_below_half.1.json @@ -668,7 +668,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_nearest_and_preserves_gross.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_nearest_and_preserves_gross.1.json index d8b8523..d5be8e8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_nearest_and_preserves_gross.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_nearest_and_preserves_gross.1.json @@ -668,7 +668,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_to_nearest_not_down.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_to_nearest_not_down.1.json index e77f3fb..d71d069 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_to_nearest_not_down.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_rounds_to_nearest_not_down.1.json @@ -668,7 +668,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_terminal_milestone_fails_without_event.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_terminal_milestone_fails_without_event.1.json index 9ff71d5..3af65e4 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_terminal_milestone_fails_without_event.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_terminal_milestone_fails_without_event.1.json @@ -764,7 +764,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_unauthorized_caller_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_unauthorized_caller_fails.1.json index a24bd96..7481829 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_unauthorized_caller_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_unauthorized_caller_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_balance_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_balance_fails.1.json index 4eae310..c2f257d 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_balance_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_balance_fails.1.json @@ -502,7 +502,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate.1.json index 8e66b8f..70e2a43 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate.1.json @@ -561,7 +561,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate_withholds_nothing.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate_withholds_nothing.1.json index 68f03ee..117e984 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate_withholds_nothing.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_rate_withholds_nothing.1.json @@ -668,7 +668,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_tax_rate_succeeds.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_tax_rate_succeeds.1.json index 2eb26dd..b838de2 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_tax_rate_succeeds.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_deductions_zero_tax_rate_succeeds.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_multi_milestone_independent.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_multi_milestone_independent.1.json index f400805..d8cd91b 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_multi_milestone_independent.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_multi_milestone_independent.1.json @@ -727,7 +727,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_gross_refund.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_gross_refund.1.json index b0652b0..e391e95 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_gross_refund.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_gross_refund.1.json @@ -638,7 +638,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_net_release.1.json b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_net_release.1.json index 595eb12..6c10bfa 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_net_release.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_tax_withholding_record_can_be_resolved_as_net_release.1.json @@ -684,7 +684,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release.1.json b/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release.1.json index 35366ee..1388a06 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release_reads_temporary_storage.1.json b/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release_reads_temporary_storage.1.json index c37fd79..b8de47f 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release_reads_temporary_storage.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_time_until_auto_release_reads_temporary_storage.1.json @@ -576,7 +576,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_unauthorized_fund_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_unauthorized_fund_fails.1.json index 21c08b5..8c3970c 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_unauthorized_fund_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_unauthorized_fund_fails.1.json @@ -340,7 +340,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_upgrade_admin_auth_check_passes.1.json b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_admin_auth_check_passes.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_upgrade_admin_auth_check_passes.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_admin_auth_check_passes.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_caller_mutates_no_storage.1.json b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_caller_mutates_no_storage.1.json new file mode 100644 index 0000000..1bd86b0 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_caller_mutates_no_storage.1.json @@ -0,0 +1,932 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_fails.1.json b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_fails.1.json index 9f2595c..0d427f8 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_fails.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_unauthorized_fails.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_upgrade_while_paused_fails_with_typed_error.1.json b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_while_paused_fails_with_typed_error.1.json new file mode 100644 index 0000000..99f9d82 --- /dev/null +++ b/contracts/milestone-escrow/test_snapshots/test/test_upgrade_while_paused_fails_with_typed_error.1.json @@ -0,0 +1,998 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "u64": 604800 + }, + { + "vec": [ + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "fund", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "emergency_pause", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "delivered_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "released_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Ep" + } + ] + }, + "val": { + "bool": true + } + }, + { + "key": { + "vec": [ + { + "symbol": "EpLk" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Job" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "arbiter" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "auto_release_seconds" + }, + "val": { + "u64": 604800 + } + }, + { + "key": { + "symbol": "client" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "freelancer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "funded" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "milestone_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PlatformFeeAllocation" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "client_bps" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "freelancer_bps" + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "symbol": "locked" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "treasury_bps" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Version" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "WhitelistedTokens" + } + ] + }, + "val": { + "vec": [ + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/milestone-escrow/test_snapshots/test/test_version_returns_one_after_initialize.1.json b/contracts/milestone-escrow/test_snapshots/test/test_version_returns_one_after_initialize.1.json index a22c370..a766745 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_version_returns_one_after_initialize.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_version_returns_one_after_initialize.1.json @@ -474,7 +474,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/milestone-escrow/test_snapshots/test/test_whitelist_state_transitions.1.json b/contracts/milestone-escrow/test_snapshots/test/test_whitelist_state_transitions.1.json index 3bed041..a9c50f0 100644 --- a/contracts/milestone-escrow/test_snapshots/test/test_whitelist_state_transitions.1.json +++ b/contracts/milestone-escrow/test_snapshots/test/test_whitelist_state_transitions.1.json @@ -670,7 +670,7 @@ "key": { "vec": [ { - "symbol": "EmergencyPaused" + "symbol": "Ep" } ] }, diff --git a/contracts/reports/src/lib.rs b/contracts/reports/src/lib.rs index 7964445..76aa99c 100644 --- a/contracts/reports/src/lib.rs +++ b/contracts/reports/src/lib.rs @@ -95,7 +95,9 @@ pub enum DataKey { Admin, Version, WhitelistedTokens, - EmergencyPaused, + /// Instance: whether the escrow is emergency-paused. Short key `Ep` + /// (2 chars vs 16) to minimise on-ledger symbol bytes. + Ep, PlatformFeeAllocation, /// Temporary key: records the ledger timestamp at which a milestone was /// marked delivered. Written by `mark_delivered`, consumed by @@ -113,10 +115,12 @@ pub enum DataKey { MilestoneReleased(u32), Reputation(Address), // ── escrow_interest_yield admin-override keys ──────────────────────────── - /// Persistent: annual yield rate expressed in basis points (1 bp = 0.01 %). - /// Range 0–10 000 (0 %–100 %). Written by `admin_set_yield_rate`, read by - /// `get_yield_info` and `admin_accrue_yield`. - YieldRateBps, + /// Persistent: holds the `YieldConfig` struct (annual yield rate in basis + /// points, 1 bp = 0.01 %, range 0–10 000 / 0 %–100 %). Written by + /// `admin_set_yield_rate`, read by `get_yield_info` and `admin_accrue_yield`. + /// Consolidated into a single struct-valued key to minimise the ledger + /// footprint versus one key per field. + YieldConfig, /// Persistent: total interest (in token stroops) accrued so far by the /// admin via `admin_accrue_yield`. Reset to zero on admin override release /// or refund so downstream indexers can detect a fresh yield cycle. @@ -300,6 +304,17 @@ pub struct CancelEscrowInitiatedEvent { } +// ── escrow_interest_yield admin-override config ────────────────────────────── + +/// Consolidated yield configuration stored under `DataKey::YieldConfig`. +/// Bundles all yield-related settings into a single struct-valued ledger +/// entry so `admin_set_yield_rate` touches one key instead of several. +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct YieldConfig { + pub yield_rate: u32, +} + // ── escrow_interest_yield admin-override events ────────────────────────────── /// Emitted by `admin_set_yield_rate` whenever the admin updates the annual @@ -441,7 +456,7 @@ impl MilestoneEscrow { let paused = env .storage() .instance() - .get::<_, bool>(&DataKey::EmergencyPaused) + .get::<_, bool>(&DataKey::Ep) .unwrap_or(false); if paused { return Err(Error::Paused); @@ -709,7 +724,7 @@ impl MilestoneEscrow { env.storage().instance().set(&DataKey::Admin, &admin); env.storage() .instance() - .set(&DataKey::EmergencyPaused, &false); + .set(&DataKey::Ep, &false); env.storage().instance().set( &DataKey::PlatformFeeAllocation, &PlatformFeeAllocation { @@ -1625,18 +1640,21 @@ impl MilestoneEscrow { Ok(()) } + /// Upgrade the contract's WASM to `new_wasm_hash`. + /// + /// # Business rules + /// Caller authorization and pause/lock preconditions are checked before + /// any storage mutation or WASM upgrade, so a rejected call leaves the + /// contract's storage and installed code untouched. + /// + /// # Errors + /// * `NotInitialized` – Admin key has never been stored. + /// * `Unauthorized` – `admin` is not the stored admin. + /// * `Paused` – The contract is currently emergency-paused. + /// * `EscrowLocked` – A cancel is in progress and holds the cancel lock. pub fn upgrade(env: Env, admin: Address, new_wasm_hash: BytesN<32>) -> Result<(), Error> { - admin.require_auth(); - - let stored_admin: Address = env - .storage() - .persistent() - .get(&DataKey::Admin) - .ok_or(Error::NotInitialized)?; - - if admin != stored_admin { - return Err(Error::Unauthorized); - } + Self::require_admin(&env, &admin)?; + Self::ensure_not_paused(&env)?; env.deployer().update_current_contract_wasm(new_wasm_hash); @@ -1652,7 +1670,7 @@ impl MilestoneEscrow { Self::require_admin(&env, &admin)?; env.storage() .instance() - .set(&DataKey::EmergencyPaused, &true); + .set(&DataKey::Ep, &true); env.events().publish( (symbol_short!("empause"),), @@ -1669,7 +1687,7 @@ impl MilestoneEscrow { Self::require_admin(&env, &admin)?; env.storage() .instance() - .set(&DataKey::EmergencyPaused, &false); + .set(&DataKey::Ep, &false); env.events().publish( (symbol_short!("emunpause"),), @@ -1692,7 +1710,7 @@ impl MilestoneEscrow { let current = env .storage() .instance() - .get::<_, bool>(&DataKey::EmergencyPaused) + .get::<_, bool>(&DataKey::Ep) .unwrap_or(false); if current == paused { @@ -1701,7 +1719,7 @@ impl MilestoneEscrow { env.storage() .instance() - .set(&DataKey::EmergencyPaused, &paused); + .set(&DataKey::Ep, &paused); env.events().publish( (symbol_short!("emoverrid"),), @@ -1718,7 +1736,7 @@ impl MilestoneEscrow { pub fn is_emergency_paused(env: Env) -> bool { env.storage() .instance() - .get(&DataKey::EmergencyPaused) + .get(&DataKey::Ep) .unwrap_or(false) } @@ -2111,12 +2129,16 @@ impl MilestoneEscrow { let old_rate_bps: u32 = env .storage() .persistent() - .get(&DataKey::YieldRateBps) + .get(&DataKey::YieldConfig) + .map(|config: YieldConfig| config.yield_rate) .unwrap_or(0); - env.storage() - .persistent() - .set(&DataKey::YieldRateBps, &rate_bps); + env.storage().persistent().set( + &DataKey::YieldConfig, + &YieldConfig { + yield_rate: rate_bps, + }, + ); env.events().publish( (symbol_short!("yldrate"),), @@ -2218,7 +2240,11 @@ impl MilestoneEscrow { /// * `NotFunded` – Escrow has not been funded; nothing to release. /// * `InvalidMilestone`– `milestone_index` is out of range. /// * `InvalidStatus` – Milestone is already `Released` or `Refunded`. - /// * `InvalidAmount` – Remaining balance is ≤ 0 (sanity guard). + /// * `InvalidAmount` – Remaining balance is ≤ 0, or the subtraction + /// `amount − released_amount` overflows `i128` + /// (e.g. when `released_amount > amount`). All + /// arithmetic uses checked operations so no input + /// can cause a panic or silent integer wrap. pub fn admin_override_release( env: Env, admin: Address, @@ -2244,6 +2270,9 @@ impl MilestoneEscrow { return Err(Error::InvalidStatus); } + // Use checked_sub so that any i128 overflow (e.g. released_amount > + // amount, or extreme values such as i128::MIN / i128::MAX) returns + // Error::InvalidAmount rather than panicking or wrapping silently. let remaining = milestone .amount .checked_sub(milestone.released_amount) @@ -2259,9 +2288,17 @@ impl MilestoneEscrow { Self::store_milestone_released(&env, milestone_index); // Reset accrued yield on emergency override - env.storage() + if env + .storage() .persistent() - .set(&DataKey::YieldAccrued, &0_i128); + .get::<_, i128>(&DataKey::YieldAccrued) + .unwrap_or(0) + != 0 + { + env.storage() + .persistent() + .set(&DataKey::YieldAccrued, &0_i128); + } let token_client = token::Client::new(&env, &meta.token); token_client.transfer( @@ -2305,7 +2342,11 @@ impl MilestoneEscrow { /// * `NotFunded` – Escrow has not been funded. /// * `InvalidMilestone`– `milestone_index` is out of range. /// * `InvalidStatus` – Milestone is already `Released` or `Refunded`. - /// * `InvalidAmount` – Remaining balance is ≤ 0 (sanity guard). + /// * `InvalidAmount` – Remaining balance is ≤ 0, or the subtraction + /// `amount − released_amount` overflows `i128` + /// (e.g. when `released_amount > amount`). All + /// arithmetic uses checked operations so no input + /// can cause a panic or silent integer wrap. pub fn admin_override_refund( env: Env, admin: Address, @@ -2330,6 +2371,9 @@ impl MilestoneEscrow { return Err(Error::InvalidStatus); } + // Use checked_sub so that any i128 overflow (e.g. released_amount > + // amount, or extreme values such as i128::MIN / i128::MAX) returns + // Error::InvalidAmount rather than panicking or wrapping silently. let remaining = milestone .amount .checked_sub(milestone.released_amount) @@ -2343,10 +2387,19 @@ impl MilestoneEscrow { milestone.status = MilestoneStatus::Refunded; Self::store_milestone(&env, milestone_index, &milestone); - // Reset accrued yield on emergency override - env.storage() + // Reset accrued yield on emergency override — only write when the + // stored value is non-zero to avoid an unnecessary ledger mutation. + if env + .storage() .persistent() - .set(&DataKey::YieldAccrued, &0_i128); + .get::<_, i128>(&DataKey::YieldAccrued) + .unwrap_or(0) + != 0 + { + env.storage() + .persistent() + .set(&DataKey::YieldAccrued, &0_i128); + } let token_client = token::Client::new(&env, &meta.token); token_client.transfer(&env.current_contract_address(), &meta.client, &remaining); @@ -2472,7 +2525,8 @@ impl MilestoneEscrow { let rate_bps: u32 = env .storage() .persistent() - .get(&DataKey::YieldRateBps) + .get(&DataKey::YieldConfig) + .map(|config: YieldConfig| config.yield_rate) .unwrap_or(0); let total_accrued: i128 = env diff --git a/contracts/reports/src/test.rs b/contracts/reports/src/test.rs index f54b452..849a375 100644 --- a/contracts/reports/src/test.rs +++ b/contracts/reports/src/test.rs @@ -5387,6 +5387,49 @@ fn test_upgrade_admin_auth_check_passes() { assert_ne!(result, Err(Ok(Error::Unauthorized))); } +/// Issue #352: an unauthorized caller must be rejected by the guard clause +/// at the very top of `upgrade`, before the version counter (the only +/// storage key `upgrade` mutates on success) is touched. +#[test] +fn test_upgrade_unauthorized_caller_mutates_no_storage() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, _, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + let version_before = client.version(); + + let bad_actor = Address::generate(&env); + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&bad_actor, &fake_hash); + + assert_eq!(result, Err(Ok(Error::Unauthorized))); + assert_eq!(client.version(), version_before); +} + +/// Issue #352: `upgrade` must be blocked while the contract is +/// emergency-paused, failing with the specific `Paused` error rather than +/// proceeding to the WASM upgrade / version bump. +#[test] +fn test_upgrade_while_paused_fails_with_typed_error() { + let env = Env::default(); + env.mock_all_auths(); + + let (_, _, _, admin_addr, _, _, client) = setup_funded_escrow(&env, vec![&env, 1_000_i128]); + + client.emergency_pause(&admin_addr); + assert!(client.is_emergency_paused()); + + let version_before = client.version(); + + let fake_hash = soroban_sdk::BytesN::from_array(&env, &[0u8; 32]); + let result = client.try_upgrade(&admin_addr, &fake_hash); + + assert_eq!(result, Err(Ok(Error::Paused))); + assert_eq!(client.version(), version_before); + assert!(client.is_emergency_paused()); +} + // ============================================================================ // add_whitelisted_token ΓÇö comprehensive boundary / negative / edge-case tests // ============================================================================